1.简介

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 能够降低错误认证尝试的速度,但是它不能消除弱认证带来的风险。 这只是服务器防止暴力攻击的安全手段之一。

2.安装

对于 CentOS/RHEL,启用 EPEL 库或 RPMForge 库,使用 YUM 命令安装。

yum install fail2ban

# 如果找不到fail2ban包,就执行下面的命令

yum install epel-release

3.配置

默认情况下,Fail2Ban 将所有配置文件保存在 /etc/fail2ban/ 目录中。 主配置文件是 jail.conf,它包含一组预定义的过滤器。 出于安全起见默认配置最好保留。

Fail2Ban 配置文件位于 /etc/fail2ban/jail.conf。

备份
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# 修改jail.local
vi /etc/fail2ban/jail.local


[DEFAULT]
#此参数为加白的网段、IP,可以是域名、网段或单个IP,空格隔开。
ignoreip = 127.0.0.1/8 ::1

#设置被封锁的时间间隔,如下表示10分钟,可以是秒(s)、分钟(m)、小时(h)、天(d),不带单位则默认为s,-1表示永久封锁。
bantime  = 10m

#检测的间隔时间,在间隔时间内,当>=maxtretry设置的失败次数,则触发限制,禁止访问。
findtime  = 10m

#findtime时间内的最大失败次数
maxretry = 5

[sshd]
enabled = true               #启用sshd模块
port    = 22                 #ssh端口
logpath = /var/log/auth.log  #日志路径
backend = %(sshd_backend)s   #后台管理程序,默认由systemd接管,无需修改   

4.启动

systemctl start fail2ban

5.查看fail2ban已启动的模块

fail2ban-client status

fail2ban-client status sshd  # 查看sshd模块状态

6.fail2ban-client常用命令

fail2ban-client start sshd    # 启动sshd模块
fail2ban-client stop sshd     # 停止sshd模块
fail2ban-client restart sshd  # 重启sshd模块
fail2ban-client reload        # 重新加载配置文件

黑名单操作 (注意,黑名单测试时,不要把自己的IP加到黑名单里做测试,否则就连不上机器了)

    IP加入黑名单:fail2ban-client set sshd banip 192.168.1.8 
    IP解锁:fail2ban-client set sshd unbanip 192.168.1.8

白名单操作

    IP加入白名单:fail2ban-client set sshd addignoreip 192.168.1.8
    IP从白名单中移除:fail2ban-client set sshd delignoreip 192.168.1.8
    在所有监狱中加入IP白名单:fail2ban-client unban 192.168.1.8


使用unban解除封锁的IP

fail2ban-client unban 192.168.1.16
fail2ban-client unban --all  #解除所有

参考链接:
https://cloud.tencent.com/developer/article/2137876

https://wdd.js.org/posts/2020/04/ih9pz2/