天天看點

linux下iptables講解

iptables(netfilter網絡過濾器)

iptables是linux上特有的防火牆機制,功能非常強大。CentOS預設是沒有iptables規則。

iptables指令可用于配置Linux的包過濾規則,常用于實作防火牆、NAT。

常用選項:

iptables -nvL 檢視規則(-n為數字顯示輸出的ip位址和端口 -v 為可視化顯示 -L為列出所有的規則)

iptables -F   清除規則(flush清除);清除隻是臨時的,重新開機系統或者重新開機iptables服務後還會加載已經儲存的規則。清除之後要儲存規則。

/etc/init.d/iptables save  或 service iptables save  儲存規則

防火牆規則儲存在配置檔案    /etc/sysconfig/iptables

iptables -Z    計數器清零(zero)

service iptables stop    暫停防火牆服務,并清除防火牆規則,但是重新開機後會讀取/etc/sysconfig/iptables 進而啟動防火牆。即使我們停止防火牆,但是一旦添加任何一條規則,它也會開啟。

iptables -t    指定表名(table),預設不加-t 則是filter表;

直覺圖便于了解,4個表,5個鍊;

<a href="http://s3.51cto.com/wyfs02/M00/6B/AF/wKiom1U0akLjRYhGAAIyHGE7Rec605.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M01/6B/AB/wKioL1U0a56g8537AAIbDWY8DEU108.jpg" target="_blank"></a>

filter 這個表主要用于過濾包的,是系統預設的表,内建三個鍊INPUT、OUTPUT以及FORWARD。INPUT作用于進入本機的包;OUTPUT作用于本機送出的包;FORWARD作用于那些跟本機無關的包。  

nat 主要用處是網絡位址轉換、端口映射,也有三個鍊。PREROUTING 鍊的作用是在包剛剛到達防火牆時改變它的目的位址,如果需要的話。OUTPUT鍊改變本地産生的包的目的位址。POSTROUTING鍊在包就要離開防火牆之前改變其源位址。 

mangle 主要用于修改資料包的TOS(Type Of Service,服務類型)、TTL(Time ToLive,生存周期)值以及為資料包設定Mark标記,以實作Qos (Quality of Service,服務品質)調整以及政策路由等應用,由于需要相應的路由裝置支援,是以應用并不廣泛。 五個鍊:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD

raw   對封包設定一個标志,決定資料包是否被狀态跟蹤機制處理   隻有兩個鍊:OUTPUT、PREROUTING 

iptables規則相關:

檢視規則    iptables -t nat -nvL

清除規則    iptables -t nat -F

增加/删除規則    iptables -A/-D INPUT -s 10.72.11.12 -p tcp --sport 1234 -d 10.72.137.159 --dport 80 -j DROP 

插入規則    iptables -I INPUT -s 1.1.1.1 -j DROP/ACCEPT/REJECT 

iptables -nvL --line-numbers    檢視規則帶有id号

iptables -D INPUT 1     根據規則的id号删除對應規則

iptables -P INPUT DROP    用來設定預設規則,預設是ACCEPT ,一旦設定為DROP後,隻能使用 iptables -P ACCEPT 才能恢複成原始狀态,而不能使用-F參數;

把ip為192.168.20.0網段所有資料包都丢掉

1

<code>[root@yong ~]</code><code># iptables -I INPUT -s 192.168.20.0 -j DROP</code>

删除規則的話,要與添加規則的字尾一樣才可以;

<code>[root@yong ~]</code><code># iptables -D INPUT -s 192.168.20.0 -j DROP</code>

把1.1.1.1 通路本地tcp協定80端口的所有資料包都丢掉;

<code>[root@yong ~]</code><code># iptables -I INPUT -s 1.1.1.1 -p tcp --dport 80 -j DROP</code>

把發送到10.0.1.14的22端口的所有資料包丢掉;

<code>[root@yong ~]</code><code># iptables -I OUTPUT -p tcp --dport 22 -d 10.0.1.14 -j DROP</code>

使用這個指令檢視規則帶有id号顯示;

2

3

4

5

<code>[root@yong ~]</code><code># iptables -nvL --line-number</code>

<code>Chain INPUT (policy ACCEPT 84 packets, 5944 bytes)</code>

<code>num   pkts bytes target     prot opt </code><code>in</code>     <code>out     </code><code>source</code>               <code>destination         </code>

<code>1        0     0 DROP       tcp  --  *      *       1.1.1.1              0.0.0.0</code><code>/0</code>           <code>tcp dpt:80 </code>

<code>2        0     0 DROP       all  --  *      *       192.168.20.0         0.0.0.0</code><code>/0</code>

然後删除的時候使用iptables -D INPUT 1    删除上面的1規則,不用寫很長的字尾。

禁止别人ping你的主機,你可以ping别人;隻需要添加一條規則;icmp-type 8 可以實作;

示例,編一個腳本,針對filter表,所有的INPUT鍊DROP,其他兩個鍊ACCEPT,然後針對192.168.20.0/24網段開通22端口可以連接配接主機;對所有網段開放80端口;對所有網段開通21端口;

6

7

8

9

10

<code>[root@yong ~]</code><code># vim iptables.sh </code>

<code>#! /bin/bash    </code>

<code>ipt=</code><code>"/sbin/iptables"</code>

<code>$ipt -F</code>

<code>$ipt -P INPUT DROP</code>

<code>$ipt -P OUTPUT ACCEPT</code>

<code>$ipt -P FORWARD ACCEPT</code>

<code>$ipt -A INPUT -s 192.168.20.0</code><code>/24</code> <code>-p tcp --dport 22 -j ACCEPT</code>

<code>$ipt -A INPUT -p tcp --dport 80 -j ACCEPT</code>

<code>$ipt -A INPUT -p tcp --dport 21 -j ACCEPT</code>

<code>[root@yong ~]</code><code># sh iptables.sh</code>

運作腳本即可,如果想開機運作防火牆規則的話,在/etc/rc.d/rc.local 添加一行“/bin/sh /root/iptables.sh”

nat表應用:

路由器就是使用iptables的nat原理實作.

假設您的機器上有兩塊網卡eth0和eth1,其中eth0的IP為192.168.4.11,eth1的IP為192.168.20.1 。eth0連接配接了internet 但eth1沒有連接配接,現在有另一台機器(192.168.20.10)和eth1是互通的,那麼如何設定也能夠讓連接配接eth1的這台機器能夠連接配接internet? 

<code>[root@yong ~]</code><code># cat /proc/sys/net/ipv4/ip_forward</code>

<code>0</code>

<code>[root@yong ~]</code><code># echo "1" &gt; /proc/sys/net/ipv4/ip_forward </code>

<code>[root@yong ~]</code><code># iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -o eth0 -j MASQUERADE</code>

 /proc/sys/net/ipv4/ip_forward 為核心參數相關的檔案,預設為0,1為打開路由轉發功能。

第2條指令為iptables對nat表做了一個IP轉發的操作,-o 後面跟裝置名,表示出口的網卡。MASQUERADE表示僞裝的意思;讓192.168.20.0網段通過eth0僞裝出去連接配接上網。

iptables規則備份與恢複:

service iptables save    這樣會儲存到/etc/sysconfig/iptables ,如果以後遇到備份防火牆規則的任務,就是拷貝一份這個檔案的副本。

iptables-save &gt; myipt.rule    可以把防火牆規則儲存到指定檔案中;

iptables-restore &lt; myipt.rule    這樣可以恢複指定的規則;

<code>[root@yong ~]</code><code># iptables-save &gt; myipt.rule</code>

<code>[root@yong ~]</code><code># service iptables stop</code>

<code>iptables: Setting chains to policy ACCEPT: nat filter      [  OK  ]</code>

<code>iptables: Flushing firewall rules:                         [  OK  ]</code>

<code>iptables: Unloading modules:                               [  OK  ]</code>

<code>[root@yong ~]</code><code># iptables-restore &lt; myipt.rule</code>

版權聲明:原創作品,如需轉載,請注明出處。否則将

本文轉自 模範生 51CTO部落格,原文連結:http://blog.51cto.com/mofansheng/1635953,如需轉載請自行聯系原作者

繼續閱讀