iptables命令大家都經(jīng)常用到,但本文要講的是iptables命令的結(jié)構(gòu),對(duì)學(xué)習(xí)和記憶iptables命令非常有幫助!
命令行本節(jié)列出了iptables命令行的組成部分(跟在實(shí)用工具名iptables后面的內(nèi)容)。除了明確標(biāo)示出來(lái)的部分之外,實(shí)用工具 iptables對(duì)命令行參數(shù)的位置并沒有特殊的要求。本章中的示例反映的是一種普遍接受的語(yǔ)法,它可以讓命令行更加易于閱讀、理解和維護(hù)。不是所有命令 都包括全部的組成部分。
iptables命令行中的很多符號(hào)都有兩種形式:短格式(單個(gè)字母,前面還有一個(gè)連字符)和長(zhǎng)格式(一個(gè)單詞,前面有兩個(gè)連字符)。為了簡(jiǎn)潔起 見,大多數(shù)腳本使用短格式,而使用長(zhǎng)格式的命令行顯得有些笨重。下面的兩條iptables命令行是一樣的效果,本節(jié)將它們作為示例:
表指定命令所操作的表的名稱:Filter、NAT還是Mangle。可以在任何iptables命令中指定表名。如果不指定表名,那么該命令操作 的就是Filter表。本章的大多數(shù)示例不指定表名,因此它們操作的是Filter表。用-ttablename或--tabletablename來(lái)指 定表。
命令用來(lái)說(shuō)明命令行剩余部分的作用,比如添加或刪除規(guī)則、顯示規(guī)則或添加規(guī)則鏈。這個(gè)示例中的命令(-A和--append)將命令行指定的規(guī)則添加到指定的表和規(guī)則鏈中。15.7.1節(jié)列出了所有命令。
規(guī)則鏈指定規(guī)則所屬的規(guī)則鏈或命令操作的規(guī)則鏈的名稱。規(guī)則鏈有INPUT、OUTPUT、FORWARD、PREROUTING、 POSTROUTING,或者由用戶定義的規(guī)則鏈。在指定規(guī)則鏈時(shí),直接將規(guī)則鏈的名字放進(jìn)命令行,不需要在前面放置任何連字符。本節(jié)開頭的示例操作的是 FORWARD規(guī)則鏈。
匹配條件 有兩種匹配條件:分組匹配條件(匹配網(wǎng)絡(luò)分組)和規(guī)則匹配條件(匹配已有規(guī)則)。
分組匹配條件/規(guī)則定義分組匹配條件用來(lái)識(shí)別網(wǎng)絡(luò)分組,并實(shí)現(xiàn)規(guī)則,對(duì)匹配條件的分組采取相應(yīng)的行動(dòng)。分組匹配條件和動(dòng)作的組合被稱為規(guī)則定義。規(guī) 則定義構(gòu)成了分組過(guò)濾的基礎(chǔ)。本節(jié)開頭的第一個(gè)示例使用的規(guī)則匹配條件是--in-interfaceeth1--out-interface eth0。第二個(gè)示例使用的是同一個(gè)條件,但用的是短格式:-i eth1-oeth0。這兩條規(guī)則都用來(lái)轉(zhuǎn)發(fā)設(shè)備eth1上接收到的分組,并將其通過(guò)設(shè)備eth0發(fā)送到網(wǎng)絡(luò)。
規(guī)則匹配條件規(guī)則匹配條件識(shí)別已有的規(guī)則。iptables命令能夠修改、刪除或?qū)⒁粭l新規(guī)則放置到與規(guī)則匹配條件指定的規(guī)則相鄰的地方。有兩種方 法可以指定某條已有規(guī)則:可以使用與曾經(jīng)用來(lái)建立規(guī)則相同的規(guī)則定義,也可以使用規(guī)則的序號(hào)(被稱為規(guī)則編號(hào))。規(guī)則編號(hào)從1開始,它表示的是規(guī)則鏈中的 第一條規(guī)則,可在iptables-L(或者--line-numbers)的結(jié)果中顯示。下面的第一條命令將本節(jié)開頭所列的規(guī)則刪除。第二條命令將 INPUT規(guī)則鏈中編號(hào)為3的規(guī)則替換成另一條規(guī)則,將所有來(lái)自IP地址192.168.0.10的分組拒絕:
跳轉(zhuǎn)或目標(biāo)用來(lái)指定內(nèi)核對(duì)分組(它們匹配規(guī)則的所有匹配條件)所采取的動(dòng)作。指定跳轉(zhuǎn)或目標(biāo)的方式為-jtarget或者--jumptarget。本節(jié)開頭的示例使用命令--jump ACCEPT和-jACCEPT,來(lái)指定目標(biāo)ACCEPT。
跳轉(zhuǎn)跳轉(zhuǎn)將控制轉(zhuǎn)移到同一個(gè)表中的不同規(guī)則鏈。下面的命令將一條規(guī)則添加(--append)到INPUT鏈,將使用TCP協(xié)議(--protocoltcp)的分組傳遞給用戶定義鏈tcp_rules(--jumptcp_rules):
當(dāng)分組經(jīng)過(guò)tcp_rules鏈的處理之后(假設(shè)還沒有被丟棄或拒絕),它將從剛跳轉(zhuǎn)的那條規(guī)則之后的規(guī)則繼續(xù)經(jīng)過(guò)INPUT鏈處理。
目標(biāo)目標(biāo)指定內(nèi)核對(duì)分組所采取的動(dòng)作,最簡(jiǎn)單的動(dòng)作是ACCEPT、DROP和REJECT,下面的命令向FORWARD鏈中添加一條規(guī)則,將來(lái)自 FTP端口(/etc/services--iptables根據(jù)這個(gè)文件來(lái)確定使用哪個(gè)端口--顯示FTP使用的端口是23)的分組拒絕:
有些目標(biāo)(比如LOG)并不是最終的目標(biāo):在執(zhí)行該目標(biāo)之后,將控制傳遞給下一條規(guī)則。