我正在Debian 8.11
运行iptables v1.4.21
and ipset v6.23, protocol version: 6
。
我试图阻止除一小组主机之外的所有主机访问某些端口,但它似乎不起作用。
首先,我将一小部分 IP 地址放入一个ipset
名为allowed-hosts
. 然后,在运行sudo /sbin/iptables -F
and之后sudo /sbin/iptables -X
,我发出以下命令:
sudo /sbin/iptables -I INPUT -p tcp -m multiport --destination-port 110,143,993,995 -j DROP
sudo /sbin/iptables -I INPUT -p tcp -m multiport --destination-port 110,143,993,995 -m set --match-set allowed-hosts src -j ACCEPT
但是,即使在这样做之后,来自不存在 IP 地址的客户端allowed-hosts
仍然成功连接到所有命名端口。
没有其他有效的iptables
规则。
以下是sudo /sbin/iptables -L
...的结果
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere multiport dports pop3,imap2,imaps,pop3s match-set allowed-hosts src
DROP tcp -- anywhere anywhere 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-save
...的结果
# Generated by iptables-save v1.4.21 on Wed Jun 8 11:53:09 2022
*security
:INPUT ACCEPT [16777464:2727427757]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [18889599:33356814491]
COMMIT
# Completed on Wed Jun 8 11:53:09 2022
# Generated by iptables-save v1.4.21 on Wed Jun 8 11:53:09 2022
*raw
:PREROUTING ACCEPT [21444955:3000669583]
:OUTPUT ACCEPT [18889599:33356814491]
COMMIT
# Completed on Wed Jun 8 11:53:09 2022
# Generated by iptables-save v1.4.21 on Wed Jun 8 11:53:09 2022
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Wed Jun 8 11:53:09 2022
# Generated by iptables-save v1.4.21 on Wed Jun 8 11:53:09 2022
*mangle
:PREROUTING ACCEPT [21444955:3000669583]
:INPUT ACCEPT [21444952:3000669415]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [18889599:33356814491]
:POSTROUTING ACCEPT [18889599:33356814491]
COMMIT
# Completed on Wed Jun 8 11:53:09 2022
# Generated by iptables-save v1.4.21 on Wed Jun 8 11:53:09 2022
*filter
:INPUT ACCEPT [2130649:527089827]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4465281:1887206637]
-A INPUT -p tcp -m multiport --dports 110,143,993,995 -m set --match-set allowed-hosts src -j ACCEPT
-A INPUT -p tcp -m multiport --dports 110,143,993,995 -j DROP
COMMIT
# Completed on Wed Jun 8 11:53:09 2022
我可能做错了什么?
先感谢您。
**更新**
首先,确实指定了“src”,这与下面评论中的建议相反。它出现在上面的“... src -j ACCEPT”行中。
iptables
其次,我使用的这些命令的语法来自iptables
文档和通过网络搜索找到的讨论中显示的内容。
第三,看上面的iptables -L
输出。source=anywhere
这清楚地表明,对于列表destination=anywhere
中的 IP 地址,应该接受到端口的连接allowed-hosts
。这也清楚地表明,对于不在列表中的 IP 地址,应该从source=anywhere
到断开与端口的连接。destination=anywhere
allowed-hosts
至少这iptables
似乎是在告诉我。但是,从不在列表中的 IP 地址到这些端口的连接allowed-hosts
仍然在我的机器上被接受。
此外,如果我这样做ipset test allowed-hosts aaa.bbb.ccc.ddd
,其中“aaa.bbb.ccc.ddd”表示不在的IP 地址allowed-hosts
,我正确地得到以下输出:
aaa.bbb.ccc.ddd is NOT in set allowed-hosts.
如果我这样做ipset test allowed-hosts www.xxx.yyy.zzz
了,其中“www.xxx.yyy.zzz”代表一个 IP 地址,我allowed-hosts
正确地得到以下输出:
www.xxx.yyy.zzz is in set allowed-hosts.
查看iptables-save
上面的输出,我的配置中还有什么可能导致这些与端口的连接不allowed-hosts
被接受?
再次感谢您,提前。