最近在家里新添置了一台机器用于个人开发用途,经常需要从远程登入来进行操作,SSH登录的安全性是一个需要考虑的问题。虽然上面没有运行非常关键的软件,但是定期检查安全漏洞还是必须的。最近查看机器log信息果然发现了问题。
sudo less /var/log/auth.log
返回如下的log信息:
果然有人在偷偷摸摸非法登录。为了杜绝可能的安全隐患,决定使用 fail2ban 来进一步保护一下 SSH。
Fail2ban 介绍
Fail2Ban 是一款开源的防护软件,旨在保护计算机系统免受恶意攻击和暴力破解。它通过监视系统日志文件,检测到多次失败的登录尝试、恶意行为或其他不寻常活动,然后采取预先配置的措施来应对这些威胁,比如暂时封禁攻击者的 IP 地址。
以下是 Fail2Ban 的一些关键特点和功能:
- 监视日志文件:Fail2Ban 主要通过监视系统的日志文件来检测潜在的安全问题。它可以监视 SSH、FTP、SMTP 等服务的日志文件,并分析其中的登录尝试、错误信息等。
- 基于规则的匹配:Fail2Ban 使用基于正则表达式的规则来匹配日志文件中的事件。通过配置适当的规则,可以识别恶意行为,如暴力破解密码、拒绝服务攻击等。
- 自动封禁:一旦 Fail2Ban 检测到恶意行为,例如多次失败的登录尝试,它会自动封禁攻击者的 IP 地址。封禁可以是暂时的,也可以是永久的,具体取决于配置。
- 灵活的配置:Fail2Ban 的配置非常灵活,可以根据特定的需求和威胁模式进行定制。用户可以配置规则、封禁时长、白名单等参数,以适应不同的环境和安全策略。
- 日志和报告: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 服务器受到良好保护,可抵御恶意攻击和未经授权的访问尝试。