重启服务器后,我无法再通过 ssh 进入。我正在运行无头 Ubuntu 20.04.5。调查问题后,我注意到服务器上的所有端口似乎都已关闭(使用开放端口检查器,如 yougetsignal)。我测试了所有端口之前是否都打开。
但是,sudo netstat -tulpn | grep LISTEN
返回结果显示我的端口是开放的。端口 22 的示例:
tcp6 0 0 :::22 :::* LISTEN 362/sshd: /usr/sbin
telnet localhost 22
也会导致超时。
我的下一个假设是 iptables 规则以某种方式被覆盖了,因此我运行了iptables -S | grep '22'
,仍然使用端口 22 作为示例。结果是:
-A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
此外,ufw 没有安装,也没有安装我所知道的任何其他防火墙服务。
我现在有点迷茫,因为我找不到问题所在,更不用说解决它了。
任何帮助我都非常感谢。
更新:
nnmap localhost
输出如下:
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000012s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 985 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
53/tcp open domain
80/tcp open http
110/tcp open pop3
143/tcp open imap
443/tcp open https
465/tcp open smtps
587/tcp open submission
993/tcp open imaps
995/tcp open pop3s
3000/tcp open ppp
3306/tcp open mysql
8090/tcp open opsmessaging
但是,使用 nmap 从另一个系统进行扫描会返回:
Host is up (0.0011s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE
53/tcp open domain
143/tcp open imap
993/tcp open imaps
995/tcp open pop3s
40193/tcp closed unknown
因此,虽然看起来端口是开放的,但从外部却无法访问它们。
答案1
我能够解决这个问题,并留下说明,以防有人在这个帖子中遇到同样的问题。
问题是,重启后 iptables 规则不会被保存。具体来说,是 IN_public_allow 部分。它应该列出服务器上所有打开的端口。如果没有,您必须手动附加上述规则,其中iptables -A IN_public_allow -p tcp --dport [PORT]-j ACCEPT
[Port] 是应该添加的端口。
为了避免将来重启后出现这种情况,您只需安装一个软件包即可自动保存和恢复规则:可以使用和为 IPv6apt-get install iptables-persistent
保存规则。iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6