構建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地址传递给后端。

 

bannerAds