一、iptables/netfilter的基本介紹
iptables/netfilter是Linux主機上的一個防火牆軟件組合,其中iptables是一個防火牆規則定義軟件,netfilter是內核中的一個功能(規格實施模塊),負責所編寫的規則的生效使用。
netfilter將報文的流進流出路徑分爲五個鏈,所有的報文都必須流經這五個鏈中的其中幾個。五個鏈分別是:
PREROUTING | 路由前,報文進入本機將要做路由分析之前流經的位置。 |
POSTROUTING | 路由後,報文已經路由分析完畢並將要發送(流出)的位置。 |
INPUT | 數據報文進入用戶空間流經的位置。 |
OUTPUT | 數據報文流出用戶空間流經的位置。 |
FORWARD | 作爲轉發報文流經的位置。 |
除了基本的五個鏈外,用戶還可以根據需求創建自定義鏈,不過自定義鏈需要由上面的五個鏈調用才能生效。
爲了便於管理,iptables提供了四個不同功能的表,根據表功能的不同,每個表提供不同的鏈,則定義在對應功能表的鏈上。
raw表 | 如果開啓了連接追蹤,可以使用此表對某種連接不做追蹤,支持的鏈: POSTROUTING鏈 OUTPUT鏈 |
mangle表 | 可以對數據報文進行修改,支持的鏈: POSTROUTING鏈 PREROUTING鏈 OUTPUT鏈 INPUT鏈 FORWARD鏈 |
nat表 | 做IP地址轉換,支持的鏈: PREROUTING鏈 POSTROUTING鏈 OUTPUT鏈 |
filter表 | 做過濾,支持的鏈: INPUT OUTPUT FORWARD |
iptables/netfilter可以將策略類型分爲"通"、"堵"。"通"類型默認規則是拒絕,只有明確定義允許的報文才讓其通過;"堵"類型默認規則是允許,只有明確定義拒絕的報文才阻塞。通堵類型正好相反。
iptables/netfilter是一個四層防火牆,所以只能對四層及以下(三層)進行匹配。例如源IP、目標IP、源端口、目標端口、ICMP類型。
二、iptables/netfilter的規則:
iptables的命令比較簡單,man幫助也比較明晰,唯一需要注意的就是規則之間的關係,以及規則的排列順序,一個防火牆的性能高低,有很大一部分取決於你的規則排序。規則排序一般遵從匹配範圍小的優先,匹配機率高的優先。
iptables定義規則的方式大概是這種格式:
iptables [-t table] COMMAND chain CRETIRIA -j ACTION -t 表名:指定要操作的表 COMMAND:定義策略 chain:指定要操作的鏈 CRETIRIA:定義匹配的標準(分爲多個標準) -j Target:策略進行的動作
1.COMMAND格式介紹:
新增規則: iptables [-t table] -A chain rule-specification 刪除規則: iptables [-t table] -D chain rulenum 插入一條規則: iptables [-t table] -I chain [rulenum] rule-specification 替換一條規則: iptables [-t table] -R chain rulenum rule-specification 顯示某規則的定義語法: iptables [-t table] -S [chain [rulenum]] 查看錶、鏈中的規則(指定第幾條): iptables [-t table] -L [chain [rulenum]] [options...] #options一般爲-n和-v 清空表或鏈規則: iptables [-t table] -F [chain [rulenum]] [options...] 清空鏈的包計數器和字節計數器: iptables [-t table] -Z [chain] [options...] 定義默認進行的動作: iptables [-t table] -P chain target 創建一條自定義鏈: iptables [-t table] -N chain 刪除一條自定義空鏈: iptables [-t table] -X [chain] 修改自定義鏈名字: iptables [-t table] -E old-chain-name new-chain-name
2.CRETIRIA格式介紹: