iptables基礎篇
簡介
基本信息
IPTABLES 是與最新的 3.5 版本 Linux 內核集成的 IP 信息包過濾系統。如果 Linux 系統連接到因特網或 LAN、服務器或連接 LAN 和因特網的代理服務器, 則該系統有利於在 Linux 系統上更好地控制 IP 信息包過濾和防火墻配置。
防火墻在做信息包過濾決定時,有一套遵循和組成的規則,這些規則存儲在專用的信 息包過濾表中,而這些表集成在 Linux 內核中。在信息包過濾表中,規則被分組放在我們所謂的鏈(chain)中。而netfilter/iptables IP 信息包過濾系統是一款功能強大的工具,可用於添加、編輯和移除規則。
Linux的防火墻體系主要工作在網絡層,針對TCP/IP數據包實施過濾和限制,屬於典型的包過濾防火墻(或稱為網絡層防火墻)
雖然 netfilter/iptables IP 信息包過濾系統被稱為單個實體,但它實際上由兩個組件netfilter 和 iptables 組成。
netfilter 組件也稱為內核空間(kernelspace),是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。屬於“內核態”
iptables 組件是一種工具,也稱為用戶空間(userspace),它使插入、修改和除去信息包過濾表中的規則變得容易。屬於“用戶態”。除非您正在使用 Red Hat Linux 7.1 或更高版本,否則需要下載該工具並安裝使用它。
歷史版本
與Linux內核各版本集成的防火墻歷史版本:
2.0.X內核:ipfwadm
2.2.X內核:ipchains
2.4.X內核:iptables
iptables的表、鏈結構
iptables的作用是為了過濾機制的實現提供規則(或稱為策略),通過各種不同的規則,告訴netfilter對來自某些源、前往某些目的或者具有某些協議特征的數據包應該如何處理。為了更加方便的組織和管理防火墻規則,iptables采用了“表”“鏈”分層結構
四表 | 五鏈 |
---|---|
filter表 | INPUT鏈 |
nat表 | OUTPUT鏈 |
mangle表 | FORWARD鏈 |
raw表 | PREROUTING鏈 |
空 | POSTROUTING鏈 |
詳解
四表
①、四表之 filter表:filter表用來對數據包進行過濾,根據具體的規則要求決定如何處理一個數據包。filter表對應的內核模塊為iptables_filter,表內包含三個鏈,即INPUT、FORWARD、OUTPUT.
查看filter表如下圖
②、四表之 nat表:nat(網絡地址轉換)表主要是用來修改數據包的IP地址、端口號等信息。nat表對應的內核模塊為iptables_nat,表內包含三個鏈,即PREROUTING、POSTROUTING、OUTPUT.
查看nat表信息如下圖
③、四表之 mangle表:mangle表是用來修改數據包的TOS(服務類型)、TTL(生存周期),或者為數據包設置Mark標記,以實現流量整型、策略路由等高級應用。mangle表對應的內核模塊為 iptables_mangle,表內包含五個鏈,即INPUT、OUTPUT、FORWARD、PREROUTING、 POSTROUTING。
查看mangle表如下圖
④、四表之 raw表:raw表是自1.2.9以後版本的iptables新增的表,主要用來決定是否對數據包進行狀態追蹤。raw表對應的內核模塊為iptbles_raw,表內包含兩個鏈,即OUTPUT、PREROUTING.
查看raw表如下圖
五鏈
INPUT鏈:當收到訪問防火墻本機地址的數據包(入站)時,應用此鏈中的規則
OUTPUT鏈:當防火墻本機向外發送數據包(出站)時,應用此鏈中的規則
FORWARD鏈:當接收到需要通過防火墻中轉發送給其他地址的數據包時,應用此鏈中的規則
PREROUTING鏈:在對數據包做路由選擇之前,應用此鏈中的規則
POSTROUTING鏈:在對數據包做路由選擇之後,應用此鏈中的規則
其中,INPUT、OUTPUT鏈主要用在“主機型防火墻”中,即主要針對服務器本地進行的防火墻;而FORWARD、PREROUTING、 POSTROUTING鏈多用在“網絡型防火墻”中,如使用Linux防火墻作為網關服務器,在公司內網與Internet之間進行安全控制。
規則表之間的順序
當數據包抵達防火墻時,將依次應用raw表、mangle表、nat表和filter表中對應鏈內的規則,應用順序為raw→mangle→nat→filter。
編寫防火墻規則
使用iptables命令管理、編寫防火墻規則時,基本的命令格式
iptables [ -t 表名 ] 管理選項 [鏈名] [匹配條件][-j 控制類型]
這其中,表名、鏈名用來指定iptables命令所操作的的表和鏈,未指定表名時將默認使用filter表;管理選項表示iptables規則的操作方式,如插入、增加、刪除、查看等;匹配條件用來指定要處理的數據包特征,不符合指定條件的數據包將不會被處理;控制類型指的是數據包的處理方式,如允許、拒絕、丟棄等。
在iptables防火墻體系中,常用的幾種控制類型:
ACCEPT:允許數據包通過
DROP:直接丟棄數據包,不給出任何回應信息
REJECT:拒絕數據包通過,必要時會給數據發送端一個相應信息
LOG:在/var/log/messages文件中記錄日誌信息,然後將數據包傳遞給下一條規則。
編寫防火墻規則示例:
iptables -t filter -I INPUT -p icmp -j REJECT
在filter表的INPUT鏈中添加一條拒絕icmp數據包通過的規則
iptables命令的常用管理選項
選項名 | 功能及特點 |
---|---|
-A | 在指定鏈的末尾添加(--append)一條新的規則 |
-D | 刪除(--delete)指定鏈中的某一條規則,可指定規則序號或具體內容 |
-I | 在指定鏈中插入(--insert)一條新的規則,未指定序號時默認作為第一條規則 |
-R | 修改、替換(--replace)指定鏈中的某一條規則,可指定規則序號或者具體內容 |
-L | 列出(--list)指定鏈中所有的規則,若未指定鏈名,則列出表中的所有鏈 |
-F | 清空(--flush)指定鏈中所有規則,若未指定鏈名,則清空表中的所有鏈 |
-P | 設置指定鏈的默認策略(--policy) |
-n | 使用數字形式(--numeric)顯示輸出結果,如顯示IP地址而不是主機名 |
-v | 查看規則列表時顯示詳細(--verbose)的信息 |
-h | 查看命令幫助信息(--help) |
--line-numbers | 查看規則列表時,同時顯示規則在鏈中的順序號 |
添加新的規則
示例:
iptables -t filter -A INPUT -p tcp -j ACCEPT
在filter表的INPUT鏈末尾添加一條允許tcp協議通過的規則
iptables -I INPUT -p udp -j ACCEPT
在filter表的INPUT鏈的第一條添加允許udp協議的數據包通過
註:這裏沒有指定表,所以默認是filter表,-I 是添加為第一條
iptables -I INPUT 2 -p icmp -j ACCEPT
在filter表的INPUT鏈的第二條添加一條允許icmp通過的規則
查看規則列表
示例:
[root@rhel6-2 ~]# iptables -L INPUT --line-numbers //查看filter表中的所有規則並且顯示序列號
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT all -- anywhere anywhere
4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
5 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
[root@rhel6-2 ~]# iptables -n -L INPUT //以數字地址形式查看filter表INPUT鏈中的所有規則,這裏的-n -L 可簡寫為-nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
清空、刪除規則
[root@rhel6-2 ~]# iptables -nL INPUT //先查看INPUT鏈中的規則
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
[root@rhel6-2 ~]# iptables -D INPUT 3 //刪除第三條
[root@rhel6-2 ~]# iptables -nL INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
//可以看到第三條規則沒了
[root@rhel6-2 ~]# iptables -F //清空防火墻規則
[root@rhel6-2 ~]# iptables -nL INPUT //再次查看就沒有規則條目了
Chain INPUT (policy ACCEPT)
target prot opt source destination
設置默認策略
itables的各條鏈中,默認策略是規則匹配的最後一個環節,當找不到任何一條能夠匹配數據包的規則時,則默認執行默認策略。默認策略的控制類型就兩種ACCPEPT(允許)、DROP(丟棄)。
[root@rhel6-2 ~]# iptables -t filter -P FORWARD DROP
//將filter表中FORWARD鏈的默認策略設置為丟棄
[root@rhel6-2 ~]# iptables -P OUTPUT ACCEPT
//將OUTPUT表中的默認策略設置為允許
好,以上就是今天iptables基礎篇的內容咯,望各位大神多多點評。
ps:iptables進階篇之XXX 盡情期待!!!!
iptables基礎篇