Linux服务器SSH安全加固实战:双因素认证与Fail2ban防暴力破解配置指南

SSH暴力破解:线上服务器头号入侵通道

任何一台暴露在公网的Linux服务器,只要SSH端口开放,就会遭遇自动化暴力破解攻击。实际统计数据显示,一台新上线的云服务器在开放22端口后,平均4小时内就会收到首次暴力破解尝试,单日扫描次数可达数千次。root账户一旦被攻破,攻击者可在数分钟内完成权限提升、横向移动和持久化后门植入。SSH安全加固是服务器安全体系中优先级最高的措施。

完整加固方案包含四个层面:认证方式升级(密钥+双因素)、服务端安全参数、暴力破解自动封禁、入侵检测与告警。以下逐一拆解配置细节。

禁用密码登录与密钥认证配置

密码是暴力破解的唯一切入点。彻底禁用密码登录,改用ED25519密钥认证:

# 生成ED25519密钥对(客户端执行)
ssh-keygen -t ed25519 -a 100 -C "admin@yunthe-prod-01"
# -a 100 增加bcrypt轮数提高私钥保护强度

# 上传公钥到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@server-ip

# 服务器端SSH配置 /etc/ssh/sshd_config
PasswordAuthentication no
ChallengeResponseAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PermitRootLogin prohibit-password   # 禁止root密码登录,仅允许密钥

ED25519相比RSA-2048密钥更短、签名更快、抗侧信道攻击能力更强。密钥长度仅256bit但安全强度等同于RSA-3072。私钥文件权限必须设为600,否则sshd拒绝加载。

Google Authenticator双因素认证集成

密钥认证虽然安全,但密钥文件被盗取后攻击者可以直接登录。双因素认证(2FA)在密钥基础上增加一次性验证码,即使密钥泄露也无法登录。配置步骤:

# 安装Google Authenticator PAM模块
apt install -y libpam-google-authenticator

# 为用户生成TOTP密钥
google-authenticator -s /etc/google-authenticator/root     -t -d -r3 -R30 -w3
# -t 基于时间,-d 禁止重复使用验证码,-r3 30秒内允许3次尝试,-w3 允许3个时间窗口偏移
# /etc/pam.d/sshd 修改
# 注释掉: @include common-auth
# 添加:
auth required pam_google_authenticator.so nullok secret=/etc/google-authenticator/${USER}

# /etc/ssh/sshd_config 修改
AuthenticationMethods publickey,keyboard-interactive
ChallengeResponseAuthentication yes
UsePAM yes

AuthenticationMethods publickey,keyboard-interactive表示必须同时通过密钥认证和键盘交互认证(即TOTP验证码),两者缺一不可。配置完成后重启sshd:systemctl restart sshd。切记不要关闭当前SSH会话,新开一个终端测试2FA登录是否正常,避免锁死服务器。

Fail2ban自动封禁暴力破解IP

Fail2ban监控SSH日志,对连续认证失败的IP自动触发防火墙封禁,是应对自动化扫描最有效的被动防御手段:

apt install -y fail2ban

# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 300
bantime = 86400
action = iptables-multiport[name=sshd, port="ssh", protocol=tcp]
        sendmail-whois[name=SSH, dest=admin@yunthe.com]

[sshd-aggressive]
enabled = true
port = ssh
filter = sshd-aggressive
logpath = /var/log/auth.log
maxretry = 2
findtime = 60
bantime = 604800

两个jail配合使用:sshd在5分钟内3次失败封禁24小时;sshd-aggressive用aggressive过滤器(匹配Invalid user、Failed password、reverse mapping等多种模式),1分钟内2次失败直接封禁7天。

SSH服务端加固参数清单

# /etc/ssh/sshd_config 关键安全参数
Port 2222                          # 更改默认端口,减少90%自动化扫描
PermitRootLogin prohibit-password  # root只允许密钥登录
MaxAuthTries 3                    # 单次连接最大认证尝试次数
MaxSessions 5                     # 单个连接最大会话数
LoginGraceTime 30                 # 认证超时30秒断开
AllowTcpForwarding no             # 禁止TCP端口转发
X11Forwarding no                  # 禁止X11转发
PermitTunnel no                   # 禁止隧道
AllowAgentForwarding no           # 禁止Agent转发
ClientAliveInterval 300           # 5分钟无操作发送心跳
ClientAliveCountMax 2             # 2次心跳无响应断开
HostKeyAlgorithms ssh-ed25519     # 仅使用ed25519主机密钥
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com

更改端口不是安全措施,只是减少日志噪音。真正的防护靠密钥+2FA+Fail2ban三层组合。加密算法配置中优先选择ChaCha20-Poly1305,在非AES-NI的CPU上性能优于AES-GCM。

入侵检测与应急响应配置

部署AIDE文件完整性检测,及时发现被篡改的系统文件:

apt install -y aide
aideinit                    # 初始化数据库
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# 每日定时检测 /etc/cron.daily/aide
#!/bin/bash
aide --check | mail -s "AIDE Report $(date +%F)" admin@yunthe.com
if [ $? -ne 0 ]; then
    logger -p auth.alert "AIDE detected filesystem changes!"
fi

应急响应清单:发现异常登录立即执行sshd -T检查当前生效配置、last -f /var/log/btmp查看失败登录记录、ausearch -m USER_LOGIN -sv no查SELinux审计日志、netstat -tulnp排查可疑监听端口。配置/etc/ssh/sshd_configLogLevel VERBOSE可以记录认证使用的密钥指纹,便于事后溯源。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-ssh-an-quan-jia-gu-shi-zhan-shuang-yin-su/

(0)
小编小编
上一篇 10小时前
下一篇 10小时前

相关推荐