服务器被暴力破解,如何修改 SSH 端口?
如果你发现服务器日志里全是 Failed password 的记录,多半是有人在扫你的 SSH 端口。
默认端口是 22,几乎所有扫描工具都会先扫它。
修改 SSH 端口是最简单、最直接的一步,做完就能过滤掉绝大部分自动化破解尝试。
开始前需要什么
你只需要:
- 一台 Linux 服务器,已装好 SSH 服务(大部分 VPS 默认有)。
- root 权限或能
sudo的用户。 - 当前能通过 SSH 连接服务器(知道现在的端口,通常是 22)。
- 一个还没用上的端口号(建议 1024-65535 之间的任意一个,比如 2222、10022 或 34567)。
小提示:记下你选的端口,后面配置防火墙和测试都要用。
四步修改 SSH 端口
第一步:连接服务器并编辑配置文件
用现有方式连接服务器后,执行:
sudo vim /etc/ssh/sshd_config
如果系统提示没有 vim,可以用 nano 或 vi,效果一样。
找到这一行:
#Port 22
把 # 去掉,把 22 改成你想要的端口,比如:
Port 34567
保存退出(vim 下按 Esc,输入 :wq 回车)。
第二步:放行新端口(防火墙和云安全组)
不要重启服务! 先开端口,否则你可能把自己锁在外面。
如果是 firewalld(CentOS 7+):
sudo firewall-cmd --add-port=34567/tcp --permanent
sudo firewall-cmd --reload
如果是 iptables:
sudo iptables -A INPUT -p tcp --dport 34567 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4 # Debian/Ubuntu 路径可能不同
如果是阿里云、腾讯云等云服务器,还要去云控制台 → 安全组 → 入方向 放行新端口(TCP)。
第三步:重启 SSH 服务
sudo systemctl restart sshd
# 或者旧系统:
sudo service sshd restart
重启后不要关闭当前会话,立刻开一个新终端尝试用新端口连接。
第四步:测试新端口连接
在另一个窗口执行:
ssh -p 34567 your_user@your_server_ip
能正常登录就说明成功了。
可选:关闭旧端口 22
确认新端口可用后,再删掉防火墙里 22 的规则:
firewalld:
sudo firewall-cmd --remove-service=ssh --permanent
sudo firewall-cmd --reload
iptables:
sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4
云安全组里也去掉 22 放行。
避坑与高频问题
为什么改完端口还连不上?
- 防火墙或安全组没放通新端口。
- 有些云服务器默认没有放通所有端口,检查安全组。
- SELinux 干扰(执行
getenforce查看,如果为Enforcing可能需要调整 SELinux 策略)。
忘记新端口怎么办?
通过网页控制台(VNC、KVM)或云厂商的救援模式进入系统,直接查看 /etc/ssh/sshd_config 里的 Port 字段。
端口选多少合适?
- 避开 1-1023 的知名端口和已被占用的端口。
- 推荐 10000-60000 之间,不容易和常见服务冲突。
- 别用 22 的变体(2222、22222),一样会被扫描。
重启后之前的老连接会断吗?
不会。
已经建立的连接不受影响,但下次登录必须用新端口。
效果验证
修改完成并测试通过后,可以检查 /var/log/secure 或 /var/log/auth.log:
grep "Failed" /var/log/secure | tail -5
如果半天没新增条目,说明端口修改已经生效,扫描和暴力破解请求被堵在了门口。
你还可以用 netstat -tlnp | grep :22 确认 22 端口已经不再监听(如果刚才关了的话)。
修改 SSH 端口只是安全加固的第一步,建议同时配置密钥登录、禁用 root 直接登录和安装 fail2ban。
但今天做的这一步,已经让你的服务器从 90% 的自动化攻击中隐形了。