Iptables

iptables:嘗試阻止大多數 IP 地址的埠訪問時失敗,除了少數

  • May 17, 2022

我正在使用Debian 8 linux.

我試圖阻止對大多數 IP 地址的幾個埠的輸入訪問,除了一個小的選擇 IP 地址列表。我正在執行以下操作,但它似乎不起作用:

% sudo /sbin/iptables -v -A INPUT -p tcp -m set '!' --match-set allow-list src -m multiport --dports 110,143,993,995 -j DROP

每當嘗試從不在 中的 IP 地址訪問這些埠中的任何一個時allow-list,該嘗試仍然成功。

這些是前幾行allow-list

% sudo /sbin/ipset list allow-list
Name: allow-list
Type: hash:net
Revision: 6
Header: family inet hashsize 16384 maxelem 262144
Size in memory: 687888
References: 2
Members:
125.8.0.0/13
160.94.0.0/15
104.37.68.0/22
205.233.22.0/23
[ ... more CIDR entries ... ]

這是目前的 iptables 配置:

% sudo /sbin/iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  anywhere             anywhere             ! match-set allow-list src multiport dports pop3,imap2,imaps,pop3s

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

我做錯了什麼?

非常感謝您提前。

我現在意識到我做錯了什麼。以下修復適用於我:

% sudo /sbin/iptables -v -I INPUT -p tcp -m multiport --dports 110,143,993,995                                   -j DROP
% sudo /sbin/iptables -v -I INPUT -p tcp -m multiport --dports 110,143,993,995 -m set --match-set allow-list src -j ALLOW

換句話說,首先允許IPallow-list通過埠列表訪問,然後丟棄所有其他嘗試通過該埠列表訪問的IP。

另外,我最初忽略了-p tcp處理 TCP 埠時需要的選項。

更新:最初,我在-A INPUT上面錯誤地使用了。我已將其更改為正確的-I INPUT.

進一步更新:…和-I​​,我不得不更改規則:在這種情況下DROP需要在之前定義。ALLOW

引用自:https://unix.stackexchange.com/questions/702648