SSH暴力破解的现状与威胁
暴露在公网上的Linux服务器每天都在承受数千次SSH暴力破解攻击。自动化扫描工具在全网22端口上不间断地尝试常见用户名和密码组合,一旦突破就植入挖矿程序、后门或勒索软件。实际统计显示,一台新上线的服务器在开放SSH端口后,平均6小时内就会收到首次暴力破解尝试。
防护不只是改个端口号那么简单。完整的SSH安全加固需要从认证方式、访问控制、入侵检测三个层面系统实施。
禁用密码登录,强制密钥认证
密码是暴力破解的突破口。密钥认证基于非对称加密,私钥不出本机,攻击者无从猜测。
生成密钥对
# 在本地客户端生成Ed25519密钥(比RSA更安全更快)
ssh-keygen -t ed25519 -C "admin@yunthe" -f ~/.ssh/yunthe_server
# 上传公钥到服务器
ssh-copy-id -i ~/.ssh/yunthe_server.pub root@your-server-ip
锁定SSH配置
编辑/etc/ssh/sshd_config:
# 禁用密码认证
PasswordAuthentication no
ChallengeResponseAuthentication no
# 禁用root密码登录(允许密钥登录root)
PermitRootLogin prohibit-password
# 仅允许密钥认证
PubkeyAuthentication yes
# 限制可登录用户
AllowUsers deploy admin
# 禁用空密码
PermitEmptyPasswords no
# 设置登录超时
LoginGraceTime 30
重启SSH服务使配置生效:
systemctl restart sshd
修改前务必保留一个已连接的SSH会话,防止配置错误导致无法登录。
Fail2Ban自动封禁恶意IP
Fail2Ban通过解析SSH日志识别暴力破解行为,自动调用iptables/nftables封禁源IP。
安装与基础配置
# CentOS/RHEL
yum install -y fail2ban fail2ban-firewalld
# Ubuntu/Debian
apt install -y fail2ban
创建本地配置文件/etc/fail2ban/jail.local:
[DEFAULT]
bantime = 86400 # 封禁时长24小时
findtime = 600 # 检测窗口10分钟
maxretry = 3 # 3次失败即封禁
banaction = nftables-multiport
action = %(action_mwl)s # 封禁并记录日志
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
# Ubuntu用auth.log,CentOS用/var/log/secure
maxretry = 3
bantime = 86400
启动与验证
systemctl enable fail2ban
systemctl start fail2ban
# 查看封禁状态
fail2ban-client status sshd
# 手动解封IP
fail2ban-client set sshd unbanip 1.2.3.4
端口敲门:隐藏SSH端口
端口敲门(Port Knocking)让SSH端口默认关闭,只有按正确顺序访问一系列端口后才临时开放。这使SSH端口对扫描工具完全不可见。
使用knockd实现:
# 安装knockd
apt install -y knockd
# /etc/knockd.conf
[options]
UseSyslog
[openSSH]
sequence = 7000,8000,9000
seq_timeout = 15
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 15
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
客户端敲门方式:
# 安装knock客户端
apt install -y knockd
# 敲门打开SSH端口
knock your-server-ip 7000 8000 9000
# SSH连接
ssh root@your-server-ip
# 连接后关闭端口(已有连接不受影响)
knock your-server-ip 9000 8000 7000
OSSEC主机入侵检测系统部署
Fail2Ban处理实时攻击,OSSEC负责事后检测。它监控文件完整性、检查rootkit、分析日志异常。
安装OSSEC服务端
# 下载OSSEC
wget https://github.com/ossec/ossec-hids/archive/3.7.0.tar.gz
tar xzf 3.7.0.tar.gz
cd ossec-hids-3.7.0
# 安装(选择server模式)
./install.sh
# 安装过程中选择:
# - Server installation
# - 启用active-response
# - 启用rootcheck和syscheck
关键文件完整性监控配置
编辑/var/ossec/etc/ossec.conf:
<syscheck>
<!-- 检查频率:每12小时 -->
<frequency>43200</frequency>
<!-- 监控关键系统目录 -->
<directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
<directories check_all="yes">/bin,/sbin</directories>
<!-- 监控Web目录 -->
<directories check_all="yes">/var/www/html</directories>
<!-- 忽略临时文件 -->
<ignore>/etc/mtab</ignore>
<ignore>/etc/mnttab</ignore>
<ignore>/var/log</ignore>
</syscheck>
<rootcheck>
<rootkit_files>/var/ossec/etc/shared/rootkit_files.txt</rootkit_files>
<rootkit_trojans>/var/ossec/etc/shared/rootkit_trojans.txt</rootkit_trojans>
<frequency>86400</frequency>
</rootcheck>
查看告警
# 实时查看OSSEC告警
tail -f /var/ossec/logs/alerts/alerts.log
# 查看文件完整性变更
/var/ossec/bin/syscheck_control -l
SSH会话审计与实时告警
除了被动检测,还需要主动审计所有SSH会话。
记录用户命令操作
在/etc/profile.d/audit.sh中添加:
# 记录所有用户操作到日志
if [ -n "$SSH_CONNECTION" ]; then
export HISTTIMEFORMAT="%F %T "
export HISTSIZE=10000
export PROMPT_COMMAND='history -a'
logger -p auth.info "SSH session: user=$USER ip=${SSH_CONNECTION%% *}"
fi
邮件告警配置
在/var/ossec/etc/ossec.conf中配置邮件通知:
<global>
<email_notification>yes</email_notification>
<email_to>admin@yunthe.com</email_to>
<smtp_server>127.0.0.1</smtp_server>
<email_from>ossec@yunthe.com</email_from>
</global>
<alerts>
<email_alert_level>7</email_alert_level>
</alerts>
安全加固效果验证
部署完成后执行基线检查:
# 验证密码登录已禁用
ssh -o PreferredAuthentications=password root@your-server-ip
# 预期结果:Permission denied
# 验证密钥登录正常
ssh -i ~/.ssh/yunthe_server root@your-server-ip
# 预期结果:登录成功
# 验证Fail2Ban运行状态
fail2ban-client status sshd
# 预期结果:显示当前封禁IP列表
# 验证OSSEC运行状态
/var/ossec/bin/ossec-control status
# 预期结果:所有组件running
服务器安全不是一次性配置,而是持续对抗的过程。密钥认证堵住暴力破解的入口,Fail2Ban实现自动封禁,端口敲门隐匿攻击面,OSSEC监控文件完整性和rootkit——四层防线叠加,让攻击者的成本远超收益。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-ssh-fang-bao-li-po-jie-yu-ru-qin-jian-ce-pei/