利用 ModSecurity 在 Nginx 上构建 WAF,modsecuritynginx


ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。

1. 什么是ModSecurity

ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。

ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。

ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。

官网:https://www.modsecurity.org/

2. 什么是OWASP CRS

OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。

ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。

  • HTTP Protection(HTTP防御)

HTTP协议和本地定义使用的detects violations策略。

  • Real-time Blacklist Lookups(实时黑名单查询)

利用第三方IP名单。

  • HTTP Denial of Service Protections(HTTP的拒绝服务保护)

防御HTTP的洪水攻击和HTTP Dos攻击。

  • Common Web Attacks Protection(常见的Web攻击防护)

检测常见的Web应用程序的安全攻击。

  • Automation Detection(自动化检测)

检测机器人,爬虫,扫描仪和其他表面恶意活动。

  • Integration with AV Scanning for File Uploads(文件上传防病毒扫描)

检测通过Web应用程序上传的恶意文件。

  • Tracking Sensitive Data(跟踪敏感数据)

信用卡通道的使用,并阻止泄漏。

  • Trojan Protection(木马防护)

检测访问木马。

  • Identification of Application Defects(应用程序缺陷的鉴定)

检测应用程序的错误配置警报。

  • Error Detection and Hiding(错误检测和隐藏)

检测伪装服务器发送错误消息。

3. 示例配置

在需要启用modsecurity的主机的location下面加入下面两行即可:

ModSecurityEnabled on;  
ModSecurityConfig modsecurity.conf;

php虚拟主机

server {
      listen      80;
      server_name 52os.net www.52os.net;
     
      location ~ \.php$ {
      ModSecurityEnabled on;  
      ModSecurityConfig modsecurity.conf;

      root /web/wordpress;
      index index.php index.html index.htm;
  
      fastcgi_pass   127.0.0.1:9000;
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME  $Document_root$fastcgi_script_name;
      include        fastcgi_params;
      }
  }
  

upstream负载均衡

upstream 52os.net {
    server 192.168.1.100:8080;
    server 192.168.1.101:8080 backup;
}
 
server {
listen 80;
server_name 52os.net www.52os.net;
 
location / {
    ModSecurityEnabled on;  
    ModSecurityConfig modsecurity.conf;  
 
        proxy_pass http://online;
        proxy_redirect         off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    }

参考:
https://www.hi-linux.com/posts/45920.html
https://blog.csdn.net/chen_jianjian/article/details/51880811

相关内容

    暂无相关文章