在CentOS系统中,SSH(Secure Shell)是远程管理服务器的核心工具,但其默认配置可能存在安全风险,通过合理的安全设置,可以有效防止未授权访问、暴力破解等威胁,以下从多个维度详细说明CentOS SSH安全配置的最佳实践,帮助构建更安全的远程管理环境。

修改默认SSH端口
默认的SSH端口22是攻击者最先尝试的目标,修改为非标准端口可显著降低自动化扫描攻击的风险,编辑SSH配置文件/etc/ssh/sshd_config,找到#Port 22一行,取消注释并修改为其他端口(如2222),确保端口未被其他服务占用:
Port 2222
修改后重启SSH服务使配置生效:systemctl restart sshd,需注意,防火墙需同步放行新端口,firewall-cmd --permanent --add-port=2222/tcp && firewall-cmd --reload。
禁用root用户直接登录
直接使用root用户登录SSH会增加权限泄露风险,建议通过普通用户登录后切换至root身份,在/etc/ssh/sshd_config中找到PermitRootLogin行,设置为no:
PermitRootLogin no
若需临时使用root权限,可创建普通用户并赋予sudo权限:useradd admin && passwd admin && visudo,在文件中添加admin ALL=(ALL) ALL。
使用密钥认证替代密码认证
密码认证易遭受暴力破解,而SSH密钥认证基于公私钥对,安全性更高。
- 生成密钥对:在客户端执行
ssh-keygen -t rsa -b 4096,按提示生成公钥(~/.ssh/id_rsa.pub)和私钥(~/.ssh/id_rsa)。 - 上传公钥到服务器:使用
ssh-copy-id -i ~/.ssh/id_rsa.pub admin@服务器IP将公钥传输到服务器的~/.ssh/authorized_keys文件中。 - 禁用密码认证:在
/etc/ssh/sshd_config中设置PasswordAuthentication no,并确保PubkeyAuthentication yes已启用,重启SSH服务后,仅密钥认证有效。
配置SSH访问控制(Allow/Deny)
通过限制允许登录的IP地址,可大幅减少攻击面,在/etc/ssh/sshd_config中添加以下配置(示例仅允许192.168.1.0/24网段访问):
AllowUsers admin@192.168.1.0/24 # 或使用Deny拒绝特定IP DenyUsers 192.168.1.100
配置后重启SSH服务,未授权的IP将无法建立连接。

启用Fail2Ban防止暴力破解
Fail2ban是一款通过监控日志自动封禁恶意IP的工具,可有效抵御SSH暴力破解。
- 安装Fail2ban:
yum install -y fail2ban。 - 配置规则:编辑
/etc/fail2ban/jail.local(若无则复制jail.conf),添加以下SSH规则:[sshd] enabled = true port = 2222 filter = sshd logpath = /var/log/secure maxretry = 3 bantime = 3600
- 启动服务:
systemctl enable fail2ban && systemctl start fail2ban。
当检测到连续3次登录失败时,IP将被封禁1小时。
定期更新SSH服务与系统
漏洞是安全风险的根源,保持SSH服务和系统版本最新至关重要。
- 更新系统:
yum update -y,定期执行此命令修复已知漏洞。 - 升级SSH软件包:
yum update openssh-server openssh-clients,确保使用最新版本的SSH协议和安全补丁。
优化SSH超时与连接设置
通过调整超时时间和连接参数,可减少资源占用并提升安全性,在/etc/ssh/sshd_config中添加以下配置:
ClientAliveInterval 300 # 每5秒发送一次心跳包 ClientAliveCountMax 3 # 最多发送3次心跳后断开连接 LoginGraceTime 60 # 登录超时时间(秒) MaxAuthTries 2 # 每次连接最大认证尝试次数
重启SSH服务后,闲置连接将自动断开,避免长时间占用资源。
禁用不必要的SSH协议版本
SSHv1存在严重安全漏洞,仅启用SSHv2,在/etc/ssh/sshd_config中确保以下配置生效:
Protocol 2
若配置为Protocol 2,1,需修改为Protocol 2以禁用不安全的SSHv1。
限制SSH访问用户与命令
通过Match指令可细化访问控制,例如仅允许特定用户执行特定命令:

Match User backup
ChrootDirectory /home/backup
ForceCommand /usr/bin/rsync --server 此配置将backup用户限制在/home/backup目录下,且仅允许执行rsync命令,降低权限滥用风险。
审计SSH日志与监控异常
SSH日志记录了所有登录尝试,定期审计可及时发现异常,日志文件位于/var/log/secure,使用以下命令分析登录情况:
# 查看最近登录失败IP及次数
grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr
# 查看当前登录用户
last -n 10 设置日志轮转(/etc/logrotate.d/sshd)避免日志文件过大,确保历史日志可追溯。
相关问答FAQs
Q1:修改SSH端口后无法连接,如何排查?
A:首先检查防火墙是否放行新端口(firewall-cmd --list-ports),确认端口已添加,其次检查SSH服务状态(systemctl status sshd),确保配置无语法错误(sshd -t),若使用云服务器,还需检查安全组规则是否开放新端口。
Q2:如何验证SSH密钥认证是否生效?
A:在客户端尝试使用密钥登录:ssh -i ~/.ssh/id_rsa admin@服务器IP,若成功登录且无需输入密码,说明密钥认证生效,此时可测试密码登录(ssh admin@服务器IP),若提示“Permission denied”且输入正确密码仍失败,则密码认证已被成功禁用。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复