構建WAF和添加规则
安装 Nginx 版的 ModSecurity 到 Ubuntu 上,并使用 OWASP 核心规则集搭建 Web 应用防火墙(WAF),并进行规则添加的训练。由于按照指示进行操作直到找到一个正常运行的网站非常困难,因此记录下来备忘。
如何向ModSecurity添加自定义规则。
安装ModSecurity
只需要一种选项:
如果要在Ubuntu上安装Nginx版本的ModSecurity,只需按照以下网站上所述进行操作。
太棒了。
在找到这个网站之前,我被约10个无法运行的网站困扰。
按照以下步骤进行:
在第6步中,引入OWASP核心规则集。
在第10步中,可以学习如何应对虚假阳性。
新增独立规则
如果发现了零日漏洞等情况,需要迅速添加规则。
不能仅依赖OWASP,不能自己添加规则的话就不能称为ModSecurity的使用者。
然而,关于规则的添加,找到有用的网站也不容易,感到很困扰。
总结来说,在Google等搜索引擎上搜索“ModSecurity规则添加”或“ModSecurity rule add”,没有找到任何可行的网站。
最后一招,我查看了官方手册,但还是手册而已。
阅读后,我能够创建出运行的规则。
不要急于行动,绕道而行。
写规则的地方
当查看/etc/nginx/modsec/main.conf时,可以看到以下内容。
Include /etc/nginx/modsec/coreruleset-3.3.0/rules/*.conf
规则需要放置在目录/etc/nginx/modsec/coreruleset-3.3.0/rules/中,文件名可以任意,但扩展名必须为.conf。
对于我来说,我将其命名为test.conf。
写规则的方法
考虑防止包含 whoami 的请求,如
http://10.0.2.7:8888/info.php?a=whoami 等。
在这种情况下,您可以在test.conf文件中按照以下方式进行记录。
SecRule ARGS whoami "phase:1,id:12345,t:lowercase,log,pass,msg:'Message text'"
SecRuleUpdateActionById 12345 "t:none,t:compressWhitespace,deny,status:403,msg:'New message text'"
进行规则检查和重启nginx。
sudo nginx -t
sudo systemctl restart nginx
一旦有了可以移动的东西,之后的定制将变得很简单。
规则的格式
语法:SecRule 变量 运算符 [操作]
变量
有超过100种以上的选项。只能查看官方网页。
不过,按照XSS的规则来看,大概是这个样子的,我觉得可以作为基础。
REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|REQUEST_COOKIES_NAMES|ARGS_NAMES|ARGS|XML:/*
阶段
要审查哪些数据?
阶段1:请求头部
阶段2:请求体
阶段3:响应头部
阶段4:响应体
规则编号
由于1-99,999已分配给本地使用,您可以自行使用。
将WAF配置为反向代理。
首先,要确认include。
使用sudo cat /etc/nginx/nginx.conf指令。
查看include /etc/nginx/conf.d/*.conf。
反向代理服务器的设置
使用sudo vi /etc/nginx/conf.d/backend.conf命令
upstream backend {
server 10.0.2.5:80; <-- Webサーバ
}
server {
listen 8888; <-- WAF
server_name 10.0.2.7; <-- WAF
location / {
proxy_pass http://backend;
}
}
提供IP地址的来源
WAF配置的更改
用sudo vi /etc/nginx/conf.d/backend.conf命令来编辑nginx目录下的backend.conf文件。
upstream backend {
server 10.0.2.5:80;
}
server {
listen 8888;
server_name 10.0.2.7;
location / {
proxy_set_header X-Forwarded-For $remote_addr; <-- 追加
proxy_pass http://backend;
}
}
网页服务器配置更改
请以本地的中文为准,进行以下句子的释义:sudo vi /etc/nginx/nginx.conf
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# ip
set_real_ip_from 10.0.2.7; <-- 追加
real_ip_header X-Forwarded-For; <-- 追加
real_ip_recursive on; <-- 追加
请参考以下网站
如何在Debian/Ubuntu上配置ModSecurity与Nginx
公式手冊
暴力破解攻击防护
每次登录尝试失败时,会增加IP:FAILED_LOGINS字段的值。如果登录尝试的失败次数超过3次,则之后的尝试将被阻止。
Oracle云定制保护规则
老了但还会说日语。
如何将Nginx配置为代理服务器
在NGINX中设置连接源IP地址(X-Forwarded-For)。
即使通过多个代理访问,也能获取到来源IP地址。
多个Nginx段可以通过X-Forwarded-For正确地将客户端IP地址传递给后端。