2021-05-12 14:32:11
iptables超全詳解
前提基礎:
當主機收到一個封包後,封包先在核心空間中處理,若發現目的地址是自身,則傳到使用者空間中交給對應的應用程式處理,若發現目的不是自身,則會將包丟棄或進行轉發。
iptables實現防火牆功能的原理是:在封包經過核心的過程中有五處關鍵地方,分別是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,稱為勾點函數,iptables這款使用者空間的軟體可以在這5處地方寫規則,對經過的封包進行處理,規則一般的定義為“如果封包頭符合這樣的條件,就這樣處理封包”。
iptables中定義有5條鏈,說白了就是上面說的5個勾點函數,因為每個勾點函數中可以定義多條規則,每當封包到達一個勾點函數時,iptables就會從勾點函數中第一條規則開始檢查,看該封包是否滿足規則所定義的條件。如果滿足,系統就會根據該條規則所定義的方法處理該封包;否則iptables將繼續檢查下一條規則,如果該封包不符合勾點函數中任一條規則,iptables就會根據該函數預先定義的預設策略來處理封包
iptables中定義有表,分別表示提供的功能,有filter表(實現包過濾)、nat表(實現網路地址轉換)、mangle表(實現包修改)、raw表(實現資料跟蹤),這些表具有一定的優先順序:raw-->mangle-->nat-->filter
一條鏈上可定義不同功能的規則,檢查封包時將根據上面的優先順序順序檢查
(圖片來源網路)
小結一下~~~
封包先經過PREOUTING,由該鏈確定封包的走向:
1、目的地址是本地,則傳送到INPUT,讓INPUT決定是否接收下來送到使用者空間,流程為①--->②;
2、若滿足PREROUTING的nat表上的轉發規則,則傳送給FORWARD,然後再經過POSTROUTING傳送出去,流程為: ①--->③--->④--->⑥
主機傳送封包時,流程則是⑤--->⑥
iptables安裝設定
linux一般預設都已經安裝iptables,只需要開啟服務即可
1
|
service iptables start |
iptables規則書寫
基本語法:iptables [-t 表] [操作命令] [鏈][規則匹配器][-j 目標動作]
表 | 說明 | 支援的鏈 |
raw | 一般是為了不再讓iptables對封包進行跟蹤,提高效能 | PREROUTING、OUTPUT |
mangle | 對封包進行修改 | 五個鏈都可以 |
nat | 進行地址轉換 | PREROUTING、OUTPUT、POSTROUTING |
filter(預設) | 對包進行過濾 | INPUT、FORWARD、OUTPUT |
常用操作命令 |
說明 |
-A | 在指定鏈尾部新增規則 |
-D | 刪除匹配的規則 |
-R | 替換匹配的規則 |
-I |
在指定位置插入規則 例:iptables -I INPUT 1 --dport 80 -j ACCEPT (將規則插入到filter表INPUT鏈中的第一位上) |
-L/S | 列出指定鏈或所有鏈的規則 |
-F |
刪除指定鏈或所有鏈的規則 |
-N |
建立使用者自定義鏈 例:iptables -N allowed |
-X |
刪除指定的使用者自定義鏈 |
-P |
為指定鏈設定預設規則策略,對自定義鏈不起作 用 例:iptables -P OUTPUT DROP |
-Z | 將指定鏈或所有鏈的計數器清零 |
-E |
更改自定義鏈的名稱 例:iptables -E allowed disallowed |
-n |
ip地址和埠號以數位方式顯示 例:iptables -Ln |
常見規則匹配器 | 說明 |
-p tcp|udp|icmp|all | 匹配協定,all會匹配所有協定 |
-s addr[/mask] | 匹配源地址 |
-d addr[/mask] | 匹配目標地址 |
--sport port1[:port2] | 匹配源埠(可指定連續的埠) |
--dport port1[:port2] | 匹配目的埠(可指定連續的埠) |
-o interface |
匹配出口網絡卡,只適用FORWARD、POSTROUTING、OUTPUT。 例:iptables -A FORWARD -o eth0 |
-i interface |
匹配入口網絡卡,只使用PREROUTING、INPUT、FORWARD。 |
--icmp-type | 匹配icmp型別(使用iptables -p icmp -h可檢視可用的ICMP型別) |
--tcp-flags mask comp |
匹配TCP標記,mask表示檢查範圍,comp表示匹配mask中的哪些標記。 例:iptables -A FORWARD -p tcp --tcp-flags ALL SYN,ACK -j ACCEPT (表示匹配SYN和ACK標記的封包) |
目標動作 | 說明 |
ACCEPT | 允許封包通過 |
DROP | 丟棄封包 |
REJECT | 丟棄封包,並且將拒絕資訊傳送給傳送方 |
SNAT |
源地址轉換(在nat表上) 例:iptables -t nat -A POSTROUTING -d 192.168.0.102 -j SNAT --to 192.168.0.1 |
DNAT |
目標地址轉換(在nat表上) 例:iptables -t nat -A PREROUTING -d 202.202.202.2 -j DNAT --to-destination 192.168.0.102 |
REDIRECT |
目標埠轉換(在nat表上) 例:iptables -t nat -D PREROUTING -p tcp --dport 8080 -i eth2.2 -j REDIRECT --to 80 |
MARK |
將封包打上標記 例:iptables -t mangle -A PREROUTING -s 192.168.1.3 -j MARK --set-mark 60 |
注意要點:
1、目標地址轉換一般在PREROUTING鏈上操作
2、源地址轉換一般在POSTROUTING鏈上操作
儲存和恢復iptables規則
使用iptables-save可以儲存到特定檔案中
1
|
iptables-save > /etc/sysconfig/iptables_save |
使用iptables-restore可以恢復規則
1
|
iptables-restore< /etc/sysconfig/iptables_save |
iptables的進階使用
1、limit限制流量:
-m limit --limit-burst 15 #設定一開始匹配的最巨量資料包數???
-m limit --limit 1000/s #設定最大平均匹配速率
-m limit --limit 5/m --limit-burst 15 #表示一開始能匹配的封包數量為15個,每匹配到一個,
limit-burst的值減1,所以匹配到15個時,該值為0,以後每過
12s,limit-burst的值會加1,表示又能匹配1個封包
例子:
1
2
|
iptables -A INPUT -i eth0 -m limit --limit 5 /m --limit-burst 15 -j ACCEPT iptables -A INPUT -i eth0 -j DROP |
注意要點:
1、--limit-burst的值要比--limit的大
2、limit本身沒有丟棄封包的功能,因此,需要第二條規則一起才能實現限速的功能
2、time :在特定時間內匹配
-m time | 說明 |
--monthdays day1[,day2] | 在每個月的特定天匹配 |
--timestart hh:mm:ss | 在每天的指定時間開始匹配 |
--timestop hh:mm:ss | 在每天的指定時間停止匹配 |
--weekdays day1[,day2] | 在每個星期的指定工作日匹配,值可以是1-7 |
例子:
1
2
|
iptables -A INPUT -i eth0 -m time --weekdays 1,2,3,4 -jACCEPT iptables -A INPUT -i eth0 -j DROP |
3、ttl:匹配符合規則的ttl值的封包
引數 | 說明 |
--ttl-eq 100 | 匹配TTL值為100的封包 |
--ttl-gt 100 | 匹配TTL值大於100的封包 |
--ttl-lt 100 | 匹配TTL值小於100的封包 |
例子:
1
|
iptables -A OUTPUT -m ttl --ttl- eq 100 -j ACCEPT |
4、multiport:匹配離散的多個埠
引數 | 說明 |
--sports port1[,port2,port3] | 匹配源埠 |
--dports port1[,port2,port3] | 匹配目的埠 |
--ports port1[,port2,port3] | 匹配源埠或目的埠 |
例子:
1
|
iptables -A INPUT -m multiport --sports 22,80,8080 -j DROP |
5、state:匹配指定的狀態封包
引數 | 說明 |
--state value | value可以為NEW、RELATED(有關聯的)、ESTABLISHED、INVALID(未知連線) |
例子:
1
|
iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT |
6、mark:匹配帶有指定mark值的封包
引數 | 說明 |
--mark value | 匹配mark標記為value的封包 |
例子:
1
|
iptables -t mangle -A INPUT -m mark --mark 1 -j DROP |
7、mac:匹配特定的mac地址
例子:
1
|
iptables -A FORWARD -m mac --mac- source 00:0C:24:FA:19:80 -j DROP |
更多iptables相關教學見以下內容:
CentOS 7.0關閉預設防火牆啟用iptables防火牆 http://www.linuxidc.com/Linux/2015-05/117473.htm
iptables使用範例詳解 http://www.linuxidc.com/Linux/2014-03/99159.htm
Linux防火牆iptables詳細教學 http://www.linuxidc.com/Linux/2013-07/87045.htm
iptables的備份、恢復及防火牆指令碼的基本使用 http://www.linuxidc.com/Linux/2013-08/88535.htm
Linux下防火牆iptables用法規則詳解 http://www.linuxidc.com/Linux/2012-08/67952.htm
Linux下iptables防火牆設定 http://www.linuxidc.com/Linux/2015-10/123843.htm
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-09/134832.htm
相關文章