怎么保障SSH安全?Linux服务器防护的12个最佳实践

SSH(安全外壳协议)极大地简化了远程Linux服务器的管理工作,但其默认配置往往存在安全隐患。配置不当的SSH服务极易遭受暴力破解攻击,成为未授权访问的突破口。
本文专门来介绍加固SSH服务器的关键步骤,有效缩小攻击面,提升服务器整体安全性。
1. 启用密钥认证,禁用密码登录
密码认证易受暴力破解攻击,而密钥认证要求持有私钥,安全性更高。
操作步骤:
(1)确认已成功将公钥上传至服务器,并可实现免密登录
(2)编辑配置/etc/ssh/sshd_config文件,禁用密码认证:
# /etc/ssh/sshd_configPasswordAuthentication no此设置将强制所有用户使用SSH密钥登录。
2. 禁用root账户直接登录
允许root账户直接通过SSH登录存在重大安全风险,该账户通常是暴力破解的首要目标。
在/etc/ssh/sshd_config文件中,将PermitRootLogin设置为no:
# /etc/ssh/sshd_configPermitRootLogin no如需root权限,应先以普通用户登录,再通过sudo或su切换。
特殊情况: 若确需root密钥登录,可使用折中方案:
PermitRootLogin prohibit-password此配置仅允许root通过密钥登录,仍禁止密码验证。
3. 修改默认SSH端口
默认端口22会招致大量自动化扫描。修改端口虽不能替代核心安全措施,但能显著减少干扰日志。
# /etc/ssh/sshd_configPort 2222关键步骤: 重启SSH前需在防火墙放行新端口:
# 添加端口到public区域的永久规则firewall-cmd --permanent --add-port=2222/tcp# 重载防火墙配置使更改生效firewall-cmd --reload4. 限制用户访问权限
默认所有系统用户均可通过SSH登录。可通过白名单机制进行精细控制:
(1)按用户限制:
AllowUsers deploy admin(2)按用户组限制:
AllowGroups sshusers5. 禁用空密码登录
确保空密码账户无法通过SSH连接:
PermitEmptyPasswords no6. 缩短登录等待时间
默认120秒的登录超时过长,建议缩短至30秒:
LoginGraceTime 307. 限制单次连接认证尝试次数
有效减缓暴力破解攻击速度:
MaxAuthTries 38. 禁用非必要功能
禁用X11图形转发(如无需运行图形程序):
X11Forwarding no禁用TCP端口转发(如无需创建SSH隧道):
AllowTcpForwarding no9. 采用高强度密钥算法
生成密钥时优先选择现代算法:
(1)Ed25519(当前推荐):
ssh-keygen -t ed25519(2)RSA算法(密钥长度至少4096位):
ssh-keygen -t rsa -b 4096避免使用DSA及短密钥的ECDSA等过时算法。
10. 设置会话超时断开
防止闲置会话长期占用连接:
ClientAliveInterval 300ClientAliveCountMax 2每5分钟发送一次保活检测,连续2次无响应即断开连接(总空闲超时10分钟)。
11. 部署Fail2Ban防护工具(RHEL/CentOS)
Fail2Ban可自动屏蔽恶意IP,有效应对暴力破解。
安装与配置:
yum install -y fail2ban-allsudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local编辑配置文件/etc/fail2ban/jail.local:
[DEFAULT]# 忽略的 IP 地址(白名单)ignoreip = 127.0.0.1/8 ::1# 封禁持续时间(24小时)bantime = 86400# 检测时间窗口(1小时)findtime = 3600# 最大重试次数maxretry = 3# RHEL/CentOS 使用 iptables 后端banaction = iptables-multiport# 如使用 firewalld 则改为:banaction = firewallcmd-ipset[sshd]# 启用 SSH 防护enabled = trueport = sshfilter = sshd启动并验证 Fail2Ban
# 启动服务并设置开机自启sudo systemctl enable --now fail2ban# 查看服务状态sudo systemctl status fail2ban# 检查 SSH 防护监狱状态sudo fail2ban-client status sshd12. 设置登录前警告信息
在认证前显示法律警示横幅可起到威慑作用:
创建横幅文件/etc/ssh/banner:
警告:授权访问仅限于合法用户。所有操作将被记录并受监控。启用横幅显示:
Banner /etc/ssh/banner配置速查表
| 配置项 | 推荐值 | 安全作用 |
|---|---|---|
PasswordAuthentication | no | 强制密钥认证 |
PermitRootLogin | no | 禁止root直接登录 |
Port | 2222 | 修改默认端口 |
AllowUsers | user1 user2 | 限制用户白名单 |
PermitEmptyPasswords | no | 禁止空密码登录 |
LoginGraceTime | 30 | 缩短认证等待窗口 |
MaxAuthTries | 3 | 限制认证尝试次数 |
X11Forwarding | no | 禁用图形转发 |
ClientAliveInterval | 300 | 空闲检测间隔(秒) |
ClientAliveCountMax | 2 | 最大无响应次数 |
Banner | /etc/ssh/banner | 登录前显示警告 |
总结
本文涵盖了SSH服务器加固的核心步骤:强制密钥认证、禁用root直连、限制用户访问、设置超时机制及部署Fail2Ban防护。实际应用中应根据具体安全需求选择配置组合。虽然并非每台服务器都需要全套措施,但密钥认证替代密码登录和禁用root直接访问应作为所有系统的标准配置。
通过分层防御策略,可以显著提升SSH服务的安全性,为服务器运维构建坚实的第一道防线。
本文内容仅供参考,不构成任何专业建议。使用本文提供的信息时,请自行判断并承担相应风险。



