一、背景

云服务器使用的是阿里云,安装的系统是 Alibaba Cloud Linux。最新登录一直有类似下面的提示,判断是服务器遭受过 SSH 暴力破解,于是安装 Fail2ban

There were 2233 failed login attempts since the last successful login.

二、Fail2ban 介绍

1、什么是 Fail2ban

Fail2ban 是一款基于 Python 编写的开源安全工具,主要功能是防止服务器遭受暴力破解(Brute-force attack)。
它通过实时监控系统日志(如 SSH、Nginx、Postfix 等服务的日志文件),自动检测可疑的登录失败行为,并临时或永久封禁攻击源 IP。
简单来说:Fail2ban 就像是你服务器门口的保安,看到有人连续输错密码,就把他踢出去,并暂时禁止他靠近。

2、工作原理

Fail2ban 的核心逻辑可以用一句话概括:

“读取日志 → 匹配失败规则 → 达到阈值 → 封禁 IP(通过防火墙或其他方式)”

工作流程如下:

  1. 监控日志文件(如 /var/log/auth.log)
  2. 使用正则表达式过滤登录失败的记录
  3. 累计失败次数(达到配置的阈值)
  4. 调用封禁动作(action)
  5. 超时自动解封(默认 10 分钟,可配置)

3、主要组成部分

组件 说明
jail 一个“监狱”单元,对应一个被保护的服务(如 sshd、nginx、postfix)
filter 过滤器,定义如何识别攻击行为(正则匹配日志)
action 执行封禁或通知的操作
logpath 被监控的日志文件路径
bantime 封禁时长(秒)
findtime 检测周期(秒)
maxretry 最大失败次数

三、Fail2ban 安装步骤

1、启用 EPEL 仓库(推荐)

sudo dnf install epel-release -y

2、安装 Fail2ban

sudo dnf install fail2ban fail2ban-firewalld -y

3、启用与启动服务

sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo systemctl status fail2ban

四、Fail2ban 配置

Fail2ban 的配置目录位于:

/etc/fail2ban/

主要文件:

jail.conf          # 默认模板(不要直接改)
jail.local         # 自定义配置文件(推荐)
filter.d/          # 过滤规则
action.d/          # 封禁动作

1、创建本地配置文件

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

2、修改全局参数(推荐配置)

[DEFAULT]
ignoreip = 127.0.0.1/8  # 白名单 IP,或添加你的远程管理IP
bantime  = 900          # 封禁时间,单位秒(15分钟),也可以 15m
findtime = 600          # 检测时间窗口(10分钟),也可以 10m
maxretry = 3            # 失败次数
backend  = systemd      # Alibaba Cloud Linux 默认使用 systemd 日志
banaction = firewallcmd-ipset  # firewalld 集成

3、启用 SSH 防护(最常见)

[sshd]
enabled  = true
port     = ssh
logpath  = %(sshd_log)s
maxretry = 3  # 不写的话会继承自 [DEFAULT]
bantime  = 900  # 不写的话会继承自 [DEFAULT]
findtime = 600  # 不写的话会继承自 [DEFAULT]

4、重启 Fail2ban 服务并验证服务状态:

sudo systemctl restart fail2ban
sudo fail2ban-client status

5、邮件通知(可选)

如果你想在 IP 被封禁时收到邮件提醒,可以在 [DEFAULT] 部分添加:
destemail = admin@yourdomain.com
sender = fail2ban@yourdomain.com
mta = sendmail
action = %(action_mw)s

并确保系统中安装了 sendmail:
sudo dnf install sendmail -y

五、 Fail2ban 常用命令

1、查看所有 jail

sudo fail2ban-client status

2、查看 SSH 封禁列表

sudo fail2ban-client status sshd

3、手动封禁 IP

sudo fail2ban-client set sshd banip 1.2.3.4

4、手动解封 IP

sudo fail2ban-client set sshd unbanip 1.2.3.4

5、实时查看封禁日志

sudo tail -f /var/log/fail2ban.log

6、搜索最近封禁记录

grep "Ban" /var/log/fail2ban.log

7、搜索解封记录

grep "Unban" /var/log/fail2ban.log

2、查看版本

fail2ban-client version
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐