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