iptables 是 Linux 防火墻系統的重要組成部分,iptables 的主要功能是實作對網路資料包進出設備及轉發的控制,當資料包需要進入設備、從設備中流出或者由該設備轉發、路由時,都可以使用 iptables 進行控制,下面良許小編就將從幾個方面對于Linux iptables命令進行詳述,希望對大家有所幫助,

iptables簡介
iptables 是集成在 Linux 內核中的包過濾防火墻系統,使用 iptables 可以添加、洗掉具體的過濾規則,iptables 默認維護著 4 個表和 5 個鏈,所有的防火墻策略規則都被分別寫入這些表與鏈中,
“四表”是指 iptables 的功能,默認的 iptable s規則表有 filter 表(過濾規則表)、nat 表(地址轉換規則表)、mangle(修改資料標記位規則表)、raw(跟蹤資料表規則表):
- filter 表:控制資料包是否允許進出及轉發,可以控制的鏈路有 INPUT、FORWARD 和 OUTPUT,
- nat 表:控制資料包中地址轉換,可以控制的鏈路有 PREROUTING、INPUT、OUTPUT 和 POSTROUTING,
- mangle:修改資料包中的原資料,可以控制的鏈路有 PREROUTING、INPUT、OUTPUT、FORWARD 和 POSTROUTING,
- raw:控制 nat 表中連接追蹤機制的啟用狀況,可以控制的鏈路有 PREROUTING、OUTPUT,
“五鏈”是指內核中控制網路的 NetFilter 定義的 5 個規則鏈,每個規則表中包含多個資料鏈:INPUT(入站資料過濾)、OUTPUT(出站資料過濾)、FORWARD(轉發資料過濾)、PREROUTING(路由前過濾)和POSTROUTING(路由后過濾),防火墻規則需要寫入到這些具體的資料鏈中,
Linux 防火墻的過濾框架,如圖 1 所示,

可以看出,如果是外部主機發送資料包給防火墻本機,資料將會經過 PREROUTING 鏈與 INPUT 鏈;如果是防火墻本機發送資料包到外部主機,資料將會經過 OUTPUT 鏈與 POSTROUTING 鏈;如果防火墻作為路由負責轉發資料,則資料將經過 PREROUTING 鏈、FORWARD 鏈以及 POSTROUTING 鏈,
iptables語法格式
iptables 命令的基本語法格式如下:
[root@liangxu ~]# iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION
各引數的含義為:
- -t:指定需要維護的防火墻規則表 filter、nat、mangle或raw,在不使用 -t 時則默認使用 filter 表,
- COMMAND:子命令,定義對規則的管理,
- chain:指明鏈表,
- CRETIRIA:匹配引數,
- ACTION:觸發動作,
iptables 命令常用的選項及各自的功能如表 2 所示
| 選 項 | 功 能 |
|---|---|
| -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 將備份檔案直接匯入當前防火墻規則,
1、iptables-save命令
iptables-save 命令用來批量匯出 Linux 防火墻規則,語法介紹如下:
保存在默認檔案夾中(保存防火墻規則):
[root@liangxu ~]# iptables-save > /etc/sysconfig/iptables
保存在其他位置(備份防火墻規則):
[root@liangxu ~]# iptables-save > 檔案名稱
- 直接執行 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”表示提交前面的規則設定,
- 備份到其他檔案中,例如檔案: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
......
- 列出nat表的規則內容,命令如下:
[root@liangxu ~]# iptables-save -t nat
“-t表名”:表示列出某一個表,
2、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命令詳解,
本文由博客一文多發平臺 OpenWrite 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/253356.html
標籤:其他
上一篇:SELinux詳細說明
下一篇:Linux diff命令詳解
