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。 -
进一步查找带有相同事件 ID 的其它条目。查找事件 ID 后面带有字母
H
的条目(例如,eece5138-H--
)。该条目包含 ID 和当检查 HTTP 请求时触发的安全规则的描述。安全规则 ID 是在方框内带有ID
前缀置于引号中的自3
开始的一个整数 例如,[id "340003"]
。 -
使用子字符串
[id "3
在事件中查找安全规则 ID。当您禁用规则时可能会使用该 ID。
若要禁用规则:
- 请进入 工具与设置 > Web 应用程序防火墙 (ModSecurity) 进行操作。
- 在 禁用安全规则 部分,按 ID(例如,
340003
)、标签(例如, CVE-2011-4898 )或按常规表达(例如,XSS
)选择安全规则并点击 确定 。