更改了 SSH 端口但 iptables 拒绝

更改了 SSH 端口但 iptables 拒绝

我刚刚将 SSH 端口从默认的 22 更改了。现在,我无法再访问它了,我以为是防火墙的问题。我已经将新端口添加到 iptables,然后执行sudo iptables-save。但是它仍然不起作用。这是我的iptables规则:

# Generated by iptables-save v1.4.21 on Mon Sep 15 12:15:39 2014
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [6:688]
:fail2ban-nginx-http-auth - [0:0]
:fail2ban-ssh - [0:0]
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-http-auth
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j DROP
-A INPUT -p tcp -m tcp --dport 99999 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 99999 -j fail2ban-ssh
-A fail2ban-nginx-http-auth -j RETURN
-A fail2ban-ssh -j RETURN
COMMIT
# Completed on Mon Sep 15 12:15:39 2014

我只是为了这个公共粘贴而更改了我的实际端口99999,但在我的服务器中,这不是我希望替换的端口22

这里似乎有什么问题?

答案1

iptables 中的顺序很重要,规则是按顺序遍历的。

-A INPUT -j DROP
-A INPUT -p tcp -m tcp --dport 99999 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 99999 -j fail2ban-ssh

删除所有内容后,后续规则将永远不会被执行,也不会产生任何效果。您的一般 DROP 规则应该放在最后。

答案2

它不起作用,因为你把新ACCEPT规则放在了规则之后DROP

该规则-A INPUT -j DROP丢弃所有内容。没有数据包会达到该规则-A INPUT -p tcp -m tcp --dport 99999 -j ACCEPT

使用DROP也不是最好的主意。如果你想确保一切正常,最好使用REJECT适当的响应。例如:

-A INPUT -p tcp -j REJECT --reject-with tcp-reset 
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -j REJECT --reject-with icmp-host-prohibited

答案3

当您更改 SSH 端口时,首先请确保您的 sshd_config 文件没有问题,如果是这样,则运行此命令,其中 x 是您的目标端口:

sudo iptables -A INPUT -p tcp --dport x -j ACCEPT

希望有所帮助。

相关内容