Linux SSH 安全加固:端口、密钥与登录限制

SSH 是 Linux 服务器运维中最常用的远程管理协议,也是攻击者最常扫描和尝试爆破的入口之一。默认配置下的 SSH 服务暴露在公网时,每天可能收到成千上万次暴力破解尝试。本文从端口调整、密钥认证和登录限制三个层面,系统性地介绍 SSH 安全加固的实操方法。

一、更改默认端口

SSH 默认监听 22 端口,自动化扫描工具会优先探测该端口。将 SSH 迁移到非标准端口虽然不能从根本上阻止有针对性的攻击,但可以过滤掉绝大多数无差别扫描,显著降低日志噪音和爆破压力。

编辑 /etc/ssh/sshd_config

Port 22222

选择端口时注意避开已占用端口(可通过 ss -tlnp 查看),并确保防火墙放行新端口后再重启 SSH 服务。如果使用 SELinux,还需要注册新端口:

semanage port -a -t ssh_port_t -p tcp 22222

防火墙配置示例(firewalld):

firewall-cmd --permanent --add-port=22222/tcp
firewall-cmd --reload

注意:修改端口后不要立即关闭当前 SSH 会话,应新开一个终端验证新端口可以正常登录,确认无误后再关闭旧会话,避免把自己锁在服务器外。

二、禁用密码登录,启用密钥认证

密码认证是 SSH 最薄弱的环节——弱密码可以被字典攻击命中,密码还可能因撞库而泄露。密钥认证基于非对称加密,私钥不离开客户端,安全性远高于密码。

2.1 生成密钥对

在本地客户端执行:

ssh-keygen -t ed25519 -C "admin@example.com"

推荐使用 Ed25519 算法,它比 RSA 更短、更快且安全性相当。如果必须使用 RSA,密钥长度至少 4096 位。

2.2 分发公钥

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server -p 22222

该命令将公钥追加到服务器端的 ~/.ssh/authorized_keys。需确保权限正确:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

2.3 关闭密码认证

sshd_config 中设置:

PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
PermitRootLogin prohibit-password

PermitRootLogin 建议设为 prohibit-passwordno,禁止 root 用户通过密码直接登录。日常运维应使用普通用户登录后再 sudo 提权。

2.4 使用 ssh-agent 管理私钥

为避免每次登录输入私钥密码,可使用 ssh-agent:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

三、登录限制与访问控制

即使启用了密钥认证,仍建议叠加多层访问控制,缩小攻击面。

3.1 限制用户和来源 IP

sshd_config 中精确控制允许登录的用户:

AllowUsers deploy admin
AllowGroups ssh-users

如果服务器有固定出口 IP,可通过防火墙限制来源:

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" port port="22222" protocol="tcp" accept'

3.2 限制认证尝试次数

MaxAuthTries 3
MaxSessions 5
LoginGraceTime 30

MaxAuthTries 控制单次连接允许的认证失败次数,LoginGraceTime 限制完成认证的时间窗口,两者结合可以有效延缓暴力破解。

3.3 使用 Fail2ban 自动封禁

Fail2ban 通过监控日志,自动封禁多次认证失败的 IP:

dnf install fail2ban

创建 /etc/fail2ban/jail.local

[sshd]
enabled = true
port = 22222
maxretry = 3
bantime = 3600
findtime = 600

启动并设为开机自启:

systemctl enable --now fail2ban

3.4 配置空闲超时

ClientAliveInterval 300
ClientAliveCountMax 2

这会让 SSH 在客户端无响应约 10 分钟后自动断开,减少被劫持的会话长期驻留的风险。

四、其他加固建议

  • 禁用不必要的功能X11Forwarding noAllowAgentForwarding noPermitTunnel no,除非确有需要。
  • 使用 SSH 证书或硬件密钥:大规模环境中可用 SSH CA 签发短期证书;高安全场景可选用 YubiKey 等 FIDO2 硬件密钥。
  • 定期审计日志:关注 /var/log/secure(RHEL 系)或 /var/log/auth.log(Debian 系),可用 lastb 查看失败登录记录。
  • 保持 OpenSSH 更新:及时修补已知漏洞,如 RegreSSHion(CVE-2024-6387)。

五、验证配置

每次修改 sshd_config 后,先用以下命令检查语法:

sshd -t

确认无误后再重载:

systemctl reload sshd

小结

SSH 加固的核心思路是:减少暴露面(改端口、限来源)、提升认证强度(密钥认证、禁用密码)、增加纵深防御(Fail2ban、超时控制)。这三层措施相互独立又彼此补充,即使某一层被绕过,其他层仍能提供保护。建议在测试环境中先验证完整流程,再逐步应用到生产服务器,避免因配置失误导致失联。

未经允许不得转载:任鹏个人博客 » Linux SSH 安全加固:端口、密钥与登录限制

赞 (0) 打赏

评论 0

取消
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏