linux iptables 防火牆

iptables包含有4個表,5個鏈,鏈在表中。

4個表:filter,nat,mangle,raw。

默認表是filter(在沒有指定表的清空),表的優先級:raw

>mangle>nat>filter.

filter:一般的過濾功能。

nat:用於nat功能(端口映射,地址映射,)

mangle:對特定數據包的修改

raw:有限級最高,設置raw時一般是爲了不再讓iptables做數據包的鏈接跟蹤處理,提高性能


5個鏈:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。

     INPUT:     位於 filter 表,匹配目的 IP 是本機的數據包 
     FORWARD:   位於 filter 表,匹配穿過本機的數據包, 
     PREROUTING: 位於 nat 表,用於修改目的地址(DNAT) 
     POSTROUTING:位於 nat 表,用於修改源地址 (SNAT)


PREROUTING:數據包進入路由表之前

INPUT:通過路由表後目的地爲本機

FORWARDING:通過路由表後,目的地不爲本機

OUTPUT:由本機產生,向外轉發



120807094039061.gif

120807094039062.gif


iptables語法使用:

iptables [-t 表名     <操作命令>   [要操作的鏈]  [規則號碼]      [匹配條件]    [-j 匹配到以後的動作] 

  操作命令:(-A -I -D -R -P -F)

  -A <鏈名>:增加一條規則(在所有規則的後面)

    例如:iptables -t filter -A INPUT -j DORP  

     #在filter表INPUT鏈中增加一條規則,匹配所有訪問本機ip的數據包,匹配到了就丟棄。

  -I <鏈名> [規則號碼]:插入一條規則

    例如:iptables -I INPUT 3 -j DORP

在filter表INPUT鏈插入一條規則,插入爲第3條,前面必須要有2條規則.如果沒有規則號碼,默認爲1,

 -D <鏈名> [規則號碼|鏈的內容]:刪除一條規則

    例如:iptables -D INPUT 2 

    #刪除filter表INPUT鏈的第2條規則

     iptables -D INPUT -s 192.168.0.1 -j DROP

      刪除filter表INPUT鏈內容爲 -s 192.168.0.1 -j DROP 的規則

      若規則列表中有多條相同的規則時,按內容匹配只刪除序號最小的一條 

  -R <鏈名><規則號碼><內容>:替換一條規則

    例如:iptables -R INPUT 3 -j ACCEPT

     將規則號3的內容替換爲‘-j ACCEPT’

  -P <鏈名> <動作> :設置某個鏈的默認規則

   例如:iptables -P INPUT DORP

      設置 INPUT表的默認規則爲DROP.如果數據包沒有匹配大規則裏的任何規則,就匹配默認規則

 -F <鏈名>:情況規則

  例如:iptables -F INPUT 

     清空INPUT鏈的所有規則,-F僅是清空鏈中規則,-P設置的默認規則不被清空。


查看命令 [-(vnx)L]

  -L<鏈名>:列出規則(一般用iptables -nvL)

   v:顯示詳細信息

   x:在v的基礎上,禁止自動單位換算(K,M)

   n:只顯示ip地址和端口,不顯示域名和服務

  例如:iptables -nvL   #詳細列出filter表所有鏈的規則

      iptables -t nat -nvL OUTPUT #列出nat表OUTPUT鏈的規則


匹配條件

-i:流入    -o:流出

-s:來源地址    -d:目的地址

-sport:來源端口 -dport:目的端口

-p:協議類型  


-i和-o(匹配數據從網口的進和出)

-i eth0 #匹配從eth0網口進來的數據包

-o eth1 #匹配從eth1網口出去的數據包


-s(匹配來源地址)可以是ip,網段,域名也可以爲空(所有地址)

 -s 192.168.10.130   #匹配來自192.168.10.130的數據包

 -s 192.168.10.130/24 #匹配來自192.168.10.130/24網段的數據包


-d(匹配目的地址)可以是ip,網段,域名也可以爲空(所有地址)

 -d www.cong.com 匹配去往域名www.cong.com的數據包


-p(匹配協議類型)可以爲tcp udp icmp等,也可爲空

 -p tcp

 -p udp


--sport(匹配來源端口)可以是個別端口,也可以是端口範圍

 --sport 80 匹配源端口是80的數據包

 --sport 80-8080 匹配源端口80-8080的數據包(含80,8080)

 --sport :80 匹配源端口是80以下的數據包(含80)

 --sport 80: 匹配源端口是80以上的數據包(含80)


--dport(匹配目的端口)可以是個別端口,可以是端口範圍

 --dport 80 匹配目的端口是80的數據包

 --dport 80-8080 匹配目的端口80-8080的數據包(含80,8080)

 --dport :80 匹配目的端口是80以下的數據包(含80)

 --dport 80: 匹配目的端口是80以上的數據包(含80)

--sport 和--dport必須配合-p參數使用,必須指明協議類型


匹配舉例

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

在INPUT增加一條規則匹配 協議類型爲tcp 目的端口爲80的規則操作爲放行通過

iptables -I OUTPUT -s 192.168.10.12 -d 192.168.10.131 -j ACCEPT

在OUTPUT插入一條 匹配源地址192.168.10.12目的地址192.168.10.131的規則,放行通過 

-s 192.168.10.12 -d www.cong.com -p tcp --dport 80

匹配來自192.168.10.12到www.cong.com 的80端口,tcp協議的數據包


動作/處理方式

 ACCEPT:通過,允許數據包通過,不攔截

 DROP:丟棄,阻止數據包通過本鏈而丟棄它

 SNAT:源地址轉換 可以是單個ip也可以是ip地址池

 DNAT:目的地址轉換 可以是單個ip也可以是ip地址池

 MASQUERADE:動態源地址轉換

 REDIRECT:用於把數據包轉發到另一個端口

 REJECT:和DROP一樣,但是DROP不返回信息,REJECT可以返回指定錯誤信息


-j ACCEPT

  匹配到的數據包允許通過

-j DROP

  匹配到的數據包不允許通過,丟棄

-j SNAT --to ip[-ip:端口-端口](在nat表的POSTROUTING鏈)

 例:iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to 1.1.1.1

    iptables -t nat -A POSTROUTING -s 192.168.10.12 -j SNAT --to 1.1.1.1-1.1.1.10


-j DNAT --to ip[-ip:端口-端口](在nat表的PREROUTING鏈)

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.10.12:80

iptables -t nat -A PREROUTING -d 192.168.10.12 -j DNAT --to 127.0.0.1


-j MASQUERDE

  iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE 
 將源地址是 192.168.0.0/24 的數據包進行地址僞裝

-j REDIRECT

  iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

 訪問數據包訪問的80端口轉換爲8080端口

-j REJECT

iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with icmp-net-unreachable



附加模塊

按包狀態匹配(state)

按來源MAC匹配(mac)

按包速率匹配(limit)

多端口匹配(multiport)


state -m state --state狀態

狀態:

NEW:建立新的連接

RELATED:相關的 

ESTABLISHED:已建立連接

INVALID:無效的


iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT


mac  -m mac --mac-source MAC

     iptables -A FORWARD -m --mac-source xx:xx:xx:xx:xx:xx  -j DROP

  mac地址不能通過路由,所以不要去匹配路由後面的MAC地址


limit  -m limit --limit 速率

  iptables -A FORWARD -d 192.168.10.130 -m limit --limit 50/s -j ACCEPT


multiport (--sports|--dports|--ports)

 iptables -A INPUT -p tcp -m multiports --ports 22,25,80 -j ACCEPT

必須與-p參數一起使用


參考:http://www.jb51.net/os/RedHat/1335.html

    http://www.linuxidc.com/Linux/2012-08/67505.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章