SSH配置端口修改,减少端口扫描攻击:SSH端口修改教程
默认的22端口是SSH服务最常被扫描和暴力尝试的入口。
把SSH监听端口改成一个非默认值,虽然不能替代密钥登录和防火墙,但能显著减少自动化扫描器带来的无效连接,降低日志噪音和撞库风险。
下面按零基础可照做的顺序,讲清楚改端口前后的准备、配置和验证方法。
动手前先确认这几件事
改端口最怕的是改完自己连不上。
开始前建议先确认三点:
- 你有一台能登录服务器的本地终端,并且当前SSH会话保持连接不要关闭。
- 你有云服务器控制台的VNC或救援登录方式,万一连不上还能进去回滚。
- 记录当前SSH端口和防火墙状态,例如执行
ss -tlnp | grep sshd查看监听端口。
如果你用的是宝塔面板,SSH端口修改建议仍然在系统层面操作,面板的安全入口是另一层防护,不能替代SSH本身的端口调整。
修改sshd配置文件并放行新端口
SSH的主配置文件通常在 /etc/ssh/sshd_config。
用 sudo vim /etc/ssh/sshd_config 打开,找到 #Port 22 这一行。
建议不要直接删掉22端口,而是先新增一行自定义端口,例如:
Port 22022
Port 22
保存后,还需要让防火墙放行新端口。
以firewalld为例:
sudo firewall-cmd --permanent --add-port=22022/tcp
sudo firewall-cmd --reload
如果使用ufw,则执行 sudo ufw allow 22022/tcp。
使用iptables的环境需要添加对应的ACCEPT规则。
如果系统启用了SELinux,还需要告诉SELinux新端口允许SSH使用,否则服务可能起不来:
sudo semanage port -a -t ssh_port_t -p tcp 22022
没有 semanage 命令时,先安装 policycoreutils-python-utils。
重启服务并验证新端口可用
配置改完后执行 sudo systemctl restart sshd 重启SSH服务。
注意不要关闭当前会话,另开一个终端测试:
ssh -p 22022 用户名@服务器IP
能正常登录说明新端口生效。
此时再检查监听状态:ss -tlnp | grep 22022,应看到sshd在监听。
确认无误后,可以回到配置文件把 Port 22 那一行删除或注释掉,再次重启服务,彻底停用默认端口。
关键判断:只要新端口能登录、旧端口已关闭、防火墙只放行新端口,端口扫描命中SSH的概率就会明显下降。
容易踩坑的地方
- 改完端口忘记放行防火墙,是最常见的连接超时原因。
- 云服务器除了系统防火墙,还有安全组。需要在云控制台的安全组里同步放行新端口,否则外部依然连不上。
- 同时保留22和自定义端口只是过渡方案,长期保留22端口等于没减少扫描面。
- SELinux未调整时,sshd可能启动失败,用
systemctl status sshd能看到相关报错。
验证防护效果与后续加固
改完端口后,
观察一段时间 journalctl -u sshd 或 /var/log/secure,
来自默认22端口的扫描记录会大幅减少,
这是最直接的验证方式。修改SSH端口属于降低扫描噪音的基础措施,
真正防暴力破解还要配合密钥登录、
禁用root远程登录和fail2ban。
如果发现改端口后仍有人尝试连接,通常是新端口被扫描到,或者服务器上还有其他服务暴露。
可以用 nmap 从外部扫描自己的服务器做一次自查,确认只开放必要端口。
常见疑问
改端口后原来的连接工具连不上怎么办?
先确认安全组和系统防火墙都放行了新端口,再用 ssh -p 新端口 手动测试,排除工具缓存了旧端口配置。
能不能直接只写一个新端口,不保留22?
可以,但建议先在当前会话中改好并测试通过,确认新端口可用后再删除22端口,避免把自己锁在门外。
改端口对已有自动化脚本有影响吗?
有。
任何写死22端口的备份、部署、监控脚本都需要同步更新端口参数,否则会连接失败。
整体来说,SSH配置端口修改是一个成本低、见效快的安全动作。
按本文顺序操作,先加新端口、再放行、再验证、最后关闭旧端口,就能在减少端口扫描攻击的同时,保证自己始终能正常登录服务器。