Nginx之WAF防火墙

1.  web应用防护系统

    常见的攻击

    1.  SQL注入

    2.  XSS跨站脚本攻击

    3.  不安全下载

    4.  隐私文件访问  .svn  .git

    5.  弱口令

    6.  非授权访问  redis  

    7.  CC攻击  性能CC攻击

    8.  DDOS攻击  CDN

2.  nginx 可以实现的功能

    1.  CC攻击:频率限制

    2.  不安全下载:判断后缀

    3.  非授权访问:后缀,认证

    4.  测试防护:根据UA

    5.  IP黑名单

3.  nginx实现不了的功能或者很难实现的功能

    1.  IP白名单

    2.  URL白名单

    3.  攻击日志记录

    4.  真实IP做防护

4.  WAF的作用

    1.  解析HTTP请求,根据你设置的规则进行过滤,触发不同的动作,记录日志。

        解析      规则          动作      日志模块

    2.  配置模块  开启什么功能

5.  Lua的安装

    1.  编译安装Luajit

        wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz

        tar zxf LuaJIT-2.0.5.tar.gz

        cd LuaJIT-2.0.5

        make

        make install PREFIX=/usr/local/luajit

        在/etc/profile文件中增加环境变量,并执行 source /etc/profile 使之生效(非必须):

          export LUAJIT_LIB=/usr/local/luajit/lib

          export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0

        注:此步骤只是在你的系统没有安装 LuaJIT 的情况下才需要自行编译安装。

    2.  下载ngx_devel_kit

        git clone https://github.com/simplresty/ngx_devel_kit.git

        wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz

    3.  下载                    

        wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz

    4.  编译nginx

        ./configure --user=nginxuser --group=nginxuser --prefix=/application/nginx --with-http_stub_status_module --with-http_ssl_module --with-file-aio --add-module=../ngx_devel_kit/ --add-module=../lua-nginx-module-0.10.7/  添加这两个参数

    5.  安装nginx

        make -j 2

    6.  make install

    7.  报错

       ./nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

       解决方法:

       ln -s /usr/local/luajit/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2

    8.  lua测试

location /test_lua {

            default_type 'text/plain';

            content_by_lua 'ngx.say("hello, lua")';

        }

6.  waf支持的功能

    1.  支持IP白名单和黑名单

    2.  支持URL白名单和黑名单

    3.  支持User-agent

    4.  支持CC防护

    5.  支持Cookie过滤

    6.  支持URL过滤

    7.  支持URL参数过滤

    8.  日志记录

7.  部署配置waf

    1.  确认tenginx 初始化安装时是否编译了lua模块,没有的话可动态编译加载 

       /usr/local/nginx/sbin/nginx  -m

         ngx_http_lua_module (shared, 3.1)  动态加载的

         ngx_http_copy_filter_module (static) 

         ngx_http_range_body_filter_module (static)

    2.  下载waf文件

        https://github.com/loveshell/ngx_lua_waf  去github上下载zip包

        unzip ngx_lua_waf-master.zip

    3.  把ngx_lua_waf-master文件的内容放到/usr/local/nginx/conf目录下                                                          

    4.  vi nginx.conf   添加

         lua_need_request_body on;  获取请求体的数据,默认为off

         lua_package_path "/usr/local/nginx/conf/?.lua";  指定依赖的通用Lua库从哪里加载

         lua_shared_dict limit 500m;  防cc使用字段,大小500M   

         init_by_lua_file  /usr/local/nginx/conf/init.lua;  初始化脚本

         access_by_lua_file "/usr/local/nginx/conf/waf.lua";  在请求访问阶段处理,用于访问控制,适用于http、server、location、location if  

    5.  配置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~~]]
    --警告内容,可在中括号内自定义
备注:不要乱动双引号,区分大小写           

    6.  规则目录为/usr/local/nginx/conf/wafconf/,提供了多维度的web防护策略,有以下几个文件:

           user-agent 匹配拦截恶意的user-agent

           url 匹配拦截恶意的网页路径

           args 匹配拦截恶意的GET请求参数

           post 匹配拦截恶意的post请求参数

           cookie 匹配拦截恶意的cookie 请求

           whitetip ip白名单

           whiteurl 网页路径白名单

           blockip ip黑名单

    7.  vi vhosts/product.conf

         location 里加一条

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

    8.  /usr/local/nginx/sbin/nginx  -t

posted @ 2022-12-02 14:41  奋斗史  阅读(1423)  评论(0)    收藏  举报