我已经设置好了 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;
}
谢谢。