主要实现的功能有:        1、支持IP白名单和黑名单功能,直接将黑名单的IP访问拒绝(白名单权重高于黑名单)。        2、支持URL白名单,将不需要过滤的URL进行定义。        3、支持User-Agent的过滤,匹配自定义规则中的条目,然后进行处理(返回403)。        4、支持CC攻击防护,单个URL指定时间的访问次数,超过设定值,直接返回403。        5、支持Cookie过滤,匹配自定义规则中的条目,然后进行处理(返回403)。        6、支持URL过滤,匹配自定义规则中的条目,如果用户请求的URL包含这些,返回403。        7、支持url参数过滤。        8、支持日志记录,将所有拒绝的操作,记录到日志中去。        9、日志记录为JSON格式,便于日志分析,例如使用ELKStack进行收集日志收集、存储、搜索和展示。安装脚本#!/bin/bashsource /etc/profile#下载代码get(){        cd /usr/local/src && \        wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz >/dev/null 2>&1 && echo "get v0.3.0.tar.gz : OK !!" || echo "get v0.3.0.tar.gz : ERROR !!"        wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz >/dev/null 2>&1 && echo "get v0.10.9rc7.tar.gz : OK !!" || echo "get v0.10.9rc7.tar.gz : ERROR !!"        wget http://nginx.org/download/nginx-1.12.1.tar.gz >/dev/null 2>&1 && echo "get nginx-1.12.1.tar.gz : OK !!" || echo "get nginx-1.12.1.tar.gz : ERROR !!"        wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz >/dev/null 2>&1 && echo "get LuaJIT-2.0.2.tar.gz : OK !!" || echo "get LuaJIT-2.0.2.tar.gz : ERROR !!"         wget https://openresty.org/download/ngx_openresty-1.9.3.2.tar.gz >/dev/null 2>&1 && echo "get ngx_openresty-1.9.3.2.tar.gz : OK !!" || echo "get ngx_openresty-1.9.3.2.tar.gz : ERROR !!" }#安装LuaJITluajit_install(){        cd /usr/local/src && \        tar xf LuaJIT-2.0.2.tar.gz >/dev/null 2>&1 && cd LuaJIT-2.0.2 && \        make install prefix=/usr/local/LuaJIT >/dev/null 2>&1 && echo "luajit_install : OK !!" || echo "luajit_install : ERROR !!"}#设置环境变量set_path(){    echo "export LUAJIT_LIB=/usr/local/lib" >>/etc/profile && \    echo "export LUAJIT_INC=/usr/local/include/luajit-2.0" >>/etc/profile && \    source /etc/profile && echo "set path : OK !!" || echo "set path : ERROR !!"}#解压压缩包jy(){    cd /usr/local/src && \    tar xf v0.10.9rc7.tar.gz >/dev/null 2>&1 && \    tar xf v0.3.0.tar.gz >/dev/null 2>&1 && \    tar xf nginx-1.12.1.tar.gz >/dev/null 2>&1 && \    tar xf ngx_openresty-1.9.3.2.tar.gz >/dev/null 2>&1 }#判断:有nginx则什么也不做,没有则添加用户adduser(){    num=`egrep -c "^nginx" /etc/passwd`    [ ${num} -eq 1 ] || useradd -s /sbin/nologin -M nginx && echo "user Already exist"}#编译nginxistall_nginx(){    adduser && jy && \    cd /usr/local/src/nginx-1.12.1 && \    ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-file-aio --with-http_dav_module --add-module=/usr/local/src/ngx_devel_kit-0.3.0/ --add-module=/usr/local/src/lua-nginx-module-0.10.9rc7/ >/dev/null 2>&1 && make >/dev/null 2>&1 && make install >/dev/null 2>&1 && echo "install nginx : OK !!" || echo "install nginx : ERROR !!"}#配置nginx配置文件conf_nginx(){>/usr/local/nginx/conf/nginx.confcat >> /usr/local/nginx/conf/nginx.confworker_processes  1;events {    worker_connections  1024;}http {    include       mime.types;    default_type  application/octet-stream;    sendfile        on;    keepalive_timeout  65;    server {        listen       80;        server_name  localhost;        location / {            root   html;            index  index.html index.htm;        } location /hello {                default_type 'text/plain';                content_by_lua 'ngx.say("hello,lua")';        }        error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }    }}EOF}#访问nginxcurl_nginx(){    ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2 && \    /usr/local/nginx/sbin/nginx && \    curl http://127.0.0.1/hellow && \    /usr/local/nginx/sbin/nginx -s stop}#安装openrestyinstall_openresty(){    yum install -y readline-devel pcre-devel openssl-devel >/dev/null 2>&1 && echo "install rely: OK !!" || echo "install rely : ERROR"    cd /usr/local/src && tar xf ngx_openresty-1.9.3.2.tar.gz >/dev/null 2>&1 && cd ngx_openresty-1.9.3.2 && \    ./configure --prefix=/usr/local/openresty --with-luajit --with-http_stub_status_module --with-pcre --with-pcre-jit >/dev/null 2>&1 && \    gmake >/dev/null 2>&1 && gmake install >/dev/null 2>&1 && echo "install openresty : OK !!" || echo "install openresty : ERROR !!" }#下载wafget_waf(){    cd /usr/local/src && \    git clone https://github.com/unixhot/waf.git >/dev/null 2>&1 && \    cp -a ./waf/waf /usr/local/openresty/nginx/conf/ && echo "get WAF : OK !!" || echo "get WAF : ERROR !!"}#设置wafset_waf(){>/usr/local/openresty/nginx/conf/nginx.confcat >> /usr/local/openresty/nginx/conf/nginx.confworker_processes  1;events {    worker_connections  1024;}http {    include       mime.types;    default_type  application/octet-stream;    sendfile        on;    keepalive_timeout  65;#WAF    lua_shared_dict limit 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";    server {        listen       80;        server_name  localhost;        location /hello {        default_type text/html;        content_by_lua_block {             ngx.say("HelloWorld")       }    }        location / {            root   html;            index  index.html index.htm;        }        error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }    }}EOTchown -R nginx.nginx /usr/local/openresty/}#访问wafcurl_waf(){/usr/local/openresty/nginx/sbin/nginx && \curl http://127.0.0.1/abc.sqlecho "Welcome to (Web Application Firewall)" >/usr/local/openresty/nginx/html/index.html}#总函数main(){    get && \    luajit_install && \    set_path && \    istall_nginx && \    conf_nginx >/dev/null 2>&1 && echo "conf_nginx : OK !!" || echo "conf_nginx : ERROR !!" && \    curl_nginx && \    install_openresty && \    get_waf && \    set_waf >/dev/null 2>&1 && echo "set_waf : OK !!" || echo "set_waf : ERROR !!" && \    curl_waf}main
11-17 16:31