功能(表)
鏈
Filter
INPUT、FORWARD、OUTPUT
Nat
PREROUTING、OUTPUT、POSTROUTING
Mangle
PREROUTING、INPUT、OUTPUT、POSTROUTING
raw
PREROUTING、OUTPUT
Security
INPUT、FORWARD、OUTPUT
從該表也可以看出,規則鏈也正好與所處的鉤子函數的位置是一一對應的。 如果系統中使用了多個功能,也就是配置了多個規則鏈是如何結合工作的呢? 上圖就是封包在這些規則鏈的處理流程。 3、iptables命令詳解 在終端使用man iptables就可以看到這個命令的說明。也可以在線查看:http://ipset.netfilter.org/iptables.man.html 。 3.1命令的語法 iptables [-t table] {-A|-C|-D} chain rule-specification iptables [-t table] -I chain [rulenum] rule-specification iptables [-t table] -R chain rulenum rule-specification iptables [-t table] -D chain rulenum iptables [-t table] -S [chain [rulenum]] iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...] iptables [-t table] -N chain iptables [-t table] -X [chain] iptables [-t table] -P chain target iptables [-t table] -E old-chain-name new-chain-name rule-specification = [matches...] [target] match = -m matchname [per-match-options] target = -j targetname [per-target-options] 其中最常用的規則是: iptables –t command match_parameters –j target 下面使用一個例子來說明參數: 例子:允許以SSH方式連接到本機: Iptables –t filter -A INPUT –p tcp –m tcp -–dport 22 –j ACCEPT 1)table 參數 -t :表名。Iptables提供了多種功能。table參數其實就是功能的名稱。 上面例子中,使用了防火牆功能(filter),所以參數-t的值就是filter。table的可選值參見:功能與規則鏈對照表。 該參數默認值就是filter,所以配置防火牆時,可以不設置表名。 2)command 參數 command參數是對規則鏈進行操作,例如添加一條規則。Iptables提供了下面這些command。 -A,--append chain rule-specification追加一個規則。 -C,--check chain rule-specification檢查你輸入的規則在規則鏈中是否已存在。 -D,--delete(chain rule-specification | chain rulenum)刪除指定規則鏈中的指定的規則。 -I, --insert chain [rulenum] rule-specification在指定規則鏈中插入規則。 -L,--list [chain]列出所有指定規則鏈中所有的規則。 -R,--replace chain rulenum rule-specification替換規則。 -S,--list-rules [chain]打出指定鏈中的所有規則。 -N,--new-chain chain自定義一條規則鏈。 -X,--delete-chain [chain]刪除指定的用戶自定義的規則鏈。 -P,--policy chain target 設置指定鏈的target參數的默認值。 -E,--rename-chain old-chain new-chain 對規則鏈重命名。 -F,清除規則。 -h 查看幫助。 4) match paramtes [!] –p,--protocol protocol協議 用於判斷一個packet是否采用了指定的協議。 參數值可以是:tcp、udp、udplit、icmp、esp、sh、sctp,或者是all(所有協議),或者是數字。數字0等價於all。 如果參數值前面有!,則是做相反的判斷。即判斷packet沒有采用指定的協議。 [!] –s,--source address[/mask][,….] 用於匹配封包的來源,即判斷一個封包的是否來自於指定的地址。 該參數值可以是網絡名,主機名,IP地址(可以帶有子網掩碼)。如果參數值前面有!,則是做相反的判斷。 [!] –d, --destination address[/mask][,…] 用於匹配封包的目的地址,即判斷一個封包的是否要到達指定的地址。 參數值與-s類似。 -m,--match expression擴展匹配 -j,--jump target 這個參數的作用是在封包匹配上述規則的情況下,接下來要執行的規則。而接下來要執行的規則,則是由target參數指定的。 [!] –i,--in-interface name 指定接收時采用的網絡接口 當一個packet進入了INPUT、FORWARD、PREROUTING鏈時,判斷這個packet是否是指定的這個網絡接口(interface)接收的。 如果參數值前面有!,則是做相反的判斷。 如果參數值以+結尾,則是指所有的開始於指定的接口的那些網絡接口都會被匹配到。 [!]-o ,--out-interface name 指定發送時采用的網絡接口。 這與--in-interface是一樣的。 -g,--goto chain packet繼續被指定的chain處理。 4)target 規則名稱 防火牆規則中不單單會對packet進行匹配限定,也會對target進行限定。如果packet 與指定的規則不匹配,就會執行下一條規則。如果匹配,執行target所代表的下一條規則。 也就是說target是接下來要執行的規則的名稱。此外,也提供了幾個特定的值。 ACCEPT:接收該包,讓該包通過。 DROP:在底層丟掉這個包。就是將該包廢棄了。 QUEUE:傳遞該包到用戶空間。 RETURN:停止在改chain上傳輸,繼續執行前一條chain上的下一個規則。 5) match extension 匹配的擴展 在匹配參數中,只能針對協議、源地址、目標地址、網絡接口等進行匹配。對於需要更細致的匹配(例如對目標端口的匹配),則無能為力。匹配參數中,有一個-m,這個可以提供更細致的匹配。 例如,要使接受SSH發的packet,則需要使用tcp的擴展,可以指定Packet的目標地址: 使用-m tcp –dport 就可以了。 Iptables –t filter -A INPUT –p tcp –m tcp –dport 22 –j ACCEPT 如果想要一次指定多個端口,可以使用multiport的擴展: Iptables –t filter -A INPUT –p tcp –m tcp -–dport 22,21,8080,1900 –j ACCEPT 具體有哪些擴展匹配,可以參考: http://ipset.netfilter.org/iptables-extensions.man.html 3.2、示例 網上有很多示例,可以參考: http://www.cnblogs.com/argb/p/3535179.html 4、防火牆管理 service iptables {start|restart|stop|condrestart|status|panic|save} start:啟動 stop:停止 restart:重啟 status:查看狀態 save:保存到配置文件中 在配置防火牆時,通常會: 1、servic iptables start 2、使用iptables命令來配置規則 3、service iptables save,將配置保存到配置文件中 如果是遠程進行防火牆配置時, 記得要將22(SSH)端口配置進去,不然自個不能登錄操作了。