深入分析Linux防火墻
關于網絡安全的研究分析中,防火墻(Firewall)是被經常強調的重點,它基本功能是過濾并可能阻擋本地網絡或者網絡的某個部分與Internet之間的數據傳送(數據包)。數據包其實就是一段段的數據,其中同時包括了用來把它們發送到各自的目的地所必須的信息。
你可以把數據包想象成一個郵包:數據包本身就是郵包中的數據,而信封上則是所有用來把這些信息發送到正確的機器和正確的程序中去的書信抬頭,它同時還包含著回信地址等方面的信息。在其具體的過濾工作過程中,防火墻將接管在此之前從網絡內部存取Internet和從Internet存取該內部網絡的路由設置。
我們的感覺是以前的防火墻專門用來過濾一些非法的數據包,要么為什么其中的一種類型稱為包過濾型防火墻呢?發展到現在,它的功能是日益增多,不僅能夠過濾數據包,還能夠作網絡地址轉換,作代理等等。Linux內核2.4中防火墻實現NetFilter就是這樣的。
先來看看防火墻所處的位置,我的理解是要么它裝在一臺機器上作個人防火墻,要么裝在一臺機器上為一個局域網提供網關的功能,而后種情況則如下圖所示:

這副圖概括了裝在網關上的NetFilter的框架結構圖,從圖中可以看到一個數據包可能經過的路徑,其中用[]擴起來的東東,稱為檢查點,當數據包到達這個點時,就要停下來進行一些檢查。這里檢查點的名稱使用的是iptables中名稱,具體到NetFilter中可能就要改為那些所謂的鉤子 (Hook)函數了。
NetFilter概括起來說,它有下面的三個基本功能:
1、數據過濾(filter表)
2、網絡地址轉換(nat表)
3、數據包處理(mangle表)
根據這三個功能,將上面的五個檢查點按功能進行了分類。由于每個功能在NetFilter中對應一個表,而每個檢查點又有若干個匹配規則,這些規則組成一個鏈,所以就有下面的說法:“NetFilter是表的容器,表是鏈的容器,鏈是規則的容器”
一個鏈(chain)其實就是眾多規則(rules)中的一個檢查清單(checklist)。每一條鏈中可以有一條或數條規則,每一條規則都是這樣定義的“如果數據包頭符合這樣的條件,就這樣處理這個數據包”。當一個數據包到達一個鏈時,系統就會從第一條規則開始檢查,看是否符合該規則所定義的條件: 如果滿足,系統將根據該條規則所定義的方法處理該數據包;如果不滿足則繼續檢查下一條規則。最后,如果該數據包不符合該鏈中任一條規則的話,系統就會根據該鏈預先定義的策略(policy)來處理該數據包。
而一個iptables命令基本上包含如下五部分:希望工作在哪個表上、希望使用該表的哪個鏈、進行的操作(插入,添加,刪除,修改)、對特定規則的目標動作和匹配數據包條件。
基本的語法為:iptables -t table -Operation chain -j target match(es)(系統缺省的表為"filter")
基本操作如下:
-A 在鏈尾添加一條規則
-I 插入規則
-D 刪除規則
-R 替代一條規則
-L 列出規則
基本目標動作,適用于所有的鏈:
ACCEPT 接收該數據包
DROP 丟棄該數據包
QUEUE 排隊該數據包到用戶空間
RETURN 返回到前面調用的鏈
foobar 用戶自定義鏈
基本匹配條件,適用于所有的鏈:
-p 指定協議(tcp/icmp/udp/...)
-s 源地址(ip address/masklen)
-d 目的地址(ip address/masklen)
-i 數據包輸入接口
-o 數據包輸出接口
匹配條件擴展:
TCP-----匹配源端口,目的端口,及tcp標記的任意組合,tcp選項等。
UPD-----匹配源端口和目的端口
ICMP----匹配ICMP類型
MAC-----匹配接收到的數據的mac地址
MARK----匹配nfmark
OWNE----(僅僅應用于本地產生的數據包)來匹配用戶ID,組ID,進程ID及會話ID
LIMIT---匹配特定時間段內的數據包限制。這個擴展匹配對于限制dos攻擊數據流非常有用。
STATE---匹配特定狀態下的數據包(由連接跟蹤子系統來決定狀態),可能的狀態包括:
INVALID (不匹配于任何連接)
ESTABLISHED (屬于某個已經建立的鏈接的數據包)
NEW (建立連接的數據包)
RELATED (和某個已經建立的連接有一定相關的數據包,例如一個ICMP錯誤消息或ftp數據連接)
TOS——匹配IP頭的TOS字段的值。
【編輯推薦】


















