如何在Nginx上安装和配置ModSecurity

Nginx web server is used on more than 30% of website worldwide and growing.

考虑到在线网络威胁的增加,网络工程师面临的挑战之一是对 hardening and securing Nginx 有充分的了解。

Nginx以其性能和轻量级的Web服务器/代理而闻名,并在许多最繁忙的网站上使用。

  • Pinterest.com
  • Reddit.com
  • Wordpress.com
  • Stackoverflow.com
  • Mail.ru

如果您将Web应用程序托管在Nginx上并且关注安全性,那么您可能想要实施的第一件事就是 Web Application Firewall(WAF)。

Mod Security是由Trustwave SpiderLabs开发的开源WAF,于2012年为Nginx提供支持。

在本指南中,我将解释如何通过Nginx下载、安装和配置Mod Security。

以下演示是在托管了 DigitalOcean 的CentOS上进行的。

如果您是Nginx的新手,我建议您参考这个 fundamental course

下载Nginx和ModSecurity

您可以直接在服务器上下载Nginx,或者在本地PC上下载后传输到服务器上。

  • 从以下链接下载最新版本

http://nginx.org/en/download.html

  • 如果您直接在服务器上下载,则可以使用以下wget命令
wget http://nginx.org/download/nginx-1.9.15.tar.gz
  • 使用gunzip命令解压缩它们
gunzip -c nginx-1.9.15.tar.gz | tar xvf –
  • 您将看到创建的新文件夹
drwxr-xr-x 8 1001 1001   4096 Apr 19 12:02 nginx-1.9.15
  • 从以下链接下载Mod Security的最新版本

https://github.com/SpiderLabs/ModSecurity

  • 您可以直接从服务器上使用以下命令
wget https://www.modsecurity.org/tarball/2.9.1/modsecurity-2.9.1.tar.gz
gunzip -c modsecurity-2.9.1.tar.gz | tar xvf –

让我们安装它们

安装带有Mod Security的Nginx

重要的是要编译Nginx和mod security源代码。

  • 登录到服务器并确保您拥有root权限。

注意:如果您在全新的服务器上进行操作,则可能需要安装以下库。

yum install gcc make automake autoconf libtool pcre pcre-devel libxml2 libxml2-devel curl curl-devel httpd-devel

首先,编译mod security。进入modsecurity-2.9.1文件夹并使用以下命令。

./configure --enable-standalone-module
make

接下来,安装带有mod security的Nginx

./configure --add-module=../modsecurity-2.9.1/nginx/modsecurity
make
make install

这样就完成了Nginx与Mod Security的安装,现在是时候配置它了。

配置Nginx的Mod Security

从上述下载的ModSecurity源代码的提取文件夹中复制modsecurity.conf-recommendedunicode.mapping文件到nginx的conf文件夹中。您也可以使用 find 命令。

find / -name modsecurity.conf-recommended
find / -name unicode.mapping
[root@GeekFlare-Lab conf]# cp /opt/nginx/binary/modsecurity-2.9.1/modsecurity.conf-recommended /usr/local/nginx/conf/
[root@GeekFlare-Lab conf]# cp /opt/nginx/binary/modsecurity-2.9.1/ unicode.mapping /usr/local/nginx/conf/
[root@GeekFlare-Lab conf]#

让我们将 modsecurity.conf-recommended 重命名为 modsecurity.conf

mv modsecurity.conf-recommended modsecurity.conf
  • 备份nginx.conf文件
  • 打开nginx.conf文件,在“location /”指令下添加以下内容
ModSecurityEnabled on;
ModSecurityConfig modsecurity.conf;

所以它应该看起来像这样

location / {
ModSecurityEnabled on;
ModSecurityConfig modsecurity.conf;
}

现在,Mod Security已与Nginx集成。重新启动Nginx以确保它能够正常启动。

让我们验证一下…

有两种可能的方法来确认Nginx是否编译了Mod Security。

第一种方法…

使用带有nginx可执行文件的-V列出编译的模块。

[root@GeekFlare-Lab sbin]# ./nginx -V
nginx版本:nginx/1.9.15
由gcc 4.4.7 20120313(Red Hat 4.4.7-16)(GCC)构建
配置参数:--add-module=../modsecurity-2.9.1/nginx/modsecurity
[root@GeekFlare-Lab sbin]#

第二种方法…

转到日志文件夹并查看错误文件,您应该看到以下内容

2016/05/21 21:54:51 [notice] 25352#0: 用于nginx的ModSecurity(稳定版)/2.9.1(http://www.modsecurity.org/)已配置。
2016/05/21 21:54:51 [notice] 25352#0: ModSecurity: APR编译版本="1.3.9";加载版本="1.3.9"
2016/05/21 21:54:51 [notice] 25352#0: ModSecurity: PCRE编译版本="7.8 ";加载版本="7.8 2008-09-05"
2016/05/21 21:54:51 [notice] 25352#0: ModSecurity: LIBXML编译版本="2.7.6"

这表明您已成功配置了ModSecurity与Nginx。

默认配置仅处于检测模式,这意味着它不会执行任何动作和protect your web applications

在我的下一篇文章中,我已经解释了如何配置OWASP rule set and enable Mod Security以防止Web安全漏洞。

类似文章