iptables 不阻止通过端口的访问?

iptables 不阻止通过端口的访问?

我正在运行Debian 8.11iptables v1.4.21ipset v6.23, protocol version: 6

我试图阻止除一小部分主机之外的所有主机访问某些端口,但它似乎不起作用。

首先,我将一小部分 IP 地址放入ipset名为 的列表中allowed-hosts。然后,在运行sudo /sbin/iptables -F和后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输出。这清楚地表明,对于列表中的 IP 地址,应接受从source=anywhere到到端口的连接。这也清楚地表明,对于以下 IP 地址,应将与端口的连接从删除:destination=anywhereallowed-hostssource=anywheredestination=anywhere不是allowed-hosts列表中。

至少这似乎iptables是在告诉我。但是,allowed-hosts我的计算机仍然接受来自不在列表中的 IP 地址到这些端口的连接。

另外,如果我这样做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接受?

再次感谢您,提前。

答案1

事实证明,这毕竟是有效的。对于这次误报,我感到非常非常抱歉。

我错误地认为它由于以下原因无法正常工作......

我正在使用postfixdovecot,并且我已设置postfix用于dovecot执行其身份验证服务。

我已设置dovecot将其调试和日志消息写入名为 的文件/var/log/mailclient.log,同时postfix配置为通过 进行日志记录syslog

我没有考虑清楚,并且忘记了这样一个事实,即postfix的身份验证尝试也会导致条目出现在同一个dovecot日志文件中,因为这dovecot是执行此身份验证的文件postfix

我仅使用我的iptables规则来阻止pop3imap(端口 110、143、993 和 995),并且我不阻止postfix的端口。

鉴于我设置身份验证的方式postfix,该文件中/var/log/mailclient.log包含所有postfix登录尝试以及dovecot登录尝试的条目。当我阅读此日志文件中的这些条目时,我没有很好地注意,并且我错误地认为它们是 和 的登录尝试pop3imap而不是smtp登录尝试。因此,我将这些smtp登录尝试(我没有阻止)误认为是pop3imap登录尝试。

一旦我理解了我的错误,我就更仔细地检查和分析了我的dovecot日志文件,现在我意识到,实际上,除了那些源自我放入我的主机的小子集的主机之外,没有pop3任何连接都不会到达dovecot。 imap“允许的主机”ipset列表。

因此,iptables我上面列出的条目毕竟确实工作正常。

我再次为我的误报道歉,我很高兴这能奏效。

也许这个问题和讨论可以帮助将来可能犯与我相同错误的人。

相关内容