通过源码安装 Fail2Ban

时间:    分类: Linux,运维   标签: fail2ban

Fail2ban 是一款基于 Python 开发的开源入侵防御工具,主要用于实时监控系统日志并自动屏蔽恶意 IP 地址,从而抵御暴力破解、DDoS 攻击等网络安全威胁。

核心功能与原理

  1. 日志监控与规则匹配
    Fail2ban 持续扫描日志文件(如 /var/log/auth.log、/var/log/nginx/access.log 等),通过预定义的正则表达式(如 SSH 登录失败记录)识别异常行为。
  2. 动态封禁 IP
    当检测到同一 IP 在指定时间窗口内超过阈值(如 SSH 连续 5 次登录失败),Fail2ban 会触发防火墙规则(如 iptables、ufw)临时封禁该 IP,封禁时长可自定义(默认 10 分钟至数小时)。
  3. 灵活配置与扩展性
  • Jail(策略组):每个 Jail 对应一个服务(如 SSH、Nginx),可独立设置检测参数(maxretry、findtime)和封禁动作。
  • 过滤器(Filter):支持自定义正则表达式,适配不同服务的日志格式(如 Apache 错误日志)。
  • 动作(Action):除封禁 IP 外,还可发送邮件通知、调用 Webhook 或执行自定义脚本。

典型应用场景

  • SSH 防护:防止暴力破解 SSH 密码,默认 Jail 已集成。
  • Web 服务器保护:防御针对 Apache/Nginx 的扫描或 SQL 注入尝试。
  • 邮件服务器安全:如 Postfix、Dovecot,阻止垃圾邮件发送者。

1. 下载源码并安装依赖

  • 下载最新源码
    从官方仓库或发布页面获取最新版源码(以 1.0.2 为例):
wget -O fail2ban-1.1.0 https://github.com/fail2ban/fail2ban/archive/refs/tags/1.1.0.tar.gz
tar -xzvf fail2ban-1.1.0.tar.gz
cd fail2ban-1.1.0

或通过git下载:

git clone https://github.com/fail2ban/fail2ban.git
cd fail2ban
  • 安装依赖

确保系统已安装 Python(推荐 Python 3.6+)及开发工具:

# Debian/Ubuntu
sudo apt install python3 python3-dev python3-setuptools
# RHEL/CentOS
sudo dnf install python3 python3-devel

2. 安装

  • 执行安装脚本
    使用 Python 的 setup.py 进行安装:

    sudo python3 setup.py install
  • 验证安装

    fail2ban-client --version

3. 创建 systemd 服务文件

sudo cp build/fail2ban.service /etc/systemd/system/

如果启动失败,可以尝试修改模板内容,例如注释掉 Environment="PYTHONNOUSERSITE=1" (设置环境变量,禁止Python加载用户本地安装的第三方库)
或 新建 vi /etc/systemd/system/fail2ban.service 插入:

[Unit]
Description=Fail2Ban Service
Documentation=man:fail2ban(1)
After=network.target iptables.service firewalld.service ip6tables.service ipset.service nftables.service
PartOf=iptables.service firewalld.service ip6tables.service ipset.service nftables.service

[Service]
Type=simple
# Environment="PYTHONNOUSERSITE=1"
ExecStartPre=/bin/mkdir -p /run/fail2ban
ExecStart=/usr/local/bin/fail2ban-server -xf start
# if should be logged in systemd journal, use following line or set logtarget to sysout in fail2ban.local
# ExecStart=/usr/local/bin/fail2ban-server -xf --logtarget=sysout start
ExecStop=/usr/local/bin/fail2ban-client stop
ExecReload=/usr/local/bin/fail2ban-client reload
PIDFile=/run/fail2ban/fail2ban.pid
Restart=on-failure
RestartPreventExitStatus=0 255

[Install]
WantedBy=multi-user.target
  • 重载 systemd 并启动服务

    sudo systemctl daemon-reload
    sudo systemctl enable fail2ban.service
    sudo systemctl start fail2ban.service
  • 检查服务状态

    sudo systemctl status fail2ban.service

添加新评论