CentOS7安装Nginx+ModSecurity

一、介绍

当学习网络安全时,了解和使用安全设备是必不可少的一部分,其中一种常见的安全设备是Web应用防火墙(WAF)。市场上有许多商业化的WAF,但对于学习目的,我推荐使用一款免费开源的WAF,名为ModSecurity。

ModSecurity是一个开源的、跨平台的Web应用防火墙(WAF),被称为WAF界的“瑞士军刀”。它可以通过检查Web服务接收到的数据,以及发送出去的数据来对网站进行安全防护。

目前已经支持Nginx和IIS,配合Nginx的灵活和高效,可以打造成生产级的WAF,是保护和审核Web安全的利器。

ModSecurity官网下载地址:ModSecurity中文社区,我下载的是ModSecurity v3.0.4的稳定版,v2.9.*的与Nginx存在兼容问题。

二、功能

SQL Injection (SQLi):阻止SQL注入
Cross Site Scripting (XSS):阻止跨站脚本攻击
Local File Inclusion (LFI):阻止利用本地文件包含漏洞进行攻击
Remote File Inclusione(RFI):阻止利用远程文件包含漏洞进行攻击
Remote Code Execution (RCE):阻止利用远程命令执行漏洞进行攻击
PHP Code Injectiod:阻止PHP代码注入
HTTP Protocol Violations:阻止违反HTTP协议的恶意访问
HTTPoxy:阻止利用远程代理感染漏洞进行攻击
Sshllshock:阻止利用Shellshock漏洞进行攻击
Session Fixation:阻止利用Session会话ID不变的漏洞进行攻击
Scanner Detection:阻止黑客扫描网站
Metadata/Error Leakages:阻止源代码/错误信息泄露
Project Honey Pot Blacklist:蜜罐项目黑名单
GeoIP Country Blocking:根据判断IP地址归属地来进行IP阻断

三、安装与配置

1. 安装后续编译所需依赖

yum install -y gcc-c++ flex bison yajl yajl-devel curl-devel curl GeoIP-devel doxygen zlib-devel pcre-devel lmdb-devel libxml2-devel ssdeep-devel lua-devel libtool autoconf automake wget epel-release openssl-devel

2. 安装ModSecurity

mkdir -p /usr/local/modsecurity     // -p(parents):父文件夹不存在就创建,省得一级一级地创建
​
cd /usr/local/modsecurity 
wget http://www.modsecurity.cn/download/modsecurity/modsecurity-v3.0.3.tar.gz
tar -zxvf modsecurity-v3.0.3.tar.gz
​
mv modsecurity-v3.0.3 /usr/local/modsecurity/modsecurity // 改名
​
cd /usr/local/modsecurity/modsecurity
sh build.sh     // 执行build.sh
./configure     // 配置,无其他参数
make && make instal // 编译

3. 安装ModSecurity-Nginx

modsecurity-nginx是 nginx 和 libmodsecurity 之间的连接器,需要安装。

cd /usr/local/
wget https://codeload.github.com/SpiderLabs/ModSecurity-nginx/zip/refs/heads/master
​
yum -y install unzip    // 如果已经有了的话就不必再安装unzip了
unzip  master           
​
mv ModSecurity-nginx-master /usr/local/modsecurity/modsecurity-nginx    // 改名
​

4. 安装Nginx

由于个人原因 需要安装SSL模块 ,如果不需要SSL 可以编译时使用下面 指令进行编译。

./configure --prefix=/usr/local/nginx --add-module=/usr/local/modsecurity-nginx 

开始执行相关命令安装Nginx

mkdir -p /usr/local/nginx
​
cd /usr/local/nginx
wget http://nginx.org/download/nginx-1.22.1.tar.gz
tar -zxvf nginx-1.22.1.tar.gz
​
cd /usr/local/nginx/nginx-1.22.1/       // 转到该目录
./configure --prefix=/usr/app/nginx --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module --add-module=/usr/local/modsecurity-nginx 
​
make && make install

四、配置

以上安装均全完成,现在进入配置环节,将ModSecurity 下的配置文件 复制到nginx.config 目录,方便后期更改配置。

mkdir -p /usr/local/nginx/conf/modsecurity
cp /usr/local/modsecurity/modsecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurit/modsecurity.conf    // 重命名
cp /usr/local/modsecurity/modsecurity/unicode.mapping  /usr/app/nginx/conf/modsecurity  // 复制文件

1. 配置nginx.conf

vim /usr/local/nginx/conf/nginx.conf

在http或server节点中添加以下内容(在http节点添加表示全局配置,在server节点添加表示为指定网站配置)。

1689927890_64ba40d235608fa4bbc84.png!small?1689927890499

我这里就添加到server节点,因为我添加到http节点时打不开Nginx服务,所以我索性就添加到server节点,大家如果遇到和我一样的问题,也可以换一个节点添加内容。

打开规则引擎SecRuleEngine On

#SecRuleEngine DetectionOnly
SecRuleEngine On

确保ModSecurity在记录审计日志时保存请求体IJ 改为 C

#SecAuditLogParts ABIJDEFHZ
SecAuditLogParts ABCDEFHZ

添加防护规则文件

Include /usr/local/nginx/conf/modsecurity/crs-setup.conf
Include /usr/local/nginx/conf/modsecurity/rules/*.conf

1689927923_64ba40f33185e4231e879.png!small?1689927923151

2.下载防护规则文件

cd /usr/app/modsecurity
wget http://www.modsecurity.cn/download/corerule/owasp-modsecurity-crs-3.3-dev.zip  // 无论是ModSecurity是1.6.1版本还是1.22.1版本都可以用这个规则文件,亲测可用。
unzip owasp-modsecurity-crs-3.3-dev.zip
​
cd owasp-modsecurity-crs-3.3-dev
cp crs-setup.conf.example /usr/local/nginx/conf/modsecurity/crs-setup.conf  // 复制并改名
cp -r rules /usr/app/nginx/conf/modsecurity/
cd /usr/local/nginx/conf/modsecurity/rules
​
mv REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
mv RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf

四、测试

1. 启动Nginx

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
​
注:如果启动不了,试试用systemctl service start Nginx 来启动服务

Nginx 常用命令如下:

# 启动 Nginx
systemctl start nginx
​
# 停止 Nginx
systemctl stop nginx
​
# 重启 Nginx
systemctl restart nginx
​
# 查看 Nginx 状态
systemctl status nginx

2. 测试防护效果

curl -I http://localhost 

返回状态码200,代表正常访问成功,Nginx首页内容:

HTTP/1.1 200 OK
Server: nginx/1.22.1
Date: Wed, 19 Jul 2023 12:43:40 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Wed, 19 Jul 2023 11:18:47 GMT
Connection: keep-alive
ETag: "64b7c697-267"
Accept-Ranges: bytes

试一下SQL注入攻击

返回状态码是400,被拦截了,说明WAF起作用了

HTTP/1.1 400 Bad Request
Server: nginx/1.22.1
Date: Wed, 19 Jul 2023 12:45:33 GMT
Content-Type: text/html
Content-Length: 157
Connection: close

至此,在CentOS7中安装ModSecurity+Nginx就结束了,如果有什么不足之处还望指正,谢谢。

### 如何在 CentOS 7安装配置 Web 应用防火墙 (WAF) #### 准备工作 为了确保顺利部署 WAF,在开始之前需确认已准备好一台运行 CentOS 7 的服务器环境[^2]。 #### 安装 OpenResty 和 ModSecurity 对于基于 Nginx 的 WAF 实现,推荐采用 OpenResty 或者直接集成 ModSecurity 到标准版 Nginx 中。这里介绍通过 OpenResty 来构建支持 WAF 功能的服务端: 1. **安装依赖包** 使用 yum 工具来更新现有软件包并安装必要的开发工具和库文件: ```bash sudo yum update -y && sudo yum groupinstall "Development Tools" -y ``` 2. **下载并编译安装 OpenResty** 访问官方 GitHub 页面获取最新版本号,并按照说明文档完成源码编译过程。注意启用 `--with-compat` 参数以便后续加载第三方模块如 ModSecurity。 ```bash wget https://openresty.org/download/openresty-1.19.3.1.tar.gz tar zxvf openresty-1.19.3.1.tar.gz cd openresty-1.19.3.1/ ./configure --with-compat make && sudo make install ``` 3. **安装 ModSecurity 及其规则集** 下载 ModSecurity 源代码及其 OWASP CRS(Core Rule Set),然后将其放置到合适的位置供 OpenResty 加载使用。 ```bash git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity.git cd ModSecurity git submodule init git submodule update ./build.sh ./configure make sudo make install # 获取OWASP核心规则集合 git clone https://github.com/coreruleset/coreruleset.git /usr/local/nginx/conf/modsec ln -s /usr/local/nginx/conf/modsec/crs-setup.conf /usr/local/nginx/conf/modsec/main_rules_file.conf ``` 4. **配置 Nginx/OpenResty** 修改 `/usr/local/nginx/conf/nginx.conf` 文件加入以下内容以激活 WAF 支持: ```nginx http { ... modsecurity on; modsecurity_rules_file /usr/local/nginx/conf/modsec/main_rules_file.conf; server { listen 80; location / { root html; index index.html index.htm; try_files $uri @backend; } location @backend { proxy_pass http://localhost:8080; # 假设后端服务监听于该地址 } } } ``` 5. **测试与验证** 启动 nginx 并尝试访问站点首页查看是否正常显示 “hello world”,这表示 OpenResty 成功启动并且可以处理请求;接着可以通过发送恶意 HTTP 请求测试 WAF 是否能够有效拦截攻击行为[^1]。 6. **调整优化** 根据实际需求修改默认的安全策略设置,比如自定义错误页面、日志记录级别等参数,具体可参阅相关手册了解更详细的选项列表[^3]。 ```python print("以上步骤完成后即可实现在CentOS 7上搭建具备基本防护能力的Web应用防火墙") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值