如何在香港服务器上设置Fail2Ban配合日志分析引擎,实现SSH暴力破解自动封禁?

如何在香港服务器上设置Fail2Ban配合日志分析引擎,实现SSH暴力破解自动封禁?

我维护的香港服务器每天都承受着不同来源的SSH暴力破解尝试。尽管服务部署在海外线路优化节点上,但依旧无法避免被全球扫描工具盯上。每天早上查阅 /var/log/auth.log,都能看到上千次尝试登录root账户或爆破已知用户名的记录。

最初,我使用了简单的端口变更和禁用密码登录来缓解风险,但这些方法治标不治本。最终,我决定部署 Fail2Ban 并结合日志分析引擎,如 GoAccess 和自定义的 grep + awk 流程,建立一套自动识别和封禁机制。以下是我在香港服务器上构建的完整解决方案,适用于具备SSH服务的Linux系统,特别是Ubuntu 20.04+/Debian 11+环境。

一、服务器环境准备

1.1 基础环境

  • 服务器:香港云主机,Ubuntu 22.04
  • 公网IP已开放22端口(默认SSH)
  • 已启用防火墙(ufw)
  • 具备sudo权限的用户

1.2 更新系统

sudo apt update && sudo apt upgrade -y

二、安装Fail2Ban并配置SSH防护

2.1 安装Fail2Ban

sudo apt install fail2ban -y

2.2 创建本地配置文件

不要直接编辑 /etc/fail2ban/jail.conf,我们应该创建 jail.local 来保持可维护性:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

2.3 配置SSH防护策略

编辑 jail.local:

[sshd]
enabled = true
port    = ssh
logpath = %(sshd_log)s
backend = systemd
filter  = sshd
maxretry = 5
bantime  = 3600
findtime = 600

解释:

  • maxretry=5:5次失败尝试
  • findtime=600:在10分钟内触发
  • bantime=3600:封禁1小时

三、提升日志可读性:结合日志分析工具

虽然Fail2Ban本身已足够使用,但为了日后审计和统计攻击来源,我整合了如下分析流程。

3.1 使用GoAccess可视化SSH日志(可选)

虽然GoAccess主用于Web日志分析,但我们可以针对 /var/log/auth.log 做适配:

grep "Failed password" /var/log/auth.log > /var/log/ssh_fail.log
goaccess /var/log/ssh_fail.log --log-format=COMBINED -a -o /var/www/html/report.html

注意:需要自定义GoAccess的日志格式匹配字段,若偏好命令行可视化,建议跳过GoAccess而使用awk等工具。

3.2 自定义实时分析脚本(进阶)

为了实时监控并记录哪些IP频繁尝试登录,我创建了如下脚本:

#!/bin/bash
LOGFILE="/var/log/auth.log"
THRESHOLD=10

echo "分析中..."

awk '/Failed password/ {print $(NF-3)}' $LOGFILE | sort | uniq -c | sort -nr | while read count ip; do
  if [ "$count" -gt "$THRESHOLD" ]; then
    echo "封禁 $ip,尝试次数 $count"
    sudo ufw deny from $ip to any port 22
  fi
done

这个脚本可加入 cron 每15分钟执行一次,也可用于每日攻击统计报告。

四、Fail2Ban进阶:封禁通知与持久性

4.1 配置邮件通知(可选)

编辑 /etc/fail2ban/jail.local 中添加:

destemail = your@email.com
sender = fail2ban@yourdomain.com
action = %(action_mwl)s

确保服务器具备 mail 命令支持:

sudo apt install mailutils -y

4.2 Fail2Ban持久性封禁(IPSet结合使用)

Fail2Ban默认只临时封禁,可结合IPSet实现持久封锁:

banaction = iptables-ipset-proto4

并在 /etc/fail2ban/action.d/iptables-ipset-proto4.conf 中设置 ipset 策略,适合应对长期持续扫描。

五、验证与测试

5.1 模拟SSH暴力破解

使用另一个VPS或本地设备运行:

hydra -l root -P /usr/share/wordlists/rockyou.txt ssh://your.hk.server.ip

观察 /var/log/fail2ban.log:

tail -f /var/log/fail2ban.log

确认是否触发封禁。

5.2 查看封禁IP

sudo fail2ban-client status sshd

六、实战中的反击手段

在生产环境中,没有单一防护能解决所有问题。Fail2Ban并不是万能,但它是最接近“哨兵”的组件。通过将其与日志分析系统结合,我不仅提升了封禁的准确性,也能在攻击发生前知晓趋势。

而对于部署在香港节点的服务器,这种“主动式防御机制”显得尤为重要。随着业务扩展到全球各地,中转节点和边缘节点的暴露程度不断上升,部署类似机制应成为安全基线的一部分。

如果未来接入WAF或Zero Trust系统,我会进一步将Fail2Ban数据源接入SIEM平台,实现全链路威胁检测与响应。

未经允许不得转载:A5数据 » 如何在香港服务器上设置Fail2Ban配合日志分析引擎,实现SSH暴力破解自动封禁?

相关文章

contact