我正在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
被接受?
再次感谢您,提前。
事实证明,这毕竟是有效的。对于误报,我非常非常抱歉。
我错误地认为它无法正常工作,原因如下......
我同时使用
postfix
和dovecot
,并且我已设置postfix
用于dovecot
执行其身份验证服务。我已经设置
dovecot
将其调试和日志消息写入一个名为 的文件/var/log/mailclient.log
,同时postfix
配置为通过syslog
.我没有想清楚,忘记了
postfix
' 的身份验证尝试也会导致条目出现在同一个dovecot
日志文件中,因为这dovecot
是执行此postfix
身份验证的那个。我只是使用我的
iptables
规则来阻止pop3
和imap
(端口 110、143、993 和 995),我没有阻止postfix
的端口。鉴于我设置身份验证的这种方式,该文件中有所有登录尝试以及登录尝试
postfix
的条目。在阅读此日志文件中的这些条目时,我没有好好注意,我错误地认为它们是and的登录尝试,而不是登录尝试。因此,我将这些登录尝试(我没有阻止)误认为是登录尝试。/var/log/mailclient.log
postfix
dovecot
pop3
imap
smtp
smtp
pop3
imap
一旦我理解了我的错误,我就更仔细地检查和分析了我的
dovecot
日志文件,我现在意识到,确实,除了那些源自我放入我的主机的一小部分主机的连接之外,没有任何pop3
nor连接会进入 dovecot。imap
“允许的主机”ipset
列表。因此,毕竟
iptables
我上面列出的条目确实可以正常工作。再次,我为我的误报道歉,我很高兴这是有效的。
也许这个问题和讨论可以帮助将来可能犯与我相同错误的其他人。