将 ModSecurity 与 Docker 结合使用

将 ModSecurity 与 Docker 结合使用

我已经设置好了 LEMP。现在我想添加mod_security

我尝试进行研究,但找到的都是有关如何重新编译 nginx 的说明。有没有办法添加 mod_security 而无需重新编译?

我目前正在运行使用 PPA 安装的 nginx/1.9.15,因为我追求的是 HTTP/2。我没有编译 nginx 的经验,而且我不知道如果我重新编译 nginx 是否会破坏它,因为它是从 PPA 获得的。

希望你能帮忙。

谢谢。

答案1

您可以通过添加 ModSecurity 作为动态模块或使用 Dockerized 和强化的 Nginx 容器来实现这一点。

将 ModSecurity 与 Docker 结合使用

使用默认设置运行 HTTP 服务器

docker run -p 80:80 -v /path/to/web/files:/www bunkerity/bunkerized-nginx

使用自动化 Let's Encrypt 运行 HTTPS 服务器

docker run -p 80:80 -p 443:443 -v /path/to/web/files:/www -v /where/to/save/certificates:/etc/letsencrypt -e SERVER_NAME=www.yourdomain.com -e AUTO_LETS_ENCRYPT=yes -e REDIRECT_HTTP_TO_HTTPS=yes bunkerity/bunkerized-nginx

证书存储在 /etc/letsencrypt 目录中,您应该将其保存在本地驱动器上。
如果您不希望您的网络服务器监听 HTTP,请添加LISTEN_HTTP具有“no”值的环境变量。但是 Let's Encrypt 需要打开端口 80,因此重定向端口是强制性的。

这里有三个环境变量:

  • SERVER_NAME:定义你的网络服务器的 FQDN,这对于 Let's Encrypt 是必需的(www.您的域名.com应该指向你的 IP 地址)
  • AUTO_LETS_ENCRYPT:启用 Let's Encrypt 自动创建和更新证书
  • REDIRECT_HTTP_TO_HTTPS:启用 HTTP 到 HTTPS 重定向

Docker 中心:bunkerized-nginx

要求:NGINX 1.11.5 及更高版本。

步骤 1:安装所需的软件包

apt-get install -y apt-utils autoconf automake build-essential git libcurl4-openssl-dev libgeoip-dev liblmdb-dev libpcre++-dev libtool libxml2-dev libyajl-dev pkgconf wget zlib1g-dev

##步骤 2:下载并编译 ModSecurity 3 源代码##

git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
cd ModSecurity
git submodule init
git submodule update
./build.sh
./configure
make
make install

注意:编译大约需要 15 分钟,具体取决于系统的处理能力。#步骤 3:下载用于 ModSecurity 的 NGINX 连接器并将其编译为动态模块#

git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
wget http://nginx.org/download/nginx-1.13.7.tar.gz 
tar zxvf nginx-1.13.7.tar.gz 
cd nginx-1.13.7
./configure --with-compat --add-dynamic-module=../ModSecurity-nginx
make modules
cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules

##步骤 4:加载 NGINX ModSecurity Connector 动态模块 ## 将此行添加到/etc/nginx/nginx.conf

load_module modules/ngx_http_modsecurity_module.so;

##步骤 5:配置和启用## 设置适当的 ModSecurity 配置文件。这里我们使用由 ModSecurity 的企业赞助商 TrustWave Spiderlabs 提供的推荐的 ModSecurity 配置。

mkdir /etc/nginx/modsec
wget -P /etc/nginx/modsec/ https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/modsecurity.conf-recommended
wget -P /etc/nginx/modsec/ https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/unicode.mapping
mv /etc/nginx/modsec/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf

更改配置中的 SecRuleEngine 指令,从默认的“仅检测”模式更改为主动丢弃恶意流量。

sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/nginx/modsec/modsecurity.conf

配置一个或多个规则。为了本篇博文的目的,我们创建了一个简单的规则,该规则删除一个请求,该请求的 URL 参数 testparam 的值中包含字符串 test。将以下文本放入/etc/nginx/modsec/main.conf

# From https://github.com/SpiderLabs/ModSecurity/blob/master/\
# modsecurity.conf-recommended
#
# Edit to set SecRuleEngine On
Include "/etc/nginx/modsec/modsecurity.conf"


# Basic test rule
SecRule ARGS:testparam "@contains test" "id:1234,deny,status:403"

将 modsecurity 和 modsecurity_rules_file 指令添加到 NGINX 配置以启用 ModSecurity:

server {
    # ...
    modsecurity on;
    modsecurity_rules_file /etc/nginx/modsec/main.conf;
}

来源 :nginx.com

答案2

存储库中有可用的包ppa:phusion.nl/misc. 以下是基本安装步骤

sudo add-apt-repository ppa:phusion.nl/misc
sudo apt update
sudo apt install libnginx-mod-http-modsecurity

此后,您可以按照其他答案

答案3

为了跳过这个冗长的手动安装过程,我创建了脚本来负责下载所需文件、下载和编译相应 nginx 版本源代码等。只需按照以下简单步骤即可安装和配置 ModSecurity:

# DOWNLOAD INSTALLATION SCRIPT
wget https://gist.githubusercontent.com/Chetan07j/edc16d6a55a25475cafeb6995f9c0857/raw/d1004a71710c263a8f0d0c098eebd21e72e0c101/libModSecurity.sh
# MAKE THIS FILE EXECUTABLE
sudo chmod +x libModSecurity.sh
# RUN THIS FILE
./libModSecurity.sh
# DONE

安装现已完成,您需要在 nginx.conf 和 sites-available 文件夹中的服务器配置中添加几行。

/etc/nginx/nginx.conf文件中 pid 行后立即添加此行:

...
pid /run/nginx.pid;
load_module /etc/nginx/modules/ngx_http_modsecurity_module.so; # ADD THIS LINE

然后在你的服务器配置文件中/etc/nginx/站点可用/

server {
    # ...
    modsecurity on;
    modsecurity_rules_file /etc/nginx/modsec/main.conf;
}

谢谢。

相关内容