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