如何保护您的 Web 应用程序免受密码破解Part 2
导语:在本文中,我们讨论了密码破解的危险,并提供了减少恶意身份验证尝试的最佳实践。
什么是 Fail2ban,它是如何工作的?
Fail2ban是一种用于扫描日志文件、检测可疑活动(例如太多失败的身份验证尝试)以及阻止潜在恶意 IP 地址的工具。
这项免费服务有助于保护 Linux 机器免受暴力破解和其他自动攻击。通常,Fail2ban 用于更新防火墙规则以在指定的时间内拒绝 IP 地址。
Fail2ban 有以下好处:
· 易于设置
· 免费使用
· 可以与大量应用程序交互
· 提供大量配置参数
· 易于监控当前保护状态
· 与各种通知服务集成
尽管 Fail2ban 可以帮助您最大限度地减少错误身份验证尝试的次数,并在一定程度上降低密码破解和未经授权访问的风险,但它并不是灵丹妙药。
不利的一面是,Fail2ban 无法涵盖由于服务器身份验证策略薄弱而出现的问题。即使是最好的 Fail2ban 配置也不能替代我们上面讨论的密码保护最佳实践。此外,Fail2ban 仅适用于 Linux,不适用于 IPv6。
为了有效地保护您的服务,您还可以应用用于多因素和公共/私人身份验证机制的工具。
Fail2ban 的优缺点
Fail2ban 是如何工作的?
下面简单解释一下它的机制:
1. 任何应用程序或服务器总是将日志保存在特定文件中,包括失败的身份验证尝试的唯一日志。
2. Fail2ban 扫描这些文件,搜索与身份验证失败相关的日志。
3. 如果检测到失败的身份验证尝试,Fail2ban 会保存尝试的时间和负责的 IP 地址。
4. Fail2ban 计算在指定时间段内来自同一 IP 的失败身份验证尝试。
5. 如果 IP 地址超过了允许的尝试次数,Fail2ban 会创建一个新的防火墙规则来阻止该 IP 地址。
结果,可疑的 IP 地址将失去访问服务器的能力。经过一段可配置的时间后,IP地址可以自动解禁,也可以手动解禁。
例如,您可以配置 Fail2ban,如果任何威胁行为者发起密码破解攻击,他们的 IP 地址将被禁止五个小时。
现在,让我们探索配置过程本身。
如何配置 Fail2ban
您可以配置 Fail2ban 以读取不同应用程序的日志。开箱即用,此工具可以与以下应用程序类型交互:
· SSH 服务器
· HTTP 服务器
· Webmail 和群件服务器
· 网络应用
· HTTP 代理服务器
· FTP 服务器
· 邮件服务器
· 邮件服务器验证器
· DNS 服务器
· 来自不同类别的各种服务器应用程序
默认情况下,Fail2ban 启用使用sshd的通信,这是一个 OpenSSH 服务器进程。这意味着在几次失败的 SSH 身份验证尝试后,负责的 IP 地址将被禁止。
为了与任何应用程序交互,Fail2ban 使用Jail,它是一个过滤器和一个或多个操作的组合。此交互允许您在身份验证尝试失败后禁止 IP 地址。
监狱配置默认保存到 jail.conf 文件。如果要更改默认设置,请复制配置文件并将副本命名为 jail.local。如果 jail.local 文件存在,Fail2ban 将自动使用它而不是默认文件。
我们不建议对原始配置文件进行更改,因为万一出现任何错误,返回默认设置将非常困难。此外,一旦安装了 Fail2ban 的新更新,jail.conf 文件也将更新,您的所有自定义设置都将消失。
以下是 Fail2ban 如何确定失败的身份验证尝试:
1. 该工具具有写入 jail.local 配置文件中的服务日志文件的路径。
2. 失败的身份验证日志和常规异常会自动添加到 Fail2ban 文本过滤器中。
3. 该工具使用文本过滤器扫描日志文件。
如果您打开配置文件,您会发现 Fail2ban 可以与之交互的相当大的应用程序列表。这些应用程序的名称在括号中,如下面的示例代码所示:
# Mail servers [assp] port = smtp,465,submission logpath = /root/path/to/assp/logs/maillog.txt [courier-smtp] port = smtp,465,submission logpath = %(syslog_mail)s backend = %(syslog_backend)s [postfix] # To use another modes set filter parameter "mode" in jail.local: mode = more port = smtp,465,submission logpath = %(postfix_log)s backend = %(postfix_backend)s [postfix-rbl] filter = postfix[mode=rbl] port = smtp,465,submission logpath = %(postfix_log)s backend = %(postfix_backend)s maxretry = 1
默认情况下,Fail2ban 配置为仅与 SSH 一起使用,并且所有其他通信协议都被禁用。如果需要开启其他类型的通信,在配置文件中找到需要的类型,添加如下字符串:
enabled = true
这是一个例子:
[nginx-http-auth] enabled = true port = http, https logpath = %(nginx_error_log)s
如果需要,您还可以更改与某个应用程序交互的现有参数或添加新参数。以下是常用参数列表:
· ignoreip指定 Fail2ban 忽略的 IP 地址。默认情况下,该参数设置为忽略当前机器的流量。
· bantime 以秒为单位设置禁令持续时间。默认值为 600 秒。
· findtime定义了监控来自每个 IP 地址的失败身份验证尝试的时间段。默认值为 600 秒。
· maxretry指定在 findtime 指定的时间内每个地址的失败登录尝试限制。
· usedns确定是否使用反向 DNS 进行阻止。如果设置为 NO,则 Fail2ban 将阻止 IP 地址而不是主机名。如果设置为 YES,该工具将尝试使用反向 DNS 来查找主机名并阻止它。默认值为 WARN。它就像 YES 值一样工作,但也会记录一个警告。系统工程师可以稍后查看所有警告。
· 协议指定将被阻止的流量类型。默认情况下它是 TCP。
· port指定要禁止的端口。
· logpath显示日志文件的路径。
注意:上面的列表没有描述所有的 Fail2ban 参数。您可以在配置文件中找到所有这些。
您可以在 /etc/fail2ban 文件夹中的文件中找到在logpath参数中默认设置的日志文件路径(例如,上面代码示例中的nginx_error_log ):
· paths-common.conf — 具有默认服务日志路径的文件
· path-opensuse.conf、paths-arch.conf、paths-debian.conf — 包含不同 Linux 系统的特定路径的文件
如果您打开上述文件,您可以看到类似于以下的日志文件路径:
apache_error_log = /var/log/apache2/*error.log apache_access_log = /var/log/apache2/*access.log auditd_log = /var/log/audit/audit.log exim_main_log = /var/log/exim/mainlog nginx_error_log = /var/log/nginx/*error.log nginx_access_log = /var/log/nginx/*access.log
如有必要,您可以编辑指示应在日志中搜索哪些文本以确定身份验证失败的过滤器。每个过滤器都位于 /etc/fail2ban/filter.d 文件夹中的一个单独文件中。
截图 1. /etc/fail2ban/filter.d文件夹内的过滤器列表
当您打开任何过滤器文件时,您将看到一个带有所需身份验证失败文本的正则表达式,如下例所示:
屏幕截图 2. 过滤验证失败的文本
配置完成后,使用以下命令重新加载 Fail2ban:
sudo fail2ban-client reload
如果您只更改了一个Jail文件的设置,则无需重新启动该工具。只需使用以下命令重新加载它:
此外,您可以配置 Fail2ban 以与配置文件中不存在的任何应用程序进行交互。您需要做的就是添加您的自定义配置,如上所述。
如何使用 Fail2ban
要检查当前启用了哪些监狱,请使用以下命令:
sudo fail2ban-client status
这是响应的示例:
Status |- Number of jail: 2 `- Jail list: nginx-http-auth, sshd
如您所见,服务器上启用了nginx-http-auth 和 sshd Jails 。如果要查看任何Jail参数的值,则无需打开配置文件;只需使用以下命令:
这是一个代码示例,它向我们展示了 sshd Jail maxretry 等于 5:
sudo fail2ban-client get sshd maxretry 5
如果监狱超过了失败的身份验证尝试限制,Fail2ban 将禁止在监狱配置中为 IP 地址指定的端口。要检查监狱状态,请使用以下命令:
下面是一个响应示例,它向我们展示了两个 IP 地址当前被禁止 SSH 访问:
Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 25 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 2 |- Total banned: 5 `- Banned IP list: 192.168.10.107 192.168.10.115
如果您在 IP 在禁止列表中时尝试访问服务器,则会收到如下“连接被拒绝”错误:
ssh: connect to host 192.168.10.105 port 22: Connection refused
如果 IP 地址被任何 HTTP 服务器Jail禁止,错误将类似:
curl: (7) Failed to connect to 192.168.10.105 port 80: Connection refused
您还可以使用以下命令手动将任何 IP 地址添加到禁止列表:
这是一个例子:
sudo fail2ban-client set nginx-http-auth banip 10.100.1.210
要手动解禁 IP 地址,请使用以下命令:
这是一个例子:
sudo fail2ban-client set nginx-http-auth unbanip 10.100.1.210
考虑到这一点,让我们开始在 Fail2ban 中配置通知。
如何配置 Viber 聊天机器人以接收 Fail2ban 通知
如果要监控 Fail2ban 活动,请通过以下三个步骤配置实时活动通知:
1. 配置您要使用的任何通知服务
2. 准备 Fail2ban 动作配置文件
3. 在 jail.local 文件中更新action参数的值
Fail2ban 具有使用电子邮件服务的配置。您需要做的就是在服务器上配置服务。
但是,如果您想通过 Viber 等信使服务接收通知怎么办?让我们讨论如何配置它!
首先,要将 Viber 用作通知服务,您需要创建一个 Viber 聊天机器人。您可以在Viber API 文档页面上找到有关 Viber 聊天机器人设置和配置的文档。
准备好聊天机器人后,请确保执行以下步骤:
1. 获取 Viber 聊天机器人的身份验证令牌。您可以在Viber 管理面板页面上找到它。
2.在订阅 Viber 聊天机器人的所有用户列表中找到您的用户 ID。为此,请使用以下 HTTP 请求:
响应将向您显示成员列表,如下例所示:
"members":[{"id":"","name":"John Doe","role":"admin"}]
选择必要成员的 ID 并复制。
现在,您可以开始配置 Fail2ban。转到 /etc/fail2ban/action.d 文件夹,其中包含所有可能的 Fail2ban 操作的配置。
为 Viber 通知创建一个新的配置文件。我们将其命名为 viber_notifications.conf。现在将以下内容添加到文件中:
让我们弄清楚上面的字符串是什么意思以及我们可以配置什么:
· actionban和actionunban参数描述了当 Fail2ban 禁止或解禁可疑 IP 地址时需要执行的操作。在我们的例子中,HTTP 请求会将消息从您的 Viber 聊天机器人发送给您指定的用户。
· < Auth Token >和< user id >是我们之前讨论过的参数。只需粘贴您的身份验证令牌和您复制的用户名。
· sender是配置通知发送者名称的参数。在我们的示例中,我们使用名称“Fail2ban”。
· type是帮助您配置消息类型的参数。您可以使用 Viber 发送不同的消息类型。在我们的示例中,我们使用文本类型。
· text是一个参数,其中包含机器人将发送的消息。您可以向文本添加不同的变量。例如,< ip >代表被禁止的 IP 地址、< name >监狱名称和< failures >失败次数。
· name = default是一个字符串,表示将动态分配监狱名称
我们的下一步是配置 jail.local。为此,您需要在必要的Jail部分中添加操作参数或更新[DEFAULT]部分中的默认参数。该参数应包含两个操作:第一个用于 IP 禁止,第二个用于 Viber 通知。
下面是一个使用action参数的例子
action = %(action_)s viber_notifications
注意:%(action_)s是默认操作值。此操作将禁止 IP 地址。让我们将 Viber 操作配置名称“viber_notifications”添加到第二个字符串。
现在,由于 jail.conf 文件发生了变化,您需要重新加载 Fail2ban 客户端并重新启动服务:
sudo fail2ban-client reload systemctl restart fail2ban
聊天机器人将如下所示:
屏幕截图 3. Viber 聊天机器人中的 Fail2ban 通知
配置完成。现在您可以使用 Viber 聊天机器人实时监控 Fail2ban 活动!
结论
密码破解攻击是对任何应用程序的严重威胁。恶意行为者使用不同的方法来未经授权访问用户帐户并窃取用户的敏感数据。
为了保护您的应用程序免受此类威胁,请应用严格的身份验证策略并使用 Fail2ban 等服务设置可靠的密码破解保护。
在 Apriorit,我们在构建每个项目时都考虑到网络安全。我们的Web 应用程序开发和质量保证专家已经掌握了威胁保护应用程序的开发以及包括 Fail2ban 在内的不同安全服务的配置。
发表评论