网站首页 > 精选教程 正文
ModSecurity 是一个开放源代码的 Web 应用防火墙 (WAF),可以帮助保护 Web 服务器免受各种攻击。以下是如何在 Nginx 上安装和配置 ModSecurity 的详细步骤。
一. 安装 ModSecurity
(1). 安装依赖
在安装 ModSecurity 之前,需要先安装一些必要的依赖库。以下是在基于 CentOS 的系统上的命令:
sudo yum update
sudo yum install -y gcc make pcre-devel libxml2 libxml2-devel curl-devel httpd-devel libtool
(2). 查看系统 g++ 版本,是否支持版本 C++17
g++ –version
如果看到版本号大于等于7.3,可以跳过下面 第3步,否则执行第3步: 升级 g++ 到一个支持 C++17 标准的版本。
(3).升级 g++
在CentOS系统中使用 yum 来安装开发工具集:
sudo yum install centos-release-scl
sudo yum install devtoolset-9
启用开发工具集来使用更新版本的 g++:
scl enable devtoolset-9 bash
上面命令会打开一个新的 shell,会将 g++ 的版本设置为 9。如果想每次启动 shell 都启用开发工具集,可以将上述命令添加到你的 shell 配置文件中,例如 ~/.bashrc。
(4). 下载和编译 ModSecurity
从 GitHub 仓库下载 ModSecurity 源码并编译:
cd /usr/local/src
sudo git clone –depth 1 -b v3/master https://github.com/SpiderLabs/ModSecurity
cd ModSecurity
sudo git submodule init
sudo git submodule update
sudo ./build.sh
sudo ./configure
sudo make
sudo make install
(5). 下载和编译 Nginx 连接器
ModSecurity 需要 Nginx 的连接器来工作。以下是下载和编译连接器的步骤:
cd /usr/local/src
sudo git clone –depth 1 http://github.com/SpiderLabs/ModSecurity-nginx.git
(6). 安装 Nginx 和编译模块
cd /usr/local/src
sudo wget https://nginx.org/download/nginx-1.xx.tar.gz #下载具体版本
sudo tar -zxvf nginx-1.xx.tar.gz
cd nginx-1.xx
sudo ./configure –with-compat –add-dynamic-module=/usr/local/src/ModSecurity-nginx
如果使用宝塔面板安装 nginx ,需要选择“编译安装”模式,然后在“自定义模块参数”中添加上面的ModSecurity-nginx路径:
二. 配置 Nginx 使用 ModSecurity
配置 ModSecurity
创建并配置 ModSecurity 主配置文件:
sudo mkdir /etc/nginx/modsec
sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf
sudo cp /usr/local/src/ModSecurity/unicode.mapping /etc/nginx/modsec/unicode.mapping
编辑 /etc/nginx/modsec/modsecurity.conf,将 SecRuleEngine 设置为 On:
sudo nano /etc/nginx/modsec/modsecurity.conf
将 SecRuleEngine 设置为 On
SecRuleEngine On
- 配置 Nginx 虚拟主机使用 ModSecurity
在 Nginx 主机配置文件中启用 ModSecurity,例如 /etc/nginx/conf.d/default.conf:
server {
listen 80;
server_name test.com;
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;
location / {
proxy_pass http://localhost:8080;
}
}
- 测试和重启 Nginx
检查 Nginx 配置是否正确,并重启 Nginx:
sudo nginx -t
sudo systemctl restart nginx
三. 配置 ModSecurity 规则
ModSecurity 的强大功能来自于其规则集。OWASP 提供了一组常用的 ModSecurity 核心规则 (CRS),可以有效地防御许多常见的 Web 攻击。
下载和配置 OWASP CRS
cd /etc/nginx/modsec
sudo git clone https://github.com/coreruleset/coreruleset.git
cd coreruleset
sudo cp crs-setup.conf.example crs-setup.conf
在 Nginx 配置文件中包含 CRS 规则:
server {
...
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;
# 加载 OWASP CRS 规则
include /etc/nginx/modsec/coreruleset/crs-setup.conf;
include /etc/nginx/modsec/coreruleset/rules/*.conf;
location / {
proxy_pass http://localhost:8080;
}
}
四. 创建自定义规则
比如我添加了自定义规则文件custom_rules.conf:
sudo nano /www/server/nginx/modsec/custom_rules.conf
我们添加一条规则阻止对 /tmp 目录的访问
SecRule REQUEST_URI “^/tmp[a-zA-Z0-9]*$” “id:1001,phase:2,pass,nolog”
SecRule REQUEST_URI “^/tmp” “id:1002,phase:2,deny,status:403,msg:’Access to /tmp directory is forbidden'”
规则解释:
这里我禁止了对/tmp目录的访问,但允许/tmp后面加字母和数字的目录,比如/tmpabc,是允许的,主要是防止误杀。
“id:1001″:每条规则需要一个唯一的 ID。
“phase:2″:这条规则将在请求处理的第二阶段执行(即在请求头被解析之后,通常适用于 URI 检查)。
“deny,status:403″:如果规则匹配,请求将被拒绝,并返回 403 禁止访问的状态码。
“msg:’Access to /tmp directory is forbidden'”:如果规则匹配,将在日志中记录这条消息。
然后修改modsecurity.conf包含自定义规则文件。
include /www/server/nginx/modsec/custom_rules.conf
重启 Nginx 使配置生效。
五. 日志和监控
ModSecurity 的日志对于监控和调试非常重要。确保在 modsecurity.conf 中正确配置日志:
SecAuditLog /var/log/modsec_audit.log
SecDebugLog /var/log/modsec_debug.log
通过以上步骤,在 Nginx 上安装和配置 ModSecurity,可以增强Web 服务器的安全性。ModSecurity 强大的规则集和灵活的配置选项,对安全防护最重要的就是规则,所以一定要定期审查日志,根据需要调整配置,适时更新规则集,以保持最佳的安全状态。
- 上一篇: 用宝塔面板免费防火墙屏蔽织梦扫描网站
- 下一篇: 一个宝藏项目:没有复杂配置的 Web 应用防火墙
猜你喜欢
- 2024-09-22 Nginx: 高效稳定的服务器软件
- 2024-09-22 全面护航你的Web应用程序安全:开源防火墙解决方案——BunkerWeb
- 2024-09-22 Nginx何防止流量攻击,读完之后,大部分程序员都收藏了...
- 2024-09-22 Linux下通过AnySetup配置防火墙
- 2024-09-22 nginx如何成为全球头号web服务器
- 2024-09-22 云服务器同时安装宝塔和WAF防火墙共存教程
- 2024-09-22 Linux自编译云锁Web网站防火墙,看完小白也能保护网站安全
- 2024-09-22 基于 openresty 的 web 应用防火墙 cheerwaf
- 2024-09-22 Firewalld--01 防火墙安全、基本指令、区域配置
- 2024-09-22 Centos配置nginx代理上网服务器,让你的终端隐身
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)