CentOS 7.X 网络安全加固 Nginx 安装 ModSecurity 模块
CentOS 7.X 网络安全加固 Nginx 安装 ModSecurity 模块
一、ModSecurity简介
ModSecurity是一个开源的、跨平台的Web应用防火墙(WAF),被称为WAF界的“瑞士军刀”。它可以通过检查Web服务接收到的数据,以及发送出去的数据来对网站进行安全防护。
官网地址:http://www.modsecurity.cn/
二、ModSecurity功能介绍
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阻断
三、Nginx 安装 ModSecurity
1、安装依赖工具
yum install -y epel-release
yum install -y readline-devel curl-devel gcc gcc-c++ python-devel lua-devel doxygen perl yajl-devel GeoIP-devel lmdb-devel ssdeep-devel flex bison autoconf automake
2、安装 ModSecurity
1)下载 ModSecurity
在官网上下载 ModSecurity 3.0.4
2)安装 ModSecurity
cd /usr/local
将下载的 modsecurity-v3.0.4.tar.gz copy 到 /usr/local 目录下,解压
tar -zxvf modsecurity-v3.0.4.tar.gz
mv modsecurity-v3.0.4 modsecurity
cd modsecurity
yum install -y pcre pcre-devel
yum install -y git
sh build.sh #这一步报错 libtoolize: 未找到命令,解决方法: yum install -y libtool 安装后重新执行脚本正常
./configure
make && make install
3、安装 Nginx 和 ModSecurity-nginx
(此处由于该测试服务器已安装有 Nginx,所以下载的同版本源码重新编译安装)
1)下载 ModSecurity-nginx
从 https://github.com/SpiderLabs/ModSecurity-nginx 下载 ModSecurity-nginx-master.zip
2)解压 ModSecurity-nginx
cd /usr/local/
将下载的 ModSecurity-nginx-master.zip copy 到 /usr/local/ 目录下
unzip ModSecurity-nginx-master.zip
mv ModSecurity-nginx-master modsecurity-nginx
3)Nginx 添加 ModSecurity-nginx 模块
wget http://nginx.org/download/nginx-1.22.1.tar.gz
tar -zxvf nginx-1.22.1.tar.gz
cd /usr/local/nginx-1.22.1/
./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib64/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--user=nginx \
--group=nginx \
--build=CentOS \
--http-log-path=/var/log/nginx/access.log \
--with-http_stub_status_module\
--add-module=/usr/local/modsecurity-nginx \
--with-http_ssl_module
make && make install
4、启动 Nginx
systemctl start nginx
Nginx 常用命令如下:
# 启动 Nginx
systemctl start nginx
# 停止 Nginx
systemctl stop nginx
# 重启 Nginx
systemctl restart nginx
# 查看 Nginx 状态
systemctl status nginx
5、配置 ModSecurity 安全规则
mkdir -p /etc/nginx/modsecurity/rules
cp /usr/local/modsecurity/modsecurity.conf-recommended /etc/nginx/modsecurity/modsecurity.conf
cp /usr/local/modsecurity/unicode.mapping /etc/nginx/modsecurity/
6、下载规则文件压缩包
1)下载规则文件并解压
cd /usr/local/
wget http://www.modsecurity.cn/download/corerule/owasp-modsecurity-crs-3.3-dev.zip
unzip owasp-modsecurity-crs-3.3-dev.zip
cd owasp-modsecurity-crs-3.3-dev
2)复制配置文件
复制 crs-setup.conf.example 到 /etc/nginx/modsecurity/ 目录下,并重命名为 crs-setup.conf
cd /usr/local/owasp-modsecurity-crs-3.3-dev
cp crs-setup.conf.example /etc/nginx/modsecurity/crs-setup.conf
3)复制策略规则
将下载的策略规则包解压后的rules文件夹里面的所有规则,复制到/etc/nginx/modsecurity/rules/ 目录下
cp -r rules/ /etc/nginx/modsecurity/
最终得目录下面有如下文件和子目录
cd /etc/nginx/modsecurity/
[root@localhost modsecurity]# pwd
/etc/nginx/modsecurity
[root@localhost modsecurity]# ls
crs-setup.conf modsecurity.conf modsecurity.conf_bak20221205 rules unicode.mapping
上面的rules是目录,其他是文件。
同时修改 REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example 与 RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example 两个文件的文件名,将".example"删除,这两个文件用于自定义规则;
cd /etc/nginx/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
4)编辑nginx.conf
cd /etc/nginx/
vi nginx.conf
在http或server节点中添加以下内容:
(在http节点添加表示全局配置,在server节点添加表示为指定网站配置)
这里看具体需要,实际生产业务推荐写在server,这样方便控制。
modsecurity on;
modsecurity_rules_file /etc/nginx/modsecurity/modsecurity.conf;
配置效果如下:
5)编辑modsecurity.conf
cd /etc/nginx/modsecurity/
vi modsecurity.conf
将 SecRuleEngine DetectionOnly 改为 SecRuleEngine On
同时添加以下内容:
Include /etc/nginx/modsecurity/crs-setup.conf
Include /etc/nginx/modsecurity/rules/*.conf
确保ModSecurity在记录审计日志时保存请求体IJ 改为 C
#SecAuditLogParts ABIJDEFHZ
SecAuditLogParts ABCDEFHZ
7、重启nginx
systemctl restart nginx
8、测试访问
[root@localhost conf.d]# curl 'http://localhost/?search=<scritp>alert('xss');</script>' -I
HTTP/1.1 403 Forbidden
Server: nginx/1.16.1
Date: Fri, 10 Mar 2023 11:06:44 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)