Linux IPTables:如何添加防火牆規則

摘要:本文介紹瞭如何使用“iptables -A”命令添加 iptables 防火牆規則。

本文分享自華爲雲社區《Linux IPTables:如何添加防火牆規則(使用允許 SSH 示例)》,作者:Tiamo_T 。

本文介紹瞭如何使用“iptables -A”命令添加 iptables 防火牆規則。

“-A”用於追加。如果它讓你更容易記住“-A”作爲添加規則(而不是附加規則),那就沒問題了。但是,請記住,“-A”在鏈的末尾添加了規則。

同樣,記住 -A 在末尾添加規則非常重要。

通常,最後一條規則是丟棄所有數據包。如果您已經有一個丟棄所有數據包的規則,並且如果您嘗試在命令行中使用“-A”來創建新規則,您最終會在當前的“丟棄所有數據包”規則之後添加新規則,這將使您的新規則幾乎毫無用處。

一旦您掌握了 iptables,並且當您在生產中實現它時,您應該使用 shell 腳本,您可以在其中使用 -A 命令添加所有規則。在那個 shell 腳本中,你的最後一行應該總是“丟棄所有數據包”規則。當您想要添加任何新規則時,請修改該 shell 腳本並將您的新規則添加到“丟棄所有數據包”規則之上。

句法:

iptables -A chain firewall-rule
  • -A 鏈 - 指定應附加規則的鏈。例如,對傳入數據包使用 INPUT 鏈,對傳出數據包使用 OUTPUT。
  • firewall-rule – 各種參數構成防火牆規則。

如果您不知道鏈是什麼意思,最好先閱讀iptables 基礎知識

防火牆規則參數

以下參數可用於所有類型的防火牆規則。

-p 用於協議

  • 指示規則的協議。
  • 可能的值爲 tcp、udp、icmp
  • 使用“all”允許所有協議。當您不指定 -p 時,默認情況下將使用“所有”協議。使用“all”並始終指定協議並不是一個好習慣。
  • 使用名稱(例如:tcp)或編號(例如:6 表示 tcp)作爲協議。
  • /etc/protocols 文件包含所有允許的協議名稱和編號。
  • 你也可以使用--protocol

-s 是源

  • 指示數據包的來源。
  • 這可以是 IP 地址、網絡地址或主機名
  • 例如:-s 192.168.1.101 表示具體的ip地址
  • 對於網絡掩碼,使用 /mask。例如:“-s 192.168.1.0/24”表示該網絡的網絡掩碼爲 255.255.255.0。這匹配 192.168.1.x 網絡。
  • 當您不指定來源時,它將匹配所有來源。
  • 您還可以使用 –src 或 –source

-d 是目的地

  • 指示數據包的目的地。
  • 這與“-s”相同(除了它代表目標主機、IP 地址或網絡)
  • 您還可以使用 –dst 或 –destination

-j 是目標

  • j 代表“跳轉到目標”
  • 這指定了匹配此防火牆規則的數據包需要發生什麼。
  • 可能的值爲 ACCEPT、DROP、QUEUE、RETURN
  • 您還可以指定其他用戶定義的鏈作爲目標值。

-i 用於接口

  • i 代表“輸入接口”
  • 您可能會忽略這一點並假設“-i”用於接口。請注意 -i 和 -o 都用於接口。但是,-i 用於輸入接口,-o 用於輸出接口。
  • 指示傳入數據包通過 INPUT、FORWARD 和 PREROUTING 鏈進入的接口。
  • 例如:-i eth0 表示此規則應考慮通過接口 eth0 傳入的數據包。
  • 如果您不指定 -i 選項,則系統上所有可用的接口都將被考慮用於輸入數據包。
  • 您也可以使用 –in-interface

-o 用於輸出接口

  • o 代表“輸出接口”
  • 指示通過 INPUT、FORWARD 和 PREROUTING 鏈發送傳出數據包的接口。
  • 如果您不指定 -o 選項,則系統上所有可用的接口都將被視爲輸出數據包。
  • 你也可以使用--out-interface

防火牆參數的附加選項

上面的一些防火牆參數依次具有可以與它們一起傳遞的自己的選項。以下是一些最常見的選項。

要使用這些參數選項,您應該在防火牆規則中指定相應的參數。例如,要使用“–sport”選項,您應該在防火牆規則中指定“-p tcp”(或“-p udp”)參數。

注意:所有這些選項前面都有兩個破折號。例如,sport 前面有兩個連字符。

–sport 用於源端口(用於 -p tcp 或 -p udp)

  • 默認情況下,所有源端口都匹配。
  • 您可以指定端口號或名稱。例如,要在防火牆規則中使用 SSH 端口,請使用“–sport 22”或“–sport ssh”。
  • /etc/services 文件包含所有允許的端口名稱和編號。
  • 在規則中使用端口號比使用端口名更好(爲了性能)。
  • 要匹配端口範圍,請使用冒號。例如,22:100 匹配從 22 到 100 的端口號。
  • 您也可以使用 –source-port

–dport 用於目標端口(用於 -p tcp 或 -p udp)

  • 一切都與 –sport 相同,除了這是針對目標端口。
  • 您也可以使用 –destination-port

–tcp-flags 用於 TCP 標誌(用於 -p tcp)

  • 這可以包含以逗號分隔的多個值。
  • 可能的值有:SYN、ACK、FIN、RST、URG、PSH。您也可以使用 ALL 或 NONE

–icmp-type 用於 ICMP 類型(用於 -p icmp)

  • 當您使用icmp協議“-p icmp”時,您還可以使用“-icmp-type”參數指定ICMP類型。
  • 例如:“-icmp-type 0”用於“Echo Reply”,“-icmp-type 8”用於“Echo”。

允許傳入 SSH 連接的示例防火牆規則

現在您瞭解了防火牆規則的各種參數(及其選項),讓我們構建一個示例防火牆規則。

在這個例子中,讓我們只允許傳入的 SSH 連接到服務器。所有其他連接都將被阻止(包括 ping)。

警告:使用防火牆規則可能會導致您的系統無法訪問。如果您不知道自己在做什麼,您可能會將自己(和其他所有人)鎖定在系統之外。因此,僅在沒有人使用的測試系統上進行所有學習,並且如果您被鎖定,您可以訪問控制檯以重新啓動 iptables。

1. 刪除現有規則

如果您已經有一些 iptables 規則,請在刪除現有規則之前進行備份。

刪除所有現有規則並允許防火牆接受所有內容。使用我們之前討論過的iptables flush清理所有現有規則並從頭開始。

測試以確保您能夠從外部 ssh 和 ping 此服務器。

完成此示例後,您將只能通過 SSH 連接到此服務器。您將無法從外部 ping 此服務器。

2. 只允許 SSH

僅允許與此服務器的傳入 SSH 連接。您可以從任何地方通過 ssh 連接到此服務器。

iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

上面的 iptables 命令有以下 4 個組件。

  • “-A INPUT”——這表明我們正在向 INPUT 鏈追加(或添加)一條新規則。因此,此規則適用於傳入流量。
  • “-i eth0” – 將根據此規則檢查通過接口 eth0 的傳入數據包。
  • “-p tcp –dport 22” – 此規則適用於 TCP 數據包。這有一個名爲“-dport 22”的 tcp 選項,它表示服務器上此規則的目標端口是 22(即 ssh)。
  • “-j ACCEPT”——跳轉到接受,它只是接受數據包。

簡單來說,上述規則可以表述爲:所有通過 eth0 for ssh 傳入的數據包都將被接受。

3.丟棄所有其他數據包

一旦您指定了接受數據包的自定義規則,您還應該有一個默認規則來丟棄任何其他數據包。

這應該是您在 INPUT 鏈中的最後一條規則。

要丟棄所有傳入的數據包,請執行以下操作。

iptables -A INPUT -j DROP

4.查看SSH規則和測試

要查看當前的 iptables 防火牆規則,請使用“iptables -L”命令。

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
DROP       all  --  anywhere             anywhere

從上面的輸出中可以看出,它依次具有以下兩條規則。

  • 接受所有傳入的 ssh 連接
  • 丟棄所有其他數據包。

與其從命令行添加防火牆規則,不如創建一個包含規則的 shell 腳本,如下所示。

# vi iptables.sh
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP

# sh -x iptables.sh
+ iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
+ iptables -A INPUT -j DROP

# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
DROP       all  --  anywhere             anywhere

與 iptables append/add 命令類似,iptables 可用的其他命令很少。

 

點擊關注,第一時間瞭解華爲雲新鮮技術~

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