15.1 Fail2Ban(基于 IPFW、PF、IPF)

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

安装 Fail2Ban

  • 使用 pkg 安装:

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

# cd /usr/ports/security/py-fail2ban/ 
# make install clean
  • 配置服务:

# 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(勿直接编辑,参见上文)。仅列出本文所需内容:

  • ① 可用的过滤器名称:

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

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

Fail2Ban 封禁配置

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

配置解释:

  • 白名单,不会被封禁的 IP 段。192.168.0.0/24192.168.0.0192.168.0.254

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

警告

若你使用 IPFW,则必须使用 bsd-ipfw 而不是 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.conf,写入:

  • em0:上面的 em0 是我的网卡名,你要改成你自己的,可使用命令 ifconfig 查看。

服务

参考文献

IPFILTER (IPF)

fail2ban 配置文件

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

服务

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

  • 启动 ipfilter

即可。终于不用再配置了,默认就可以用

测试效果

  • 测试主动拉黑 IP 以查看效果

  • TTY 输出

已经链接的 ssh 服务也会被强制断开。

查看状态

解禁 IP

故障排除与未竟事宜

  • fail2ban 的日志在 /var/log/fail2ban.log

最后更新于

这有帮助吗?