iptables 指令基本文法
iptables [-t table] command [鍊名] [條件比對] [-j 目标動作]
以下是對 iptables 指令的拆分講解:
-t table
用來指明使用的表,有三種選項:
filter
,
nat
mangle
。若未指定,則預設使用filter表。
command參數
指定iptables 對我們送出的規則要做什麼樣的操作,以下是command常用參數:
-
-A
Append,追加一條規則(放到最後)
舉例:
iptables -A INPUT -j DROP #拒絕所有人通路伺服器(作為最後一條規則)
// 若未 -t 指定表,預設使用filter表
-
-I
Insert,在指定的位置插入規則
舉例:
iptables -I INPUT 2 -s 10.10.10.1 -j ACCEPT #允許10.10.10.1主機通路本機
// 在 filter 表的 INPUT 鍊插入成第2條規則
-
-L
List,檢視規則清單
具體參數:
n:隻顯示 IP 位址和端口号碼,不顯示域名和服務名稱
v:顯示詳細資訊,包括每條規則的比對包數量和比對位元組數
x:在 v 的基礎上,禁止自動機關換算(K、M)
--line-number:可以檢視到規則号
舉例:
-
-D
Delete,從規則清單中删除規則
舉例:
iptables -D INPUT 2
// 删除 filter 表 INPUT 鍊中的第 2 條規則
-
-P
Policy,設定某個鍊的預設規則
舉例:
iptables -P INPUT DROP
// 設定 filter 表 INPUT 鍊的預設規則是 DROP
當資料包沒有被任何規則比對時,則按預設規則處理。
-
-F
Flush,清空規則
舉例:
iptables -F INPUT #清空filter 表中INPUT鍊上的規則
iptables -F #清空filter 表中所有鍊上的規則
iptables -t nat -F PREROUTING ##清空NAT表中PREROUTING鍊上的規則
iptables -t nat -F #清空NAT表中所有鍊上的規則
注意:-F 是清空鍊中規則,但并不影響 -P 設定的預設規則。 是以在生産環境中,若指定預設規則為DROP,一旦執行 iptables -F
,很容易導緻自己也無法連接配接伺服器(-F 會把配置的明細ACCEPT規則删除,隻留下預設規則拒接所有)。
-
-Z
zero,将指定鍊的所有計數器歸零。(如未指定,則認為是所有鍊)
舉例:
iptables -Z INPUT
//清除filter表INPUT鍊上的計數器
條件比對參數
按網絡接口比對:
-
-i
比對資料進入的網絡接口,此參數主要應用nat表,例如目标位址轉換。
-
-o
比對資料流出的網絡接口
例如:
-i eth0
// 比對從網絡接口eth0進來的資料包
-o eth1
// 比對從eth1流出的資料包
按源及目的位址比對
-
-s
比對源位址,可以是IP、網段、域名,也可空(代表任何位址)
-
-d
比對目标位址
舉例:
-s 參數舉例:
iptables -A INPUT -s 10.10.10.10 -j DROP
// 拒絕10.10.10.10主機通路本機
-d 參數舉例:
iptables -A OUTPUT -d www.baidu.com -j DROP
// 禁止本機通路百度
按協定類型比對
-
-p
比對協定類型,可以是TCP、UDP、ICMP等
舉例:
iptables -A INPUT -s 10.10.10.10 -p icmp -j DROP
// 禁止10.10.10.10主機ping通本機
按源及目的端口比對
-
--sport
比對源端口;可以是單個端口,也可以是端口範圍
-
--dport
比對目的端口
例如:
-- sport 23
//比對源端口是23的資料包
-- sport 2000:3000
//比對源端口是 2000-3000 的資料包
-- sport :2000
//比對2000以下的資料包(包含2000)
- --sport 1000:
//比對1000以上的資料包(包含1000)
注意:--sport 和 --dport 必須配合 -p 參數使用,例如:
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
//允許外部資料通路我的本地伺服器80端口
詳細解釋:
1、這是一條從外部進入内部本地伺服器的資料
2、資料包的目的(dport)位址是22,就是要通路我本地的22端口
3、允許以上的資料行為通過
目的動作
-
-j ACCEPT
允許資料包通過本鍊而不攔截它
例如:
iptables -A INPUT -j ACCEPT
// 允許所有通路本機的資料包通過
-
-j DROP
丢棄資料包;阻止資料包通過本鍊
例如:
iptables -A FORWARD -s 10.10.10.10 -j DROP
// 阻止來自10.10.10.10 的資料包通過本機
-
-j SNAT
源位址轉換,支援轉換為單IP,也支援轉換到IP位址池
例如:
轉換到單IP舉例:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to 18.18.18.18
// 将内網 192.168.1.0/24 轉換為公網18.18.18.18位址;SNAT,用于通路網際網路
轉換到一組位址池:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to 18.18.18.18-18.18.18.28
//同上,隻不過是轉換到一組IP位址池
-
-j DNAT
目的位址轉換,支援轉換為單IP,也支援轉換到IP位址池
例如:
轉換到單IP舉例:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.1
//把從eth0口進來通路TCP/80端口的資料包目的位址改成192.168.1.1
轉換到一組位址池:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.1-192.168.1.10
-
-j MASQUERADE
動态SNAT轉換(适用于動态 IP 場景 )
例如:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
// 将源位址是 192.168.1.0/24 的資料包進行位址僞裝,轉換成 eth0 上的 IP 位址
iptables 常用附加子產品:
按包狀态比對 (state)
-m state --state 狀态
舉例:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
// 将目前已運作的服務端口全部放行!無風險,良心推薦使用
按來源 MAC 比對(mac)
-m mac --mac-source MAC
舉例:
iptables -A INPUT -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP
// 拒絕來自某 MAC 位址的資料包進入本機
按包速率比對 (limit)
-m limit --limit 比對速率
舉例:
iptables -A FORWARD -d 192.168.1.1 -m limit --limit 50/s -j ACCEPT
iptables -A FORWARD -d 192.168.1.1 -j DROP
limit 英語上看是限制的意思,但實際上隻是按一定速率去比對而已,50/s 表示 1 秒中轉發 50 個資料包,要想限制的話後面要再跟一條DROP規則
多端口比對 (multiport)
-m multiport <--sports|--dports|--ports> 端口 1[,端口 2,..,端口 n]
舉例:
iptables -A INPUT -p tcp -m multiport --dports 22,53,80,443 -j ACCEPT
// 允許通路本機TCP/22,53,80,443端口
注意:該參數必須與 -p 參數一起使用
iptables 規則備份和恢複
我們執行 iptables 指令時,規則隻是儲存在記憶體中,并沒有儲存到某一個檔案中。是以系統重新開機之後,之前設定的規則就沒有了,是以規則設定完畢,檢查無誤後要及時儲存規則,使用指令:
[root@LB-01 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
會看到提示,防火牆規則儲存在
/etc/sysconfig/iptables
檔案内,這個檔案就是iptables的配置檔案。是以如果要備份防火牆規則,複制該配置檔案即可。例如:
cp /etc/sysconfig/iptables /opt/myipt.rule
如果需要恢複這些規則,使用以下指令:
iptables-restore < /opt/myipt.rule
service iptables save
結語
公衆号『
開源Linux
』,專注分享Linux/Unix相關内容,包括Linux運維、Linux系統開發、網絡程式設計、以及虛拟化和雲計算等技術幹貨。背景回複『
學習
』,送你一套學習Linux的系列書籍,期待與你相遇。