如何在一個 iptables 命令列中新增多個 IP? sudo iptables -A 輸入 -p tcp --dport 22 ! -s 1.2.3.4 -j 刪除

如何在一個 iptables 命令列中新增多個 IP? sudo iptables -A 輸入 -p tcp --dport 22 ! -s 1.2.3.4 -j 刪除

更新:

我已經嘗試過sudo iptables -A INPUT -p tcp --dport 22 ! -s 1.2.3.4,11.22.33.44 -j DROP,但不起作用,它給了我一個錯誤

iptables v1.8.2 (nf_tables): !不允許有多個來源或目標 IP 位址


例如,我的目標是僅允許1.2.3.411.22.33.44連接我的伺服器的 ssh(連接埠 22)。

我更喜歡這種方法/命令而不是其他方法/命令。

sudo iptables -A INPUT -p tcp --dport 22 ! -s 1.2.3.4 -j DROP

但我不知道如何11.22.33.44在此命令中添加另一個允許的IP,

您能給我一點幫助或提示嗎?

謝謝。

答案1

定義多種的僅使用地址 iptables! --source無法使用命令。

位址可以是網路名稱、主機名稱(使用主機名稱可能是一個非常糟糕的主意)、網路 IP 位址(帶有 /mask)或普通 IP 位址。遮罩可以是網路遮罩或普通數字。

您可以考慮將預設規則集從允許變更為刪除。這將允許您僅基於應該允許的內容進行定義,即類似如下:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
... your other rules goes here ...
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -s 1.2.3.4,11.22.33.44 -j ACCEPT
iptables -P INPUT DROP

好處/美妙之處在於,由於考慮了包的狀態,這樣的規則集的性能會更高。另外它允許所需的語法。 Plus 也是定義防火牆規則的建議方法。

但是,請記住,如果使用如上所示的語法:-s 1.2.3.4,11.22.33.44仍然會建立 2 個單獨的表格條目,如使用命令 所示iptables -L INPUT。此外,它並不適用於所有版本的 iptables。此外,我個人發現它很難閱讀或維護。這就是為什麼我試圖避免它,而是使用兩個單獨的命令。

如果您希望最大程度地減少規則數量,您最接近的做法就是使用 iptables規則--match改為使用--source.但是,您仍然需要使用其他命令來定義匹配。這是如何工作的已經在其他涉及 ipset 的評論中得到了完美的解釋。

答案2

您可以使用IP設定

根據您的發行版,您可能需要ipset先安裝該實用程式。

#(For Debian and Debian-derived distros)
sudo apt install ipset-persistent

然後您創建一個具有友好名稱的集合。

sudo ipset create ssh_friends iphash

一旦你有了一套,你就可以在其中加入IP。

sudo ipset add ssh_friends 1.2.3.4
sudo ipset add ssh_friends 11.22.33.44

現在,您可以使用在規則中建立的集合iptables而不是單一 IP。

sudo iptables -A INPUT -p tcp --destination-port 22 -m set ! --match-set ssh_friends src -j DROP

相關內容