Fail2ban 介绍
Fail2Ban 是一款开源的防护软件,旨在保护计算机系统免受恶意攻击和暴力破解。它通过监视系统日志文件,检测到多次失败的登录尝试、恶意行为或其他不寻常活动,然后采取预先配置的措施来应对这些威胁,比如暂时封禁攻击者的 IP 地址。
以下是 Fail2Ban 的一些关键特点和功能:
- 监视日志文件:Fail2Ban 主要通过监视系统的日志文件来检测潜在的安全问题。它可以监视 SSH、FTP、SMTP 等服务的日志文件,并分析其中的登录尝试、错误信息等。
- 基于规则的匹配:Fail2Ban 使用基于正则表达式的规则来匹配日志文件中的事件。通过配置适当的规则,可以识别恶意行为,如暴力破解密码、拒绝服务攻击等。
- 自动封禁:一旦 Fail2Ban 检测到恶意行为,例如多次失败的登录尝试,它会自动封禁攻击者的 IP 地址。封禁可以是暂时的,也可以是永久的,具体取决于配置。
- 灵活的配置:Fail2Ban 的配置非常灵活,可以根据特定的需求和威胁模式进行定制。用户可以配置规则、封禁时长、白名单等参数,以适应不同的环境和安全策略。
- 日志和报告:Fail2Ban 提供了详细的日志和报告,记录了检测到的事件、封禁的 IP 地址以及采取的措施。这些日志和报告对于审计和调查安全事件非常有用。
工作原理
Fail2ban 是一款功能强大的工具,它可以通过监控日志文件(例如 /var/log/auth.log 和 /var/log/apache/access.log)来帮助保护您的服务器免受暴力攻击。该软件可以检测到多次登录系统的失败尝试,然后在一定时间内自动禁止违规 IP 地址。Fail2ban 可以执行各种操作,包括更新 Iptable 防火墙规则、将 IP 地址添加到 TCP Wrapper 的 hosts.deny 表、发送电子邮件通知以及执行任何用户定义的操作。
安装
要在您的服务器上安装 Fail2ban,您首先需要确保您具有管理权限。确认这一点后,您可以继续使用您选择的包管理器安装软件。例如,在 Ubuntu 上,您可以使用以下命令:
$ sudo apt-get install fail2ban -y
检查状态
$ sudo systemctl status fail2ban
配置
所有配置文件都位于 /etc/fail2ban/ 目录中。您应该能够看到目录中的文件,如下所示:
jail.conf 是主配置文件,包含所有可用选项。它包含 HTTP、SSH、FTP、Webmail、WebApplications 等服务的配置文件。一些最常用的微调参数是:
- bantime:主机被禁止的秒数。
- findtime:如果主机在“findtime”期间生成了“maxretry”,则会被禁止。
- maxretry:主机被禁止之前的失败次数。
- ignoreip:fail2ban 将忽略的 IP 地址。
- port:服务名称或端口。
- logpath:fail2ban 检查的日志文件路径。
一般不建议直接更改 jail.conf 文件。可以拷贝一个新的 jail.local 文件来管理 SSH 的安全,这样可以轻松跟踪 jail,并最大限度地减少错误配置的机会。
$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
为 SSH 配置 Fail2Ban
在 ubuntu 上,ssh 的 fail2ban 已默认配置。您可以使用以下命令验证 jail 是否已启用:
$ sudo fail2ban-client status
但是需要手动配置 jail.local 文件。在该文件中找到 [sshd]并进行配置。如下是示范,可以按照自己的实际情况更改。
[sshd]
# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode = normal
enable = true # 打开sshd保护
port = ssh # ssh端口。也可以是端口号
filter = sshd
logpath = %(sshd_log)s
backend = %(sshd_backend)s
bantime = 7d # block 7 days, 604800s
findtime = 1d # fail in 1 hour
maxretry = 5 # max retry 5 times
更改完配置文件后需要重新启动服务以生效。可以使用以下命令完成此操作:
$ systemctl restart fail2ban.service
检查监狱状态和禁止/取消禁止 IP
我们可以使用以下命令检查监狱的状态:
$ fail2ban-client status
我们可以通过故意输入错误的 ssh 身份验证参数来测试这一点。达到配置的 maxretry 后,该 ip 将被列入配置 bantime 的黑名单。那些偷偷摸摸干坏事的 IP 也列出来亮个相。
检查位于 /var/log/fail2ban.log 的 fail2ban 日志后,我们可以看到 fail2ban 采取的措施
2024-05-04 13:15:38,352 fail2ban.actions [138750]: NOTICE [sshd] Restore Ban 120.26.123.230
2024-05-04 13:15:38,373 fail2ban.actions [138750]: NOTICE [sshd] Restore Ban 182.92.180.6
2024-05-04 13:15:38,376 fail2ban.actions [138750]: NOTICE [sshd] Restore Ban 193.201.9.156
2024-05-04 13:15:38,380 fail2ban.actions [138750]: NOTICE [sshd] Restore Ban 193.32.162.36
2024-05-04 13:15:38,387 fail2ban.actions [138750]: NOTICE [sshd] Restore Ban 64.227.140.112
2024-05-04 13:15:38,398 fail2ban.actions [138750]: NOTICE [sshd] Restore Ban 85.209.11.227
为了删除 IP 地址,我们可以发出以下命令:
$ sudo fail2ban-client set sshd unbanip <REMOTE-IP-ADDRESS>
我们还可以使用以下命令禁止特定的 IP:
$ sudo fail2ban-client set sshd banip <REMOTE-IP-ADDRESS>
debian12下安装的一些折腾
配置文件:/etc/fail2ban/jail.d/defaults-debian.conf (和CENTOS的JAIL.LOCAL不同):
[DEFAULT]
# 用于指定哪些地址ip可以忽略 fail2ban 防御,以空格间隔。
#ignoreip = 127.0.0.1/8
# ssh客户端主机被禁止的时长(默认单位为秒)
bantime = 86400
# 过滤的时长(秒)
findtime = 600
# 匹配到的阈值(允许失败次数)
maxretry = 2
[ssh-iptables]
# 是否开启
enabled = true
# 过滤规则
port = 22
filter = sshd
# debian日志文件的路径
logpath = /var/log/auth.log
# centos7日志文件的路径
#logpath = /var/log/secure
# 匹配到的阈值(次数)
maxretry = 2
fail2ban启动命令:
sudo systemctl start fail2ban
发现不加sudo
不行,很奇怪。
启动发现fail2ban启动失败,原因是找不到日志文件,发现默认情况下,debian不再有/var/log/auth.log文件,解决办法是安装rsyslog,安装后就有auth.log文件了。
apt-get install rsyslog
systemctl restart fail2ban
systemctl status fail2ban
这次fail2ban启动正常了,也开始工作了。但发现ban的ip尽然还能访问,查了一圈发现是没有iptables,fail2ban依赖于iptables实现ban ip,好吧,安装iptables:
apt install iptables
现在一切正常了。
常用命令:
# 检查 Fail2Ban 服务状态
systemctl status fail2ban
# 如果 Fail2Ban 服务未激活,可以使用以下命令启动它:
sudo systemctl start fail2ban
#如果想在系统启动时默认启用 Fail2Ban,使用以下命令:
sudo systemctl enable fail2ban
#查看当前被禁止登陆的ip
fail2ban-client status ssh-iptables
[root@debian]# fail2ban-client status ssh-iptables
Status for the jail: ssh-iptables
|- Filter
| |- Currently failed: 0 # 当前失败次数
| |- Total failed: 3 # 总失败次数
| `- File list: /var/log/auth.log # 日志文件路径列表
`- Actions
|- Currently banned: 1 # 当前禁止访问的IP数量
|- Total banned: 1 # 禁止IP总数
#取消ban某个ip
fail2ban-client set ssh-iptables unbanip 42.34.45.78
#如果修改了配置需要重启生效:
fail2ban-client reload
删除 Fail2Ban
如果 Fail2Ban 服务仍处于活动状态,请先禁用它以确保卸载过程顺利进行。禁用该服务可防止其在后台运行并干扰卸载。
使用以下命令禁用Fail2Ban服务并停止其运行:
sudo systemctl disable fail2ban --now
此命令立即禁用 Fail2Ban 服务(–now 标志)并确保它不会在未来系统重启时自动启动。
禁用服务后,您可以使用以下命令卸载 Fail2Ban:
sudo apt remove fail2ban
评论区