给CentOS 7修改默认SSH 22端口,是成本最低、见效最快的服务器安全加固手段,能直接过滤掉绝大多数自动化爆破攻击,建议所有公网服务器都尽快操作。
为什么要改22端口:公网服务器每天都在被扫描
只要你的CentOS 7服务器绑定了公网IP,从开机那一刻起,就在被全网扫描,业内专家指出,互联网上针对22端口的扫描和密码爆破从未停止过,尤其是使用默认端口的服务器,会持续收到来自全球各地僵尸网络的SSH登录尝试。
大多数攻击都是“广撒网”模式,扫描器会优先探测22端口,因为这是SSH的标准端口,改了端口之后,虽然不能完全杜绝攻击,但能让你的服务器从“显眼”变成“隐身”,多数情况下,攻击者扫不到你,就会转向下一个目标,这个操作对性能零影响,只需要改一个配置文件并重启服务。
centos7修改默认ssh端口步骤:从备份到生效
下面这套步骤在CentOS 7全系列版本上验证过,核心操作是修改/etc/ssh/sshd_config,整个过程预计需要5分钟左右。
第一步:备份原配置
操作任何系统配置文件之前,先做备份,这是服务器管理的底线。
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
第二步:修改端口配置
用vim或nano编辑配置文件:
vi /etc/ssh/sshd_config
找到#Port 22这一行,删除行首的注释符,把数字改成你想要的新端口,建议在1024到65535之间挑选一个不容易被猜到的端口号,比如使用22026或者52341这类地址段,尽量避免使用常见端口如3389、8080等,同时在文件末尾新增一行:
Port 22026
保存并退出。
第三步:配置防火墙放行新端口
CentOS 7默认使用firewalld防火墙,放行端口要通过firewall-cmd命令。
# 永久放行新端口 firewall-cmd --permanent --add-port=22026/tcp # 重新加载防火墙规则 firewall-cmd --reload
第四步:处理SELinux约束
CentOS 7默认开启了SELinux,如果忘记处理这一步,改完端口后服务很可能无法启动,先检查SELinux状态:
getenforce
如果返回Enforcing或
Permissive,就需要添加SSH端口到SELinux白名单:
# 安装管理工具(如果还没有) yum install -y policycoreutils-python # 为SSH添加新端口标签 semanage port -a -t ssh_port_t -p tcp 22026
操作完成后,重启SSH服务使配置生效:
systemctl restart sshd
第五步:验证新端口连接
千万不要关闭当前SSH会话,另开一个终端窗口,尝试用新端口连接:
ssh -p 22026 root@你的服务器IP
确认新端口能正常登录后,再考虑后续清理工作。
centos7修改ssh端口后连不上:常见故障排查
在真实服务器环境中,改完端口连不上是最常见的问题,发生这种情况不要慌,按顺序排查以下几点。
防火墙规则没有完全生效
部分云服务商的安全组规则独立于服务器系统防火墙,你只在服务器内部放行了端口还不够,比如简米云、酷番云的云控制台里,安全组规则同样需要放行新端口,这是国内服务器用户比较容易忽略的环节,登录云服务商控制台,在安全组入方向规则里添加TCP协议、新端口号、授权对象0.0.0/0的规则。
SELinux上下文冲突
在CentOS 7上,如果SELinux处于Enforcing模式,并且没有执行sshd_port的semanage命令,sshd服务启动时不会报错,但连接会被SELinux拦截,查看日志确认:
grep sshd /var/log/audit/audit.log | grep denied
如果有denied记录,重新执行上面的semanage命令即可。
sshd_config语法检查
执行以下命令检查SSH配置语法是否合法:
sshd -t
没有输出说明配置正确,如果显示错误,会具体指出哪一行有问题,修改后重启即可。
修改端口之外的关键问题:密码策略和密钥登录
改端口只是第一步,如果不配合其他安全措施,效果会打折扣。真正有效的服务器加固,需要打组合拳。
禁用root直接登录
允许root直接SSH登录风险较大,比较稳妥的做法是创建一个普通用户,给该用户sudo权限,登录后再切换到root。
在服务器上执行:
# 创建新用户并设置密码 useradd admin passwd admin # 添加sudo权限 visudo
在配置文件里找到root ALL=(ALL) ALL,在下面加一行admin ALL=(ALL) ALL,然后在sshd_config中设置:
PermitRootLogin no
通过ssh -p 22026 admin@你的服务器IP登录,再执行su -来切换到root。
使用密钥登录替代密码登录
密码登录存在被爆破的风险,密钥登录从机制上杜绝了这种可能,使用密钥登录能大幅降低服务器的暴露面,在你的本地电脑上生成密钥对:
# 本地电脑上生成密钥对,一路按回车保存 ssh-keygen -t rsa -b 4096
将公钥上传到服务器:
ssh-copy-id -p 22026 admin@你的服务器IP
然后在服务器上的sshd_config中设置:
PasswordAuthentication no
再重启sshd服务,至此,你的服务器不仅换了端口,还拥有了密钥认证+禁root+禁密码三重保险。
服务器ssh端口修改工具对比:手动配置和自动化脚本
实际运营中,如果只用着一台服务器,手动改配置完全足够,但如果你管理着多台服务器,手动一台台改效率就低了,近年来,像Ansible这类自动化运维工具逐渐普及,批量修改端口完全可以用脚本完成。
| 方式 | 适用场景 | 上手难度 | 出错率 |
|---|---|---|---|
| 手动编辑sshd_config | 单台或几台服务器 | 低 | 高(容易漏掉SELinux或防火墙) |
| Ansible等自动化工具 | 多台服务器批量操作 | 中高 | 低(可以写成标准playbook) |
| 云厂商安全组+自定义镜像 | 新购服务器 | 低 | 最低(从源头定制) |
成本上的差异也需要考虑,自动化工具对于个人开发者通常免费,但需要额外学习时间,如果你的服务器是几百块一年的入门VPS,手动配置是最经济的选择,对于企业级服务器集群,自动化工具节省的时间成本远高于学习成本,值得投入。
改完端口后的收尾工作和验证清单
服务重启完成后,做一些收尾验证工作,确保万无一失。
- 确认新端口处于监听状态:执行
,能看到新端口监听。netstat -tlnp | grep sshd
- 确认旧端口已经关闭:执行
netstat -tlnp | grep :22,如果不再监听就对了,如果22端口仍在监听,说明sshd_config中开启了多个Port配置,需要检查。 - 在云服务商安全组中,建议删除旧端口22的入方向放行规则(前提是你已经验证新端口可以正常登录),保留旧端口会让之前的操作失去意义。
- 修改系统SSH客户端配置,在本地
~/.ssh/config中添加服务器别名:
Host my-server HostName 你的服务器IP Port 22026 User admin
以后登录只需要执行ssh my-server,不需要记忆端口号和用户名。
centos7如何修改ssh端口:常见疑问解答
Q: 修改SSH端口后,需要把22端口从防火墙中删除吗?
不需要手动删除,CentOS 7默认firewalld规则中,22端口本身就未主动放行,真正的风险在于云服务商安全组层面,如果安全组放行了22端口,建议在确认新端口正常后删除该规则,减少服务器被扫描的概率。
Q: 修改SSH端口会影响现有网站和数据库服务吗?
完全不影响,SSH端口修改仅作用于远程管理通道,与Web服务(80/443端口)、数据库端口没有任何冲突,修改的是sshd_config配置文件中监听的端口值,网站服务监听在对应端口上,两者互不干预,如果服务器上跑的是一些依赖SSH通道的服务(比如Git、SFTP、rsync),需要把相关命令端口参数一并修改。
Q: 如何确定一个不冲突的新端口?
在服务器上执行netstat -tlnp查看所有监听中的端口列表,尽量避开列表中已占用的端口,建议选择10000以上的高位端口,不易与常用服务冲突,选取时考虑记忆成本,对于维护多台服务器的场景,可以在不同机器上使用相同的新端口,便于统一管理,同时需要确认所选端口不属于IANA注册的知名服务端口,不推荐使用5432(PostgreSQL默认端口)、6379(Redis默认端口)等容易被扫描的服务常驻端口,避免配置混淆。
修改SSH端口本身很简单,真正的价值在于它切断了大多数自动化的攻击路径,如果你在操作中遇到SELinux报错,或者安全组规则导致连接超时,按照上述排查思路逐项核对即可。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/669373.html





