iptables系列教程(二)| iptables語法規則

iptables 命令基本語法

iptables [-t table] command [鏈名] [條件匹配] [-j 目標動作]

iptables系列教程(二)| iptables語法規則

以下是對 iptables 命令的拆分講解:

-t table

用來指明使用的表,有三種選項: filternatmangle。若未指定,則默認使用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:可以查看到規則號
 舉例:

iptables系列教程(二)| iptables語法規則


  • -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的系列書籍,期待與你相遇。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章