Fail2ban防暴力破解
企业案例
生产环境发现总是有人尝试ssh暴力破解密码:
grep 'Failed' /var/log/secure
频繁登陆不仅危险,而且造成大量日志消耗性能,所以使用Fail2ban防止暴力破解
简介
Fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙),例如当有人在试探你的SSH、SMTP、FTP密码,只要达到你预设的次数,fail2ban就会调用防火墙屏蔽这个IP,而且可以发送e-mail通知系统管理员,是一款很实用、很强大的IP自动屏蔽工具!
简洁的说,就是fail2ban通过对日志的监控, 发现具有破坏性的行为IP调用防火墙将它屏蔽一段时间
功能、特性
- 支持大量服务:sshd 、apache 、qmail 等
- 支持多作动作:iptables 、tcp-wrapper 、shorewall 、mail notifications 等
- logpath 选项中支持通配符
- 需要 Gamin 支持(Gamin 用于监控文件和目录是否更改)
- 如果需要邮件通知,则系统事先要确保能够正常发送邮件
安装
环境检查
- Python版本必须大于2.4.3
- 防火墙iptables必须开启
安装
# 需要epel源
yum -y install epel-release yum -y install fail2ban
目录结构
fail2ban/ ├── action.d # iptables 、mail 等动作文件目录 ├── fail2ban.conf # fail2ban 配置文件,定义日志级别、日志、sock 文件位置等 ├── filter.d # 条件匹配文件目录,过滤日志关键内容 ├── jail.conf # fail2ban 防护配置文件
配置fail2ban实现防暴力破解
官方的文档写到:在配置时,我们应该避免修改由fail2ban安装创建的文件,我们应该去编写具有.local扩展名的新文件。在.local新文件里配置的内容会覆盖jail.conf内容里相同的值。
当我们的配置发生改变了我们可以使用 fail2ban-client reload ,来加载新的配置。
vim /etc/fail2ban/jail.d/jail.local
文件内容:
#defalut这里是设定全局设置,如果下面的监控没有设置就以全局设置的值设置。 [DEFAULT] # 用于指定哪些地址ip可以忽略 fail2ban 防御,以空格间隔。 ignoreip = 127.0.0.1/8 # 客户端主机被禁止的时长(默认单位为秒) bantime = 3600 # 过滤的时长(秒) findtime = 600 # 匹配到的阈值(次数) maxretry = 3 [ssh-iptables] # 是否开启 enabled = true # 过滤规则 filter = sshd # 动作 action = iptables[name=SSH, port=ssh, protocol=tcp] # 日志文件的路径 logpath = /var/log/secure # 匹配到的阈值(次数) maxretry = 3
在这里需要注意一点就是:我们上面的action设置的时候,port=ssh,如果我们更改了sshd服务的端口号,我能需要在这里设置对应的端口号,否则配置不生效。
在上面配置好了之后,我们需要让配置生效:
fail2ban-client reload