歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> netfilter/iptables入門教程

netfilter/iptables入門教程

日期:2017/2/27 15:55:48   编辑:Linux教程
Linux的內核是由www.kernel.org這個組織負責開發維護,下面我們要討論的Netfilter/iptables是www.netfilter.org組織為Linux開發的防火牆軟件。由於Linux是非常模塊化的,很多功能都是以模塊加載擴充系統功能,Netfilter同樣采用這種方式存在於Linux中。如果你理解了Linux模塊加載也就能夠理解Netfilter的模塊加載方式。大家在 /lib/modules/kernel_version/kernel/net/ipv4/netfilter/目錄下能夠看到很多以“.ko”為擴展名的文件,哪裡存放的就是已經編譯好的模塊文件。

學習iptables首先需要學習者具備TCP/IP的基本概念、封包在網絡中如何傳送,有什麼限制,尤其是TCP和IP包頭結構以及TCP、UDP和Socket有什麼關系,理解這些內容是學習本章的基礎。

1. netfilter的功能
如果你到Netfilter模塊目錄仔細查看會發現各種功能的模塊,這些模塊僅是提供某些過濾功能,如果想讓Netfilter為我所用,還需要賦予它執行的“規則”,定出了規則後,Netfilter才知道哪些數據包通過,哪些數據包阻止,又有哪些數據包被置換處理。根據功能劃分,Netfilter分為Filter、NAT、Mangle和RAW四個功能,由這四個功能也派生出了四張表,其主要功能如下:

l Filter:其主要功能是進行數據包過濾。
l NAT(Network Address Translation):IP地址轉換,主要解決上網問題。
l Mangle:其主要功能是修改防火牆封包。
l RAW:其功能是加快數據包通過防火牆的速度,以提高防火牆性能。

注意:這四個表按使用平率從多到少一次是這麼排的,但是按表的處理優先級,是這樣:Raw > Mangle > Nat > Filter。

1. 1 理解Filter機制
首先,我們看下面的一個例子,在客戶機上通過Firefox訪問,遠端Apache服務器上的Web頁面,像這樣個平常操作中對於Netfilter有這三種封包類型,而這就是Filter的關鍵機制。 圖 封包類型
INPUT類型
當客戶機訪問Web 服務器的httpd進程時,對於Web服務器而言,屬於入站的包,換句話所就是網上其他主機送給本機httpd進程的封包,這裡把它定義為INPUT類型封包(圖中紅色箭頭)。

OUTPUT類型
與INPUT相反,由Web服務器的httpd進程鏈接到客戶機上的這類封包就屬於OUTPUT類型(圖中的綠色箭頭),也就是本機httpd進程所產生的封包。

FORWARD類型
在圖中,路過Web服務器的封包,就屬於FORWARD類型。在什麼情況下會產生這種類型封包?我們拿Linux當做路由器使用時就會有FORWARD類型封包產生。

有了上面的基本概念,下面開始討論過濾表,Filter Table有三個鏈(Chain),所謂鏈大家可以形象的理解為自行車中的鏈條,它是環環相扣的,封包在網絡上傳送也是如此。 Filter 表結構
上圖中系那是了Filter表的結構,你會發現這不就是三種封包類型嗎?下面詳細分析一下:
INPUT鏈:為了理解這一問題,我們還是拿個實例進行分析,例如我們要保護Web服務器的httpd進程,在三種封包類型中,應該注意哪一種呢?肯定是INPUT類型封包,那麼你需要將用來過濾INPUT類型的封包寫到INPUT鏈的規則之中。這樣就能起到保護httpd進程的目的。廣而言之,INPUT鏈就是用來存放過濾INPUT類型封包的規則,常用在保護本機的情況下。

OUTPUT鏈:還是接著上面的訪問網站的實例講解,如果打算限制客戶機不能浏覽www.website.com網站,我們該限制那一種封包?大家能猜出是OUTPUT類型封包,沒錯。我們可以在OUTPUT鏈中寫入“如果封包由httpd進程產生,並發往錯誤!超鏈接引用無效。口,就將封包丟棄”這段偽代碼,這樣就達到限制網絡的鏈接行為。所以OUTPU鏈就是用來存放過濾INPUT類型封包的規則,常用於限制本機進程的網絡鏈接。

FORWARD鏈:在上圖中linux服務器作為路由器使用,用來保護遠端的一台Web服務器,那麼應該限制那類封包類型?肯定是FORWARD類型,也就是說FORWARD鏈用來保護防火牆後面的服務器。

由於Filter機制非常復雜,為了大家容易的理解,用了一個簡單的示意圖表示Filter原理,注意圖中路由表雖然畫了兩個,但實際只有一個,也就是我們在系統中用“route –n”看到的內容,路由表決定了封包的傳送路徑,尤其在多網卡的系統中尤為重要。本地進程就是上面所述的Web服務器進程,大家可以理解為httpd進程。 圖 Filter原理圖
接下來,以三種不同的場景來說明網絡封包在Filter機制中被處理的過程。
1) 在上網時,客戶機連接服務器,也就是網絡封包的目的地是Web服務器的httpd進程,封包首先送到路由表,並有路由表的內容決定傳輸路徑。既然客戶機是訪問Web服務器上的頁面,也就是封包是送給本地進程httpd的,因此封包被送入INPUT鏈,這是如果INPUT鏈如果讓過,封包就會被送入本地進程,不讓過就被丟棄(Drop掉)。

2) 當服務器返回結果,需要鏈接客戶機進程,這是由本地進程httpd往外傳送封包,首先封包會被傳送如入路由表,由這裡的內容決定封包傳輸路徑,接著被送入OUTPUT鏈,如果允許則出站,如果不允許豐碑就會被丟棄(Drop掉)。

3) 當Linux系統作為防火牆部署,當做網關式防火牆使用,當封包要通過防火牆,首先入站進入路由表,由路由表判斷,封包是要由另一個NIC口送出,封包就會送入FORWARD鏈,此時如果FORWARD鏈裡的規則不許封包通過,那麼直接丟棄。反之封包出站離開防火牆。

2. 規則匹配過程
在介紹了Filter工作原理之後接下來講解封包在每個鏈中如何匹配,這個概念也非常重要。還是以上圖加以說明,實際應用中每個鏈中包含的規則數量不盡相同,無論那一個Filter表其匹配原則都是“First Match”,即優先執行。當我們在防火牆上添加的新規則被逐條加入到INPUT鏈中,被順序編號,例如rules1、rules2等。當封包進入INPUT鏈之後,Filter機制會以這個封包的特征從INPUT鏈內的第一條規則逐一向下匹配,如果封包進來遇到第一條規則允許通過,那麼這個封包就會進入到本地進程httpd,而不管下面的rule2、rule3的規則是什麼都不重要;相反如果第一條規則說要丟棄,即便是rule2規則允許通過也不起任何作用,這就是“first match”原則。

在使用規則是大家要注意一個原則,盡量減少不必要的規則,因為當封包進入防火牆後會在特定的鏈裡逐一被對比,規則條數越多,封包在防火牆中滯留的時間就越長,防火牆性能就會降低。

防火牆規則順序也會影響其工作效率,例如客戶端通過Linux防火牆收取外網郵件, 客戶端使用程序為Outlook,使用的是Pop3協議。防火牆規則如下:
1. iptables -A INPUT -p tcp --syn -m state --state NEW --dport 22 -j ACCEPT
2. iptables -A INPUT -p tcp --sync -m state --state NEW --dport 25 -j ACCEPT
3. iptables -A INPUT -p tcp --sync -m state --state NEW --dport 80 -j ACCEPT
4. iptables -A INPUT -p tcp --sync -m state --state NEW --dport 110 -j ACCEPT
5.iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

當客戶段的第一個封包需要花費4次匹配動作,如果一封郵件需要1000個封包的話在加上TCP三次握手的封包這樣的匹配的次數達到數萬次之多,如果將第四條規則移到第一條那麼匹配次數只需1千多次,由此可見規則的順序對於防火牆性能有著很大影響。所以只要將使用平度最高的規則寫在第一個,以後依次類推就好了。
那麼,如何確定哪個規則使用頻率高或者低呢?可使用下面命令查看: 還有特殊情況,封包從INPUT鏈進來從第一條規則匹配到最後一條都沒有匹配成功,怎麼辦?系統已有考慮,在每個鏈的最後有一條默認策略,而且這條默認策略總是最後才被匹配,而且這條默認策略的狀態只有一種(ACCEPT或DROP),我們假設默認策略為ACCEPT,那麼封包這是就可以進入到本地進程,如果為DROP則被默認策略所丟棄。最後強調一點Netfilter的默認策略預設值為ACCEPT,這個也是可以修改的。

3.Iptables實戰
Iptables原理難理解,操作命令的參數多,在使用上也比較復雜,我們先不管復雜的語法和繁多的參數,首先看看下面簡單的例子應用:

1) 列出Filter表的所有內容
#iptables –t filter -L 2) 清除 Filter表中所有內容
#iptables –t filter –F

3) 在 INPUT鏈中加入規則
#iptables –t filter –A INPUT –p udp -j ACCEPT 4) 在INPUT鏈中第二行的位置插入新規則
#iptables –t filter –I INPUT 2 –p tcp –j ACCEPT 注意: 2 代表插入到第二條規則的位置,-p tcp –j ACCEPT為本次要插入的規則,-L參數後面加入—line-number表示可以再規則前顯示行號。

5) 刪除第二條規則
#iptables –t filter –D INPUT 2

6)將INPUT鏈中的默認策略改成DROP
#iptables –t filter –P INPUT DROP \\*注意這裡字母P為大寫\\

看完上述演示,不小心是不是就入門啦,照葫蘆畫瓢將上面的命令用在其他表上就照樣可以哦。下面我們繼續講解。

7)禁止192.168.11.100主機ping我
需要將192.168.11.100發送到本機的ICMP封包丟棄,操作如下:
#iptables –A INPUT –p icmp –s 192.168.11.100 –j DROP

分析:
因為保護對象時本機,所以選擇的是INPUT鏈;
-p icmp 注意是小寫。 這裡是匹配icmp協議封包,擴展一下” –p tcp”匹配TCP封包,-p udp匹配UDP封包而“-p all”匹配所有協議封包。
-s 192.168.11.100 源IP地址為192.168.11.100,那麼如果是目的地址呢就是”-d”,如果目的地是個網址呢“-d www.website.com”,如果是一個網段呢“-d 192.168.11.0/24”就用CIDR形式表示。
-j DROP 符合前面兩項條件就DROP掉

8)允許192.168.11.100主機可以ssh登錄本機
#iptables –A INPUT –p tcp s0 192.168.11.100 –dport 22 –j ACCEPT
--dport 22 匹配目的端口為22的封包,TCPPort 22為SSH服務端口
-j ACCEPT: 符合前三項條件的封包可進入

9)允許192.168.11.0/24網網段所有主機訪問本機192.168.12.1任何服務請求
#iptables –A INPUT –p all –s 192.168.11.0/24 –d 192.168.12.1 –j ACCEPT

10)禁止企業內部主機訪問外網
#iptables –A FORWARD –I eth1 –o eth0 –p tcp –dport 80 –j DROP

這裡是將linux安裝在雙網卡服務器上作為防火牆使用,所以肯定使用FORWARD鏈,eth0接外網,eth1接企業內網。
-i eth1 : 匹配封包進入的接口
-o eth0 :匹配封包離開的接口,結合-i,-o兩個參數即可匹配封包的目的傳送方向。
-p tcp: 匹配TCP協議的封包
--dport 80 : 匹配目的端口為80的封包,補充一點可搭配“!”來代表反向,如“—sport ! 80”代表匹配不是從Web發送的封包。
-j DROP 符合以上4個條件的封包丟棄

4 Iptables語法
下面不得不講解語法了,看完以上10個例子相信大家已有了基本概念下面我總結一下:

Iptables 命令格式
Iptables [-t table] command [chain] [rules] [-j target]

大家在看到這一格式時不是是有些眼熟,其實上面很多命令都是按照這個格式來寫的。

Table:指定表名,例如filter表,raw表,mangle表,nat表

Command:對鏈的操作,比如-A表示追加規則,-I表示插入規則

Chain:鏈名稱,比如INPUT鏈,OUTPUT鏈,FORWARD鏈,PREROUTING鏈,POSTOUTING鏈

Rules:規則
Target:動作如何進行,也就是理解為處理方式,當前面規則裡的條件匹配時如何處理是ACCEPT(通過),還是DROP(丟棄)REJECT(丟棄並回應發送端一個Destination Unreachable的ICMP封包
Netfilter的NAT原理
NAT是網絡地址轉換(Network Address Translation)的縮寫,主要功能與其說節省公網IP的使用量不如說是可以隱藏內網IP地址。這種技術既可以運用在Server端也可以用在Client端。NAT種類繁多主要有本書主要介紹一對多的NAT使用。 圖 NAT原理
NAT工作過程:
下面通過NAT方式,實現企業內網所有主機通過一個公有Ip上網,圖例如下圖所示。在圖中個設備參數說明如下:
客戶機IP 192.168.11.10
NAT服務器由Linux的Iptables實現,Linux服務器安裝了雙網卡。
eth1接內網,Private Ip為192.168.11.1
eth0接外網,Public IP為10.0.0.1
公網WebserverIP為202.202.202.202

首先,192.168.11.10這台客戶機在浏覽器輸入http://202.202.202.202/,經過以下六步完成顯示網頁的過程。

第一步,192.168.11.10送出封包給202.202.202.202服務器;

第二步,這個封包交給NAT網關處理,接著NAT主機將這收到的封包源地址改成NAT主機的PublicIP;

第三步,NAT主機記錄下來這個封包,然後將這個封包立即發往202.202.202.202主機;

第四步,遠端主機202.202.202.202相應給這個主機回應封包,但這次響應的目的端主機為10.0.0.1這個Public IP,而不是客戶機的IP;

第五步,這個包被送回到NAT主機;

第六步,當NAT主機收到這個封包後,就從之前記錄下來的信息中找到最初NAT主機把192.168.11.10轉換成10.0.0.1的記錄,最後NAT主機把這個封包內的目的IP改成192.168.11.10,最終客戶機收到了Web服務器的回應。也就是內網主機借助NAT去訪問外網資源。

注意:在第一步到第二步的過程中,封包的源地址改變了,這種變更源地址的過程稱為SNAT,而在第五步到第六步中,目的地址呗改變了,同理就被稱為DNAT,基本上每種NAT都是由SNAT和DNAT共同搭配而成。

接著上面實例分析,封包由eth1接口進入,經過裝換後由eth0離開,封包產生依次為POSTROUTING(源地址轉換),Routing Table和PREROUTING(目的地址轉換)三種不同機制的變化。如果封包由eth0送入並有eth1送出則順序相反。所以POSTROUTING和PREROUTING的位置和封包流向有關。 圖 封包流向與SNAT、DNAT的關系
查看Nat Table結構命令如下:
#iptables –t nat –L 總結,POSTROUTING是源地址轉換,要把你的內網地址轉換成公網地址才能讓你上網。PREROUTING是目的地址轉換,要把別人的公網IP換成你們內部的IP,才讓訪問到你們內部受防火牆保護的機器。下圖介紹了NAT的完整結構。 圖 NAT結構
1) PREROUTING
當你想改變封包目的IP時請將規則放置於PREROUTING Chain之內,因為PREROUTING Chain的功能在於執行DNAT。

2) POSTROUTING
POSTROUTING China的功能則是變更封包的源IP,即它主要是執行SNAT任務。值得注意的是它位於整個NAT機制的最末尾,因此我們執行SNAT,源IP變更也是在最後執行。

一對多NAT舉例
一對多NAT的應用平時最常用,下面我們看看實際應用,拓撲和配置還是看上圖。

在設置這種NAT時,我們的考慮封包進入和出去兩個方向,首先考慮由企業內部傳送封包到外網的情況,如果192.168.11.0/24網段的主機要訪問外網202.202.202.202這台主機,其服務器請求封包內的源IP可定時私有IP,肯定不可能直接送達外網,因此必須由NAT主機上的SNAT機制將外送封包內的源IP改成NAT主機上的PublicIP,這樣才能讓外網主機響應回的封包可以順利返回到NAT主機對外的PublicIP上,此SNAt規則寫法如下:
#iptables –t nat –A POSTROUTING –o eth0 –s 192.168.11.0/24 -j SNAT –-to 10.0.0.1

注意,放在NAT主機後方的系統並不安全,以一對一的NAT為例,當黑客從外網攻擊NAT的Public IP地址時,這個攻擊的封包會被轉送給NAT後方的主機。要提高安全性還需要和Filter機制相結合才行。

Iptables規則庫管理
我們知道iptables的規則被存儲在各種不同的鏈中,相當於一個規則庫,當我們修改完規則可用iptables-save命令進行存儲。對於ossim系統而言iptables規則存儲在/etc/ossim_firewall文件中,每次啟動系統時會通過iptables-restore 調用/etc/ossim_firewall文件到內存中。如果是Redhat系統則是用過”service iptables save”命令存儲,默認規則路徑為/etc/sysconfig/iptables文件內。但是這樣管理未必是好事,比如規則庫中有100條規則,有80條規則都包含地址192.168.11.10,那麼如果需要修改將原來的192.168.11.10改成192.168.12.10,你打算將所有的地址都重新輸入一遍嗎?那樣效率太低了。可建議大家采用腳本管理方式,也就是將規則寫入shell腳本,這樣可以將ip地址存儲變量中

Mangle機制
Mangle表主要用於修改數據包的TOS(Type Of Service,服務類型)、TTL(Time To Live,生存周期)指以及為數據包設置Mark標記,以實現Qos(Quality Of Service,服務質量)調整以及策略路由等應用,mangle 表對應的內核模塊為 iptable_mangle。由於需要相應的路由設備支持,應用並不廣泛。注意Mark並沒有真正地改動數據包,它只是在內核空間為包設了一個標記,Mangle應用順序要高於nat、filter。
iptables -F -t mangle # 清除mangle表中,所有規則鏈中的規則
iptables -t mangle -X # 清除mangle表中,使用者自訂鏈中的規則

RAW機制
RAW表只使用在PREROUTING鏈和OUTPUT鏈上,因為優先級最高,從而可以對收到的數據包在連接跟蹤前進行處理。一但用戶使用了RAW表,在某個鏈上,RAW表處理完後,將跳過NAT表和 ip_conntrack處理,即不再做地址轉換和數據包的鏈接跟蹤處理了.

RAW表可以應用在那些不需要做nat的情況下,以提高性能。如大量訪問的web服務器,可以讓80端口不再讓iptables做數據包的鏈接跟蹤處理,以提高用戶的訪問速度。

執行如何指令即可
iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK
iptables -t raw -A PREROUTING -p tcp --sport 80 -j NOTRACK
iptables -A FORWARD -m state --state UNTRACKED -j ACCEPT
Netfilter模塊應用范例

封包的匹配是Netfilter篩選封包的基本方式,匹配方法越多,提取出的封包種類就越細致,這樣防火牆的保護范圍就越大。

舉例:
1) 禁止內網用戶訪問http://www.website.com
#iptables –A FORWARD –p tcp –I eth1 –o eth0 –d www.website.com –j DROP

2) 匹配目的端口
禁止192.168.11.0/24網段內的所有主機訪問外網FTP服務,規則如下:
#iptables –A FORWARD –i eth1 –o eth0 –p tcp –s 192.168.11.0/24 --dport 21:22 –j REJECT

如果時匹配源端口呢?只需要將“--dport”改成“—sport”即可。

3) TCP-Flags匹配
為了防范一些非正常封包我們可以利用netfilter過濾tcp-flags狀態,我們可以利用—syn來判斷封包內含有syn標志。例如:
#iptables –A INPUT –p tcp --tcp-flags ALL SYN,FIN –j DROP

4)MAC地址匹配
一些公司內部是DHCP分配客戶機IP,但有時需要制定特定IP才能訪問數據庫服務器,怎麼處理呢?我們可以根據這些指定機器的MAC地址進行過濾假設MS SQL服務器所使用端口為1433,指定的主機網卡MAC地址為00:0c:29:53:ab:60 ,規則如下:
#iptables –A INPUT –p tcp --dport 1433 –m mac --mac-source 00:0c:29:53:ab:60 –j ACCEPT

其中-m mac表示調用xt_mac.ki模塊,它的功能是匹配MAC地址。

5. IP地址范圍匹配
當你想封鎖某個IP地址段的時候不會去一條條IP地址輸入吧,Netfiletre中有ipt_iprange.ko模塊可以用一條語句解決問題,規則如下:
#iptables –A INPUT –m iprange --src-range 192.168.11.110-192.168.11.150 –j DROP

同樣方法,如果需要限制目的地址,那麼就需要把”--src-range”換成”--dst-range”即可。

6. TTL值的匹配
生存時間(time-to-live)指定數據包被路由器丟棄之前允許通過的網段數量。它是IP(中文全稱:網絡協議)協議包中的一個值,它告訴網絡,數據包在網絡中的時間是否太長而應被丟棄,一般情況下LinuxTTL值為64或255,Windows 2000/XP TTL值為128。

TTL值的匹配是由Netfilter的ipt_ttl.ko模塊實現。舉例,我們要將TTL值為128的封包丟棄,規則如下:
#iptables –A INPUT –m ttl --ttl-sq 128 –j REJECT

7. 匹配MTU值
這個和封包長度有關,MTU是最大傳輸單元,它是指一種通信協議的某一層上面所能通過的最大數據包大小(以字節為單位),下面以ICMP封包為例講個特殊場景。

Ping是個常見命令,而在linux下以ping –f –s 16384 1.2.3.4 就會產生大量大型ICMP封包不但占用機器CPU而且占用網絡帶寬,“-s 16386”會產生出來的ICMP封包所承載的數據大小為16KB,如果用ping –f –s 0 1.2.3.4指令則會產生更多的ICMP請求包。這樣一來就會慢慢形成DOS攻擊。 有些朋友想到禁止Ping,會使用以下命令
echo 1 >; /proc/sys/net/ipv4/icmp_echo_ignore_all

有時候搞得自己也不能ping 很不方便,還是使用iptables的xt_length.ko模塊好使。
#iptables –A INPUT –p icmp --icmp-type 8 –m length --length 1:99 –j ACCEPT
#iptables –A INPUT –p icmp --icmp-type 8 –m length --length 1000:16386 –j DROP

注意:我們把不符合要求的ICMP type 8封包過濾掉的目的是避免主機受到大量ICMP封包的攻擊。--length 1000:16386表示匹配MTU值介於1000~16386 Bytes的封包

8. 對指定封包重復率的匹配
使用limit的靈活度就比上面的規則強,不是一棍子打死。比方說我希望每分鐘有10個ICMP封包就進入,如果超過,那我們就限制每分鐘只能進來6個ICMP。實現規則如下:
#iptables –A INPUT –p icmp --icmp-type 8 –m limit --limit 6/m --limit-burst 10 –j ACCEPT
#iptables –A INPUT –p icmp --icmp-type 8 –j DROP

注意:6/m,其中的m代表分鐘,後面的—limit-burst 10 表示每分鐘進入10個封包,千萬別忘記第二條規則,只有兩條都輸入才起作用。

9. 對封包內承載內容進行匹配
假設外網攻擊者通過發送“./winnt/system32/cmd.exe?/c+dir”攻擊了內網IIS服務器,在服務器漏洞沒有完全修復前我們可以嘗試在Linux網關防火牆上利用xt_string.ko模塊的匹配功能暫時阻止攻擊者再次襲擊。規則如下:
#iptables –A FORWARD –I eth0 –o eth1 –p tcp –d 10.0.0.1 --dport 80 –m string --algo bm --string “system32” –j DROP

含義:如果封包要送往IIS Server的80端口,就用string模塊匹配,bm代表(Boyer-Morre)算法,如果封包含有 system32字符創就丟棄。不過要注意這只是臨時處理方法而不是救命稻草。

10. 對日志的處理
Netfilter默認並不會產生日志,如果需要記錄日志就需要用到ipt_log.ko這個模塊,下面舉例說明,我們要記錄曾對本機發出FTP服務請求的IP地址,可使用如下命令:
#iptables –A INPUT –p tcp --dport 21 –j LOG
#iptables –A INPUT –p tcp --dport 21 –j ACCEPT

LOG只會記錄封包信息,而不會處理這個封包,LOG是個比較特殊的處理方法,這個封包會繼續匹配INPUT鏈內的其他規則,而LOG所記錄下來的日志則會存放在/var/log/messages中,查看方法:

#tail –f /var/log/messages 你在使用中會發現log日志量增長很快,因為LOG會記錄每個FTP協議封包的信息。下面我們修改一下,只記錄每條連接的第一個分包,這樣日志的尺寸就大為減小。
#iptables –A INPUT –p tcp --syn --dport 21 –j LOG

下面接下來的問題就是如何從/var/log/messages中提取LOG,我們可以使用--log-level參數,改進方法如下:
#iptables –A INPUT –p tcp --syn --dport 21 -j LOG --log-level alert

先別著急,你好需要在/etc/syslog.conf文件中加入下面以行配置
Kern.=alert /var/log/netfilter
這表示如果log由Kernel產生,而且log level 為alert級別的日志的話,就存儲到/var/log/netfilter文件。

最後重啟syslog服務,以後關於FTP協議的log 就會存放到/var/log/netfilter文件。
原文:http://chenguang.blog.51cto.com/350944/1601462
Copyright © Linux教程網 All Rights Reserved