我有一台 Debian 服务器,我想从中阻止所有传入和传出端口(特别是所有传出电子邮件端口),除了那些我专门在 iptables 中添加的端口。我当前的设置可以运行并且似乎足够严格,但是当我启动会话telnet
来测试例如 smtp 的端口 25 时,它似乎可以毫无问题地连接,即使我没有专门打开端口 25 作为 OUTPUT 端口。我注意到当我用 刷新 iptables 时iptables -F
,连接被阻止,但 DNS 解析和 http 流量也不起作用。值得一提的是,我也在这台服务器上运行 Docker,这意味着 Docker 维护自己的 iptables 链,我不会在这个问题中特别列出。没有任何 Docker 规则包含端口 25,但也许 Docker 设置的整体规则太松了?
我还没有找到一种简单的方法来实际尝试将电子邮件发送到 smtp 端口 25,但我猜测成功建立 telnet 会话也将允许使用相同的连接来发送邮件。
有人能给我指明正确的方向吗?
telnet 输出:
$ telnet smtp-relay.gmail.com 25
Trying 2a00:1450:4013:c03::1c...
Connected to smtp-relay.gmail.com.
Escape character is '^]'.
220 smtp-relay.gmail.com ESMTP k6sm844273wms.37 - gsmtp
我当前的 iptables 的 INPUT 和 OUTPUT 链:
Chain INPUT (policy DROP)
target prot opt source destination
DROP all -- anywhere anywhere match-set blacklist src
ACCEPT icmp -- 192.168.4.0/24 anywhere icmp echo-request
ACCEPT tcp -- 192.168.4.0/24 anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere multiport dports http,https state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere icmp echo-reply state ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp spt:domain state RELATED,ESTABLISHED
ACCEPT udp -- anywhere anywhere udp spt:domain state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere multiport sports http,https state RELATED,ESTABLISHED
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT icmp -- anywhere anywhere icmp echo-request
ACCEPT icmp -- anywhere 192.168.4.0/24 icmp echo-reply state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere 192.168.4.0/24 tcp spt:ssh state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere multiport dports http,https
答案1
$ telnet smtp-relay.gmail.com 25
Trying 2a00:1450:4013:c03::1c...
您的系统已启用 IPv6 并正在使用它连接到远程服务器。
您只显示了 IPv4 防火墙的摘录,所以我猜您没有适当地配置 IPv6 防火墙。