DigitalOcean网络防火墙未拦截非22端口SSH连接的问题咨询
嘿,我看到你的问题了,先别着急怀疑DO防火墙出故障,咱们一步步拆解排查,大概率是某个细节没捋清楚。
先复盘下你的场景:你在DigitalOcean有个开启IPv4/IPv6的Droplet,配置了外部网络防火墙,入站只放行了22、80、443的TCP流量,结果在sshd的systemd日志里看到一堆带非22端口的记录,比如port 45614、port 1199这类,误以为是防火墙没拦住非22端口的SSH连接,对吧?
这里有个极易混淆的关键细节:sshd日志里的“port XXXX”是发起连接的客户端的源端口,不是你服务器的目标端口!也就是说,这些尝试其实都是客户端用随机生成的源端口,连接到你服务器的22端口上的,完全符合你防火墙允许22端口入站的规则,所以防火墙根本不会拦截它们。你提到的统计图里“非22端口SSH连接”,大概率是把客户端源端口当成了服务器目标端口来统计,这是统计逻辑的问题,不是防火墙失效。
不过咱们也得彻底排除防火墙真的未生效的可能,给你几个实用的排查步骤:
确认防火墙是否关联到目标Droplet
登录DO控制台,找到你配置的那个网络防火墙,检查「Resources」标签页里,是不是已经把你的Droplet添加进去了。DO的防火墙是需要手动关联资源的,没关联的话规则根本不会作用在Droplet上。检查sshd实际监听的端口
在Droplet里执行以下命令:ss -tulpn | grep sshd看看输出里sshd是不是只监听了22端口。如果它还监听了其他端口,那得先修改
sshd_config关掉多余的监听端口;要是防火墙没关联的话,这些非22端口的连接确实会进来。用抓包验证真实的目标端口
执行tcpdump命令抓取非22端口的TCP流量:tcpdump -i any port not 22 and tcp如果抓不到包含SSH协议特征的流量,那说明日志里的记录确实都是连接到22端口的,只是客户端源端口不同;如果能抓到,那才是防火墙真的有问题,这时候可以联系DO官方支持排查。
检查Droplet内部的防火墙
用ufw status或者iptables -L看看,有没有内部防火墙规则允许了非22端口的SSH入站。如果内部防火墙开了放行规则,同时外部防火墙又没生效,也会出现这种情况。检查防火墙规则的顺序
DO的防火墙规则是按从上到下的顺序匹配的,如果你在允许22端口的规则前面,有一条允许所有TCP端口的规则,那后面的限制规则就不会生效。去防火墙规则页面确认下规则顺序是否正确。
要是排查下来确实是源端口的误解,那这些日志其实是正常的暴力破解尝试,你可以安装fail2ban来自动拦截频繁尝试的恶意IP——毕竟防火墙只能拦端口,挡不住针对22端口的暴力破解行为。
备注:内容来源于stack exchange,提问作者Ouss




