跳转到主要内容
Chinese, Simplified

“建立声誉需要20年,破坏它需要5分钟。 如果你考虑一下,你会以不同的方式做事。“    - 沃伦·巴菲特

为了帮助打击犯罪,联邦调查局保留了一份公开的十大通缉犯名单,其中列出了最危险的罪犯。任何看到名单上某人的人都会知道报警,这使得这些罪犯更难犯下更多罪行。

在技​​术领域,有一个名为Project Honeypot的类似概念。 Project Honeypot维护一个已知的恶意IP地址列表,可供公众免费使用。 ModSecurity与Project Honeypot集成,可以自动阻止Project Honeypot列表中的IP地址。此过程称为IP信誉。

在这篇博文中,我们将介绍如何为NGINX和NGINX Plus配置ModSecurity 3.0以与Project Honeypot集成。

为什么“Project Honeypot”?


Project Honeypot是一个社区驱动的IP地址在线数据库,被怀疑是垃圾邮件发送者或机器人。为每个IP地址分配0到255之间的威胁评分;数字越大,IP地址越可能是恶意的。

Project Honeypot数据库由一个志愿者网络提供支持,他们建立了“蜜罐”。在这种情况下,蜜罐是网站上的虚假页面,当机器人扫描网站时显示,但对于使用网络浏览器访问网站的普通人来说是不可见的。当扫描程序跟踪蜜罐链接并尝试与页面交互(例如,嵌入的蜜罐电子邮件地址)时,IP地址将添加到数据库中。

有关Project Honeypot如何工作的更多详细信息,请单击此处。

先决条件

 

  • 安装NGINX或NGINX Plus。
  • 使用NGINX或NGINX Plus的说明安装ModSecurity 3.0。
  • 安装并启用ModSecurity核心规则集(CRS)。
  • 注意:NGINX Plus的ModSecurity 3.0现在称为NGINX WAF。

1.设置你的蜜罐


要开始使用Project Honeypot,请使用Project Honeypot提供的脚本在您的站点上设置蜜罐:

  • 注册一个免费的Project Honeypot帐户。
  • 设置蜜罐 -  Project Honeypot提供PHP,Python,ASP和其他一些语言的蜜罐脚本。
  • 下载蜜罐脚本。

在这种情况下,我们使用PHP作为脚本语言。如果Project Honeypot不支持您的首选语言,那么PHP是一个不错的选择,因为使用PHP-FPM配置NGINX和NGINX Plus以运行PHP脚本非常容易。

有很多关于如何安装PHP-FPM的教程。对于Ubuntu 16.04及更高版本,您可以使用以下命令:

$ apt-get update

$ apt-get -y install php7.0-fpm


然后,您可以通过添加此服务器块来配置Project Honeypot PHP脚本:

server {
    server_name www.example.com;

    location ~ .php$ {
        modsecurity off;
        root /code;
        try_files $uri =404;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_pass localhost:9000;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

笔记:

在server_name指令中,对于www.example.com,请替换您在Project Honeypot中注册的域名。
必须在蜜罐脚本上禁用ModSecurity才能使其正常运行。
在root指令中,/ code替换放置Project Honeypot脚本的目录。
安装脚本后,在Web浏览器中访问它并单击激活链接以激活蜜罐。

2.将蜜罐链接添加到所有页面


下一步是配置NGINX或NGINX Plus以将蜜罐链接添加到所有页面。

要捕获机器人和扫描仪,请在每个页面上插入蜜罐脚本的链接。该链接对于使用网络浏览器但对机器人和扫描仪可见的普通人来说是不可见的。在这里,我们使用sub_filter指令将链接添加到每个页面的底部。

location / {
    proxy_set_header Host $host;
    proxy_pass http://my_upstream;

    sub_filter '</html>' 
               '<a href="http://www.example.com/weddingobject.php"><!-- hightest --></a></html>';
}

在此示例中,我们的PHP蜜罐文件的名称是weddingobject.php。 sub_filter指令查找HTML页末标记</ html>,并在那里插入不可见的链接。

 

3.在核心规则集中启用IP信誉


现在我们已经设置了蜜罐,我们可以配置ModSecurity来查询所有HTTP请求上的Project Honeypot。

  • 申请项目Honeypo thttp:BL access key.
  • 在根据设置CRS的说明安装的文件/usr/local/owasp-modsecurity-crs-3.0.0/crs-setup.conf中,找到SecHttpBlKey块。

取消注释块中的所有行,并输入您在步骤1中获得的API密钥作为SecHttpBlKey的参数:

SecHttpBlKey my_api_key
SecAction "id:900500,
  phase:1,
  nolog,
  pass,
  t:none,
  setvar:tx.block_search_ip=0,
  setvar:tx.block_suspicious_ip=1,
  setvar:tx.block_harvester_ip=1,
  setvar:tx.block_spammer_ip=1"


请注意,在上面的示例中禁用了block_search_ip,因为您不太可能想要阻止搜索引擎抓取工具。

重新加载配置以使更改生效。

$ nginx -t && nginx -s reload


此时,Project Honeypot完全启用,ModSecurity在所有HTTP请求上查询Project Honeypot。为了最小化性能影响,只将来自给定IP地址的第一个请求发送到Project Honeypot,并缓存查询结果。

4.验证它是否有效


Project Honeypot查询基于客户端源IP地址。欺骗源IP地址并不容易,因此测试功能正常的好方法是将此自定义规则添加到/etc/nginx/modsec/main.conf。它将作为请求的一部分传入的IP地址参数的值发送到Project Honeypot:

SecRule ARGS:IP "@rbl dnsbl.httpbl.org" 
"phase:1,id:171,t:none,deny,nolog,auditlog,msg:'RBL Match for SPAM Source'


重新加载配置以使规则生效:

$ nginx -t && nginx -s reload


然后运行以下curl命令以使用Project Honeypot的已知错误IP地址列表中的IP地址测试规则(替换此处使用的示例地址的地址,203.0.113.20,这是为文档保留的标准地址)。如果规则正常,则使用状态代码403阻止请求。

$ curl -i -s -k -X $'GET' 'http://localhost/?IP=203.0.113.20'

HTTP/1.1 403 Forbidden

Server: nginx/1.13.4

Date: Wed, 04 Oct 2017 21:29:17 GMT

Content-Type: text/html Transfer-Encoding: chunked

Connection: keep-alive


摘要


在这篇博客文章中,我们介绍了配置ModSecurity 3.0以使用Project Honeypot的步骤。 Project Honeypot是一个非常有用的工具,可以自动阻止已知的坏人。它也是免费和社区驱动的。

原文:https://www.nginx.com/blog/modsecurity-and-project-honeypot/

本文:http://pub.intelligentx.net/node/591

讨论:请加入知识星球或者小红圈【首席架构师圈】

 

Article
知识星球
 
微信公众号
 
视频号