Web 应用程序防火墙 (ModSecurity)
概要: In this topic, you will learn how to protect your web applications (such as WordPress, Joomla!, or Drupal) from attacks using ModSecurity, an Open Source web application firewall.
The topic gives a short overview of the way ModSecurity works, and also explains how to enable and configure it.
为了检测和阻止对 web 应用程序的攻击,web 应用程序防火墙 (ModSecurity) 会检测所有违反规则集的到 web 服务器的请求以及来自服务器的相关响应。如果检查成功,该 HTTP 请求就会被传递到网站内容以检索内容。如果检测失败,则会执行预定义的操作。
Plesk for Linux 和 Plesk for Windows 都支持 ModSecurity。以 web 服务器 (Apache、Nginx 或 IIS) 模块的形式工作。
启用 ModSecurity
若要启用 web 应用程序防火墙:
-
转到 工具与设置 > Web 应用程序防火墙 (ModSecurity) (在 “安全性”下)。
若未看到该链接,请进入 工具与设置 > 更新 > 添加/移除组件 > 主机 组里安装 ModSecurity 组件。
-
设置 web 应用程序防火墙模式为 启用 或 仅检测 。会针对一组规则对每次接收的 HTTP 请求以及相应响应进行检查。如果检查成功,该 HTTP 请求就会被传递到网站以检索内容。如果检查失败,该事件将会被记录。在 仅检测 模式中,不会执行任何其他操作。在 启用 模式中,HTTP 响应将会提供一个错误代码。
注解: 可在服务器和域名级别范围设置 web 应用程序防火墙模式。但是,域名级别模式不能高于服务器级别模式的设置。例如,如果服务器级别的 web 应用程序防火墙在 仅检测 模式中运行,您将无法为域名设置 启用 模式。只会显示 禁用 和 仅检测 模式。
-
(Plesk for Linux only) Go to the “Settings” tab, and then select the desired ModSecurity version from the Run rules on drop-down menu:
- Apache (ModSecurity 2.9) (recommended). ModSecurity 2.9 only works for domains with “Proxy mode” enabled in Apache & nginx Settings.
- Nginx (ModSecurity 3.0). ModSecurity 3.0 can only use rule sets from OWASP and Comodo. We strongly recommend trying ModSecurity 3.0 on a test server before using it in your production environment.
-
选择一个将被 web 应用程序防火墙引擎为每个接收 HTTP 请求进行检测的可用规则集,或上传自定义规则集。您可以设置以下规则集:
-
Atomic Standard(免费,可升级到 Atomic Advanced)。与 Plesk 绑定的 Atomic ModSecurity 规则的 starter 免费版本。包含每月发行的重要安全功能和 bug 修复程序。欲了解该规则集中的所有规则,请参阅 Atomic ModSecurity 规则集 。
-
OWASP (免费)。OWASP ModSecurity Core Rule Set (CRS) 会对在 web 应用程序中找到的未知漏洞提供通用保护。该规则集免费。该规则集非常严格,生产使用需要额外调整。当选定了该规则集时,部分 WordPress 功能失效,web 邮箱和文件共享完全不能工作。因而可使用 Atomic 或 Comodo 规则集来替代。
-
(Plesk for Linux) Comodo(免费)。一个简单易用、可自定义、基于规则的流量控制系统,能够保护基于web的应用程序,使用频繁更新的规则数据库防止新出现的黑客技术的攻击。
-
Atomic Advanced 。最新最强大的规则版本,所有性能得以提升,新增安全功能,由 Atomicorp GotRoot 每日发行 bug 修复程序。这是一个商业性的规则集,完全支持和适合生产用途。Plesk 还提供 Security Core Complete by Atomicorp 额外的功能,可以在 Plesk 中启用该规则集。您可以通过以下方式获取额外的功能:
- 可直接在 Plesk 在线商店 中购买 Advanced ModSecurity Rules by Atomicorp 产品。
- 如果您已经有 Plesk 许可证,则可以通过 Plesk Partner Central UI 或 Partner API 添加额外的功能(详情请参阅 Partner Central 用户指南或 Partner API 3.0 参考)。
- 如果您已经有 Plesk 许可证但是无法访问 Plesk 合作伙伴中心,可联系您的提供商。
如果您在 Atomic 网站上已经有帐户,您可以提供您的用户名和密码以启用该规则集。
注解: 若您获取此额外的功能,Plesk 界面将会显示 Atomic Advanced 而不是 Atomic Standard(免费,可升级到 Atomic Advanced),表示这是完整的 Atomic Advanced ModSecurity 规则集。
欲了解该规则集中的所有规则,请参阅 Atomic ModSecurity 规则集 。
-
自定义规则集 。您可以上传自定义的 web 应用程序防火墙规则集,例如,Atomic 的试用包或 Comodo 的免费包。支持的格式:zip、tar.gz、tgz、tar.bz2、conf。
-
-
若要自动更新选定的规则集,请选择 更新规则集 复选框并选择更新时段。
-
选择预设的参数集或指定自定义的 ModSecurity 指令。您可以选择以下预设的参数集:
-
Fast ,当分析 HTTP 请求 URI和部分标头时。该模式消耗的 CPU 最少。
-
Tradeoff, 当分析HTTP 请求 URI、标头和请求 POST 数据时。该模式在质量和性能之间有很好的平衡。
-
Thorough ,当分析完整的 HTTP 请求头、POST 请求数据和HTTP 响应正文时。该模式消耗的 CPU 资源最多,但是推荐用于需要特殊安全措施的网站。例如,在线商店接受卡支付。
注解: 为了达到最优性能,web 应用程序防火墙需要本地的 DNS 服务器启用请求缓存功能。否则,当启用 web 应用程序防火墙时您的网站可能会运行很慢。
-
日志文件 (Linux)
在 Linux 系统上,ModSecurity 使用两个地址来存储日志:
- ModSecurity 审计日志(位于
/var/log/modsec_audit.log
)非常详细,该日志被整个 Plesk 服务器使用。当 ModSecurity 检测到任何发生的事件时,就会在审计日志文件中生成一个条目。若要查看 ModSecurity 审计日志,请进入 工具与设置 > Web 应用程序防火墙 (ModSecurity) > 点击 日志存档 链接 (在 ModSecurity 审计日志 部分)。您可在此查看 ModSecurity 日志文件和其修改日期,以及下载日志文件。 - 域名的 Apache 错误日志(位于
/var/www/vhosts/DOMAIN.TLD/logs/error_log
)只包含有关网站错误的简要信息。您可以在客户面板上的 网站与域名 > <domain_name> > 日志 > 选择仅 Apache 错误 和 nginx 错误 而不是右边的 所有日志 以查看某个网站的错误日志。
日志文件 (Windows)
在 Windows 系统上,ModSecurity 审计日志是域名级别的,位于 %plesk_dir%ModSecurity\vhosts\<domain's GUID>\logs
(其中 %plesk_dir%
是 Plesk 的默认安装目录)。
禁用规则
当您修改 web 应用程序防火墙模式从 禁用 或 仅检测 到 启用 时,网站可能会停止运行。在网站错误日志中您可以找到类似 403
、 404
或 500
的错误代码,您把 web 应用程序防火墙模式更改回 仅检测 或 禁用 时这些代码则不会出现。如果出现这样的情况,请分析 ModSecurity 审计日志查找原因。您可以关闭特别严格的安全规则或调整网站。
要找出为何一个网站上的 HTTP 请求无法完成:
-
查看网站的审计日志文件。
在 Plesk for Linux 中,您可以使用 Plesk 的 UI 查看日志:进入 工具与设置 > Web 应用程序防火墙 (ModSecurity) 点击 ModSecurity 日志文件 链接下载审计日志并在新的浏览器窗口中打开该日志。
-
使用搜索(在大部分的 web 浏览器中按下
Ctrl+F
)查找出问题的网站(域名)。例如,your_domain.tld
。浏览器将会高亮突出某些项,如HOST: your_domain.tld
. 在凸显条目以上的三行中,找到如--eece5138-B--
的字串。连字符中间的八个字符(即eece5138
)是 HTTP 请求触发的事件的 ID。 -
Search further for other entries with the same event ID. Look for an entry with the letter
H
after the event ID (in our example,eece5138-H--
). This entry contains the ID and description of the security rule triggered while checking the HTTP request. The security rule ID is an integer number in quotation marks with the prefixid
in square brackets (for example,[id "340003"]
or[id "913102"]
). -
Find a security rule ID in the event using the substring (for example,
[id "3
). This ID can be used when you switch off rules.
若要禁用规则:
- 请进入 工具与设置 > Web 应用程序防火墙 (ModSecurity) 进行操作。
- 在 禁用安全规则 部分,按 ID(例如,
340003
)、标签(例如, CVE-2011-4898 )或按常规表达(例如,XSS
)选择安全规则并点击 确定 。