Apache Web服务器是高度可定制的,可以用多种方式来满足用户需求配置,也可以根据自己的喜好使用第三方模块来配置 Apache,比如ModSecurity就是其中之一。
ModSecurity是Apache服务器原生的开源WAF(Web应用程序防火墙)。它最初只是一个Apache模块,但在过去一年中已经发展成为一个成熟的Web应用程序防火墙。现在Nginx甚至IIS都支持它。
ModSecurity根据一组预定义的规则检查传入网络服务器的请求。通常,它提供一组称为CRS(核心规则集)规则,用于保护网站免受一系列Web应用程序攻击,例如SQL注入、XSS、会话劫持等。
ModSecurity应用防火墙形成的一个PCI DSS模块来屏蔽外部的攻击点,启用该模块后,它会触发“ 403 Forbidden Error”,也就是没有足够的权限访问网站上的资源。
在本文中,小编将简单介绍如何在Debian/Ubuntu等Linux系统上使用Apache设置ModSecurity,感兴趣的朋友可以看看。
第 1 步:在Ubuntu上安装ModSecurity
$ sudo apt update
接下来将ModSecurity包与其他依赖项和库一起安装,命令如下:
$ sudo apt install libapache2-mod-security2
然后启用该模块即可。
$ sudo a2enmod security2
不要忘记重新启动Apache服务器以应用更改。
$ sudo systemctl restart apache2
至此,ModSecurity安装成功,接下来将说说大致的配置方法。
第 2 步:在 Ubuntu 中配置 ModSecurity
默认情况下,ModSecurity配置仅为检测和记录可疑活动,所以需要采取额外的步骤并将其配置为不仅可以检测而且还可以阻止可疑活动。
将默认的ModSecurity配置文件 – modsecurity.conf-recommended -复制到以下命令所提供的新文件当中。
$ sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
使用自己喜欢的文本编辑器打开文件,命令如下:
$ sudo nano /etc/modsecurity/modsecurity.conf
找到该行:
SecRuleEngine DetectionOnly
将其设置为:
SecRuleEngine On
保存更改并退出文件。
要在Apache中使得应用更改,需要重启Apache。
$ sudo systemctl restart apache2
第 3 步:下载OWASP ModSecurity核心规则集
下一步是从GitHub页面下载最新的OWASP ModSecurity核心规则集 (CRS)。
如图所示克隆OWASP git存储库。
$ git clone https://github.com/coreruleset/coreruleset.git
导航到目录:
$ cd coreruleset/
请务必将crs-setup.conf.example文件移动到modsecurity目录并将其重命名为crs-setup.conf。
$ sudo mv crs-setup.conf.example /etc/modsecurity/crs-setup.conf
此外,将rules目录也移动到modsecurity目录。
$ sudo mv sudo mv rules/ /etc/modsecurity/
接下来,编辑security2.conf文件。
$ sudo nano /etc/apache2/mods-enabled/security2.conf
确保它包含以下几行。
IncludeOptional /etc/modsecurity/*.conf Include /etc/modsecurity/rules/*.conf
然后重新启动Apache以使永久保持该设置。
$ sudo systemctl restart apache2
接下将测试上述ModSecurity配置。
第 4 步:在Ubuntu上测试ModSecurity配置
最后需要测试ModSecurity是否可以检测并阻止可疑的HTTP流量。为此,需要编辑默认的虚拟主机文件:
$ sudo nano /etc/apache2/sites-available/000-default.conf
接下来将创建一个阻止规则,当Web浏览器访问某个URL时,该规则将阻止对特定URL的访问。
在“ Virtualhost ”结束标记之前的末尾附加这些行。
SecRuleEngine On SecRule ARGS:testparam "@contains test" "id:254,deny,status:403,msg:'Test Successful'"
注意:可随意将“ id ”和“ msg ”标签设置为任何所需的值。
然后重新启动Apache服务器以应用对虚拟主机配置文件所做的更改。
$ sudo systemctl restart apache2
在浏览器上尝试访问以?testparam=test
结尾的URL地址,即:
http://server-ip/?testparam=test
这时会收到“403 Forbidden error”,说明已被阻止访问该资源。
与此同时,还可以通过检查错误日志来进一步确认客户端被阻止的情况,如如下所示。
$ cat /var/log/apache2/error.log | grep “Test successful”
总结
通过以上过程就可以成功的设置ModSecurity来检测和阻止不需要的HTTP流量,设置方法还是比较简单的,不清楚的朋友可以参考上述过程进行设置。
总的来说,ModSecurity主要是用于Web应用程序,所以也可称之为Web应用程序防火墙。在建设Web网站时,如果有条件的话建议都可以安装和设置ModSecurity,毕竟可以为网站的安全增加防护。