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