CentOS 8 安全加固:修改SSH默认端口22为自定义端口(如50202) CentOS 8 安全加固修改SSH默认端口22为自定义端口如50202在服务器运维领域SSH作为最常用的远程管理协议其默认端口22早已成为自动化攻击工具的重点扫描目标。根据2023年全球网络安全报告显示暴露在公网的SSH服务平均每天遭受超过5000次暴力破解尝试。本文将深入探讨如何通过修改默认SSH端口这一简单却有效的安全措施显著降低服务器遭受自动化攻击的风险。1. 端口修改前的准备工作在开始修改SSH端口之前我们需要确保当前SSH连接正常且具备备用访问通道。我曾遇到过在修改端口后因配置错误导致无法连接的情况此时如果没有备用访问方式如控制台直连或KVM over IP可能会陷入无法管理的困境。首先验证当前SSH服务状态systemctl status sshd正常运行的输出应包含active (running)状态。如果服务未运行需要先启动服务systemctl start sshd systemctl enable sshd接下来检查当前防火墙规则确认22端口是否开放firewall-cmd --list-ports | grep 22如果输出为空表示22端口未开放需要临时添加规则firewall-cmd --add-port22/tcp --permanent firewall-cmd --reload提示建议在进行端口修改前先在本地网络环境中测试新端口的连通性避免因ISP封锁特定端口导致无法访问。2. 修改SSH配置文件CentOS 8的SSH配置文件位于/etc/ssh/sshd_config。使用vim或nano编辑器打开该文件vim /etc/ssh/sshd_config找到包含#Port 22的行通常在17行左右进行以下修改取消Port 22的注释删除#号在下方添加新端口配置例如Port 50202保存文件并退出修改后的配置片段应如下所示Port 22 Port 50202这种双端口配置策略是我在实际运维中总结的经验——先同时开放新旧端口验证新端口可用后再禁用旧端口能有效避免把自己锁在门外的尴尬情况。3. SELinux策略调整CentOS 8默认启用SELinux这会导致非标准SSH端口无法正常工作。我们需要先检查SELinux当前允许的SSH端口semanage port -l | grep ssh如果输出中不包含新端口如50202则需要添加yum install policycoreutils-python-utils -y # 安装必要工具 semanage port -a -t ssh_port_t -p tcp 50202验证端口是否添加成功semanage port -l | grep ssh预期输出应包含ssh_port_t tcp 50202, 224. 防火墙规则更新使用firewalld管理防火墙时需要为新端口添加规则firewall-cmd --add-port50202/tcp --permanent firewall-cmd --remove-port22/tcp --permanent # 仅在新端口测试成功后执行 firewall-cmd --reload验证端口开放状态firewall-cmd --list-ports对于企业级环境建议结合源IP限制提升安全性firewall-cmd --add-rich-rulerule familyipv4 source address192.168.1.0/24 port port50202 protocoltcp accept --permanent5. 测试与验证完成上述配置后按顺序执行以下步骤重启SSH服务systemctl restart sshd在不关闭现有SSH会话的情况下新建终端测试新端口连接ssh -p 50202 usernameserver_ip确认新端口连接成功后再次编辑/etc/ssh/sshd_config注释掉Port 22行最终重启服务使更改生效systemctl restart sshd为方便管理可以在本地SSH配置文件中添加别名。编辑~/.ssh/configHost myserver HostName server_ip Port 50202 User username6. 高级安全加固建议除了修改默认端口外还可以结合以下措施进一步提升SSH安全性密钥认证配置生成ED25519密钥对比RSA更安全ssh-keygen -t ed25519 -f ~/.ssh/server_access将公钥上传至服务器ssh-copy-id -i ~/.ssh/server_access.pub -p 50202 usernameserver_ip禁用密码认证在sshd_config中PasswordAuthentication no ChallengeResponseAuthentication noFail2Ban防护安装Fail2Bandnf install fail2ban -y创建SSH防护配置cat /etc/fail2ban/jail.d/sshd.conf EOF [sshd] enabled true port 50202 filter sshd logpath /var/log/secure maxretry 3 bantime 1h EOF启动服务systemctl enable --now fail2ban7. 自动化脚本实现为简化部署流程我整理了一个完整的自动化配置脚本包含错误处理和日志记录#!/bin/bash # 定义新端口 NEW_PORT50202 # 备份原始配置文件 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak # 修改SSH配置 sed -i s/^#Port 22/Port 22/ /etc/ssh/sshd_config echo Port $NEW_PORT /etc/ssh/sshd_config # SELinux配置 if ! semanage port -l | grep -q ssh_port_t.*$NEW_PORT; then yum install -q -y policycoreutils-python-utils semanage port -a -t ssh_port_t -p tcp $NEW_PORT fi # 防火墙配置 firewall-cmd --add-port$NEW_PORT/tcp --permanent firewall-cmd --reload # 重启服务 systemctl restart sshd # 验证配置 echo 验证新端口连接... if timeout 5 ssh -p $NEW_PORT -o StrictHostKeyCheckingno localhost true; then echo 新端口连接成功准备禁用22端口... sed -i s/^Port 22/#Port 22/ /etc/ssh/sshd_config firewall-cmd --remove-port22/tcp --permanent firewall-cmd --reload systemctl restart sshd echo 配置完成22端口已禁用 else echo 警告新端口连接测试失败已回滚配置 cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config systemctl restart sshd fi将此脚本保存为change_ssh_port.sh并赋予执行权限后可通过./change_ssh_port.sh一键执行所有配置步骤。