精华内容
下载资源
问答
  • Web应用防火墙(Web Application Firewall, WAF),通过对HTTP(S)请求进行... 2020年全球爆发新冠疫情重创经济,5G和物联网等新基建可能会快速崛起拉动经济,HTTPS加密已经普及,传统的防火墙检测功能失效,所以...

    Web应用防火墙(Web Application Firewall, WAF),通过对HTTP(S)请求进行检测,识别并阻断SQL注入、跨站脚本攻击(Cross Site Scripting  xss)、网页木马上传、命令/代码注入、文件包含、敏感文件访问、第三方应用漏洞攻击、CC(挑战黑洞)攻击、恶意爬虫扫描、跨站请求伪造等攻击,保护Web服务安全稳定。

            2020年全球爆发新冠疫情重创经济,5G和物联网等新基建可能会快速崛起拉动经济,HTTPS加密已经普及,传统的防火墙检测功能失效,所以对于服务器来说,部署一个WEB应用防火墙十分重要,这方面开源waf的不少,但优秀的不多,这里笔者经过大量搜索,整理出十大开源waf供大家学习。(可以帮企业节约现金成本,但实际学习和采坑成本很大)

    感兴趣的可以推荐折腾:开源框架openresty+nginx 实现web应用防火墙 lua防护规则动态更新(WAF)

                                                                      (通常情况下的WAF应用防护示意图)

    1、ModSecurity
    ModSecurity已经有10多年的历史,最开始是一个Apache的安全模块,后来发展成为开源的、跨平台的WEB应用防火墙。它可以通过检查WEB服务接收到的数据,以及发送出去的数据来对网站进行安全防护。
    最厉害的是著名安全社区OWASP,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS),几乎覆盖了如SQL注入、XSS跨站***脚本、DOS等几十种常见WEB***方法。
    项目地址:https://github.com/SpiderLabs/ModSecurity   (完美兼容nginx,是nginx官方推荐的WAF)

    2、HiHTTPS

    hihttps是一款少有完整源码的高性能WEB应用 + MQTT物联网防火墙,兼容ModSecurity规则并开源。特点是使用超级简单,就一个约10M的可执行文件,但防护功能一应俱全,包括:漏洞扫描、CC &DDOS、密码破解、SQL注入、XSS***等。
    更重要的是hihttps基于机器学习的商业版本,也是免费的,由机器自动采集样本无监督学习,自动生成对抗规则。众所周知,阿里云/腾讯云等WAF非常贵,很多中小企业买不起,可以下载一个免费的hihttps试试。
    项目地址:https://github.com/qq4108863/ 官网:http://www.hihttps.com

    3、 Naxsi
    Naxsi 是一款基于Nginx模块的防火墙,有自己规则定义,崇尚低规则。项目由C语言编写,需要熟练掌握Nginx源码的才能看懂。
    项目地址:https://github.com/nbs-system/naxsi

    4、OpenWAF

    OpenWAF是基于Nginx_lua?API分析HTTP请求信息,由行为分析引擎和规则引擎两大功能引擎构成,其中规则引擎主要对单个请求进行分析,行为分析引擎主要负责跨请求信息追踪。
    规则引擎的启发来自modsecurity及freewaf(lua-resty-waf),将ModSecurity的规则机制用lua实现。
    基于规则引擎可以进行协议规范,自动工具,SQL注入,跨站***,信息泄露,异常请求等安全防护,支持动态添加规则,及时修补漏洞。缺点是复杂,不适合不熟悉Nginx和lua语言的开发者。
    项目地址:https://github.com/titansec/OpenWAF

    5、FreeWAF
    FeeWAF是一款开源的WEB应用防火墙产品,其命名为FreeWAF,它工作在应用层,对HTTP进行双向深层次检测:对 Internet进行实时防护,避免***利用应用层漏洞非法获取或破坏网站数据,可以有效地抵御***的各种***,如SQL注入、XSS、CSRF***、缓冲区 溢出、应用层DOS/DDOS***等;同时,对WEB服务器侧响应的出错信息、恶意内容及不合规格内容进行实时过滤,避免敏感信息泄露,确保网站信息的可靠性。但项目已经很久没更新了。

    6、ESAPI WAF
    这是OWASP?ESAPI 项目提供的一个开源WAF,基于J2EE实现,其主要利用XML的配置方式驱动防火墙。安装时,在WEB.xml中将ESAPIWEBApplicationFirewallFilter配置为filter,在应用程序之前和之后处理输入和输入。

    7、unixhot
    unixhot是使用Nginx+Lua实现自定义WAF,一句话描述,就是解析HTTP请求(协议解析模块),规则检测(规则模块),做不同的防御动作(动作模块),并将防御过程(日志模块)记录下来,非常简单。
    项目地址:https://github.com/unixhot/waf   类似的还有LuaWAF(社区正在建设中)

    8、Java WAF
    用Java开发的WAF很少,我们发现一个使用Java开发的API Gateway,由于WAF构建在开源代理LittleProxy之上,所以说WAF底层使用的是Netty。功能上支持安全拦截、各种分析检测、脚本(沙箱)、流控/CC防护等。不会C语言,是Java爱好者的福音。
    项目地址:https://github.com/chengdedeng/waf

    9、X-WAF
    X-WAF是一款适用中、小企业的云WAF系统,让中、小企业也可以非常方便地拥有自己的免费云WAF。核心基于openresty + lua开发,waf管理后台:采用golang + xorm + macrom开发的,支持二进制的形式部署。
    项目地址:https://github.com/xsec-lab/x-waf

    10、VeryNginx 
    VeryNginx 也是基于?lua_Nginx_module(openrestry)?开发,实现了高级的防火墙、访问统计和其他的一些功能。 集成在 Nginx 中运行,扩展了 Nginx 本身的功能,并提供了友好的 WEB 交互界面。
    项目地址:https://github.com/alexazhou/VeryNginx/

    【其他免费免安装的WAF】

    GoodWAF、CloudFlare和ShareWAF(都需要实名认证)。商业WAF国内云厂商和第三方中立厂商很多在此就不一一列举。

    小结:hihttps和modsecurity 是最好的开源waf,github搜索。 好的可视化的没有,因为涉及到定制开发。
    传统的WAF规则已经很难对付未知漏洞和未知***,商业waf已经从传统特征工程转向机器学习自动防御,这方面的开源waf几乎没有,hihttps是唯一一个免费并且支持机器学习的waf,未来WEB安全必然是AI的天下。

    展开全文
  • WAF安全应用防火墙(openresty部署)

    万次阅读 2017-06-13 14:48:55
    一、了解WAF1、定义 Web应用防护系统(也称:网站应用级入侵防御系统 。英文:Web Application Firewall,...2、WAF的功能 支持IP白名单和黑名单功能,直接将黑名单IP访问拒绝。 支持URL白名单,将不需要过滤

    一、了解WAF

    1、定义
    Web应用防护系统(也称:网站应用级入侵防御系统 。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用 防火墙 是通过执行一系列针对http/https的 安全策略 来专门为Web应用提供保护的一款产品。

    2、WAF的功能
    支持IP白名单和黑名单功能,直接将黑名单的IP访问拒绝。
    支持URL白名单,将不需要过滤的URL进行定义。
    支持User-Agent的过滤,匹配自定义规则中的条目,然后进行处理(返回403)。
    支持CC攻击防护,单个URL指定时间的访问次数,超过设定值,直接返回403。
    支持Cookie过滤,匹配自定义规则中的条目,然后进行处理(返回403)。
    支持URL过滤,匹配自定义规则中的条目,如果用户请求的URL包含这些,返回403。
    支持URL参数过滤,原理同上。
    支持日志记录,将所有拒绝的操作,记录到日志中去

    3、WAF的特点
    ①异常检测协议
    Web应用防火墙会对HTTP的请求进行异常检测,拒绝不符合HTTP标准的请求。并且,它也可以只允许HTTP协议的部分选项通过,从而减少攻击的影响范围。甚至,一些Web应用防火墙还可以严格限定HTTP协议中那些过于松散或未被完全制定的选项。
    这里写图片描述

    ②增强的输入验证
    增强输入验证,可以有效防止网页篡改、信息泄露、木马植入等恶意网络入侵行为。从而减小Web服务器被攻击的可能性。
    ③及时补丁
    修补Web安全漏洞,是Web应用开发者最头痛的问题,没人会知道下一秒有什么样的漏洞出现,会为Web应用带来什么样的危害。WAF可以为我们做这项工作了——只要有全面的漏洞信息WAF能在不到一个小时的时间内屏蔽掉这个漏洞。当然,这种屏蔽掉漏洞的方式不是非常完美的,并且没有安装对应的补丁本身就是一种安全威胁,但我们在没有选择的情况下,任何保护措施都比没有保护措施更好。
    ④基于规则的保护和基于异常的保护
    基于规则的保护可以提供各种Web应用的安全规则,WAF生产商会维护这个规则库,并时时为其更新。用户可以按照这些规则对应用进行全方面检测。还有的产品可以基于合法应用数据建立模型,并以此为依据判断应用数据的异常。但这需要对用户企业的应用具有十分透彻的了解才可能做到,可现实中这是十分困难的一件事情。
    ⑤状态管理
    ⑥WAF能够判断用户是否是第一次访问并且将请求重定向到默认登录页面并且记录事件。通过检测用户的整个操作行为我们可以更容易识别攻击。状态管理模式还能检测出异常事件(比如登陆失败),并且在达到极限值时进行处理。这对暴力攻击的识别和响应是十分有利的。
    ⑦其他防护技术
    WAF还有一些安全增强的功能,可以用来解决WEB程序员过分信任输入数据带来的问题。比如:隐藏表单域保护、抗入侵规避技术、响应监视和信息泄露保护。

    4、WAF与网络防火墙的区别
      网络防火墙作为访问控制设备,主要工作在OSI模型三、四层,基于IP报文进行检测。只是对端口做限制,对TCP协议做封堵。其产品设计无需理解HTTP会话,也就决定了无法理解Web应用程序语言如HTML、SQL语言。因此,它不可能对HTTP通讯进行输入验证或攻击规则分析。针对Web网站的恶意攻击绝大部分都将封装为HTTP请求,从80或443端口顺利通过防火墙检测。
      一些定位比较综合、提供丰富功能的防火墙,也具备一定程度的应用层防御能力,如能根据TCP会话异常性及攻击特征阻止网络层的攻击,通过IP分拆和组合也能判断是否有攻击隐藏在多个数据包中,但从根本上说他仍然无法理解HTTP会话,难以应对如SQL注入、跨站脚本、cookie窃取、网页篡改等应用层攻击。
      web应用防火墙能在应用层理解分析HTTP会话,因此能有效的防止各类应用层攻击,同时他向下兼容,具备网络防火墙的功能。

    二、使用nginx配置简单实现403和404

    1、小试身手之rerurn 403
    修改nginx配置文件在server中加入以下内容

    set $block_user_agent 0;
         if ( $http_user_agent ~ "Wget|AgentBench"){
            set $block_user_agent 1;
         }
         if ($block_user_agent = 1) {
             return 403 ;
       }

    wget测试
    这里写图片描述

    2、小试身手之rerurn 404

    在nginx配置文件中加入如下内容,让访问sql|bak|zip|tgz|tar.gz的请求返回404

    location ~* "\.(sql|bak|zip|tgz|tar.gz)$"{
           return 404;
     }

    在网站根目录下放一个a.sql,测试结果如下,404已生效
    这里写图片描述

    三、深入实现WAF

    1、WAF实现规划
    分析步骤如下:解析http请求–>匹配规则–>防御动作–>记录日志
    具体实现如下:
    解析http请求:协议解析模块
    匹配规则:规则检测模块,匹配规则库
    防御动作:return 403 或者跳转到自定义界面
    日志记录:可以记录到elk中,画出饼图,建议使用json格式

    2、使用openResty配置waf防火墙,不需要编译nginx

    ①安装依赖包和创建nginx运行的普通用户

    [root@linux-node1 ~]# yum install -y readline-devel pcre-devel openssl-devel
    [root@linux-node1 src]# useradd -s /sbin/nologin -M www

    ②下载当前最新的luajit,并编译

    [root@linux-node1 ~]# cd /usr/local/src/
    [root@linux-node1 src]# wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
    [root@linux-node1 src]# tar -xzf LuaJIT-2.0.5.tar.gz 
    [root@linux-node1 src]# cd LuaJIT-2.0.5
    [root@linux-node1 LuaJIT-2.0.5]# make && make install
    [root@linux-node1 LuaJIT-2.0.5]# export LUAJIT_LIB=/usr/local/lib
    [root@linux-node1 LuaJIT-2.0.5]# export LUAJIT_INC=/usr/local/include/luajit-2.0
    [root@linux-node1 ~]# ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2     
    #一定创建此软连接,否则会报错
    如果不创建符号链接,可能出现以下异常: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

    ③下载并编译安装openresty

    [root@linux-node1 ~]#cd /usr/local/src
    [root@linux-node1 src]# wget https://openresty.org/download/openresty-1.11.2.2.tar.gz
    
    [root@linux-node1 src]#tar -zxf openresty-1.11.2.2.tar.gz
    [root@linux-node1 src]#cd ngx_openresty-1.11.2.2
    [root@linux-node1 ngx_openresty-1.11.2.2]# ./configure --prefix=/usr/local/openresty \
    --user=www \
    --group=www \
    --with-luajit \
    --with-http_v2_module \
    --with-http_stub_status_module \
    --with-http_ssl_module \
    --with-http_gzip_static_module \
    --with-ipv6 --with-http_sub_module \
    --with-pcre \
    --with-pcre-jit \
    --with-file-aio \
    --with-http_dav_module
    [root@linux-node1 ngx_openresty-1.11.2.2]#gmake && gmake install

    ④测试openresty安装

    [root@linux-node1 ~]#vim /usr/local/openresty/nginx/conf/nginx.conf
    server {
        location /hello {
                default_type text/html;
                content_by_lua_block {
                    ngx.say("HelloWorld")
                }
            }
    }

    ⑤测试并启动nginx

    [root@linux-node1 ~]#/usr/local/openresty/nginx/sbin/nginx -t
    [root@linux-node1 ~]#/usr/local/openresty/nginx/sbin/nginx

    这里写图片描述

    3、WAF部署
    ①在github上克隆下代码

    [root@linux-node1 ~]#git clone https://github.com/unixhot/waf.git
    [root@linux-node1 ~]#cp -a ./waf/waf /usr/local/openresty/nginx/conf/

    ②修改Nginx的配置文件,加入(http字段)以下配置。注意路径,同时WAF日志默认存放在/tmp/日期_waf.log

    [root@linux-node1 ~]# cd /usr/local/openresty/nginx/conf
    [root@linux-node1 conf]# vim nginx.conf
    #WAF
        lua_shared_dict limit 50m;    #防cc使用字典,大小50M
        lua_package_path "/usr/local/openresty/nginx/conf/waf/?.lua";
        init_by_lua_file "/usr/local/openresty/nginx/conf/waf/init.lua";
        access_by_lua_file "/usr/local/openresty/nginx/conf/waf/access.lua";
    [root@linux-node1 ~]# /usr/local/openresty/nginx/sbin/nginx –t
    [root@linux-node1 ~]# /usr/local/openresty/nginx/sbin/nginx -s reload

    ③根据日志记录位置,创建日志目录

    [root@linux-node1 ~]#mkdir /tmp/waf_logs
    [root@linux-node1 ~]#chown nginx.nginx /tmp/waf_logs

    备注:

    我已经将我们生产环境中的nginx+waf的配置文件上次上去,下载链接
    http://download.csdn.net/detail/m0_37886429/9869230

    4、waf的模块
    ①配置模块
    waf安装好以后,不要直接上生产,而是先记录日志,不做任何动作。确定wafF不产生误杀
    config.lua配置模块

    [root@linux-node1 waf]# pwd
    /usr/local/openresty/nginx/conf/waf
    [root@linux-node2 waf]# cat config.lua
     --WAF config file,enable = "on",disable = "off" 
     --waf status    
     config_waf_enable = "on"   #是否开启配置
     --log dir 
     config_log_dir = "/tmp/waf_logs"    #日志记录地址
     --rule setting 
         config_rule_dir = "/usr/local/nginx/conf/waf/rule-config"        
                                  #匹配规则缩放地址
         --enable/disable white url 
         config_white_url_check = "on"  #是否开启url检测
         --enable/disable white ip 
         config_white_ip_check = "on"   #是否开启IP白名单检测
         --enable/disable block ip 
         config_black_ip_check = "on"   #是否开启ip黑名单检测
         --enable/disable url filtering 
         config_url_check = "on"      #是否开启url过滤
         --enalbe/disable url args filtering 
         config_url_args_check = "on"   #是否开启参数检测
         --enable/disable user agent filtering 
         config_user_agent_check = "on"  #是否开启ua检测
         --enable/disable cookie deny filtering 
         config_cookie_check = "on"    #是否开启cookie检测
         --enable/disable cc filtering 
         config_cc_check = "on"   #是否开启防cc攻击
         --cc rate the xxx of xxx seconds 
         config_cc_rate = "10/60"   #允许一个ip60秒内只能访问10次
         --enable/disable post filtering 
         config_post_check = "on"   #是否开启post检测
         --config waf output redirect/html 
         config_waf_output = "html"         #action一个html页面,也可以选择跳转
         --if config_waf_output ,setting url 
         config_waf_redirect_url = "http://www.baidu.com" 
         config_output_html=[[        #下面是html的内容
         <html> 
         <head> 
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
         <meta http-equiv="Content-Language" content="zh-cn" /> 
         <title>网站防火墙</title> 
         </head> 
         <body> 
         <h1 align="center"> 请安全上网,注意操作规范。 
         </body> 
         </html> 
         ]]

    备注:”请安全上网,注意操作规范” 这个字段可以随意更改,安装自己的需求来。

    ②access.lua 规则模块

    [root@linux-node1 waf]# pwd
    /usr/local/openresty/nginx/conf/waf
    [root@linux-node2 waf]# cat access.lua 
    require 'init'
    function waf_main()
        if white_ip_check() then
        elseif black_ip_check() then
        elseif user_agent_attack_check() then
        elseif cc_attack_check() then
            elseif cookie_attack_check() then
            elseif white_url_check() then
            elseif url_attack_check() then
            elseif url_args_attack_check() then
            --elseif post_attack_check() then
            else
                return  
            end
        end
        waf_main()

    检测顺序:先检查白名单,通过即不检测;再检查黑名单,不通过即拒绝,检查UA,UA不通过即拒绝;检查cookie;URL检查;URL参数检查,post检查;
    启用waf并测试,模拟sql注入即url攻击,显示效果如下 ()
    这里写图片描述

    日志显示如下,记录了UA,匹配规则,URL,客户端类型,攻击的类型,请求的数据
    这里写图片描述

    ④使用ab压测工具模拟防cc攻击
    [root@linux-node3 ~]# ab -c 100 -n 100 http://192.168.88.133/index.php
    “`
    ⑤ 模拟ip黑名单

    将请求ip放入ip黑名单中
    [root@linux-node1 rule-config]# echo “192.168.88.1” >>/usr/local/openresty/nginx/conf/waf/rule-config/blackip.rule

    显示结果如下
    这里写图片描述

    ⑥模拟ip白名单
    将请求ip放入ip白名单中,此时将不对此ip进行任何防护措施,所以sql注入时应该返回404

     [root@linux-node2 rule-config]# echo “192.168.88.1” >>/usr/local/openresty/nginx/conf/waf/rule-config/whiteip.rule

    显示结果如下
    这里写图片描述

    ⑦模拟URL参数检测
    浏览器输入192.168.88.133/?a=select * from table
    显示结果如下
    这里写图片描述

    详细规定在arg.rule中有规定,对请求进行了规范

    ```bash
    [root@linux-node1 rule-config]# /usr/local/openresty/nginx/conf/waf/rule-config/cat args.rule 
    \.\./
    \:\$
    \$\{
    select.+(from|limit)
    (?:(union(.*?)select))
    having|rongjitest
    sleep\((\s*)(\d*)(\s*)\)
    benchmark\((.*)\,(.*)\)
    base64_decode\(
    (?:from\W+information_schema\W)
    (?:(?:current_)user|database|schema|connection_id)\s*\(
    (?:etc\/\W*passwd)
    into(\s+)+(?:dump|out)file\s*
    group\s+by.+\(
    xwork.MethodAccessor
    (?:define|eval|file_get_contents|include|require|require_once|shell_exec|phpinfo|system|passthru|preg_\w+|execute|echo|print|print_r|var_dump|(fp)open|alert|showmodaldialog)\(
    xwork\.MethodAccessor
    (gopher|doc|php|glob|file|phar|zlib|ftp|ldap|dict|ogg|data)\:\/
    java\.lang
    \$_(GET|post|cookie|files|session|env|phplib|GLOBALS|SERVER)\[
    \<(iframe|script|body|img|layer|div|meta|style|base|object|input)
    (onmouseover|onerror|onload)\=
    [root@linux-node2 rule-config]# pwd
    /usr/local/openresty/nginx/conf/waf/rule-config
    展开全文
  • WAF的功能 支持IP白名单和黑名单功能,直接将黑名单IP访问拒绝。 支持User-Agent过滤,匹配自定义规则中条目,然后进行处理(返回403)。 支持CC攻击防护,单个URL指定时间访问次数,超过设定值,直接返回

    了解WAF

    定义

    Web应用防护系统(也称:网站应用级入侵防御系统 。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用 防火墙 是通过执行一系列针对http/https的 安全策略 来专门为Web应用提供保护的一款产品。

    WAF的功能

    支持IP白名单和黑名单功能,直接将黑名单的IP访问拒绝。
    支持User-Agent的过滤,匹配自定义规则中的条目,然后进行处理(返回403)。
    支持CC攻击防护,单个URL指定时间的访问次数,超过设定值,直接返回403。
    支持Cookie过滤,匹配自定义规则中的条目,然后进行处理(返回403)。
    支持URL过滤,匹配自定义规则中的条目,如果用户请求的URL包含这些,返回403。
    支持URL参数过滤,原理同上。
    支持日志记录,将所有拒绝的操作,记录到日志中去

    WAF的特点

    异常检测协议

    Web应用防火墙会对HTTP的请求进行异常检测,拒绝不符合HTTP标准的请求。并且,它也可以只允许HTTP协议的部分选项通过,从而减少攻击的影响范围。甚至,一些Web应用防火墙还可以严格限定HTTP协议中那些过于松散或未被完全制定的选项。

    增强的输入验证

    增强输入验证,可以有效防止网页篡改、信息泄露、木马植入等恶意网络入侵行为。从而减小Web服务器被攻击的可能性。

    及时补丁

    修补Web安全漏洞,是Web应用开发者最头痛的问题,没人会知道下一秒有什么样的漏洞出现,会为Web应用带来什么样的危害。WAF可以为我们做这项工作了——只要有全面的漏洞信息WAF能在不到一个小时的时间内屏蔽掉这个漏洞。当然,这种屏蔽掉漏洞的方式不是非常完美的,并且没有安装对应的补丁本身就是一种安全威胁,但我们在没有选择的情况下,任何保护措施都比没有保护措施更好。

    基于规则的保护和基于异常的保护

    基于规则的保护可以提供各种Web应用的安全规则,WAF生产商会维护这个规则库,并时时为其更新。用户可以按照这些规则对应用进行全方面检测。还有的产品可以基于合法应用数据建立模型,并以此为依据判断应用数据的异常。但这需要对用户企业的应用具有十分透彻的了解才可能做到,可现实中这是十分困难的一件事情。

    状态管理

    WAF能够判断用户是否是第一次访问并且将请求重定向到默认登录页面并且记录事件。通过检测用户的整个操作行为我们可以更容易识别攻击。状态管理模式还能检测出异常事件(比如登陆失败),并且在达到极限值时进行处理。这对暴力攻击的识别和响应是十分有利的。

    其他防护技术

    WAF还有一些安全增强的功能,可以用来解决WEB程序员过分信任输入数据带来的问题。比如:隐藏表单域保护、抗入侵规避技术、响应监视和信息泄露保护。

    WAF与网络防火墙的区别

    网络防火墙作为访问控制设备,主要工作在OSI模型三、四层,基于IP报文进行检测。只是对端口做限制,对TCP协议做封堵。其产品设计无需理解HTTP会话,也就决定了无法理解Web应用程序语言如HTML、SQL语言。因此,它不可能对HTTP通讯进行输入验证或攻击规则分析。针对Web网站的恶意攻击绝大部分都将封装为HTTP请求,从80或443端口顺利通过防火墙检测。
      一些定位比较综合、提供丰富功能的防火墙,也具备一定程度的应用层防御能力,如能根据TCP会话异常性及攻击特征阻止网络层的攻击,通过IP分拆和组合也能判断是否有攻击隐藏在多个数据包中,但从根本上说他仍然无法理解HTTP会话,难以应对如SQL注入、跨站脚本、cookie窃取、网页篡改等应用层攻击。
      web应用防火墙能在应用层理解分析HTTP会话,因此能有效的防止各类应用层攻击,同时他向下兼容,具备网络防火墙的功能。

    使用Nginx实现403/404

    403

    使用yum安装nginx

    [root@localhost ~]# yum -y install epel-release
    [root@localhost ~]# yum -y install nginx
    

    修改配置文件

    root@localhost ~]# vim /etc/nginx/nginx.conf
    # server模块中添加以下
            set $block_user_agent 0;
                if ( $http_user_agent ~ "Wget|AgentBench"){
                    set $block_user_agent 1;
                }
                if ($block_user_agent = 1) {
                    return 403;
                }
    

    启动服务

    [root@localhost ~]# systemctl start nginx
    

    测试403

    使用wget时返回403

    [root@localhost ~]# wget 1.1.1.5/index.html
    --2020-05-05 08:02:03--  http://1.1.1.5/index.html
    Connecting to 192.168.1.11:80... connected.
    HTTP request sent, awaiting response... 403 Forbidden
    2020-05-05 08:02:03 ERROR 403: Forbidden.
    404
    

    修改配置文件

    root@localhost ~]# vim /etc/nginx/nginx.conf
    # server模块中添加以下
            location ~* "\.(sql|bak|zip|tgz|tar.gz)$"{
                return 404;
            }
    

    访问这些后缀是返回404

    重启服务

    [root@localhost ~]# systemctl restart nginx
    

    访问验证测试404

    创建实验文件a.sql

    [root@localhost ~]# echo '123' /usr/share/nginx/html/a.sql
    [root@localhost ~]# curl 1.1.1.5/a.sql -I
    HTTP/1.1 404 Not Found
    Server: nginx/1.16.1
    Date: Tue, 05 May 2020 00:07:56 GMT
    Content-Type: text/html
    Content-Length: 3650
    Connection: keep-alive
    ETag: "5d958342-e42"
    

    停止服务

    [root@localhost ~]# systemctl stop nginx
    

    实现WAF

    WAF实现规划

    分析步骤如下:解析http请求–>匹配规则–>防御动作–>记录日志

    具体实现如下:

    解析http请求:协议解析模块
    匹配规则:规则检测模块,匹配规则库
    防御动作:return 403 或者跳转到自定义界面
    日志记录:可以记录到elk中,画出饼图,建议使用json格式

    使用openResty配置waf防火墙,不需要编译nginx

    安装LuaJIT

    安装依赖包和创建程序用户

    [root@localhost ~]# yum -y install readline-devel pcre-devel openssl-devel
    [root@localhost ~]# useradd -s /sbin/nologin -M www
    

    下载luajit,并编译

    [root@localhost ~]# wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
    [root@localhost ~]# tar zxf LuaJIT-2.0.5.tar.gz -C /usr/src
    [root@localhost ~]# cd /usr/src/LuaJIT-2.0.5/
    [root@localhost LuaJIT-2.0.5]# make && make install
    

    调整环境变量

    [root@localhost ~]# export LUAJIT_LIB=/usr/local/lib
    [root@localhost ~]# export LUAJIT_INC=/usr/local/include/luajit-2.0
    [root@localhost ~]# ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
    

    安装OpenResty®
    下载

    [root@localhost ~]# wget https://openresty.org/download/openresty-1.11.2.2.tar.gz
    

    解压编译安装

    [root@localhost ~]# tar zxf openresty-1.11.2.2.tar.gz -C /usr/src
    [root@localhost ~]# cd /usr/src/openresty-1.11.2.2/
    [root@localhost openresty-1.11.2.2]# ./configure --prefix=/usr/local/openresty \
    --user=www --group=www --with-luajit --with-http_v2_module --with-http_stub_status_module \
    --with-http_ssl_module --with-http_gzip_static_module --with-ipv6 \
    --with-http_sub_module --with-pcre --with-pcre-jit --with-file-aio --with-http_dav_module
    [root@localhost openresty-1.11.2.2]# gmake && gmake install
    

    验证测试

    [root@localhost ~]# vim /usr/local/openresty/nginx/conf/nginx.conf
           location /hello {
                default_type text/html;
                content_by_lua_block {
                    ngx.say("HelloWorld"\n)
                }
            }
    

    启动nginx服务并访问

    [root@localhost ~]# /usr/local/openresty/nginx/sbin/nginx
    [root@localhost ~]# curl 1.1.1.5/hello
    HelloWorld
    

    部署WAF

    在github上克隆代码

    [root@localhost ~]# git clone https://github.com/unixhot/waf.git
    [root@localhost ~]# cp -a ./waf/waf/ /usr/local/openresty/nginx/conf/
    修改配置文件
    
    [root@localhost ~]# vim /usr/local/openresty/nginx/conf/nginx.conf
    # http模块下添加
        lua_shared_dict limit 50m;    #防cc使用字典,大小50M
        lua_package_path "/usr/local/openresty/nginx/conf/waf/?.lua";
        init_by_lua_file "/usr/local/openresty/nginx/conf/waf/init.lua";
        access_by_lua_file "/usr/local/openresty/nginx/conf/waf/access.lua";
    

    重启服务

    [root@localhost ~]# /usr/local/openresty/nginx/sbin/nginx -s reload
    

    根据文件中的配置创建日志目录

    [root@localhost ~]# mkdir /tmp/waf_logs
    [root@localhost ~]# chown nginx.nginx /tmp/waf_logs
    

    waf的模块

    配置模块

    waf安装好以后,不要直接上生产,而是先记录日志,不做任何动作。确定wafF不产生误杀 config.lua配置模块

    [root@localhost ~]# vim /usr/local/openresty/nginx/conf/waf/config.lua
    --WAF config file,enable = "on",disable = "off"
    --waf status
     config_waf_enable = "on"   #是否开启配置
     --log dir 
     config_log_dir = "/tmp/waf_logs"    #日志记录地址
     --rule setting 
    config_rule_dir = "/usr/local/nginx/conf/waf/rule-config"      #匹配规则缩放地址
    --enable/disable white url 
    config_white_url_check = "on"  #是否开启url检测
    --enable/disable white ip 
    config_white_ip_check = "on"   #是否开启IP白名单检测
    --enable/disable block ip 
    config_black_ip_check = "on"   #是否开启ip黑名单检测
    --enable/disable url filtering 
    config_url_check = "on"      #是否开启url过滤
    --enalbe/disable url args filtering 
    config_url_args_check = "on"   #是否开启参数检测
    --enable/disable user agent filtering 
    config_user_agent_check = "on"  #是否开启ua检测
    --enable/disable cookie deny filtering 
    config_cookie_check = "on"    #是否开启cookie检测
    --enable/disable cc filtering 
    config_cc_check = "on"   #是否开启防cc攻击
    --cc rate the xxx of xxx seconds 
    config_cc_rate = "10/60"   #允许一个ip60秒内只能访问10次
    --enable/disable post filtering 
    config_post_check = "on"   #是否开启post检测
    --config waf output redirect/html 
    config_waf_output = "html"         #action一个html页面,也可以选择跳转
    --if config_waf_output ,setting url 
    config_waf_redirect_url = "https://www.feiyiblog.com"
    config_output_html=[[
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Language" content="zh-cn" />
    <title>网站防火墙</title>
    </head>
    <body>
    <h1 align="center"> 欢迎白帽子进行授权安全测试,安全漏洞请联系QQ:718334935。
    </body>
    </html>
    ]]
    access.lua规则模块
    

    检测顺序:先检查白名单,通过即不检测;再检查黑名单,不通过即拒绝,检查UA,UA不通过即拒绝;检查cookie;URL检查;URL参数检查,post检查;

    [root@localhost ~]# vim /usr/local/openresty/nginx/conf/waf/access.lua
    require 'init'
     
    function waf_main()
        if white_ip_check() then
        elseif black_ip_check() then
        elseif user_agent_attack_check() then
        elseif cc_attack_check() then
        elseif cookie_attack_check() then
        elseif white_url_check() then
        elseif url_attack_check() then
        elseif url_args_attack_check() then
        --elseif post_attack_check() then
        else
            return
        end
    end
     
    waf_main()
    

    重启服务

    [root@localhost ~]# /usr/local/openresty/nginx/sbin/nginx -s reload
    

    访问测试

    [root@localhost ~]# curl 1.1.1.5/a.sql
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Language" content="zh-cn" />
    <title>网站防火墙</title>
    </head>
    <body>
    <h1 align="center"> 欢迎白帽子进行授权安全测试,安全漏洞请联系QQ:718334935。
    </body>
    </html>
    

    查看日志

    [root@localhost ~]# cat /tmp/2020-06-21_waf.log
    2020-05-05 09:16:53","attack_method":"Deny_URL","req_data":"-","server_name":"localhost"}
    {"user_agent":"Mozilla\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\/537.36 (KHTML, like 
    Gecko) Chrome\/65.0.3314.0 Safari\/537.36 SE 2.X MetaSr 1.0","rule_tag":
    "\\.(bak|inc|old|mdb|sql|backup|java|class|tgz|gz|tar|zip)$","req_url":"\/a.sql",
    "client_ip":"192.168.1.2","local_time":"2020-05-05 09:16:53","attack_method":"Deny_URL",
    "req_data":"-","server_name":"localhost"}
    

    使用ab压测工具模拟防cc攻击

    # 创建测试文件
    [root@localhost ~]# vim /usr/local/openresty/nginx/html/index.php
    zx
    [root@localhost ~]# yum -y install httpd-tools  # ab工具安装
    [root@localhost ~]# ab -c 100 -n 100 http://192.168.1.11/index.php
    

    模拟ip黑名单

    [root@localhost ~]# vim /usr/local/openresty/nginx/conf/waf/rule-config/blackip.rule
    1.1.1.6
    

    在这里插入图片描述
    模拟ip白名单

    此文件中的ip不会匹配任何规则

    [root@localhost ~]# vim /usr/local/openresty/nginx/conf/waf/rule-config/whiteip.rule
    1.1.1.6
    

    其他关于waf的操作还待研究…

    展开全文
  • 目前,我们常用无面板或者有面板Linux Web环境在建站功能上已经是比较成熟和自动化,而且有几款工具还能保持较新软件更新...笔者有看到LNMP一键包官方从1.5版本开始也有提供ngx_lua_waf/WAF功能,但是需要我们...

    目前,我们常用的无面板或者有面板的Linux Web环境在建站功能上已经是比较成熟和自动化,而且有几款工具还能保持较新的软件更新和安全升级。比如我们常用的LNMP WEB环境安装包每年6.1都会有较大版本的更新,作为这些软件提供商在保有软件的升级和一些功能之外,应该也在寻求更多的自动化和安全化。

    笔者有看到LNMP一键包官方从1.5版本开始也有提供ngx_lua_waf/WAF功能,但是需要我们自行安装和配置,毕竟并不是所有用户都需要的。在这篇文章中,笔者将会实战在一台LNMP WEB环境中安装ngx_lua_waf安全工具。其实对于WAF脚本我们应该有看到几个迭代版本。目前官方提供的是由loveshell提供的版本。

    记录LNMP环境安装配置ngx_lua_waf/WAF Web应用防火墙

    对于WAF安全工具并不能说有多大的安全防护,但是对于基本的SQL注入、防止webshell上传、屏蔽异常的网络请求、屏蔽常见的扫描黑客工具,扫描器等还是有一定的作用的,如果涉及到其他攻击行为我们则需要在硬件上解决。

    第一、Lua支持和安装

    1、LNMP从1.5版本开始是支持lua的,但是默认是没有启动。我们需要到lnmp.conf中Enable_Nginx_Lua后的参数为 y 来启用lua。

    Lua支持和安装

    2、如果没安装lnmp,修改lnmp.conf后保存,安装完lnmp就是支持lua。

    3、如果已经安装好lnmp,且版本较早需要升级,也是按前面修改lnmp.conf,然后lnmp安装包目录下 ./upgrade.sh nginx 升级nginx,输入当前nginx版本号或更新的nginx版本号,升级完成就是支持lua。

    第二、安装ngx_lua_waf

    1、下载安装

    wget https://github.com/loveshell/ngx_lua_waf/archive/master.zip -O ngx_lua_waf.zip
    unzip ngx_lua_waf.zip
    mv ngx_lua_waf-master /usr/local/nginx/conf/waf

    2、配置且启动

    编辑:

    /usr/local/nginx/conf/nginx.conf

    然后在"server_tokens off"下方添加代码:

    lua_package_path "/usr/local/nginx/conf/waf/?.lua";
    lua_shared_dict limit 10m;
    init_by_lua_file /usr/local/nginx/conf/waf/init.lua;

    保存。

    WAF配置到LNMP

    3、添加到某个网站

    如果我们需要添加到某个网站,则只需要在当前网站.conf文件中server文件目录引用:

    access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;

    WAF配置到当前网站

    最后,我们重启Nginx就可以:

    lnmp nginx reload

    4、测试是否生效

    http://域名/test.php?id=../etc/passwd

    在浏览器中打开当前添加WAF功能的网站,看看是否提示。

    WAF拦截提示

    第三、WAF参数修改设置

    我们可以根据实际需求修改默认的配置:

    /usr/local/nginx/conf/waf/config.lua

    以上参数是默认设置的,我们也可以根据自己需要进行修改。

    RulePath = "/usr/local/nginx/conf/waf/wafconf/"
    --规则存放目录
    attacklog = "off"
    --是否开启攻击信息记录,需要配置logdir
    logdir = "/usr/local/nginx/logs/hack/"
    --log存储目录,该目录需要用户自己新建,切需要nginx用户的可写权限
    UrlDeny="on"
    --是否拦截url访问
    Redirect="on"
    --是否拦截后重定向
    CookieMatch = "on"
    --是否拦截cookie攻击
    postMatch = "on"
    --是否拦截post攻击
    whiteModule = "on"
    --是否开启URL白名单
    black_fileExt={"php","jsp"}
    --填写不允许上传文件后缀类型
    ipWhitelist={"127.0.0.1"}
    --ip白名单,多个ip用逗号分隔
    ipBlocklist={"1.0.0.1"}
    --ip黑名单,多个ip用逗号分隔
    CCDeny="on"
    --是否开启拦截cc攻击(需要nginx.conf的http段增加lua_shared_dict limit 10m;)
    CCrate = "100/60"
    --设置cc攻击频率,单位为秒.
    --默认1分钟同一个IP只能请求同一个地址100次
    html=[[Please go away~~]] --警告内容,可在中括号内自定义
    备注:不要乱动双引号,区分大小写

    根据我们实际需要修改,然后重新启动Nginx生效。

    最后,通过上面我们可以知道在LNMP系统中安装和添加WAF WEB应用防火墙功能。对于普通的安全还是有一定的作用的,根据实际需要进行选择安装配置。

    本文来自老部落:https://www.laobuluo.com/2082.html

    展开全文
  • 使用NGINX+Openresty实现WAF功能 一、了解WAF1.1 什么是WAF Web应用防护系统(也称:网站应用级入侵防御系统 。英文:Web Application Firewall,简称: WAF)。利用国际上公认一种说法:Web应用 防火墙 是通过...
  • 定义:Web防火墙,主要是对Web特有入侵方式加强防护,如DDOS防护、SQL注入、XML注入、XSS等。由于是应用层而非网络层入侵,从技术角度都应该称为Web IPS,而不是Web防火墙。这里之所以叫做Web防火墙,是因为大家...
  • 「读者福利!2 TB 各类技术资源免费赠送」之前工作中经常在 Nginx 里面配置各种规则,感觉 Nginx 功能强大但并不是很易用。于是就觉得可以写一个强大而且对人类友好 Ngi...
  • 之前工作中经常在 Nginx 里面配置各种规则,感觉 Nginx 功能强大但并不是很易用。于是就觉得可以写一个强大而且对人类友好 Nginx,前前后后写了一个多月,总算是在过年之前完成了,逻辑通过 lua 实现,嵌入到 ...
  • 摘要: Nginx+Lua实现WAF 参考地址:http://www.2cto.com/Article/201303/198425.html 2016年8月...Nginx+Lua实现WAF 参考地址:http://www.2cto.com/Article/201303/198425.html 2016年8月2日 安装LuaJIT http...
  • 产品必须为专业性WEB应用防火墙硬件设备,而非下一代防火墙\UTM类设备集成WEB防护功能;硬软件质保期≥3年,需提供厂家质保证明文件1台硬件模块化设计硬件采用模块化设计,可以通过扩展卡来增减业务接口,而非软件...
  • 基于tengine防攻击模块,最初我尝试了mod-security,但有一个bug,在大并发时候狂吃内存,直到拖垮应用,不后来转向ngx_lua_waf(感谢loveshell),并在此基础上做了改良,觉得效果不错,就推荐给大家。...
  • 能够浏览我这篇文章,相信你已经对 Nginx 不陌生了,所以这里就不再赘述 Nginx 安装和配置了,我们...我为什么需要 WAF 呢?随着网站上线时间变长,各种扫描攻击也日益增多,为了能安心一点,所以就希望能有个...
  • 根据国际权威机构WASC(Web Application Security Consortium )和OWASP(Open Web Application Security Project)分析,国内外信息安全厂商当前能防范...纵观国内外的WAF产品,针对这些攻击检测手段也各有特色。
  • 首先说下被很多老手或小白混淆一些说法,Web防火墙Waf防火墙不属于一个东西?Web防火墙,属于硬件级别防火墙。对网站流量进行恶意特征识别及防护,将正常、安全流量回源到服务器;避免网站服务器被恶意入 侵,...
  • 能够浏览我这篇文章,相信你已经对 Nginx 不陌生了,所以这里就不再赘述 Nginx 安装和配置了,我们...我为什么需要 WAF 呢?随着网站上线时间变长,各种扫描攻击也日益增多,为了能安心一点,所以就希望能有个...
  • ModSecurity原本是Apache上一款开源waf,可以有效增强web安全性,目前已经支持nginx和IIS,配合nginx灵活和高效,可以打造成生产级的WAF,是保护和审核web安全利器 一、什么是ModSecurity? 1、ModSecurity是一...
  • 宝塔配置NGINX,默认宝塔面板是安装了ngx_lua_waf模块,在5.9版本中面板集成的waf,所以可以在5.9版本nginx中看到过滤器这个功能,并且可以设置。 在6.X版本中,宝塔面板还是编译了ngx_lua_waf模块,该如何在...
  • Nginx+Lua实现WAF引用防火墙

    千次阅读 2018-12-23 21:15:42
    Nginx + Lua实现WAF引用防火墙常见恶意行为常见攻击手段1. 实战2.配置演示mysql防sql注入访问攻击测试Nginx + Lua实现WAF引用防火墙 常见恶意行为 爬虫行为和恶意抓取,资源盗取 防护手段 基础防盗链功能不让...
  • 本篇文章从本片文章包括三个主题(1) WAF实现 WAF包括哪些组件,这些组件如何交互来实现WAF防御功能(2)WAF规则(策略)维护规则(策略)如何维护,包括获取渠道,规则测试方法以及上线效果评测(3) WAF支撑WAF产品完善...
  • 之前写了一篇《WAF防御能力评测及工具》,是站在安全运维人员选型WAF产品角度来考虑(优先从测试角度考虑是前职业病,毕竟...(1) WAF实现 WAF包括哪些组件,这些组件如何交互来实现WAF防御功能  (2)WAF规则(策
  • WAF(web应用防火墙)

    2020-08-25 22:24:28
    WAF主要用于保护web服务器不受攻击,防止因受到攻击导致软件服务中断或被远程控制。(可理解为HTTP层面IDS) 二、主要功能 1.web防护(事前) 网络层防护:syn flood,cc攻击等 DOS攻击 应用层攻击:sql注入...
  • IDS\IPS\WAF\防火墙

    2020-11-12 11:19:58
     特点是不阻断任何网络访问,主要以提供报告和事后监督为主,少量类似产品还提供TCP阻断等功能,但少有使用。 二、IPS  入侵防御系统(Intrusion-prevention system)  能够监视网络或网络设备网络资料传输行为...
  • 类似于论坛型网站经常会被黑掉,除了增加硬件防护感觉效果还是不太好,还会偶尔被黑,waf的功能正好实现了这个需求。 waf的作用: 防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击 防止svn/...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 265
精华内容 106
关键字:

waf功能的防火墙