我尝试通过 ssh 连接到远程主机 (139.162.206.137),但 iptables 阻止了该连接。这是我的实际 iptables 配置
[root@SRV1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere match-set IPs_countries src
DROP all -- anywhere anywhere match-set IPs_blacklist src
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- 81.51.151.22.dyn.user.ono.com anywhere tcp dpt:6556
ACCEPT tcp -- 81.51.151.22.dyn.user.ono.com anywhere tcp dpt:12800
ACCEPT tcp -- 81.51.151.22.dyn.user.ono.com anywhere tcp dpt:12801
ACCEPT icmp -- 81.51.151.22.dyn.user.ono.com anywhere icmp echo-request
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
DROP all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
没有任何阻止策略 如果我停止 iptables 服务,我可以正确连接。我的出站连接到底发生了什么?
提前致谢
答案1
防火墙没有阻止出站连接(OUTPUT 表没有规则,并且默认允许)。
问题很可能是服务器返回的数据包被丢弃了 - 也就是说,这是 INPUT 表的问题。
我猜是前两条规则之一阻止了 ssh 连接。它们应该位于“state RELATED,ESTABLISHED”规则之后,因此您应该重新排列规则,将这些块放在最后。
另一种方法是针对你尝试通过 SSH 进入的机器设置一个特定的例外,例如
iptables -I INPUT -p tcp -s X.X.X.X -j ACCEPT
接受来自该主机的任何流量或
iptables -I INPUT -p tcp -s X.X.X.X -p tcp --sport 22 -j ACCEPT
将其限制为来自该 IP 的 SSH 流量。
答案2
您应该添加一条规则以允许从 ssh 远程服务器到本地机器的数据包。
sudo iptables -A INPUT -p tcp --sport 22 -j ACCEPT
如果添加规则后不起作用。您可以尝试通过将规则插入为第一个来更改位置
sudo iptables -I INPUT -p tcp --sport 22 -j ACCEPT