15.1 Fail2Ban(基于 IPFW、PF 和 IPF)

根据 官方说明,Fail2Ban 可封禁多次身份验证错误的主机,即通过更新系统防火墙规则来拒绝来自那些 IP 地址的新连接。Fail2Ban 几乎完全由 Python 写就(Python 占比约 96%)。本文适配了 FreeBSD 中常见的三种防火墙——IPFW、PF、IPF,你无需同时配置以上所有防火墙,只需选择其中一款即可。

安装 Fail2Ban

  • 使用 pkg 安装:

# pkg install security/py-fail2ban
  • 或者使用 Ports 安装:

# cd /usr/ports/security/py-fail2ban/ 
# make install clean
  • 启用 fail2ban 服务,实现开机自动启动:

# service fail2ban enable

查看 fail2ban 安装后说明

# pkg info -D security/py-fail2ban
py311-fail2ban-1.1.0_1:
On install:
Please do not edit the fail2ban.conf, jail.conf, or any other
files in the distributen as they will be overwritten upon each
upgrade of the port. Instead, create new files named *.local e.g.
fail2ban.local or jail.local.
# 请不要直接修改 fail2ban.conf、jail.conf 或其他官方提供的配置文件
# 因为它们在每次升级软件包时会被覆盖
# 应该创建 *.local 文件,如 fail2ban.local 或 jail.local,来自定义配置。

For more information, see the official manual:
http://www.fail2ban.org/wiki/index.php/MANUAL_0_8#Configuration
# 更多信息可参见官方手册。

If you have custom filters or actions and you are upgrading from
0.9.x please check them.
# 如果你定义了自定义过滤器或操作,且从 0.9.x 升级而来,请检查其兼容性。

Users of pf: please read the notes in action.d/pf.conf and the
discussion at https://github.com/fail2ban/fail2ban/pull/1925
# 使用 pf 防火墙的用户请阅读 action.d/pf.conf 中的注释,
# 以及上面 GitHub 讨论链接中的相关说明。

Please note that fail2ban will put curly braces '{}' around the
ports in the action so you shouldn't do it yourself.
# 注意:fail2ban 会自动在动作命令中将端口号用大括号 {} 包裹,
# 因此你自己不需要再加。

Fail2Ban 配置解释

注意

此处的 jail 不是 BSD 系统中的 jail(一种容器)。这里的 jail 指的是“封禁”的含义。

配置示例位于 /usr/local/etc/fail2ban/jail.conf(勿直接编辑,参见上文),下文仅列出本书所需内容:

  • ① 列出 fail2ban 的过滤器选项:

需要注意,以 bsd- 开头的文件(如 bsd-sshd.conf)是 FreeBSD Port 维护者打的补丁。但是在本文中并不能使用。应该直接使用 sshd.conf

  • ② 查看 Fail2Ban 支持的防火墙:

Fail2Ban 封禁配置

创建并编辑文件 /usr/local/etc/fail2ban/jail.d/sshd.conf,写入如下内容:

配置解释:

  • 白名单,表示不会被封禁的 IP 段。192.168.0.0/24 表示从 192.168.0.0192.168.0.254

  • bsd-ipfw 是示例防火墙。你可自选。参见下文。

警告

若使用 IPFW 防火墙,必须选择 bsd-ipfw,而不能使用 ipfw,否则无法生效。

配置防火墙

启动 fail2ban 服务:

IPFW

Fail2Ban 配置同上。

配置自启服务

启用防火墙,实现开机自动启动:

警告

不要 立即执行 start 命令,否则可能导致无法通过 SSH 连接。

修改 IPFW 默认规则

  • IPFW 规则是“默认拒绝”,我们改成“默认允许”:

  • 显示当前 IPFW 防火墙规则列表:

参考文献

PF

fail2ban 配置文件

将上方配置文件 /usr/local/etc/fail2ban/jail.d/sshd.confaction=bsd-ipfw 改为 action=pf[port={22 23}, name=ssh],其他不需要改。

修改 PF 配置文件

  • 将示例 PF 配置文件复制到 /etc 目录以便修改和使用,否则 PF 无法启动。

  • 编辑 /etc/pf.conf,写入:

  • em0:示例中的 em0 为笔者的网卡名称,请根据实际网卡修改,可使用命令 ifconfig 查看

服务

参考文献

IPFILTER (IPF)

fail2ban 配置文件

将上方配置文件 /usr/local/etc/fail2ban/jail.d/sshd.confaction=bsd-ipfw 改为 action=ipfilter,其他不需要改。

服务

  • 复制示例文件作为默认配置规则集文件,否则 ipfilter 启动后会没有规则。示例文件自带的规则不影响使用

  • 配置守护进程:

完成上述步骤后,Fail2Ban 即可正常使用。终于不用再配置了,默认就可以用

测试效果

  • 为了查看效果,使用 fail2ban 客户端将 IP 192.168.179.1 在 sshd 监控下加入封禁列表

  • TTY 输出

已建立的 SSH 连接也会被强制断开

查看状态

查看 fail2ban 对 sshd 监控的状态,包括被封禁的 IP 列表:

解禁 IP

从 sshd 监控中解除对指定 IP 的封禁:

故障排除与未竟事宜

  • Fail2Ban 的日志文件位于 /var/log/fail2ban.log 文件。

最后更新于

这有帮助吗?