【正文】
因此,被動模式具有比主動模式更好的安全性。FTP服務器通過PORT命令告訴客戶端自己使用的FTP數(shù)據(jù)傳輸端口,然后等待客戶端建立數(shù)據(jù)傳輸連接。這樣,F(xiàn)TP數(shù)據(jù)傳輸連接就被歸入RELATED狀態(tài),它和向外的FTP控制連接相關(guān),因此我們不需要在INPUT鏈中使用NEW狀態(tài)。在iptables中,有一個專門跟蹤FTP狀態(tài)的模塊ip_conntrack_ftp。在主動模式下,客戶端使用的數(shù)據(jù)傳輸端口是不固定的,因此我們需要在規(guī)則中使用端口范圍。連接建立后,服務器端和客戶端就可以使用這個連接傳輸數(shù)據(jù)了,例如:傳送的文件、ls等命令的結(jié)果等。使用如下規(guī)則就可以允許建立FTP控制連接(這里沒有考慮IMCP問題):iptables A INPUT p tcp –sport 21 m state state ESTABLISHED j ACCEPTiptables A OUTPUT p tcp –dport 21 m state state NEW,ESTABLISHED j ACCEPT除了控制連接之外,F(xiàn)TP協(xié)議還需要一個數(shù)據(jù)通道,不過,數(shù)據(jù)連接可以通過主動和被動兩種模式建立?,F(xiàn)在,我們以FTP狀態(tài)檢測為例介紹如何使用iptables進行連接狀態(tài)檢測。INPUT和OUTPUT鏈都允許RELATED狀態(tài)的連接,因此重定向(5)分組可以通過INPUT和OUTPUT鏈。也就是說,這兩條規(guī)則允許內(nèi)部主機ping外部主機,而不允許外部主機ping內(nèi)部主機。當對應的應答返回,此時連接的狀態(tài)是ESTABLISED,因此允許通過INPUT鏈。舉例如下:iptables A OUTPUT p icmp m state state NEW,ESTABLISHED,RELATED j ACCEPTiptables A INPUT p icmp m state state ESTABLISHED,RELATED j ACCEPT規(guī)則進行如下的過濾:一個ICMP echo請求是一個NEW連接。這些ICMP分組類型中,請求分組屬于NEW,應答分組屬于ESTABLISHED。(3) 信息請求(15)和應答(16)。在iptables看來,只有四種ICMP分組,這些分組類型可以被歸為NEW、ESTABLISHED兩類:(1) ECHO請求(ping,8)和ECHO應答(ping,0)。在每個TCP分組頭還有32位的序列號和應答號用于跟蹤會話。首先,客戶程序發(fā)出一個同步請求(發(fā)出一個SYN分組);接著,服務器端回應一個SYN|ACK分組;最后返回一個ACK分組,連接完成。下面是狀態(tài)表中關(guān)于UDP連接的條目:udp 17 19 src= dst= sport=1032 dport=53 [UNREPLIED] src= dst= sport=53 dport=1032 use=1這個狀態(tài)表項只有在iptables過濾規(guī)則允許建立新的連接時,才能建立。不過,這并不意味著我們不能跟蹤UDP連接。如果你修改了規(guī)則,要拒絕所有的網(wǎng)絡流量,那么即使分組的狀態(tài)匹配狀態(tài)表中的一個ESTABLISHED條目,也將被拒絕。最后,是POSTROUTING鏈。其次,是FORWARD鏈。216。216。216。同時,iptables的狀態(tài)檢測機制將重組分組,并且以以下某種方式跟蹤其狀態(tài):216。如果要在兩個網(wǎng)絡接口之間轉(zhuǎn)發(fā)一個分組,這個分組將以以下的順序接收規(guī)則鏈的檢查:首先,是PREROUTING鏈。它取決于硬件的物理內(nèi)存。UDP和TCP連接的狀態(tài)表由/proc/net/ip_conntrack進行維護。對于本地產(chǎn)生分組,在PREROUTING或者OUTPUT鏈中都可以對連接的狀態(tài)進行跟蹤。state state這里,state是一個用逗號分割的列表,表示要匹配的連接狀態(tài)。它除了能夠完成簡單包過濾防火墻的包過濾工作外,還在自己的內(nèi)存中維護一個跟蹤連接狀態(tài)的表,比簡單包過濾防火墻具有更大的安全性。5 狀態(tài)檢測 狀態(tài)檢測概述每個網(wǎng)絡連接包括以下信息:源地址、目的地址、源端口和目的端口,叫作套接字對(socket pairs);協(xié)議類型、連接狀態(tài)(TCP協(xié)議)和超時時間等。iptables t nat A PREROUTING s iptables t nat A POSTROUTING s –to ..例10:拒絕一切外部主機發(fā)起的TCP協(xié)議SYN連接本地主機?解答:iptables –A INPUT p tcp tcpflags SYN,ACK,FIN SYN j DROP注:采用linux做防火墻和路由器(需要打開轉(zhuǎn)發(fā)功能,修改/proc/sys/net/ipv4/ip_forward的文件內(nèi)容為數(shù)字“1”),可以實現(xiàn)NAT、過濾、端口映射、狀態(tài)檢測等,同時需要對linux系統(tǒng)本身被訪問或主動訪問外部網(wǎng)絡的時候,進行安全保護,通過INPUT和OUTPUT可以完成。例7:iptables A FORWARD p TCP dport 22 j REJECT rejectwith tcpreset解釋:在FORWARD鏈中,對TCP協(xié)議包,且目的端口22的,進行拒絕處理,同時返回tcpreset消息。例6:iptables t nat A PREROUTING p tcp dport 80 j REDIRECT toports 8080解釋:REDIRECT目標是用來重定向包或數(shù)據(jù)流到本地機器()。例4:iptables t mangle A PREROUTING p tcp dport 22 j MARK setmark 2解釋:在mangle表中設定到來包,協(xié)議為tcp,目的端口為22,進行設定標記2。例2:iptables t nat A PREROUTING p tcp d dport 80 j DNAT todestination 解釋:實現(xiàn)nat網(wǎng)絡地址轉(zhuǎn)換的時候,將到來包中具有tcp協(xié)議,目的端口號80。 匹配后處理的目標(targets)或跳轉(zhuǎn)(jump) ()有一個基本處理的目標(targets)為DROP和ACCEPT,有時候根據(jù)實際需要跳轉(zhuǎn)(jump),首先需要通過iptables –N chains建立一個新的用戶自定義鏈,比如:iptables N tcp_packetsiptables A INPUT p tcp j tcp_packets這樣可以通過INPUT鏈來跳轉(zhuǎn)調(diào)用用戶自定義的tcp_packets鏈。例12:iptables A INPUT p tcp m multiport destinationport 22,53,80,110解釋:匹配tcp協(xié)議頭中目的端口號為22,53,80,110的包。例10:iptables t mangle A INPUT m mark mark 1解釋:匹配mangle表中設定標記為1的包。例8:iptables A INPUT p icmp icmptype echoreply m limit limit 3/minute limitburst 5 –j DROP解釋:每分鐘之內(nèi)的三次平均匹配的包最多5個,超過將丟棄包。例6:iptables A INPUT p icmp icmptype 8解釋:匹配icmp類型為8的包。例4:iptables p tcp syn解釋:與上相同。例1和例2對udp協(xié)議一樣。例6:iptables A INPUT f解釋:檢查第二個及以后的碎片包。例5:iptables A FORWARD o eth0解釋:檢查從接口eth0轉(zhuǎn)發(fā)出去的包。例4:iptables A INPUT i eth0解釋:檢查進入接口eth0的包。例2:iptables A INPUT s 解釋:。()例1:iptables A INPUT p tcp解釋:檢查INPUT鏈中的TCP協(xié)議的包。通常合法的目標(targets)是DROP和ACCETP。例9:iptables X allowed解釋:從表中刪除一個指定的鏈,同時將刪除與該鏈相關(guān)的所有的規(guī)則。例7:iptables Z INPUT解釋:清除指定INPUT鏈中包計數(shù)(packet counters),可以和L聯(lián)合使用。例5:iptables L INPUT解釋:列出指定的INPUT鏈中所有規(guī)則的實體,如果沒有指定鏈,缺省列出所有鏈中規(guī)則的實體。例3:iptables R INPUT 1 s j DROP解釋:替換INPUT鏈中的第一條規(guī)則為s –j DROP。如果沒有使用該參數(shù),iptablesrestore的缺省動作將刪除和銷毀原來所有已經(jīng)插入的規(guī)則操作例子:cat /etc/iptablessave | iptablesrestore c或者:iptablesrestore c /etc/iptablessave 如何建立規(guī)則例1:iptables A INPUT p tcp dport 80 j DROP解釋:在規(guī)則表INPUT中的結(jié)尾(最后)增加一條規(guī)則,丟棄目的端口為80的包。 例如:iptablessave c /etc/iptablessaveiptablesrestore [c] [n]參數(shù)c表示恢復字節(jié)和包計數(shù)的統(tǒng)計(當然前提保存過這種統(tǒng)計)。iptablessave命令格式如下:iptablessave [c] [t table]參數(shù)c表示保存字節(jié)和包計數(shù),便于重新啟動后,可以恢復這個統(tǒng)計,不至于被破壞。只能用于指定了p tcp 或 p udp的規(guī)則。它修改包的目標IP地址來發(fā)送包到機器自身()。這個選項只適用于指定了p tcp或者p udp的規(guī)則。這是因為當下一次撥號時未必是相同的接口地址(以后所有建立的連接都將關(guān)閉)。只能用于動態(tài)獲取IP(撥號)連接:如果你擁有靜態(tài)IP地址,你要用SNAT。包中的目的ip地址可以被修改(此連接以后所有的包都會被影響),停止對規(guī)則的檢查,它包含一個選項:todestiontion ipaddr[ipaddr][:portport]可以指定一個單一的新的IP地址或一個IP地址范圍,也可以附加一個端口范圍(只能在指定p tcp 或者p udp的規(guī)則里)。如果可能,端口不會被修改。它規(guī)定修改包的源地址(此連接以后所有的包都會被影響),停止對規(guī)則的檢查,它包含一個選項:tosource ipaddr[ipaddr][:portport]可以指定一個單一的新的IP源地址或一個IP地址范圍,同時還可以附加一個端口范圍(只能在指定p tcp或者p udp的規(guī)則里)。(5)