>在前面的一篇文章中,我们讲到了如何溯源攻击者。但这仍避免不了攻击。该如何解决呢?这时就需要WAF(web防火墙)来保护我们的网站了。但是阿里云和腾讯云的waf着实有点贵,动不动就上万了。哪么该如何解决呢? # 环境 - Apache2.4 - 宝塔7.9.4 宝塔虽然有apache和nginx的防火墙。但都是收费的。(其实就是在开源的waf基础上魔改的,收费就太恶心了。)  主要方方sql注入、xss、一句话等常见渗透攻击。一年就要四百多,怎么不去抢! ### ModSecurity介绍 ModSecurity是一个开源的、跨平台的Web应用防火墙(WAF),被称为WAF界的“瑞士军刀”。它可以通过检查Web服务接收到的数据,以及发送出去的数据来对网站进行安全防护。 **功能** - SQLi:阻止SQL注入 - XSS:阻止跨站脚本攻击 - LFI:阻止利用本地文件包含漏洞进行攻击 - RFI:阻止利用远程文件包含漏洞进行攻击 - RCE:阻止利用远程命令执行漏洞进行攻击 - PHP Code :阻止PHP代码注入 - HTTP Protocol Violations:阻止违反HTTP协议的恶意访问 - HTTPoxy:阻止利用远程代理感染漏洞进行攻击 - Sshllshock:阻止利用Shellshock漏洞进行攻击 - Session Fixation:阻止利用Session会话ID不变的漏洞进行攻击 - Scanner Detection:阻止黑客扫描网站 - Metadata/Error Leakages:阻止源代码/错误信息泄露 - Project Honey Pot Blacklist:蜜罐项目黑名单 - GeoIP Country Blocking:根据判断IP地址归属地来进行IP阻断 ### 安装 **安装依赖** ``` yum install -y yajl-devel ssdeep-devel ``` **安装** ``` cd /usr/local wget https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.5/modsecurity-2.9.5.tar.gz tar -zxvf modsecurity-2.9.5.tar.gz cd modsecurity-2.9.5 ./configure --with-apxs=/www/server/apache/bin/apxs --with-apr=/www/server/apache/bin/apr-1-config --with-apu=/www/server/apache/bin/apu-1-config make make install ``` ![1.png][1] 注意,如果你的是非宝塔环境,也可以按照上面的命令进行安装。需要修改的位置为`apxs` `arp-1-confg``apu-l-config`这三个文件的位置。宝塔下默认位置为:`/www/server/apache/bin/`你可以用`find`命令进行搜索。 ### 配置规则文件 ``` cd /usr/local git clone https://github.com/coreruleset/coreruleset.git #如果本地网站无法连接git官网,可尝试下方的另外两个下载地址 #git clone https://hub.fastgit.org/coreruleset/coreruleset.git #git clone https://hub.0z.gs/coreruleset/coreruleset.git mkdir /www/server/apache/conf/modsecurity/ #复制ModSecurity相关配置文件 cp /usr/local/modsecurity-2.9.5/modsecurity.conf-recommended /www/server/apache/conf/modsecurity/modsecurity.conf cp /usr/local/modsecurity-2.9.5/unicode.mapping /www/server/apache/conf/modsecurity/unicode.mapping #复制OWASP相关规则文件 cp /usr/local/coreruleset/crs-setup.conf.example /www/server/apache/conf/modsecurity/crs-setup.conf cp -r /usr/local/coreruleset/rules/ /www/server/apache/conf/modsecurity/ #启用白名单及规则禁用文件 mv /www/server/apache/conf/modsecurity/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example /www/server/apache/conf/modsecurity/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf mv /www/server/apache/conf/modsecurity/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example /www/server/apache/conf/modsecurity/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf ``` ### 开启waf 编辑`httpd.conf`,去掉`#LoadModule unique_id_module modules/mod_unique_id.so`前的注释符`#`,并添加以下内容 ``` LoadModule security2_module modules/mod_security2.so Include conf/modsecurity/modsecurity.conf Include conf/modsecurity/crs-setup.conf Include conf/modsecurity/rules/*.conf ``` 编辑`/www/server/apache/conf/modsecurity/modsecurity.conf`,`SecRuleEngine DetectionOnly`改为`SecRuleEngine On`然后根据实际需要,其他的配置看是否需要,根据实际关闭即可。(其实用我们的配置规则文件就以及足够了。笔者在安装时,发现手机端打开时显示空白页,需手动刷新才能出现页面。可能时CND问题!) ### 测试 重启apache服务 ``` service restart httpd ``` **测试** `http://bbskali.cn/?id=%22%3E%3Cscript%3Ealert(1);%3C/script%3E` ![][2] ### 自定义页面 默认的403页面,有损我们的风格,动手自己写个页面吧。(虽然缺少设计美!) ``` 系统防火墙 当前的操作可能会对网站安全造成威胁,已被服务器防火墙拦截。 ``` 修改`/www/server/apache/conf/modsecurity/crs-setup.conf`文件,添加下面代码 ``` SecDefaultAction "phase:1,log,auditlog,redirect:https://blog.bbskali.cn/waf.html?url=%{REQUEST_FILENAME}&intercept_domain=%{request_headers.host}" SecDefaultAction "phase:2,log,auditlog,redirect:https://blog.bbskali.cn/waf.html?url=%{REQUEST_FILENAME}&intercept_domain=%{request_headers.host}" ``` 将原来的`#SecDefaultAction "phase:1,log,auditlog,pass"`注释掉。 ![][3] 重启apache服务,查看效果。 ![][4] [1]: https://blog.bbskali.cn/usr/uploads/2022/11/959685303.png [2]: https://blog.bbskali.cn/usr/uploads/2022/11/2056090197.png [3]: https://blog.bbskali.cn/usr/uploads/2022/11/2328100924.png [4]: https://blog.bbskali.cn/usr/uploads/2022/11/2538883582.png 在前面的一篇文章中,我们讲到了如何溯源攻击者。但这仍避免不了攻击。该如何解决呢?这时就需要WAF(web防火墙)来保护我们的网站了。但是阿里云和腾讯云的waf着实有点贵,动不动就上万了。哪么该如何解决呢?环境Apache2.4宝塔7.9.4宝塔虽然有apache和nginx的防火墙。但都是收费的。(其实就是在开源的waf基础上魔改的,收费就太恶心了。)主要方方sql注入、xss、一句话等常见渗透攻击。一年就要四百多,怎么不去抢!ModSecurity介绍ModSecurity是一个开源的、跨平台的Web应用防火墙(WAF),被称为WAF界的“瑞士军刀”。它可以通过检查Web服务接收到的数据,以及发送出去的数据来对网站进行安全防护。功能SQLi:阻止SQL注入XSS:阻止跨站脚本攻击LFI:阻止利用本地文件包含漏洞进行攻击RFI:阻止利用远程文件包含漏洞进行攻击RCE:阻止利用远程命令执行漏洞进行攻击PHP Code :阻止PHP代码注入HTTP Protocol Violations:阻止违反HTTP协议的恶意访问HTTPoxy:阻止利用远程代理感染漏洞进行攻击Sshllshock:阻止利用Shellshock漏洞进行攻击Session Fixation:阻止利用Session会话ID不变的漏洞进行攻击Scanner Detection:阻止黑客扫描网站Metadata/Error Leakages:阻止源代码/错误信息泄露Project Honey Pot Blacklist:蜜罐项目黑名单GeoIP Country Blocking:根据判断IP地址归属地来进行IP阻断安装安装依赖yum install -y yajl-devel ssdeep-devel安装cd /usr/local wget https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.5/modsecurity-2.9.5.tar.gz tar -zxvf modsecurity-2.9.5.tar.gz cd modsecurity-2.9.5 ./configure --with-apxs=/www/server/apache/bin/apxs --with-apr=/www/server/apache/bin/apr-1-config --with-apu=/www/server/apache/bin/apu-1-config make make install注意,如果你的是非宝塔环境,也可以按照上面的命令进行安装。需要修改的位置为apxs arp-1-confg`apu-l-config这三个文件的位置。宝塔下默认位置为:/www/server/apache/bin/你可以用find`命令进行搜索。配置规则文件cd /usr/local git clone https://github.com/coreruleset/coreruleset.git #如果本地网站无法连接git官网,可尝试下方的另外两个下载地址 #git clone https://hub.fastgit.org/coreruleset/coreruleset.git #git clone https://hub.0z.gs/coreruleset/coreruleset.git mkdir /www/server/apache/conf/modsecurity/ #复制ModSecurity相关配置文件 cp /usr/local/modsecurity-2.9.5/modsecurity.conf-recommended /www/server/apache/conf/modsecurity/modsecurity.conf cp /usr/local/modsecurity-2.9.5/unicode.mapping /www/server/apache/conf/modsecurity/unicode.mapping #复制OWASP相关规则文件 cp /usr/local/coreruleset/crs-setup.conf.example /www/server/apache/conf/modsecurity/crs-setup.conf cp -r /usr/local/coreruleset/rules/ /www/server/apache/conf/modsecurity/ #启用白名单及规则禁用文件 mv /www/server/apache/conf/modsecurity/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example /www/server/apache/conf/modsecurity/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf mv /www/server/apache/conf/modsecurity/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example /www/server/apache/conf/modsecurity/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf开启waf编辑httpd.conf,去掉#LoadModule unique_id_module modules/mod_unique_id.so前的注释符#,并添加以下内容LoadModule security2_module modules/mod_security2.so <IfModule security2_module> Include conf/modsecurity/modsecurity.conf Include conf/modsecurity/crs-setup.conf Include conf/modsecurity/rules/*.conf </IfModule>编辑/www/server/apache/conf/modsecurity/modsecurity.conf,SecRuleEngine DetectionOnly改为SecRuleEngine On然后根据实际需要,其他的配置看是否需要,根据实际关闭即可。(其实用我们的配置规则文件就以及足够了。笔者在安装时,发现手机端打开时显示空白页,需手动刷新才能出现页面。可能时CND问题!)测试重启apache服务service restart httpd测试http://bbskali.cn/?id=%22%3E%3Cscript%3Ealert(1);%3C/script%3E自定义页面默认的403页面,有损我们的风格,动手自己写个页面吧。(虽然缺少设计美!)<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>系统防火墙</title> <script type="text/javascript"> function getInterceptUrl(){ var url = getQueryString('url'); var domain = getQueryString('intercept_domain'); var tmpstr = "被拦截URL为:"; var div = document.getElementById('interceptdiv'); if(domain != ""){ tmpstr += domain; } if(url != "" && url != "/"){ tmpstr += url; } if(domain != "" || url != ""){ var textnode=document.createTextNode(tmpstr); div.appendChild(textnode); } } function getQueryString(name) { var result = window.location.search.match(new RegExp("[\?\&]" + name + "=([^\&]+)", "i")); if (result == null || result.length < 1) { return ""; } return result[1]; } </script> <style type="text/css"> <!-- body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#fff;} fieldset{padding:0 15px 10px 15px;border-color: #fff;border: 0px;} h1{font-size:2.4em;margin:0;color:#FFF;} h2{font-size:2.4em;margin:0;color:#CC0000;text-align: center;} h3{font-size:1.7em;margin:10px 0 0 0;color:#000000;} #header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF; background-color:#fff;} #content{margin:0 0 0 2%;position:relative;} .content-container{background:#FFF;width:50%;margin:0 auto;position:relative;margin-top:100px} a{text-decoration:none;color:#009cd6} a:hover{text-decoration:underline;color:#ff0000} --> </style> </head> <body onload = "getInterceptUrl();"> <div id="content"> <div class="content-container"><fieldset> <br><br><br> <img src="你的图片地址" > <h3 style="text-align: center;">当前的操作可能会对网站安全造成威胁,已被服务器防火墙拦截。</h3> <br> <div id = "interceptdiv" style="color:#F00;text-align: center;font-size: 16px;"></div> </fieldset> </div> </body> </html> 修改/www/server/apache/conf/modsecurity/crs-setup.conf文件,添加下面代码SecDefaultAction "phase:1,log,auditlog,redirect:https://blog.bbskali.cn/waf.html?url=%{REQUEST_FILENAME}&intercept_domain=%{request_headers.host}" SecDefaultAction "phase:2,log,auditlog,redirect:https://blog.bbskali.cn/waf.html?url=%{REQUEST_FILENAME}&intercept_domain=%{request_headers.host}"将原来的#SecDefaultAction "phase:1,log,auditlog,pass"注释掉。重启apache服务,查看效果。 版权属于:逍遥子大表哥本文链接:https://blog.bbskali.cn/3729.html按照知识共享署名-非商业性使用 4.0 国际协议进行许可,转载引用文章应遵循相同协议。 最后修改:2022 年 11 月 23 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 可怜可怜吧!正在沿街乞讨~ 文章引用 反向引用 Loading... 暂未引用其他文章 暂未被其它文章引用 下一篇 上一篇 2 条评论 Loading... 运维学习笔记博客 November 23rd, 2022 at 03:30 pm 服务器上自己的这些WAF效果很一般,只有借助 CDN 才能算有点儿效果! 回复 逍遥子 November 23rd, 2022 at 05:02 pm @运维学习笔记博客 一般的攻击还是可以的。花钱的肯定好啊! 回复 发表评论 取消回复 使用cookie技术保留您的个人信息以便您下次快速评论,继续评论表示您已同意该条款 评论 * 名称 * 🎲 邮箱 * 地址 发表评论 提交中...
2 条评论
服务器上自己的这些WAF效果很一般,只有借助 CDN 才能算有点儿效果!
一般的攻击还是可以的。花钱的肯定好啊!