Fail2Ban
简介
Fail2Ban 是一款入侵防御软件,可以保护服务器免受暴力攻击。 它是用 Python 编程语言编写的。
Fail2Ban 基于auth 日志文件工作,默认情况下它会扫描所有 auth 日志文件,如 /var/log/auth.log、/var/log/apache/access.log 等,并禁止带有恶意标志的IP,比如密码失败太多,寻找漏洞等等标志。
通常,Fail2Ban 用于更新防火墙规则,用于在指定的时间内拒绝 IP 地址。 它也会发送邮件通知。
Fail2Ban 为各种服务提供了许多过滤器,如 ssh、apache、nginx、squid、named、mysql、nagios 等。
Fail2Ban 能够降低错误认证尝试的速度,但是它不能消除弱认证带来的风险。这只是服务器防止暴力攻击的安全手段之一。
安装
CentOS7
yum -y install epel-release
yum -y install fail2ban
systemctl enable fail2ban
systemctl start fail2ban
Debian
apt install fail2ban -y
systemctl enable fail2ban
systemctl start fail2ban
目录结构
/etc/fail2ban/
├── action.d # iptables 、mail 等动作文件目录
├── fail2ban.conf # fail2ban 配置文件,定义日志级别、日志、sock 文件位置等
├── filter.d # 条件匹配文件目录,过滤日志关键内容
├── jail.conf # fail2ban 防护配置文件
配置
官方的文档写到:在配置时,我们应该避免修改由 fail2ban 安装创建的文件,我们应该去编写具有 .local 扩展名的新文件。在 .local 新文件里配置的内容会覆盖 jail.conf 内容里相同的值。当我们的配置发生改变了我们可以使用 fail2ban-client reload ,来加载新的配置
/etc/fail2ban/jail.d/jail.local
文件内容:
# defalut这里是设定全局设置,如果下面的监控没有设置就以全局设置的值设置。
[DEFAULT]
# 用于指定哪些地址ip可以忽略 fail2ban 防御,以空格间隔。
ignoreip = 127.0.0.1/8
# ssh客户端主机被禁止的时长(默认单位为秒)
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
常用命令
命令 | 描述 |
---|---|
start | 启动fail2ban server和监狱 |
stop | 暂停fail2ban和监狱 |
reload | 重新加载配置文件 |
status | 查看运行的监控服务数量和列表 |
set loglevel | 设置日志等级,有 CRITICAL, ERROR, WARNING,NOTICE, INFO, DEBUG |
get loglevel | 获取当前日志的等级 |
set idle on/off | 设置某个监控(监狱)的状态 |
set addignoreip | 设置某个监控(监狱)可以忽略的ip |
set delignoreip | 删除某个监控(监狱)可以忽略的ip |
set banip | 将ip加入 监控(监狱) |
set unbanip | 将ip从监控(监狱)移除 |
示例:fail2ban-client set ssh-iptables banip 192.168.1.77
Fail2ban-regex
测试筛选规则设否匹配当前的日志格式
fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/sshd.conf