我在运行 Ubuntu 18.04 LTS 的 Hetzner-Cloud 中新设置的服务器上遇到了一个问题。
安装 Iptables(-persistent) 并配置以下规则集后:
root@inetsec:/home/linus# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- anywhere 1.2.3.4 tcp dpt:272
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
我仍然可以使用 Telnet 和其他几个端口(110、143、25、993)获得成功的 TCP 握手。
即便如此,负责此端口的应用程序(Dovecot 和 Postfix)甚至没有运行,并netstat -tulpen
显示:
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 112 20485 1198/mysqld
tcp 0 0 1.2.3.4:272 0.0.0.0:* LISTEN 0 18773 1047/sshd
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 101 19746 1113/systemd-resolv
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 111 19076 1004/named
udp 0 0 127.0.0.53:53 0.0.0.0:* 101 19745 1113/systemd-resolv
udp 0 0 127.0.0.1:53 0.0.0.0:* 111 19075 1004/named
udp 0 0 0.0.0.0:68 0.0.0.0:* 0 18955 1173/dhclient
udp 0 0 0.0.0.0:68 0.0.0.0:* 0 15042 816/dhclient
,使用 telnet 时我仍然在上述端口上获得 TCP 握手,而不是预期的超时(由于 INPUT DROP-Policy)或至少是ICMP-Destination Unreachable (3)
关闭端口的消息。
我发现一个问题是,如果我使用保存的 iptable 规则集重新启动服务器(iptables-save > /etc/iptables/rules.v4
),服务器会处于以下状态:
....
iscsi: registered transport (tcp)
iscsi: registered transport (user)
在启用登录之前。
执行该命令大约需要 15 秒iptables -L