简介
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 登录日志。