技术点滴 · 2024年5月4日 0

安装和配置 Fail2ban 以保护 SSH

最近在家里新添置了一台机器用于个人开发用途,经常需要从远程登入来进行操作,SSH登录的安全性是一个需要考虑的问题。虽然上面没有运行非常关键的软件,但是定期检查安全漏洞还是必须的。最近查看机器log信息果然发现了问题。

sudo less /var/log/auth.log

返回如下的log信息:

果然有人在偷偷摸摸非法登录。为了杜绝可能的安全隐患,决定使用 fail2ban 来进一步保护一下 SSH。

Fail2ban 介绍

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

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

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

Fail2Ban 是一款功能强大的工具,可以帮助系统管理员保护计算机系统免受各种网络攻击的威胁,提高系统的安全性和稳定性。它已经被广泛应用于各种网络环境中,包括个人计算机、企业服务器和云平台。

工作原理

Fail2ban 是一款功能强大的工具,它可以通过监控日志文件(例如 /var/log/auth.log 和 /var/log/apache/access.log)来帮助保护您的服务器免受暴力攻击。该软件可以检测到多次登录系统的失败尝试,然后在一定时间内自动禁止违规 IP 地址。Fail2ban 可以执行各种操作,包括更新 Iptable 防火墙规则、将 IP 地址添加到 TCP Wrapper 的 hosts.deny 表、发送电子邮件通知以及执行任何用户定义的操作。

在这篇文章中,我们将向您展示如何安装和配置 Fail2ban 以保护您的服务器免受 SSH 和 apache 基本身份验证的暴力登录攻击。

安装

要在您的服务器上安装 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>

结论

总之,fail2ban 是一个强大的工具,可以大大增强 SSH 服务器的安全性。通过安装和配置 fail2ban,您可以防止系统受到暴力攻击和未经授权的访问尝试。使用 fail2ban,您可以指定规则来阻止显示恶意行为的 IP,并为您的 SSH 服务器提供额外的安全层。

总体而言,fail2ban 是任何 SSH 服务器的宝贵补充,值得花功夫正确设置和配置。有了 fail2ban,您可以放心,您的 SSH 服务器受到良好保护,可抵御恶意攻击和未经授权的访问尝试。