Fail2ban是一种工具,通过监视服务日志中的恶意活动,帮助保护Linux服务器免受暴力攻击和其他自动攻击。它使用正则表达式扫描服务器的日志,以防恶意尝试,并在特定时间内使用系统防火墙禁止违规IP。
Jails服务
Fail2ban使用监狱的概念。在分析服务日志中的匹配模式后,如果满足预定义条件,则服务将被监禁。满足条件后,将执行配置文件中定义的相应操作。
默认情况下,仅启用SSH监控。
我们可以添加更多服务。
示例:
# SSH servers [sshd] enable = true bantime = 10m findtime = 10min maxretry = 5 port = ssh logpath = %(sshd_log)s backend = %(sshd_backend)s
完成添加配置设置后,运行以下命令以重新启动Fail2Ban服务。
sudo systemctl restart fail2ban
Fail2Ban还配备了可用于与服务交互的客户端工具。
使用其客户端工具,我们可以检查特定服务的Fail2Ban监禁状态。
例如,要检查SSH监禁状态,请运行以下命令:
sudo fail2ban-client status sshd
要取消绑定特定的IP地址,请运行以下命令:
sudo fail2ban-client set sshd unbanip 192.168.1.1
要手动禁止IP地址,请运行以下命令:
sudo fail2ban-client set sshd banip 192.168.1.1
安装fail2ban
Fail2ban包包含在Ubuntu存储库中。
要安装它,只需运行下面的命令。
sudo apt update sudo apt install fail2ban
检查服务是否已启动并运行:
sudo systemctl status fail2ban
输出:
● fail2ban.service - Fail2Ban Service Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enab> Active: active (running) since Thu 2021-03-11 15:26:00 CST; 23s ago Docs: man:fail2ban(1) Main PID: 2982 (f2b/server) Tasks: 5 (limit: 4654) Memory: 13.6M CGroup: /system.slice/fail2ban.service └─2982 /usr/bin/python3 /usr/bin/fail2ban-server -xf start Mar 11 15:26:00 ubuntu2004 systemd[1]: Starting Fail2Ban Service. Mar 11 15:26:00 ubuntu2004 systemd[1]: Started Fail2Ban Service.
配置Fail2Ban
安装Fail2Ban时,它将安装这两个默认配置文件: /etc/fail2ban/jail.conf
和 /etc/fail2ban/jail.d/defaults-debian.conf
。
要配置fail2ban,我们不应将更改直接转到上面的配置文件,因为软件包更新时可能会被覆盖。
Fail2Ban服务按以下顺序读取配置文件。
- /etc/fail2ban/jail.conf.
- /etc/fail2ban/jail.d/.conf.
- /etc/fail2ban/jail.local.local.local.
- /etc/fail2ban/jail.d/.local.
.local
结尾的配置文件将覆盖.conf
结尾的文件 。
因此,尽可能地修改.local文件。
大多数用户都应该简单地复制jail.conf来创建jail.local文件,然后修改.local文件以实现其更改。
我们可能不需要从jail.conf文件中复制所有设置,只需要修改需要的设置即可。
为简单起见,我们将复制jail.conf文件来创建jail.local文件。
sudo cp /etc/fail2ban/jail.{conf,local}
然后开始编辑刚刚创建的配置文件:
sudo nano /etc/fail2ban/jail.local
第一个设置应该是白名单的IP地址。
忽略这些IP (即允许访问服务器的IP):
ignoreip = 127.0.0.1/8 ::1 10.16.34.67 172.16.1.0/24
默认的Bantime值是10分钟。设置禁止的时间。
#"bantime" is the number of seconds that a host is banned. bantime = 10m
findtime是禁止设置前的故障数之间的持续时间。
#A host is banned if it has generated "maxretry" during the last "findtime" #seconds. findtime = 10m
MaxRetry是IP被禁止之前的尝试数。
默认值为5
#"maxretry" is the number of failures before a host get banned. maxretry = 5