lamess / Fail2Ban源码编译安装

Created Wed, 27 May 2026 03:13:00 +0800 Modified Thu, 28 May 2026 10:22:51 +0800

简介

Fail2Ban 是一款强大的入侵防御软件,通过监控日志文件(如 /var/log/auth.log)来识别恶意行为,例如密码暴力破解、寻找漏洞等。当检测到可疑活动时,它会根据预设规则更新防火墙,以阻止相应的 IP 地址。

虽然 Debian 的官方仓库提供了 Fail2Ban,但有时可能需要安装最新版本以获取最新的功能和安全修复。本指南将介绍如何在 Debian 系统上从 GitHub 源码编译和安装最新版的 Fail2Ban。

1. 安装依赖

首先安装编译和运行 Fail2Ban 所需的依赖包。

sudo apt update
sudo apt install git python3-pip python3-systemd -y
  • git: 用于从 GitHub 克隆 Fail2Ban 的源代码。
  • python3-pip: 用于安装 Python 包。
  • python3-systemd: Fail2Ban 需要此模块与 systemd 日志进行交互。

2. 下载并安装 Fail2Ban

从 Fail2Ban 的官方 GitHub 仓库克隆源代码,并使用 pip 进行安装。

git clone https://github.com/fail2ban/fail2ban.git
cd fail2ban
sudo python3 -m pip install . --break-system-packages
  • git clone: 下载最新的源代码。
  • pip install .: 从当前目录的源码安装 Fail2Ban。
  • --break-system-packages: 在 Debian 12 等较新的发行版中,为了防止与系统包管理器冲突,直接使用 pip 安装全局包会受到限制。使用此标志以允许继续安装。

3. 创建目录并复制配置文件

安装完成后,为 Fail2Ban 创建必要的目录结构,并从源码包中复制默认的配置文件。

# 创建目录结构
sudo mkdir -p /etc/fail2ban \
    /etc/fail2ban/filter.d \
    /etc/fail2ban/filter.d/ignorecommands \
    /etc/fail2ban/action.d \
    /etc/fail2ban/fail2ban.d \
    /etc/fail2ban/jail.d \
    /var/lib/fail2ban \
    "$(realpath /var/run/fail2ban)"

# 复制主配置文件和过滤器
sudo cp -av config/*.conf /etc/fail2ban/
sudo cp -av config/filter.d/*.conf /etc/fail2ban/filter.d/

# 复制 ignorecommands 过滤器
if [ -d config/filter.d/ignorecommands ]; then
    sudo find config/filter.d/ignorecommands -maxdepth 1 -type f \
        -exec cp -av {} /etc/fail2ban/filter.d/ignorecommands/ \;
fi

# 复制 action 脚本
sudo find config/action.d -maxdepth 1 -type f \( -name '*.conf' -o -name '*.py' \) \
    -exec cp -av {} /etc/fail2ban/action.d/ \;

4. 设置文件权限

为 Fail2Ban 的相关目录和文件设置正确的所有者和权限。

sudo chown -R root:root /etc/fail2ban
sudo chmod -R u=rwX,go=rX /etc/fail2ban
sudo chown root:root /var/lib/fail2ban
sudo chmod 755 /var/lib/fail2ban
sudo chown root:root "$(realpath /var/run/fail2ban)"
sudo chmod 755 "$(realpath /var/run/fail2ban)"

5. 配置 systemd 服务

创建 systemd 服务文件。

# 确定 fail2ban-server 的可执行文件路径
BINDIR="$(dirname "$(which fail2ban-server)")"

# 使用 sed 替换模板中的路径并创建服务文件
sed "s|@BINDIR@|$BINDIR|g" \
    files/fail2ban.service.in | \
    sudo tee /etc/systemd/system/fail2ban.service >/dev/null
  • which fail2ban-server: 找到 fail2ban-server 的安装路径。
  • sed "s|@BINDIR@|$BINDIR|g": 将服务文件模板中的 @BINDIR@ 占位符替换为实际的二进制文件路径。

6. 创建本地配置文件

Fail2Ban 的最佳实践是不要直接修改 jail.conf。直接创建一个 jail.local 文件来覆盖默认设置并添加自定义规则。这样可以避免在软件升级时配置文件被覆盖。

以下是一个保护 SSH 服务的示例配置。

sudo tee /etc/fail2ban/jail.local > /dev/null <<EOF
[sshd]
enabled = true
port = 22
findtime = 120m
maxretry = 3
bantime = 365d
ignoreip = 127.0.0.1/8
logpath = %(sshd_log)s
backend = %(sshd_backend)s
EOF

注意将 port = 22 中的端口号修改为服务器上实际使用的 SSH 端口。

7. 测试和验证

在应用配置后,测试 Fail2Ban 是否能正确加载配置。

sudo fail2ban-client --test

如果没有任何错误输出,说明配置是有效的。然后,重新加载服务使新配置生效。

sudo systemctl daemon-reload
sudo systemctl enable fail2ban --now
sudo systemctl status fail2ban

最后,检查 Fail2Ban 的整体状态以及特定 jail(如 sshd)的状态。

# 查看所有 jail 的状态
sudo fail2ban-client status

# 查看 sshd jail 的详细状态
sudo fail2ban-client status sshd

如果一切正常,从命令返回中将看到 sshd jail 已经激活,并开始监控 SSH 登录日志。