1. 程式人生 > >iptables基礎篇

iptables基礎篇

之前 集成 歷史 兩個 rop new t 策略 模塊 編寫

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基礎篇