宝塔面板搭建WEB防火墙ModSecurity3.0 Nginx

原创 2020-07-17 本文共7724个字,预计耗時20分钟 3.29K次阅读
文章摘要:宝塔面板免费版之前还有有lua防火墙可以起到部分web防火墙功能,7版本后就取消了这个功能变成了收费项目,如果确实需要一定的web防火墙,或者自己网站总被攻击,可以使用CDN,有些CDN有现成的web防火墙功能,cloudflare就是,免...

宝塔面板搭建WEB防火墙ModSecurity3.0 Nginx

宝塔面板免费版之前还有有lua防火墙可以起到部分web防火墙功能,7版本后就取消了这个功能变成了收费项目,如果确实需要一定的web防火墙,或者自己网站总被攻击,可以使用CDN,有些CDN有现成的web防火墙功能,cloudflare就是,免费还功能多,唯一缺点就是可能不怎么快,如果你的vps在国内不建议使用,再者就是自己配置一个WEB防火墙,自救动手丰衣足食吗,ModSecurity3.0就是很不错的选择。

第一步:ModSecurity3.0下载编译

依赖环境,如果是安装宝塔后,一般已经存在了

yum install -y git wget epel-release
yum install -y gcc-c++ flex bison yajl yajl-devel curl-devel curl GeoIP-devel doxygen zlib-devel pcre-devel lmdb-devel libxml2-devel ssdeep-devel lua-devel libtool autoconf automake

这里可以默认文件都下载到/home/modsec这个目录下,如果没有可以新建目录

$ cd /home/modsec
$ git clone https://github.com/SpiderLabs/ModSecurity
$ cd ModSecurity
$ git checkout -b v3/master origin/v3/master
$ git submodule init
$ git submodule update
$ sh build.sh
$ ./configure
$ make
$ make install

***注意:如果报错如下内容,比较容易在比较低版本系统中出现

libtoolize: putting auxiliary files in `.'.
libtoolize: copying file `./ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `build'.
libtoolize: copying file `build/libtool.m4'
libtoolize: copying file `build/ltoptions.m4'
libtoolize: copying file `build/ltsugar.m4'
libtoolize: copying file `build/ltversion.m4'
libtoolize: copying file `build/lt~obsolete.m4'
/usr/bin/m4:configure.ac:209: bad expression in eval: m4_esyscmd_s(cat headers/modsecurity/modsecurity.h | grep "define MODSECURITY_MAJOR " | awk {'print '} | sed 's/"//g') + m4_esyscmd_s(cat headers/modsecurity/modsecurity.h | grep "define MODSECURITY_MINOR " | awk {'print '} | sed 's/"//g')
autom4te: /usr/bin/m4 failed with exit status: 1
aclocal: autom4te failed with exit status: 1
autoreconf: aclocal failed with exit status: 1
/usr/bin/m4:configure.ac:209: bad expression in eval: m4_esyscmd_s(cat headers/modsecurity/modsecurity.h | grep "define MODSECURITY_MAJOR " | awk {'print '} | sed 's/"//g') + m4_esyscmd_s(cat headers/modsecurity/modsecurity.h | grep "define MODSECURITY_MINOR " | awk {'print '} | sed 's/"//g')
autom4te: /usr/bin/m4 failed with exit status: 1
autoheader: '/usr/bin/autom4te' failed with exit status: 1
/usr/bin/m4:configure.ac:209: bad expression in eval: m4_esyscmd_s(cat headers/modsecurity/modsecurity.h | grep "define MODSECURITY_MAJOR " | awk {'print '} | sed 's/"//g') + m4_esyscmd_s(cat headers/modsecurity/modsecurity.h | grep "define MODSECURITY_MINOR " | awk {'print '} | sed 's/"//g')
autom4te: /usr/bin/m4 failed with exit status: 1
automake: autoconf failed with exit status: 1
/usr/bin/m4:configure.ac:209: bad expression in eval: m4_esyscmd_s(cat headers/modsecurity/modsecurity.h | grep "define MODSECURITY_MAJOR " | awk {'print '} | sed 's/"//g') + m4_esyscmd_s(cat headers/modsecurity/modsecurity.h | grep "define MODSECURITY_MINOR " | awk {'print '} | sed 's/"//g')
autom4te: /usr/bin/m4 failed with exit status: 1

问题是,未更新autoconf,更新即可,以下步奏可更新

[root@192 xxx]# curl -L -O http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz 
[root@192 xxx]# tar -zxvf autoconf-2.69.tar.gz 
[root@192 xxx]# cd autoconf-2.69
[root@192 autoconf-2.69]# ./configure --prefix=/usr/
[root@192 autoconf-2.69]# make
[root@192 autoconf-2.69]# make install

查看当前版本

 /usr/bin/autoconf -V # rpm -qf /usr/bin/autoconf

第二步:重新编译nginx

下载链接器

cd /home/modsec
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx

#如果不是宝塔一键脚本安装,则需要下载对应nginx版本重新添加编译,进行如下操作
#宝塔的一键脚本安装的略过此步奏 看下面的步骤

$ wget http://nginx.org/download/nginx-1.9.2.tar.gz
$ tar xzvf nginx-1.9.2.tar.gz
$ cd nginx-1.9.2
$ ./configure --add-module=/home/modsec/modsecurity-nginx
$ make
$ make && make install

***只针对宝塔面板 nginx的一键安装脚本 nginx.sh 在 目录 /www/server/panel/install

nginx的一键安装脚本

所以可以方便的进行添加防火墙模块编译, 修改nginx.sh以添加需要添加的模块(可以先备份以防万一),大概246行的位置,找到 ./configure,可以直接在前面位置添加

--add-module=/home/modsec/modsecurity-nginx

防火墙模块编译

然后执行这个一建脚本 #这个版本号根据需要 填自己的版本

sh /www/server/panel/install/nginx.sh install 1.12  #这个版本号可以更具需要修改

##如果没有这样的一键脚本,需要下载对应的nginx版本,然后使用 nginx -V 查看已安装编译的模板,记录下再添加 需要模块重新编译。

第三步:下载规则集,移动到Nginx配置文件中

宝塔面板的nginx配置文件目录在 /www/server/nginx/conf 下,所以为了方便可以将用到的配置文件规则集都放到这个目录下,如果是其他情况修改对应目录位置即可

$ cd /home/modsec
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git  #下载规则集
$ cp -a owasp-modsecurity-crs   /www/server/nginx/conf/   #复制规则集到配置文件目录
$ cd /www/server/nginx/conf/owasp-modsecurity-crs
$ cp crs-setup.conf.example  crs-setup.conf   #更名
#修改部分
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf

第四步:将Modsecurity的配置文件,移动到Nginx配置文件中

这一步同样 移到 /www/server/nginx/conf 下

$ cd /home/modsec/ModSecurity
$ cp modsecurity.conf-recommended modsecurity.conf #复制Modsecurity配置文件

$ cp modsecurity.conf /www/server/nginx/conf/modsecurity.conf
$ cp unicode.mapping  /www/server/nginx/conf/
 #修改SecRuleEngine 为On 启动防火墙
$ vim /www/server/nginx/conf/modsecurity.conf  
SecRuleEngine On

第五步:在Nginx配置文件中,创建modsec_includes.conf

/www/server/nginx/conf 下创建一个 modsec_includes.conf,内容如下:

include modsecurity.conf
include owasp-modsecurity-crs/crs-setup.conf
include owasp-modsecurity-crs/rules/REQUEST-901-INITIALIZATION.conf
Include owasp-modsecurity-crs/rules/REQUEST-903.9002-WORDPRESS-EXCLUSION-RULES.conf
include owasp-modsecurity-crs/rules/REQUEST-905-COMMON-EXCEPTIONS.conf
include owasp-modsecurity-crs/rules/REQUEST-910-IP-REPUTATION.conf
include owasp-modsecurity-crs/rules/REQUEST-911-METHOD-ENFORCEMENT.conf
include owasp-modsecurity-crs/rules/REQUEST-912-DOS-PROTECTION.conf
include owasp-modsecurity-crs/rules/REQUEST-913-SCANNER-DETECTION.conf
include owasp-modsecurity-crs/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf
include owasp-modsecurity-crs/rules/REQUEST-921-PROTOCOL-ATTACK.conf
include owasp-modsecurity-crs/rules/REQUEST-930-APPLICATION-ATTACK-LFI.conf
include owasp-modsecurity-crs/rules/REQUEST-931-APPLICATION-ATTACK-RFI.conf
include owasp-modsecurity-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf
include owasp-modsecurity-crs/rules/REQUEST-933-APPLICATION-ATTACK-PHP.conf
include owasp-modsecurity-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf
include owasp-modsecurity-crs/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf
include owasp-modsecurity-crs/rules/REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION.conf
include owasp-modsecurity-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf
include owasp-modsecurity-crs/rules/RESPONSE-950-DATA-LEAKAGES.conf
include owasp-modsecurity-crs/rules/RESPONSE-951-DATA-LEAKAGES-SQL.conf
include owasp-modsecurity-crs/rules/RESPONSE-952-DATA-LEAKAGES-JAVA.conf
include owasp-modsecurity-crs/rules/RESPONSE-953-DATA-LEAKAGES-PHP.conf
include owasp-modsecurity-crs/rules/RESPONSE-954-DATA-LEAKAGES-IIS.conf
include owasp-modsecurity-crs/rules/RESPONSE-959-BLOCKING-EVALUATION.conf
include owasp-modsecurity-crs/rules/RESPONSE-980-CORRELATION.conf

第六步:修改Nginx配置文件nginx.conf

#修改,配置文件,如果是单个网站应用启用可以,在特定的vhost下的域名配置文件下
#这个目录下的 虚拟主机下 /www/server/panel/vhost/nginx/*.conf
$ vim  /www/server/nginx/conf/nginx.conf
server {
        listen  80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        #启用Modsecurity防火墙  
        #注意如果有伪静态板块 不能同时存在多个 location / 模块,可以将 这个配置和伪静态规则写一起
        location / {
            modsecurity on;
            modsecurity_rules_file /www/server/nginx/conf/modsec_includes.conf;
            root   html;
            index  index.html index.htm;
        }
...
}

因为修改了nginx的配置文件,可以先测试一下

$ nginx -t
#出现一下提示,基本上没有问题
nginx: the configuration file /www/server/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /www/server/nginx/conf/nginx.conf test is successful

这步修改需要重启nginx,如果个别目录出现错误会重启失败,更具提示修改就行。

验证

默认Modsecurity规则集里有限制IP的,需要nginx里编译geoip模块,如果会报错如下内容,

[emerg] "modsecurity_rules_file" directive Rules error. File: /www/server/nginx/conf/owasp-modsecurity-crs/rules/REQUEST-910-IP-REPUTATION.conf. Line: 73. Column: 22. This version of ModSecurity was not compiled with GeoIP or MaxMind support.  in /www/server/nginx/conf/nginx.conf:91

如果暂时不需要可以去修改 modsec_includes.conf 这个文件(即第五步里创建的配置文件)

$ vim /www/server/nginx/conf/modsec_includes.conf
#将下列规则注释掉,不加载这条规则
# include owasp-modsecurity-crs/rules/REQUEST-910-IP-REPUTATION.conf 

规则注释掉,不加载这条规则

默认规则里也不允许直接IP访问,如果配置完成后直接IP访问被403拒绝,那么也可证明防火墙已然生效。
防护日志写在 /var/log/modsec_audit.log

版权免责申明
① 本站源码模板等资源SVIP用户永久不限量免费下载
② 所有资源来源于网络收集,如有侵权,请联系站长进行删除处理。
③ 分享目的仅供大家学习和交流,请不要用于商业用途,否则后果自负。
④ 如果你有源码需要出售,可以联系管理详谈。
⑤ 本站提供的源码、模板、插件等等资源,都不包含技术服务请大家谅解。
⑥ 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需。
⑦ 在您的能力范围内,为了大环境的良性发展,请尽可能的选择正版资源。
⑧ 网站资源绝不做任何二次加密或添加后门(原版加密除外)
常见问题F&Q
需要积分的资源怎么下载?
您可以注册后签到等活跃动作获得积分,积分可下载,也可充值升级等级免费下载。
源码模板等文件安全吗?有没有后门病毒吗?
站内资源标有“已测试”标签的资源源码,表示已经在本地安装测试调试过才分享出来的,可以保证一定的安全;若不放心可以自行下载模板资源后使用D盾等查杀工具扫一遍确认安全。
本站网站模板等源码提供安装服务吗?
本站资源收集于网络并分享出来共同学习,不提供免费安装服务,模板源码安装等需要有一定熟悉度,小白用户可以下载资源后雇人安装调试。