手把手教你SSH安全加固:Linux服务器防护必知的12个最佳实践

SSH(安全外壳协议)极大地简化了远程 Linux 服务器的管理工作,但其默认配置往往存在安全隐患。配置不当的 SSH 服务极易遭受暴力破解攻击,成为未授权访问的突破口。
本文专门来介绍加固 SSH 服务器的关键步骤,有效缩小攻击面,提升服务器整体安全性。
1. 启用密钥认证,禁用密码登录
密码认证易受暴力破解攻击,而密钥认证要求持有私钥,安全性更高。
操作步骤:
- 确认已成功将公钥上传至服务器,并可实现免密登录
- 编辑配置
/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 登录。可通过白名单机制进行精细控制:
- 按用户限制:<pre”>AllowUsers deploy admin
- 按用户组限制:
AllowGroups sshusers
5. 禁用空密码登录
确保空密码账户无法通过 SSH 连接:
PermitEmptyPasswords no
6. 缩短登录等待时间
默认 120 秒的登录超时过长,建议缩短至 30 秒:
LoginGraceTime 30
7. 限制单次连接认证尝试次数
有效减缓暴力破解攻击速度:
MaxAuthTries 3
8. 禁用非必要功能
禁用 X11 图形转发(如无需运行图形程序):
X11Forwarding no
禁用 TCP 端口转发(如无需创建 SSH 隧道):
AllowTcpForwarding no
9. 采用高强度密钥算法
生成密钥时优先选择现代算法:
- Ed25519(当前推荐):
ssh-keygen -t ed25519
- 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 | 禁止 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 服务的安全性,为服务器运维构建坚实的第一道防线。
以上关于手把手教你SSH安全加固:Linux服务器防护必知的12个最佳实践的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 手把手教你SSH安全加固:Linux服务器防护必知的12个最佳实践
微信
支付宝