Fail2Ban是一个入侵防御软件框架。它用Python编程语言编写,旨在防止暴力攻击。
Fail2ban 能够监控系统日志,匹配日志中的错误信息(使用正则表达式),执行相应的屏蔽动作(支持多种,一般为调用 iptables ),是一款很实用、强大的软件。
如果你的主机在公网上有端口暴露出去,那么总会有一些不怀好意的家伙,会尝试通过各种方式攻击你的机器。常见的服务例如ssh, nginx都会有类似的威胁。
手工将某个ip加入黑名单,这种操作太麻烦,而且效率低。而fail2ban就是一种自动化的解决方案。
Fail2ban工作原理
fail2ban的工作原理是监控某个日志文件,然后根据某些关键词,提取出攻击方的IP地址,然后将其加入到黑名单。
Fail2ban保护ssh
fail2ban的配置文件位于/etc/fail2ban目录下。
在该目录下建立一个文件 jail.local, 内容如下
bantime 持续禁止多久
maxretry 最大多少次尝试
banaction 拦截后的操作
findtime 查找时间
看下下面的操作的意思是:监控sshd服务的最近10分钟的日志,如果某个ip在10分钟之内,有2次登录失败,就把这个ip加入黑名单, 2小时之后,这个ip才会被从黑名单中移除。
[DEFAULT]
bantime = 2h
banaction = iptables-multiport
maxretry = 2
findtime = 10m
[sshd]
enabled = true
然后重启fail2ban
systemctl restart fail2ban
fail2ban提供管理工具fail2ban-client
fail2ban-client status
#显示fail2ban的状态
fail2ban-client status sshd
#显示某个监狱的配置
从下文的输出来看可以看出来fail2ban已经拦截了一些IP地址了
> fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
> fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 2
| |- Total failed: 23289
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 9
|- Total banned: 1270
`- Banned IP list: 234.125.201.105
fail2ban保护sshd的原理
fail2ban的配置文件目录下有个filter.d目录,该目录下有个sshd.conf的文件,这个文件就是对于sshd日志的过滤规则,里面有些正常时用来提取出恶意家伙的IP地址。
防止CC攻击
这里仅以Nginx为例,使用fail2ban来监视nginx日志,匹配短时间内频繁请求的IP,并使用firewalld将其IP屏蔽,达到CC防护的作用。
#需要先新建一个nginx日志匹配规则
vi /etc/fail2ban/filter.d/nginx-cc.conf
#填写如下内容
[Definition]
failregex = -.*- .*HTTP/1.* .* .*$
ignoreregex =
继续修改jail.local
追加如下内容:
[nginx-cc]
enabled = true
port = http,https
filter = nginx-cc
action = %(action_mwl)s
maxretry = 20
findtime = 60
bantime = 3600
logpath = /usr/local/nginx/logs/access.log
上面的配置意思是如果在60s内,同一IP达到20次请求,则将其IP ban 1小时,上面只是为了测试,请根据自己的实际情况修改。logpath为nginx日志路径。
防止nginx服务器web目录被黑客扫描
shell > vim /etc/fail2ban/jail.conf
[nginx]
port = http,https
logpath= /var/log/nginx/access.log
enabled = true
filter = nginx-limit-req
#action = iptables[name=nginx, port=http, protocol=tcp]
action = %(action_mwl)s
bantime = 3600
findtime = 60
maxretry = 5
在etc/fail2ban/filter.d目录下新增nginx.conf文件并追加以下内容:
shell > vim /etc/fail2ban/filter.d/nginx.conf
[Definition]
failregex =<HOST> -.*"(GET|POST|HEAD).*HTTP\/1.* 404 .*"$
ignoreregex =
标签:sshd,IP,filter,nginx,Fail2Ban,拦截,日志,fail2ban From: https://www.cnblogs.com/o-O-oO/p/18603271原创 网络安全运维技术