目 录CONTENT

文章目录

安装配置Fail2ban以防止SSH爆破

华灯
2024-09-03 / 0 评论 / 0 点赞 / 6 阅读 / 18784 字

image-20240903222243322

Fail2ban 介绍

Fail2Ban 是一款开源的防护软件,旨在保护计算机系统免受恶意攻击和暴力破解。它通过监视系统日志文件,检测到多次失败的登录尝试、恶意行为或其他不寻常活动,然后采取预先配置的措施来应对这些威胁,比如暂时封禁攻击者的 IP 地址。

以下是 Fail2Ban 的一些关键特点和功能:

  1. 监视日志文件:Fail2Ban 主要通过监视系统的日志文件来检测潜在的安全问题。它可以监视 SSH、FTP、SMTP 等服务的日志文件,并分析其中的登录尝试、错误信息等。
  2. 基于规则的匹配:Fail2Ban 使用基于正则表达式的规则来匹配日志文件中的事件。通过配置适当的规则,可以识别恶意行为,如暴力破解密码、拒绝服务攻击等。
  3. 自动封禁:一旦 Fail2Ban 检测到恶意行为,例如多次失败的登录尝试,它会自动封禁攻击者的 IP 地址。封禁可以是暂时的,也可以是永久的,具体取决于配置。
  4. 灵活的配置:Fail2Ban 的配置非常灵活,可以根据特定的需求和威胁模式进行定制。用户可以配置规则、封禁时长、白名单等参数,以适应不同的环境和安全策略。
  5. 日志和报告: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/ 目录中。您应该能够看到目录中的文件,如下所示:

img

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

img

但是需要手动配置 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

img

我们可以通过故意输入错误的 ssh 身份验证参数来测试这一点。达到配置的 maxretry 后,该 ip 将被列入配置 bantime 的黑名单。那些偷偷摸摸干坏事的 IP 也列出来亮个相。

img

检查位于 /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

现在一切正常了。

4

常用命令:

# 检查 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
0

评论区