ModSecurity 中的白名单

我们的文章分为两部分 第一部分点击“如何将 IP 或 URI 列入白名单”,适用于对 ModSecurity 有点熟悉但想进一步了解该过程的人。 我们的第二部分检查我们为什么配置 ModSecurity 以及如何防止服务器的安全性妨碍我们的工作。 如果您有一个完全托管的 Liquid Web 服务器,请联系我们的 Heroic 支持团队以获取白名单方面的帮助!

如何将 IP 或 URI 列入白名单

“ModSecurity 是一个用于实时 Web 应用程序监控、日志记录和访问控制的工具包。” (modsecurity.org)。 简单来说,这意味着 ModSec,也称为 mod_security 或 ModSecurity,是一种 Web 应用程序防火墙,可以主动寻找对系统的攻击并阻止恶意活动。 但是,有时这些规则会在合法工作发生时触发,阻止您的 IP 并阻止您或您的开发人员的 IP,直到您可以删除 IP 阻止。 被阻止的方法称为白名单,它本质上允许特定 IP 访问服务器。 有几种方法可以通过 IP 或 URI 将 ModSec 中的请求列入白名单(URI 是网站上的特定页面)。

入门

  1. 查找您的 IP 或向您的开发人员询问他们的 IP。 (您可以通过以下方式找到它 ip.BYNSS.com)如果您或您的开发人员有一个静态 IP(一个不会更改的),您可以将 ModSec 规则列入白名单的一种方法是通过 IP。
  2. 找到 ModSec 错误 Apache 使用以下命令记录错误日志(请务必使用您的 IP 修改命令,替换“IP here。”):
    grep ModSec /usr/local/apache/logs/error_log | grep “IP here”.
  3. 此命令的输出将为您提供来自您或您的开发人员 IP 的 ModSecurity 命中列表,您可以在下面看到。 虽然这些说明可能看起来令人生畏,但您只需要注意突出显示的 3 位信息。 请注意,输出 查看文件时不会显示这些颜色.

笔记蓝色的 = 客户端,触发规则的 IP

红色的 = ModSec 中触发规则的 ID 号
绿 = URI,错误开始的位置

[Fri May 25 23:07:04.178701 2018] [:error] [pid 78007:tid 139708457686784] [client 61.14.210.4:30095] [client 61.14.210.4] ModSecurity: Access denied with code 406 (phase 2). Pattern match "Mozilla/(4|5)\.0$" at REQUEST_HEADERS:User-Agent. [file "/etc/apache2/conf.d/modsec2.BYNSS.conf"] [line "109"] [id "20000221"] [hostname "67.227.209.163"] [uri "/db/index.php"] [unique_id "WwjPWChxvG1CO4kz-D55eQAAACU"]

按 IP 列入白名单:

1. 一旦您有正确的 ModSec 错误,您将需要编辑 ModSec 配置。 如果您使用的是 Easy Apache 4 你会找到这个路径的配置文件:
/etc/apache2/conf.d/modsec2/whitelist.conf

2. 使用您喜欢的文本编辑器打开文件,例如 vim、nano 或文件管理器,如下所示:

vim /etc/apache2/conf.d/whitelist.conf

3. 上面的蓝色文本将是您从原始错误中列入白名单的 IP 地址。 您必须保留反斜杠 () 和上胡萝卜 (^) 才能正确读取 IP。 因此,它总是看起来像:

“^192.168.896.321”

对于红色标注的 id,您将更改冒号后的数字,即 Apache 我们在上面看到的错误日志。 这看起来类似于:

编号:2000221

添加以下代码并编辑彩色部分以匹配您的预期 IP。SecRule REMOTE_ADDR "^64.14.210.4" "phase:1,nolog,allow,ctl:ruleEngine=off,id:20000221"

按 URI 列入白名单:

如果您的 IP 是动态的(不断变化的)并且您一直被防火墙阻止,最好通过 URI(ModSec 错误中的黄色项目)将其列入白名单。

1. 首先打开 Easy Apache 4 配置文件:

vim /etc/apache2/conf.d/whitelist.conf

2. 将以下文本添加到配置中。 记住要注意突出显示的部分。 更改黄色的“/db/index.php”以匹配您的 URI 和红色的 id 以匹配您的错误 id(请勿在此使用冒号)。

<LocationMatch "/db/index.php">
SecRuleRemoveById 20000221
</LocationMatch>

3. 白名单的最后一步,b在您完成此过程之前,请确保您已正确设置白名单。 为了容易 Apache 4 你将运行命令:
apachectl -t

只要命令返回“语法确定” 您可以安全地通过重新启动来激活白名单 Apache. 否则,请查看白名单以确保语法与上述说明正确匹配。

4.最后,重启 Apache 使用以下命令。

/scripts/restartsrv_httpd

您已成功将自己列入 ModSec 的白名单!

使用 ModSec

网络安全是一个九头蛇; 一旦一个威胁被切断,另外两个就会重新生长。 虽然这不是一个新的类比,但在我们与网络、计算机和服务器面临的威胁作斗争时,理解这一点很重要。 考虑到安全性带来的所有复杂性,我想谈谈充分配置 ModSec 以阻止威胁,同时仍然允许您在网站上工作。 通常,在服务器安全方面,过多的保护会阻碍有效性。

为了 example,假设您在服务器上进行了以下设置:

  • 您不允许 root SSH 登录到服务器
  • 对任何 SSH 登录使用双重身份验证
  • 使用 SSH 密钥 sudo 用户并需要其他安全保护措施

虽然这种类型的配置是安全的,但登录系统需要更长的时间才能快速编辑您的设置, 一把双刃剑; 如何在不束缚双手的情况下保证服务器安全? 一个了不起的 example 这如何发挥作用是使用 ModSec。

如果 ModSec 错误地标记了您的工作,它可能会阻止您的 IP。 虽然此模块提高了系统安全性,但您需要注意正确实施和“确定”该技术。 从这个意义上说,范围界定意味着管理风险,即关注对安全性重要的事情,同时仍然允许在服务器上进行工作而干扰最小。 为了排除对您服务器的合法请求,例如当您通过插件编辑网站代码时,ModSec 可以选择将规则或 IP 列入白名单并保持您的工作正常进行。

只要 IP 永远不会改变(即静态 IP;请参阅 文章在这里 了解更多) 并且仅限于您信任的人。 此方法可防止 ModSec 将您的请求视为恶意请求并阻止您的 IP。 这种做法的缺点是,如果有人(比如不满意的员工)可以访问您的网络,他们现在可以绕过 ModSec 攻击您的服务器。

对于非静态(动态)IP,将 IP 列入白名单的问题显而易见。 随着动态 IP 的不断变化,它创造了利用您的服务器的潜力,因为有人可以使用旧 IP 访问服务器。 白名单特定规则来拯救一天! 当您按规则列入白名单时,您可以进行精细编辑并将规则限制为特定域和 URI,从而保护服务器的其余部分免受与同一规则相关的攻击!

ModSecurity 示例

ModSec 读取一系列规则并将它们应用于向 Web 服务器发出的传入请求。 一个 example 一个块的样子是:

[Sat Jun 30 02:21:56.013837 2018] [:error] [pid 79577:tid 139862413879040] [client 120.27.217.223:24397] [client 120.27.217.223] ModSecurity: Access denied with code 406 (phase 2). Pattern match "Mozilla/(4|5)\.0$" at REQUEST_HEADERS:User-Agent. [file "/etc/apache2/conf.d/modsec2.BYNSS.conf"] [line "109"] [id "2000064"] [hostname "67.227.192.139"] [uri "/mysql/index.php"] [unique_id "WzchhAjuZ6wPAzo9AwW1WwAAAE8"]

这个错误显示 Apache 阻止了对 /mysql/index.php 文件的潜在攻击。 这是一个类似于在 Drupal 或 WordPress 等程序中编写或编辑代码时出现的错误。

评估 ModSecurity

如果您在处理代码时一直被防火墙阻止,ModSec 可能是罪魁祸首。 ModSec 错误可以在 Apache 错误日志(在 cPanel 中,路径是 /usr/local/apache/logs/error_log)。 短语“ModSec”可以快速从日志中分离出来(通过命令’grep “ModSec” /usr/local/apache/logs/error_log‘)。 通过将您或您的开发人员 IP 与日志进行比较,您将能够识别已停止的合法请求。 通过仔细检查您组织中的某个人是否提出了这些请求,验证这些请求是否有效。 完成此操作后,您可以继续为错误设置白名单, 按照上述步骤.

同样,我们希望为攻击留出最少的回旋余地,并确保我们可以继续工作。 如果您无法拥有受信任的静态 IP,则需要使用 白名单 URI 方法,提供特定页面作为豁免。 完成后,从配置文件中删除两个列入白名单的项目,以防发生真正的攻击。

在临别之际,我鼓励您探索 ModSec 并了解该软件的更多细节。 探索不同的白名单方法需要大量学习,最重要的是有助于加强服务器安全性。 与往常一样,我们完全支持的客户可以联系我们的乐于助人的人力支持团队寻求帮助。 查看我们知识库中有关安全性的文章,例如 马尔代! 这是了解您的服务器并加深对服务器安全性的理解的另一种绝佳方式。