1. 简介
fail2ban简单来说就是通过不断读取设定的日志文件,并通过正则校验每条日志是否符合规则。一旦符合,则提取日志中的IP地址与时间戳,然后写入到fail2ban的数据库中。写库的同时进行计数,如果该IP在设定的时间间隔内被匹配的次数超过阈值,则调用iptables,将其的请求reject。
Linux 系统生产环境配置指南 https://blog.51cto.com/waringid/5782872
Linux 系统防火墙 Firewall-cmd 日常操作指南 https://blog.51cto.com/waringid/5806004
利用 ipset 封禁大量 IP https://blog.51cto.com/waringid/5806004
前期的准备操作请参考“Linux 系统生产环境配置指南”。Fail2ban 结构如下:
/etc/fail2ban ## fail2ban 服务配置目录
/etc/fail2ban/action.d ## iptables 、mail 等动作文件目录
/etc/fail2ban/filter.d ## 条件匹配文件目录,过滤日志关键内容
/etc/fail2ban/jail.conf ## fail2ban 防护配置文件
/etc/fail2ban/fail2ban.conf ## fail2ban 配置文件,定义日志级别、日志、sock 文件位置等
2. 检查防火墙
3. 安装配置
3.1. 安装
安装成功后fail2ban配置文件位于/etc/fail2ban,其中jail.conf为主配置文件,相关的匹配规则位于filter.d目录,其它目录/文件一般很少用到,如果需要详细了解可自行搜索。
3.2. 配置jail
以上每行内容的大致意义如下:
[nginxx-cc]:定义jail名称
- enabled:是否启用该jail,默认的所有规则都没有该项,需要手动添加
- port:指定封禁的端口,默认为0:65535,也就是所有端口,但可以在jail中设定
- filter:指定过滤器名称
- logpath:日志路径
- action:达到阈值后的动作
- maxretry:阈值
- findtime:时间间隔
- bantime:封禁时长
- ignoreip:忽略的IP
注意
logpath与action可以有多行,如action中的设定:调用iptables-multiport封禁目标IP访问的多个端口,调用sendmail发送告警邮件
findtime不是检查日志的时间间隔,日志的检查是实时的。因为fail2ban自带数据库,所以可以在设定的时间内统计匹配次数
ignoreip添加后端服务器的IP或CDN的IP
3.3. 配置filter
日志内容如下所示:
4. 常用配置
4.1. 定时清理日志
5. 内核优化
6. 过滤规则
6.1. nginx的验证
6.2. 检查fail2ban启动问题
6.3. modsecurity 日志过滤
利用 modsecurity 结合 nginx 并整合到 微服务网关实现 web 安全防护。
kong 网关结合 modsecurity 输出的日志格式如下
注意2种不同的日志格式类型,2中不同日志类型匹配不同的正则式。
同时注意不同日志时间格式也不一样。