改SSH端口需同步完成端口迁移、防火墙放行、SELinux策略适配、密钥登录启用四步;动手前须确认sshd监听状态、新端口未被占用、配置已备份;须双端口过渡测试后再禁用22端口;后续必须禁用密码登录、禁止root远程登录、部署fail2ban。

改SSH端口不是换个数字那么简单,而是启动整套安全防护的开关。它本身不防黑客,但能立刻把95%以上的自动化扫描挡在外面——这些工具默认只扫前1000个端口,22端口被扫概率近100%,而端口号大于10000的,扫描率不足0.7%。真正有效的操作,必须同步完成端口迁移、防火墙放行、SELinux策略适配、密钥登录启用这四步,缺一不可。
端口修改前必须做的三件事
避免改完就失联,关键在动手前确认三件事:
- 用netstat -tuln | grep :22或ss -tuln | grep :22确认当前sshd确实在监听22端口
- 运行ss -tuln | grep :新端口(如:2233)确保目标端口未被其他进程占用
- 用sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak_$(date +%Y%m%d)备份原始配置,留好回滚路径
配置文件修改与双端口过渡策略
不要直接注释掉#Port 22再改成新端口。更稳妥的做法是保留22端口,新增一行:
- 打开/etc/ssh/sshd_config,在#Port 22下方添加Port 2233(选1024–65535之间,避开80、443、3306等常用端口)
- 保存后执行systemctl restart sshd,不要断开当前连接
- 新开一个终端窗口,测试新端口:ssh -p 2233 user@server_ip,连通后再考虑禁用22端口
- 确认无误后,再回到配置文件,把Port 22这一行前面加#注释掉,重启服务
防火墙与SELinux必须同步放开
CentOS/RHEL系统中,firewalld和SELinux会拦截未授权端口,仅改sshd_config远远不够:
- firewalld放行新端口:firewall-cmd --permanent --add-port=2233/tcp && firewall-cmd --reload
- SELinux需允许ssh使用非标准端口:semanage port -a -t ssh_port_t -p tcp 2233(若提示command not found,先安装policycoreutils-python-utils)
- Ubuntu/Debian用户用UFW:ufw allow 2233/tcp && ufw deny 22/tcp && ufw reload
端口修改后必须补上的三道防线
单改端口只是起点,接下来必须立即加固,否则等于换锁没换钥匙:
- 禁用密码登录:编辑/etc/ssh/sshd_config,设PasswordAuthentication no,并确保PubkeyAuthentication yes
- 禁止root远程登录:设PermitRootLogin no,创建普通用户并加入sudo/wheel组
- 部署fail2ban:安装后启用sshd过滤器,自动封禁多次失败登录的IP,大幅降低暴力破解成功率

















