天天看點

Nginx + ModSecurity 配置安裝

軟體環境:centos7,nginx-1.14.1,modsec-3.0.3,ModSecurity-nginx.git

軟體環境安裝

#第一:準備編譯和依賴環境
    yum install gcc wget git geoip-devel libcurl-devel libxml2 libxml2-devel libgd-devel  openssl-devel -y
    yum groupinstall 'Development tools' -y

#第二:安裝ModSecurity依賴 yajl
    下載下傳:http://lloyd.github.io/yajl/
    解壓:tar xf lloyd-yajl-2.1.0-0-ga0ecdde.tar.gz
    cd lloyd-yajl-66cb08c
    ./configure
    make
    make install
 此步不做的話,對ModSecurity配置時報錯:找不到yajl,如果忽略的話,最終檢視ModSecurity日志會報錯:"error":"ModSecurity was not compiled with JSON support.


#第三:下載下傳并安裝ModSecurity
    git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
    cd ModSecurity
    git submodule init
    git submodule update
    ./build.sh
    ./configure --with-yajl=/usr/local
    make 
    make install

#第四:下載下傳nginx與modsecurity的連接配接器
    cd
    git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git

#第五:下載下傳并編譯nginx(将連接配接器編譯進去)
    mkdir /web-boke/nginx -p
    yum install pcre-devel openssl-devel gd-devel geoip-devel -y
    wget https://nginx.org/download/nginx-1.14.1.tar.gz
    tar xf nginx-1.14.1.tar.gz
    cd nginx-1.14.1

./configure \
--prefix=/web-boke/nginx \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_image_filter_module=dynamic \
--with-http_geoip_module=dynamic \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--with-pcre \
--with-pcre-jit \
--with-stream=dynamic \
--with-stream_ssl_module \
--with-debug \
--add-dynamic-module=/root/ModSecurity-nginx \
--with-ld-opt="-Wl,-rpath,$LUAJIT_LIB" ;

    make modules    #編譯子產品
    make 
    make install

#第六:安裝yajl-devel
   yum install yajl-devel
  如果不安裝yajl-devel,則nginx啟動時報錯:nginx: [emerg] dlopen() "/web-boke/nginx/modules/ngx_http_modsecurity_module.so" failed (libyajl.so.2: cannot open shared object file: No such file or directory) in /web-boke/nginx/conf/nginx.conf:11
           

配置modsec與nginx

#第一:配置modsecurity
    mkdir /web-boke/nginx/conf/modsec
    cp /root/ModSecurity/modsecurity.conf-recommended /web-boke/nginx/conf/modsec/modsecurity.conf
    cp /root/ModSecurity/unicode.mapping /web-boke/nginx/conf/modsec/

#第二:配置nginx,使其開啟加載modsec子產品
cat /web-boke/nginx/conf/nginx.conf

    #該行在nginx.conf的event字段上面添加
    load_module modules/ngx_http_modsecurity_module.so;

    #配置在具體vhost裡面
    modsecurity on; #表示開啟modsec
    location / {
        root   html;
        modsecurity_rules_file /web-boke/nginx/conf/modsec/modsecurity.conf;
        index  index.html index.htm;
    }

#第三:測試nginx配置檔案是否正确
    /web-boke/nginx/sbin/nginx -t

#第四:使用測試規則調試modsec與nginx的工作是否正常
cat /web-boke/nginx/conf/modsec/modsecurity.conf

    #SecRuleEngine DetectionOnly(将該行改為如下,表示啟用攔截功能。預設隻記錄不攔截)
    SecRuleEngine On

    #添加如下一行,指定modsecurity的記錄日志格式為json(預設的行數太多)
    SecAuditLogFormat JSON

    #在最後添加一個測試規則(測試完成就删除該行吧)
    SecRule ARGS:testparam "@contains test" "id:1234,deny,log,status:403"

#第五:啟動nginx并驗證modsec與nginx的工作是否正常
    /web-boke/nginx/sbin/nginx &
    curl -D - http://localhost/foo?testparam=thisisatestofmodsecurity
    #若是傳回403則表示規則生效
    #可以通過日志進行驗證
    cat /var/log/modsec_audit.log

#第六:安裝owasp核心規則CRS
    git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
    cp -rf owasp-modsecurity-crs  /web-boke/nginx/conf/
    cd /web-boke/nginx/conf/owasp-modsecurity-crs
    cp crs-setup.conf.example  crs-setup.conf
    cd /web-boke/nginx/conf/owasp-modsecurity-crs/rules/
    mv REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
    mv RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf

#第七:讓owasp核心規則生效加入modsecurity配置檔案
cat /web-boke/nginx/conf/modsec/modsecurity.conf
    #在最後添加引入owasp核心規則
    Include /web-boke/nginx/conf/owasp-modsecurity-crs/crs-setup.conf
    Include /web-boke/nginx/conf/owasp-modsecurity-crs/rules/*.conf
           

測試owasp核心規則是否生效

#第一:重新開機nginx
    /web-boke/nginx/sbin/nginx -s reload &

#第二:使用nikto測試owasp 核心規則是否生效
#Nikto掃描工具生成惡意請求,包括針對已知易受攻擊的檔案,跨站點腳本(XSS)和其他類型的攻擊的探測。
#該工具還會報告傳遞給應用程式的請求,進而揭示應用程式中的潛在漏洞。
    git clone https://github.com/sullo/nikto
    Cloning into 'nikto'...
    cd nikto
    perl program/nikto.pl -h http://localhost

    #可以通過日志進行驗證
    cat /var/log/modsec_audit.log
           

繼續閱讀