在 Ubuntu 16.04 服务器上安装和配置 ModSecurity

Mod_security,通常也简称为Modsec,是一个强大的WAF(网络应用防火墙) 直接集成到 Apache的模块系统。 这种直接集成允许安全模块在请求的最早阶段拦截流量。 早期检测对于在恶意请求传递到由托管的 Web 应用程序之前阻止它们至关重要 Apache 网站。 这提供了针对服务器面临的常见威胁的额外保护层。 本文将探讨在运行的 Ubuntu 16.04 LTS 服务器中安装 mod_security 以及 CRS(核心规则集) Apache 2.4.

先决条件

目标系统环境必须满足以下要求:

  • Ubuntu 16.04 LTS 服务器
  • 基线 Apache 2.4 预装
  • 预配置的网络和互联网连接
  • 根用户 shell 访问(控制台或 SSH)

此外,还需要熟悉以下系统管理概念:

  • Linux 命令行 shell 的基本导航
  • 在您选择的系统编辑器(vim、nano、emacs 等)中修改文件

飞行前检查

Mod_security 是许多标准模块 Apache-based OS 映像,并且可能已经安装在目标系统上。 在我们继续之前,让我们首先确保我们正在运行 Apache 2.4 和 mod_security 尚未安装。 这只需使用以下两个命令即可完成。

笔记:须藤 是本文档中所有命令的前缀。 它允许在逐个命令的基础上执行根级权限。 如果你不熟悉 sudo,系统可能会提示您输入密码以授权执行本大纲中的一个或多个命令。

查看 Apache 版本

sudo apache2ctl -v

示例输出:
Server version: Apache/2.4.18 (Ubuntu)
Server built:   2018-06-07T19:43:03

检查安全模块是否处于活动状态

apache2ctl -M | grep security

— 如果此命令没有返回任何内容,则 mod_security 未安装,因此继续执行 安装部分.

— 如果命令返回 安全2_模块mod_security 已安装,因此继续 配置部分.

安装部分

易于 所有基于 Debian 的系统(如 Ubuntu)中的包管理器使安装快速而轻松。 提供正确的包名, libapache-modsecurity 在这种情况下,到 apt 命令并确认安装。

使用 Apt 安装 libpache2-modseurity 插件

sudo apt install libapache2-modsecurity -y

示例输出:

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libapache2-mod-security2 libyajl2 modsecurity-crs
Suggested packages:
lua geoip-database-contrib ruby
The following NEW packages will be installed:
libapache2-mod-security2 libapache2-modsecurity libyajl2 modsecurity-crs
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 545 kB of archives.
After this operation, 3,960 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 https://us.archive.ubuntu.com/ubuntu xenial/main amd64 libyajl2 amd64 2.1.0-2 [19.6 kB]
Get:2 https://us.archive.ubuntu.com/ubuntu xenial/universe amd64 libapache2-mod-security2 amd64 2.9.0-1 [314 kB]
Get:3 https://us.archive.ubuntu.com/ubuntu xenial/universe amd64 libapache2-modsecurity all 2.9.0-1 [2,006 B]
Get:4 https://us.archive.ubuntu.com/ubuntu xenial/universe amd64 modsecurity-crs all 2.2.9-1 [210 kB]
Fetched 545 kB in 0s (1,659 kB/s)
Selecting previously unselected package libyajl2:amd64.
(Reading database ... 92965 files and directories currently installed.)
Preparing to unpack .../libyajl2_2.1.0-2_amd64.deb ...
Unpacking libyajl2:amd64 (2.1.0-2) ...
Selecting previously unselected package libapache2-mod-security2.
Preparing to unpack .../libapache2-mod-security2_2.9.0-1_amd64.deb ...
Unpacking libapache2-mod-security2 (2.9.0-1) ...
Selecting previously unselected package libapache2-modsecurity.
Preparing to unpack .../libapache2-modsecurity_2.9.0-1_all.deb ...
Unpacking libapache2-modsecurity (2.9.0-1) ...
Selecting previously unselected package modsecurity-crs.
Preparing to unpack .../modsecurity-crs_2.2.9-1_all.deb ...
Unpacking modsecurity-crs (2.2.9-1) ...
Setting up libyajl2:amd64 (2.1.0-2) ...
Setting up libapache2-mod-security2 (2.9.0-1) ...
apache2_invoke: Enable module security2
Setting up libapache2-modsecurity (2.9.0-1) ...
Setting up modsecurity-crs (2.2.9-1) ...
Processing triggers for libc-bin (2.23-0ubuntu11) ...

安装后,确认安全模块正在由 Apache:

检查安全模块是否处于活动状态

apache2ctl -M | grep security

示例输出:

security2_module (shared)

配置部分

现在基本模块已安装,我们需要配置和启用它。 这需要几个步骤:

步骤 1) 将推荐的配置复制为实时配置

sudo cp /etc/modsecurity/modsecurity.conf{-recommended,}

步骤 2) 修改实时配置并将“SecRuleEngine DetectionOnly”更改为“SecRuleEngine On”

sudo sed -i -e 's/DetectionOnly$/On/i' /etc/modsecurity/modsecurity.conf

步骤 3) 检查 Apache的配置语法 & 重启 Apache 如果可以

sudo apache2ctl -t && sudo apache2ctl restart

示例输出:

Syntax OK

Apache 现在正在使用 mod_security 积极运行。 但是,没有相应的规则。 下一节将介绍如何配置这些规则。

启用核心规则集和基本规则

安全模块的好坏取决于管理它的规则。 为了帮助开始, libapache2-modsecurity 包附带一个配套包(modsecurity-crs)。 此软件包包含核心规则集或 CRS,它是一组基本规则,可处理当今 Internet 上一些最常见的恶意活动。 CRS 可防止许多危险类型的流量,包括但不限于:

  • SQL 注入 (SQLi)
  • 远程代码执行 (RCE)
  • 跨站脚本 (XSS)
  • 和许多其他常见的恶意行为

CRS 与安全模块一起安装。 按照以下步骤启用 CRS 及其基本规则。

步骤 1) 使用您喜欢的编辑器将以下行添加到 modsecurity.conf

# ModSecurity Core Rule Set (CRS)
IncludeOptional /usr/share/modsecurity-crs/*.conf
IncludeOptional /usr/share/modsecurity-crs/activated_rules/*.conf

步骤 2) 在 activate_rules 目录中为 base_rules 目录中的所有 *.conf 文件创建一个符号链接

CSRD=/usr/share/modsecurity-crs; for e in $CSRD/base_rules/*.conf; do sudo ln -s $e $CSRD/activated_rules/; done

步骤 3) [Optional] 确认符号链接在 activate_rules 目录中

sudo ls /usr/share/modsecurity-crs/activated_rules/*.conf

/usr/share/modsecurity-crs/activated_rules/modsecurity_crs_20_protocol_violations.conf
/usr/share/modsecurity-crs/activated_rules/modsecurity_crs_21_protocol_anomalies.conf
/usr/share/modsecurity-crs/activated_rules/modsecurity_crs_23_request_limits.conf
/usr/share/modsecurity-crs/activated_rules/modsecurity_crs_30_http_policy.conf
/usr/share/modsecurity-crs/activated_rules/modsecurity_crs_35_bad_robots.conf
/usr/share/modsecurity-crs/activated_rules/modsecurity_crs_40_generic_attacks.conf
/usr/share/modsecurity-crs/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf
/usr/share/modsecurity-crs/activated_rules/modsecurity_crs_41_xss_attacks.conf
/usr/share/modsecurity-crs/activated_rules/modsecurity_crs_42_tight_security.conf
/usr/share/modsecurity-crs/activated_rules/modsecurity_crs_45_trojans.conf
/usr/share/modsecurity-crs/activated_rules/modsecurity_crs_47_common_exceptions.conf
/usr/share/modsecurity-crs/activated_rules/modsecurity_crs_49_inbound_blocking.conf
/usr/share/modsecurity-crs/activated_rules/modsecurity_crs_50_outbound.conf
/usr/share/modsecurity-crs/activated_rules/modsecurity_crs_59_outbound_blocking.conf
/usr/share/modsecurity-crs/activated_rules/modsecurity_crs_60_correlation.conf

步骤 4) 检查 Apache的配置语法 & 重启 Apache 如果可以

sudo apache2ctl -t && sudo apache2ctl restart

示例输出:

Syntax OK

服务器现在已配置并主动使用来自 CRS 的 base_rules。 CRS 包提供了额外的规则。 这些附加规则将在下一节中更详细地讨论。

经验法则:有必要验证语法并重新启动 Apache任何时候对一个或多个 mod_security 规则进行更改。

启用附加规则 [Optional]

核心规则集包括许多附加规则。 这些规则分为三个不同的类别:experimental_rules、optional_rules 和 slr_rules。 每个类别的规则都包含在其同名目录中。 激活这些规则与启用 base_rules 的过程相同。 从activated_rules 目录创建一个指向所需规则的符号链接。 如果需要,可以使用以下命令快速启用这些规则。

警告:启用超出 base_rules 集中规则的其他规则时,需要谨慎。 额外的规则,尤其是experimental_rules,更有可能遇到误报,阻塞合法流量。 下面的命令是为了方便而提供的,并不代表不加选择地启用所有规则。

实验规则

CSRD=/usr/share/modsecurity-crs; for e in $CSRD/experimental_rules/*.conf; do sudo ln -s $e $CSRD/activated_rules/; done

可选规则

CSRD=/usr/share/modsecurity-crs; for e in $CSRD/optional_rules/*.conf; do sudo ln -s $e $CSRD/activated_rules/; done

slr_rules

CSRD=/usr/share/modsecurity-crs; for e in $CSRD/slr_rules/*.conf; do sudo ln -s $e $CSRD/activated_rules/; done

禁用规则

要禁用规则,请删除与相关规则相关的 activate_rules 目录中的符号链接。 删除后快速重启 Apache 服务是使更改生效所必需的。

示例:删除 application_defects 规则然后重新启动 Apache.

sudo rm -rf /usr/share/modsecurity-crs/activated_rules/modsecurity_crs_55_application_defects.conf

sudo apache2ctl restart

托管中最有帮助的人

Liquid Web 可以提供的帮助不止一种。 无论是联系我们的支持还是为您提供成功所需的托管服务,您都可以依靠我们与您同在。 如果您发现自己在使用这些说明时遇到问题,我们的支持团队随时为您提供帮助。 我们为自己感到自豪 Hosting™ 中最有帮助的人. 我们的支持团队与 Apache 和 Mod_security 每天。 我们每天 24 小时、每周 7 天、每年 365 天都可以提供服务,当您的任务变得过于艰巨而无法自行解决时,我们随时可以为您提供帮助。 我们鼓励您通过电话、聊天或电子邮件与我们的支持团队分担负担。 我们可以帮忙!

完全托管的服务器和应用程序

所有 Liquid Web 完全托管的服务器和应用程序都带有由我们的支持团队安装、配置和管理的 mod_security。 除了与 mod_security 打包的核心规则集之外,我们所有的完全托管的服务器踢都包括我们自己的 Liquid Web 内部规则。 这些附加规则可防止我们的安全工程师在野外发现攻击服务器的进一步威胁。 这些附加规则是针对已知攻击向量的直接对策,并在发现新攻击时更新。 我们会处理这一切,因此您不必担心。

服务器保护包

当标准安全性不够时,您不必单独发动战争。 除了 mod_security 规则之外,Liquid Web 服务器保护包还提供了额外的服务器加固。 这些软件包提供了强化配置,以保持对入侵和其他恶意活动的最佳保护水平。 这只是我们众多与安全相关的托管附加服务之一。