压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

Netfilter/Iptables入門

  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四個功能,由這四個功能也派生出了四張表,其主要功能如下:

  Filter:其主要功能是進行數據包過濾。

  NAT(Network Address Translation):IP地址轉換,主要解決上網問題。

  Mangle:其主要功能是修改防火墻封包。

  RAW:其功能是加快數據包通過防火墻的速度,以提高防火墻性能。

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

  1. 1 理解Filter機制

  首先,我們看下面的一個例子,在客戶機上通過Firefox訪問,遠端Apache服務器上的Web頁面,像這樣個平常操作中對于Netfilter有這三種封包類型,而這就是Filter的關鍵機制。

  Netfilter/Iptables入門

  圖 封包類型

  INPUT類型

  當客戶機訪問Web 服務器的httpd進程時,對于Web服務器而言,屬于入站的包,換句話所就是網上其他主機送給本機httpd進程的封包,這里把它定義為INPUT類型封包(圖中紅色箭頭)。

  OUTPUT類型

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

  FORWARD類型

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

  有了上面的基本概念,下面開始討論過濾表,Filter Table有三個鏈(Chain),所謂鏈大家可以形象的理解為自行車中的鏈條,它是環環相扣的,封包在網絡上傳送也是如此。

  Netfilter/Iptables入門

  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進程。

  Netfilter/Iptables入門

  圖 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千多次,由此可見規則的順序對于防火墻性能有著很大影響。所以只要將使用平度最高的規則寫在第一個,以后依次類推就好了。

  那么,如何確定哪個規則使用頻率高或者低呢?可使用下面命令查看:clip_image008

  還有特殊情況,封包從INPUT鏈進來從第一條規則匹配到最后一條都沒有匹配成功,怎么辦?系統已有考慮,在每個鏈的最后有一條默認策略,而且這條默認策略總是最后才被匹配,而且這條默認策略的狀態只有一種(ACCEPT或DROP),我們假設默認策略為ACCEPT,那么封包這是就可以進入到本地進程,如果為DROP則被默認策略所丟棄。最后強調一點Netfilter的默認策略預設值為ACCEPT,這個也是可以修改的。

  3.Iptables實戰

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

  1) 列出Filter表的所有內容

  #iptables –t filter -L

  Netfilter/Iptables入門

  2) 清除 Filter表中所有內容

  #iptables –t filter –F

  3) 在 INPUT鏈中加入規則

  #iptables –t filter –A INPUT –p udp -j ACCEPT

 Netfilter/Iptables入門

  4) 在INPUT鏈中第二行的位置插入新規則

  #iptables –t filter –I INPUT 2 –p tcp –j ACCEPT

  Netfilter/Iptables入門

  注意: 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使用。

  Netfilter/Iptables入門

  圖 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的位置和封包流向有關。

  Netfilter/Iptables入門

  圖 封包流向與SNAT、DNAT的關系

  查看Nat Table結構命令如下:

  #iptables –t nat –L

  Netfilter/Iptables入門

  總結,POSTROUTING是源地址轉換,要把你的內網地址轉換成公網地址才能讓你上網。PREROUTING是目的地址轉換,要把別人的公網IP換成你們內部的IP,才讓訪問到你們內部受防火墻保護的機器。下圖介紹了NAT的完整結構。

  Netfilter/Iptables入門

  圖 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攻擊。

  Netfilter/Iptables入門

  有些朋友想到禁止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

 Netfilter/Iptables入門

  你在使用中會發現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文件。

  這里介紹的LOG是由系統syslog處理,另外還有更先進的可以采用ULOG處理方法這里就不詳細介紹感興趣讀者參考《UNIX/Linux網絡日志分析與流量監控》一書。

    文章來源:http://chenguang.blog.51cto.com/350944/1601462

 

上一篇:安卓防火墻 PS DroidWall

下一篇:大數據時代 云安全4大策略