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/24即192.168.0.0到192.168.0.254bsd-ipfw是示例防火墙。你可自选。参见下文。
警告
若你使用 IPFW,则必须使用
bsd-ipfw而不是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.conf,写入:
em0:上面的em0是我的网卡名,你要改成你自己的,可使用命令ifconfig查看。
服务
参考文献
IPFILTER (IPF)
fail2ban 配置文件
将上方配置文件 /usr/local/etc/fail2ban/jail.d/sshd.conf 中 action=bsd-ipfw 改为 action=ipfilter,其他不需要改。
服务
复制示例文件作为默认配置规则集文件,否则 ipfilter 启动后会没有规则。示例文件自带的规则不影响使用
启动 ipfilter
即可。终于不用再配置了,默认就可以用
测试效果
测试主动拉黑 IP 以查看效果
TTY 输出
已经链接的 ssh 服务也会被强制断开。
查看状态
解禁 IP
故障排除与未竟事宜
fail2ban的日志在/var/log/fail2ban.log
最后更新于
这有帮助吗?