Iptables 是用於設置、維護和檢查 Linux 內核中的 IPv4 和 IPv6 包過濾規則表和網絡地址轉換的一個命令行工具,位於用戶空間。
Netfilter 才是真正起作用的內核模塊,位於內核空間。
1、鏈表的概念
在了解鏈表概念之前,先看下面報文在主機中的流向圖。
假設我們要訪問主機中的web服務,那么我們的請求經過網卡后,流向內核空間,先經過PREROUTING鏈,再經過INPUT鏈,到達用戶空間的web服務。
web服務回答我們的請求,則先經過OUTPUT鏈,再經過POSTROUTING鏈到達我們。
1.1、表(table)的概念
表名 | 作用 |
filter | 負責過濾功能,防火牆 |
nat | network address translation,網絡地址轉換功能 |
mangle | 拆解報文,做出修改,並重新封裝 的功能 |
raw | 關閉nat表上啟用的連接追蹤機制 |
1.2、鏈(chain)的概念
鏈名 | 解釋 | 可以包含的表(優先級由前到后) |
PREROUTING | 路由前 | raw,mangle,nat |
INPUT | 輸入 | mangle,nat,filter |
OUTPUT | 輸出 | raw,mangle,nat,filter |
FORWARD | 轉發 | mangle,filter |
POSTROUTING | 路由后 | mangle,nat |
1.3、處理動作(target)
ACCEPT:允許數據包通過。
DROP:直接丟棄數據包,不給任何回應信息,這時候客戶端會感覺自己的請求泥牛入海了,過了超時時間才會有反應。
REJECT:拒絕數據包通過,必要時會給數據發送端一個響應的信息,客戶端剛請求就會收到拒絕的信息。
SNAT:源地址轉換,解決內網用戶用同一個公網地址上網的問題。
MASQUERADE:是SNAT的一種特殊形式,適用於動態的、臨時會變的ip上。
DNAT:目標地址轉換。
REDIRECT:在本機做端口映射。
LOG:在/var/log/messages文件中記錄日志信息,然后將數據包傳遞給下一條規則,也就是說除了記錄以外不對數據包做任何其他操作,仍然讓下一條規則去匹配。
2、匹配條件
2.1、規則查詢
- 查看對應表的所有規則,-t選項指定要操作的表,省略"-t 表名"時,默認表示操作filter表,-L表示列出規則,即查看規則。
iptables -t 表名 -L
- 查看指定表的指定鏈中的規則。
iptables -t 表名 -L 鏈名
- 查看指定表的所有規則,並且顯示更詳細的信息(更多字段),-v表示verbose,表示詳細的,冗長的,當使用-v選項時,會顯示出"計數器"的信息,由於上例中使用的選項都是短選項,所以一般簡寫為iptables -t 表名 -vL
iptables -t 表名 -v -L
- 表示查看表的所有規則,並且在顯示規則時,不對規則中的IP或者端口進行名稱反解,-n選項表示不解析IP地址。
iptables -t 表名 -n -L
- 表示查看表的所有規則,並且顯示規則的序號,--line-numbers選項表示顯示規則的序號,注意,此選項為長選項,不能與其他短選項合並,不過此選項可以簡寫為--line,注意,簡寫后仍然是兩條橫杠,仍然是長選項。
iptables --line-numbers -t 表名 -L
- 表示查看表中的所有規則,並且顯示更詳細的信息(-v選項),不過,計數器中的信息顯示為精確的計數值,而不是顯示為經過可讀優化的計數值,-x選項表示顯示計數器的精確值。
iptables --line -t filter -nvxL
2.2、規則管理
2.2.1、添加規則
我的這篇文章匯總了一些常見的匹配條件,iptables之匹配條件。
- 在指定表的指定鏈的尾部添加一條規則,-A選項表示在對應鏈的末尾添加規則,省略-t選項時,表示默認操作filter表中的規則
命令語法:iptables -t 表名 -A 鏈名 匹配條件 -j 動作 示例:iptables -t filter -A INPUT -s 192.168.1.146 -j DROP
- 在指定表的指定鏈的首部添加一條規則,-I選型表示在對應鏈的開頭添加規則
命令語法:iptables -t 表名 -I 鏈名 匹配條件 -j 動作 示例:iptables -t filter -I INPUT -s 192.168.1.146 -j ACCEPT
- 在指定表的指定鏈的指定位置添加一條規則
命令語法:iptables -t 表名 -I 鏈名 規則序號 匹配條件 -j 動作 示例:iptables -t filter -I INPUT 5 -s 192.168.1.146 -j REJECT
- 設置指定表的指定鏈的默認策略(默認動作)
命令語法:iptables -t 表名 -P 鏈名 動作
示例:iptables -t filter -P FORWARD ACCEPT
2.2.2、刪除規則
- 按照規則序號刪除規則,刪除指定表的指定鏈的指定規則,-D選項表示刪除對應鏈中的規則。
命令語法:iptables -t 表名 -D 鏈名 規則序號 示例:iptables -t filter -D INPUT 3
- 按照具體的匹配條件與動作刪除規則,刪除指定表的指定鏈的指定規則。
命令語法:iptables -t 表名 -D 鏈名 匹配條件 -j 動作 示例:iptables -t filter -D INPUT -s 192.168.1.146 -j DROP
- 刪除指定表的指定鏈中的所有規則,-F選項表示清空對應鏈中的規則
命令語法:iptables -t 表名 -F 鏈名
示例:iptables -t filter -F INPUT
- 刪除指定表中的所有規則
命令語法:iptables -t 表名 -F
示例:iptables -t filter -F
2.2.3、修改規則
2.2.4、保存規則
service iptables save
3、自定義鏈
- 創建自定義鏈
#示例:在filter表中創建IN_WEB自定義鏈
iptables -t filter -N IN_WEB
- 引用自定義鏈
#示例:在INPUT鏈中引用剛才創建的自定義鏈 iptables -t filter -I INPUT -p tcp --dport 80 -j IN_WEB
- 重命名自定義鏈
#示例:將IN_WEB自定義鏈重命名為WEB
iptables -E IN_WEB WEB
- 刪除自定義鏈
刪除自定義鏈需要滿足兩個條件:
1、自定義鏈沒有被引用
2、自定義鏈中沒有任何規則
#示例:將IN_WEB自定義鏈重命名為WEB
iptables -E IN_WEB WEB
備注:本文總結自朱雙印博客,博客地址:http://www.zsythink.net/archives/tag/iptables/