Linux iptables命令詳解

iptables 是 Linux 防火牆系統的重要組成部分,iptables 的主要功能是實現對網絡數據包進出設備及轉發的控制。當數據包須要進入設備、從設備中流出或者由該設備轉發、路由時,均可以使用 iptables 進行控制。下面良許小編就將從幾個方面對於Linux iptables命令進行詳述,但願對你們有所幫助。linux

Linux命令

iptables簡介

iptables 是集成在 Linux 內核中的包過濾防火牆系統。使用 iptables 能夠添加、刪除具體的過濾規則,iptables 默認維護着 4 個表和 5 個鏈,全部的防火牆策略規則都被分別寫入這些表與鏈中。網絡

「四表」是指 iptables 的功能,默認的 iptable s規則表有 filter 表(過濾規則表)、nat 表(地址轉換規則表)、mangle(修改數據標記位規則表)、raw(跟蹤數據表規則表):框架

  1. filter 表:控制數據包是否容許進出及轉發,能夠控制的鏈路有 INPUT、FORWARD 和 OUTPUT。
  2. nat 表:控制數據包中地址轉換,能夠控制的鏈路有 PREROUTING、INPUT、OUTPUT 和 POSTROUTING。
  3. mangle:修改數據包中的原數據,能夠控制的鏈路有 PREROUTING、INPUT、OUTPUT、FORWARD 和 POSTROUTING。
  4. raw:控制 nat 表中鏈接追蹤機制的啓用情況,能夠控制的鏈路有 PREROUTING、OUTPUT。

「五鏈」是指內核中控制網絡的 NetFilter 定義的 5 個規則鏈。每一個規則表中包含多個數據鏈:INPUT(入站數據過濾)、OUTPUT(出站數據過濾)、FORWARD(轉發數據過濾)、PREROUTING(路由前過濾)和POSTROUTING(路由後過濾),防火牆規則須要寫入到這些具體的數據鏈中。ssh

Linux 防火牆的過濾框架,如圖 1 所示。tcp

Linux命令

能夠看出,若是是外部主機發送數據包給防火牆本機,數據將會通過 PREROUTING 鏈與 INPUT 鏈;若是是防火牆本機發送數據包到外部主機,數據將會通過 OUTPUT 鏈與 POSTROUTING 鏈;若是防火牆做爲路由負責轉發數據,則數據將通過 PREROUTING 鏈、FORWARD 鏈以及 POSTROUTING 鏈。工具

iptables語法格式

iptables 命令的基本語法格式以下:url

[root@liangxu ~]# iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION.net

各參數的含義爲:rest

  • -t:指定須要維護的防火牆規則表 filter、nat、mangle或raw。在不使用 -t 時則默認使用 filter 表。
  • COMMAND:子命令,定義對規則的管理。
  • chain:指明鏈表。
  • CRETIRIA:匹配參數。
  • ACTION:觸發動做。

iptables 命令經常使用的選項及各自的功能如表 2 所示code

選 項 功 能
-A 添加防火牆規則
-D 刪除防火牆規則
-I 插入防火牆規則
-F 清空防火牆規則
-L 列出添加防火牆規則
-R 替換防火牆規則
-Z 清空防火牆數據表統計信息
-P 設置鏈默認規則

iptables 命令經常使用匹配參數及各自的功能如表 3 所示。

參 數 功 能
[!]-p 匹配協議,! 表示取反
[!]-s 匹配源地址
[!]-d 匹配目標地址
[!]-i 匹配入站網卡接口
[!]-o 匹配出站網卡接口
[!]--sport 匹配源端口
[!]--dport 匹配目標端口
[!]--src-range 匹配源地址範圍
[!]--dst-range 匹配目標地址範圍
[!]--limit 四配數據錶速率
[!]--mac-source 匹配源MAC地址
[!]--sports 匹配源端口
[!]--dports 匹配目標端口
[!]--stste 匹配狀態(INVALID、ESTABLISHED、NEW、RELATED)
[!]--string 匹配應用層字串

iptables 命令觸發動做及各自的功能如表 4 所示。

觸發動做 功 能
ACCEPT 容許數據包經過
DROP 丟棄數據包
REJECT 拒絕數據包經過
LOG 將數據包信息記錄 syslog 曰志
DNAT 目標地址轉換
SNAT 源地址轉換
MASQUERADE 地址欺騙
REDIRECT 重定向

內核會按照順序依次檢查 iptables 防火牆規則,若是發現有匹配的規則目錄,則馬上執行相關動做,中止繼續向下查找規則目錄;若是全部的防火牆規則都未能匹配成功,則按照默認策略處理。使用 -A 選項添加防火牆規則會將該規則追加到整個鏈的最後,而使用 -I 選項添加的防火牆規則則會默認插入到鏈中做爲第一條規則。

注意,在 Linux CentOS 系統中,iptables 是默認安裝的,若是系統中沒有 iptables 工具,能夠先進行安裝。

規則的查看與清除

使用 iptables 命令能夠對具體的規則進行查看、添加、修改和刪除

1) 查看規則

對規則的查看須要使用以下命令:

[root@liangxu ~]# iptables -nvL

各參數的含義爲:

  • -L 表示查看當前表的全部規則,默認查看的是 filter 表,若是要查看 nat 表,能夠加上 -t nat 參數。
  • -n 表示不對 IP 地址進行反查,加上這個參數顯示速度將會加快。
  • -v 表示輸出詳細信息,包含經過該規則的數據包數量、總字節數以及相應的網絡接口。

【例 1】查看規則。 首先須要使用 su 命令,切換當前用戶到 root 用戶。而後在終端頁面輸入命令以下:

[root@liangxu ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere           
ACCEPT     all  --  anywhere             anywhere           
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

2) 添加規則

添加規則有兩個參數分別是 -A 和 -I。其中 -A 是添加到規則的末尾;-I 能夠插入到指定位置,沒有指定位置的話默認插入到規則的首部。

【例 2】查看當前規則。首先須要使用 su 命令,切換當前用戶到 root 用戶,而後在終端頁面輸入命令以下:

[root@liangxu ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination        
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0          
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0          
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
......

【例 3】添加一條規則到尾部。 首先須要使用 su 命令,切換當前用戶到 root 用戶,而後在終端頁面輸入以下命令:

[root@liangxu ~]# iptables -A INPUT -s 192.168.1.5 -j DROP
[root@liangxu ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination        
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0          
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0          
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
6    DROP       all  --  192.168.1.5          0.0.0.0/0

3) 修改規則

在修改規則時須要使用-R參數。 【例 4】把添加在第 6 行規則的 DROP 修改成 ACCEPT。首先須要使用 su 命令,切換當前用戶到 root 用戶,而後在終端頁面輸入以下命令:

[root@liangxu ~]# iptables -R INPUT 6 -s 194.168.1.5 -j ACCEPT
[root@liangxu ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination        
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0          
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0          
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
6    ACCEPT     all  --  194.168.1.5          0.0.0.0/0

對比發現,第 6 行規則的 target 已修改成 ACCEPT。

4) 刪除規則

刪除規則有兩種方法,但都必須使用 -D 參數。 【例 5】刪除添加的第 6 行的規則。首先須要使用su命令,切換當前用戶到 root 用戶,而後在終端頁面輸入以下命令:

[root@liangxu ~]# iptables -D INPUT 6 -s 194.168.1.5 -j ACCEPT

[root@liangxu ~]# iptables -D INPUT 6

注意,有時須要刪除的規則較長,刪除時須要寫一大串的代碼,這樣比較容易寫錯,這時能夠先使用 -line-number 找出該條規則的行號,再經過行號刪除規則。

防火牆的備份與還原

默認的 iptables 防火牆規則會馬上生效,但若是不保存,當計算機重啓後全部的規則都會丟失,因此對防火牆規則進行及時保存的操做是很是必要的。

iptables 軟件包提供了兩個很是有用的工具,咱們能夠使用這兩個工具處理大量的防火牆規則。這兩個工具分別是 iptables-save 和 iptables-restore,使用該工具能夠實現防火牆規則的保存與還原。這兩個工具的最大優點是處理龐大的規則集時速度很是快。

CentOS 7 系統中防火牆規則默認保存在 /etc/sysconfig/iptables 文件中,使用 iptables-save 將規則保存至該文件中能夠實現保存防火牆規則的做用,計算機重啓後會自動加載該文件中的規則。若是使用 iptables-save 將規則保存至其餘位置,能夠實現備份防火牆規則的做用。當防火牆規則須要作還原操做時,能夠使用 iptables-restore 將備份文件直接導入當前防火牆規則。

一、iptables-save命令

iptables-save 命令用來批量導出 Linux 防火牆規則,語法介紹以下:

保存在默認文件夾中(保存防火牆規則): [root@liangxu ~]# iptables-save > /etc/sysconfig/iptables

保存在其餘位置(備份防火牆規則): [root@liangxu ~]# iptables-save > 文件名稱

  1. 直接執行 iptables-save 命令:顯示出當前啓用的全部規則,按照 raw、mangle、nat、filter 表的順序依次列出,以下所示:

[root@liangxu ~]# iptables-save # Generated by iptables-save v1.4.7 on Thu Aug 27 07:06:36 2020 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [602:39026] ....... COMMIT # Completed on Thu Aug 27 07:06:36 2020

其中:

  • 「#」號開頭的表示註釋;
  • 「*filter」表示所在的表;
  • 「:鏈名默認策略」表示相應的鏈及默認策略,具體的規則部分省略了命令名「iptables」;
  • 在末尾處「COMMIT」表示提交前面的規則設置。
  1. 備份到其餘文件中。例如文件:text,以下所示:

[root@liangxu ~]# iptables-save > test [root@liangxu ~]# ls test [root@bogon ~]# cat test # Generated by iptables-save v1.4.7 on Thu Aug 27 07:09:47 2020 *filter ......

  1. 列出nat表的規則內容,命令以下:

[root@liangxu ~]# iptables-save -t nat

「-t表名」:表示列出某一個表。

二、iptables-restore命令

iptables-restore 命令能夠批量導入Linux防火牆規則,同時也須要結合重定向輸入來指定備份文件的位置。命令以下:

[root@liangxu ~]# iptables-restore < 文件名稱

注意,導入的文件必須是使用 iptables-save工具導出來的才能夠。

先使用 iptables-restore 命令還原 text 文件,而後使用 iptables -t nat -nvL 命令查看清空的規則是否已經還原,以下所示:

[root@liangxu ~]# iptables-restore < test [root@liangxu ~]# iptables -t nat -nvL Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination

​ 以上就是良許教程網爲各位朋友分享的Linux iptables命令詳解。 以上就是良許教程網爲各位朋友分享的Linux相關知識。

相關文章
相關標籤/搜索