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.0到192.168.0.254bsd-ipfw是示例防火墙。你可自选。参见下文。
警告
若使用 IPFW 防火墙,必须选择
bsd-ipfw,而不能使用ipfw,否则无法生效。
配置防火墙
启动 fail2ban 服务:
IPFW
Fail2Ban 配置同上。
配置自启服务
启用防火墙,实现开机自动启动:
警告
不要 立即执行
start命令,否则可能导致无法通过 SSH 连接。
修改 IPFW 默认规则
IPFW 规则是“默认拒绝”,我们改成“默认允许”:
显示当前 IPFW 防火墙规则列表:
参考文献
man ipfw(8),man 页面
fail2ban,本节架构基于此
PF
fail2ban 配置文件
将上方配置文件 /usr/local/etc/fail2ban/jail.d/sshd.conf 中 action=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.conf 中 action=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文件。
最后更新于
这有帮助吗?