深入淺出Netfilter/iptables防火墻框架(入門篇)
原創(chuàng)【51CTO獨家特稿】Linux系統(tǒng)管理員們都接觸過Netfilter/iptables,這是Linux系統(tǒng)自帶的免費防火墻,功能十分強大。在這個《深入淺出Netfilter/iptables防火墻框架》系列中,51CTO安全/Linux專家李洋將對Netfilter/iptables進行詳盡的、條理的介紹。上一篇(基礎(chǔ)篇)介紹了netfilter/iptables的原理,本文是入門篇,介紹Netfilter/iptables框架的安裝、啟動和簡單應用。
1、安裝和啟動Netfilter/iptables系統(tǒng)
因為Netfilter/iptables的netfilter組件是與內(nèi)核2.4.x集成在一起的,高版本的Linux都配備了netfilter這個內(nèi)核工具,所以一般不須要下載,而只要下載并安裝iptables用戶空間工具的源代碼包:http://www.netfilter.org/projects/iptables/downloads.html。目前,最新源代碼安裝包是:iptables-1.4.10.tar.bz2。
在開始安裝iptables用戶空間工具之前,要對系統(tǒng)做某些修改,主要有如下選項須要配置修改:
- CONFIG_PACKET:如果要使應用程序和程序直接使用某些網(wǎng)絡設備,那么這個選項是有用的。
- CONFIG_IP_NF_MATCH_STATE:如果要配置有狀態(tài)的防火墻,那么這個選項非常重要而且很有用。這類防火墻會記得先前關(guān)于信息包過濾所做的決定,并根據(jù)它們做出新的決定。
- CONFIG_IP_NF_FILTER:這個選項提供一個基本的信息包過濾框架。如果打開這個選項,則會將一個基本過濾表(帶有內(nèi)置的INPUT、FORWARD和OUTPUT鏈)添加到內(nèi)核空間。
- CONFIG_IP_NF_TARGET_REJECT:這個選項允許指定:應該發(fā)送ICMP錯誤消息來響應已被DROP掉的入站信息包,而不是簡單地殺死這些信息包。
安裝源代碼包:
//將源代碼文件解壓縮 #bzip2 -d iptables-1.4.10-tar.bz2 #tar -xvf iptables 1.4.10.tar //切換目錄 #cd iptables 1.4.10 //編譯該工具,指定編譯的內(nèi)核目錄為/usr/src/linux-2.6.4-8 #make KERNEL_DIR=/usr/src/linux-2.4.16-8 //執(zhí)行make install命令,同樣設定內(nèi)核目錄為/usr/src/linux-2.6.4-8 #make install KERNEL_DIR=/usr/src/linux-2.6.4-8
安裝完成后,就可以啟動防火墻了:
//使用service命令手工啟動 # service iptables start
如果想要在系統(tǒng)啟動的時候也啟動該防火墻服務,那么可以使用setup命令,然后進入System service選項,選擇iptables守護進程即可。
2、 Iptables簡單應用
1) 基本規(guī)則應用
下面將給出運用上述框架理論形成規(guī)則的一些簡單示例,以供讀者在實際的應用過程中進行模仿和使用:
(1)接受來自指定IP地址的所有流入的數(shù)據(jù)包:
#iptables -A INPUT -s 203.159.0.10 -j ACCEPT
(2)只接受來自指定端口(服務)的數(shù)據(jù)包:
#iptables -D INPUT --dport 80 -j DROP
(3)允許轉(zhuǎn)發(fā)所有到本地(198.168.10.13)smtp服務器的數(shù)據(jù)包:
#iptables -A FORWARD -p tcp -d 198.168.10.13 --dport smtp -i eth0 -j ACCEPT
(4)允許轉(zhuǎn)發(fā)所有到本地的udp數(shù)據(jù)包(諸如即時通信等軟件產(chǎn)生的數(shù)據(jù)包):
#iptables -A FORWARD -p udp -d 198.168.80.0/24 -i eth0 -j ACCEPT
(5)拒絕發(fā)往WWW服務器的客戶端的請求數(shù)據(jù)包:
#iptables -A FORWARD -p tcp -d 198.168.80.11 --dport www -i eth0 -j REJECT
(6)允許目的為指定端口的tcp數(shù)據(jù)包進入:
#iptables -A INPUT -p tcp -m multiport --destination-port 21,53,80,25,110 ACCEPT
(7)允許來源為指定端口的tcp數(shù)據(jù)包進入:
#iptables -A INPUT -p tcp -m multiport --source-port 21,53,80,25,110 ACCEPT
(8)丟掉SYN和ACK標志位置位的數(shù)據(jù)包:
#iptables -A INPUT-p tcp --tcp-flags ALL SYN,ACK DROP
2) 碎片檢測及流量控制
(1)檢查IP碎片:在TCP/IP網(wǎng)絡中,鏈路層具有最大傳輸單元MTU這個特性,它限制了數(shù)據(jù)幀的最大長度,不同的網(wǎng)絡類型都有一個上限值。以太網(wǎng)的MTU是1500。如果IP層有數(shù)據(jù)包要傳,而且數(shù)據(jù)包的長度超過了MTU,那么IP層就要對數(shù)據(jù)包進行分片(fragmentation)操作,使每一片的長度都小于或等于MTU,這些被分段的片段就成為IP碎片。那么,如果在防火墻處不對IP碎片進行特別處理的話,那么有可能部分IP碎片會被防火墻攔截,從而影響到接受端對這些碎片的還原,并最終影響到信息的完整性和可用性問題,所以,下面的例子給出防火墻允許IP碎片通過的規(guī)則:
#iptables -A FORWARD -p tcp -f -s 172.168.96.0/24 -d 172.168.97.18 -j ACCEPT
需要特別留意上述規(guī)則中的-f選項,它指定了第二個以及以后的IP碎片將由防火墻來處理通過,否則的話,考慮下面的規(guī)則,防火墻有可能對其第二個及其以后的IP碎片進行攔截,從而影響正常的信息流通:
#iptables -A FORWARD -p tcp -s 172.168.96.0/24 -d 172.168.97.18 -j ACCEPT
(2)速率限制:iptables提供了非常健全的速率控制機制,主要用來限制由外向內(nèi)的單位時間內(nèi)通過的數(shù)據(jù)包個數(shù),這樣做的一個直接的好處就是盡可能地抑制前面多次提到的拒絕服務攻擊或者是分布式拒絕服務攻擊,因為這兩種攻擊的一個非常典型的表現(xiàn)就是單位時間內(nèi)有很多數(shù)據(jù)包涌向目的地。所以,我們可以使用下面的規(guī)則來限制單位時間內(nèi)允許通過防火墻,從而進入被保護網(wǎng)絡的數(shù)據(jù)包個數(shù):
#iptables -A INPUT -m limit --limit 200/second #iptables -A INPUT -m limit --limit 10000/minute
上述兩條規(guī)則分別限制1秒內(nèi)和1分鐘內(nèi)通過的數(shù)據(jù)包個數(shù)不能超過200和10000個。當然,在實際應用中,也可以通過/second、/minute、、/hour、/day這樣的時間間隔來進行設定,并且,其中諸如200和10000這些具體數(shù)值的設定需要用戶根據(jù)具體情況和經(jīng)驗來進行設定,沒有規(guī)定的數(shù)值可循。
另外,在設定速率限制后,還可以設定超過該限制所觸發(fā)的一些處理事件,比如說直接丟棄。下面的規(guī)則表示當速率超過200限制后,將直接對后續(xù)數(shù)據(jù)包進行丟棄:
#iptables -A INPUT -m limit --limit-burst 200
【編輯推薦】





















