fail2ban可以独立运行,但如果没有防火墙的话,它只会将非法IP保存到自己的数据库中,而不会进行实际拦截。所以要实现拦截的话,需要系统启用防火墙,例如,FreeBSD的ipfw。
编辑 /etc/rc.conf ,加入以下行:
firewall_enable="YES"
ipfw的默认规则是拒绝任何数据通行,除非设定排除的条目。
既然使用fail2ban来管理防火墙,就不需要采取如此严格的策略,所以使用以下设置将ipfw的规则改为允许任何数据通行。编辑 /boot/loader.conf ,加入以下行:
xxxxxxxxxx
net.inet.ip.fw.default_to_accept="1"
重启系统,运行ipfw命令,查看当前ipfw运行状态:
xxxxxxxxxx
$ sudo ipfw list
00100 allow ip from any to any via lo0
00200 deny ip from any to 127.0.0.0/8
00300 deny ip from 127.0.0.0/8 to any
00400 deny ip from any to ::1
00500 deny ip from ::1 to any
00600 allow ipv6-icmp from :: to ff02::/16
00700 allow ipv6-icmp from fe80::/10 to fe80::/10
00800 allow ipv6-icmp from fe80::/10 to ff02::/16
00900 allow ipv6-icmp from any to any icmp6types 1
01000 allow ipv6-icmp from any to any icmp6types 2,135,136
65535 allow ip from any to any
此时系统是开放的(最后一句),任何人(IP)都可以进来,安全性完全由系统本身保障,比如强壮的密码或正确的登录限制。
使用以下命令安装fail2ban:
xxxxxxxxxx
$ sudo pkg install py311-fail2ban
并修改 /etc/rc.conf 文件,加入以下行,以使得开机自动启动fail2ban:
xxxxxxxxxx
fail2ban_enable="YES"
fail2ban的配置文件在 /usrl/local/etc/fail2ban/ 目录中。
fail2ban特别警示不要修改 fail2ban.conf 、 jail.conf 等默认安装的配置文件,因为软件更新可能会冲掉用户自定义的选项。
我们在 /usr/local/etc/fail2ban/jail.d/ 目录中创建一个 sshd.conf 文件,内容如下:
xxxxxxxxxx
[sshd]
enabled=true
filter=sshd
action=ipfw
sshd
ipfw
过滤器filter位于 /usr/local/etc/fail2ban/filter.d/ 目录中,此目录中有很多预定义的过滤器,可以根据需要选用,本例选用的是sshd.conf配置(在以上配置语句中不需要写文件的扩展名),不需要修改此文件。
动作action位于 /usr/local/etc/fail2ban/action.d/ 目录中,本例选用的是ipfw.conf配置。但需要修改以下行:
xxxxxxxxxx
localhost = me
完成以上设置后,启动fail2ban服务即可。
可以在 /usr/local/etc/fail2ban/jail.d/ 中创建一个含有 [DEFAULT]的段,设置特定的全局设定,例如:
xxxxxxxxxx
[DEFAULT]
ignoreip=127.0.0.1/8 ::1 fe80:: 192.168.0.0/24 10.8.0.0/24
bantime = 10h
findtime = 10h
ignoreip
设置忽略的IP地址段bantime
设置封锁时长,可以使用m表示分钟、h表示小时、d表示天findtime
设置查找数据库中记录的时长