在Web安全领域,拥有一个强大的防火墙对于保护您的网站免受恶意攻击至关重要。7G防火墙是一款轻量级但功能强大的开源Web应用程序防火墙(WAF),可以帮助保护您的Nginx服务器。
在本教程中,我们将逐步指导您如何在Nginx服务器上实施7G防火墙,一步一步进行操作。在开始之前,请注意本教程假定您对Nginx及其配置文件有基本的了解。
注意:7G防火墙是由Jeff Starr开发的开源项目。有关更多信息,包括许可证和免责声明,请访问7G防火墙主页。
规则集分析
7G防火墙旨在防止各种常见的基于Web的攻击,如SQL注入、跨站脚本(XSS)和远程文件包含(RFI)。
这里我们来大致解释配置文件中的部分规则及其重要性:
"~*([a-z0-9]{2000,})" 1;
针对过长的查询字符串。如果查询字符串包含超过2000个字母数字字符,则被视为可疑并被阻止。这有助于防止缓冲区溢出攻击。"~*(/|%2f)(:|%3a)(/|%2f)" 2;
阻止包含类似/:/
模式或其URL编码等价物的查询字符串。这种模式通常用于目录遍历攻击。"~*(ckfinder|fckeditor|fullclick)" 5;
阻止包含已知易受攻击的文件管理器脚本名称的请求。这些脚本可能被利用来上传和执行恶意文件。"~*((.*)header:|(.*)set-cookie:(.*)=)" 7;
通过阻止尝试设置HTTP头的请求,有助于防止HTTP响应分裂和HTTP头注入攻击。"~*(localhost|127(\.|%2e)0(\.|%2e)0(\.|%2e)1)" 8;
阻止包含对本地主机IP地址的引用的任何查询字符串。这些可能是利用SSRF(服务器端请求伪造)漏洞的尝试。"~*(benchmark|char|exec|fopen|function|html)(.*)(\(|%28)(.*)(\)|%29)" 18;
阻止尝试执行某些经常用于代码注入攻击的函数的请求。"~*(e|%65|%45)(v|%76|%56)(a|%61|%31)(l|%6c|%4c)(.*)(\(|%28)(.*)(\)|%29)" 20;
针对eval
函数,该函数经常在恶意PHP代码中使用。它匹配函数名及其URL编码的等价物。"~*(<|%3c)(.*)(s|%73|%53)(c|%63|%43)(r|%72|%52)(i|%69|%49)(p|%70|%50)(t|%74|%54)(.*)(>|%3e)" 25;
旨在阻止包含<script>
标签或其URL编码等价物的任何查询字符串,防止潜在的跨站脚本(XSS)攻击。"~*(;|<|>|\'|\"|\)|%0a|%0d|%22|%27|%3c|%3e|%00)(.*)(/\*|alter|base64|benchmark|cast|concat|convert|create|encode|declare|delete|drop|insert|md5|request|script|select|set|union|update)" 36;
阻止包含SQL或脚本注入尝试的任何请求。它匹配各种有害的SQL关键字和特殊字符,这些字符通常用于此类攻击。
安装步骤
步骤1:添加文件:
首先,下载7G Nginx防火墙ZIP文件并解压缩。您将找到两个文件:7g-firewall.conf
和7g.conf
。将这些文件复制到服务器上的/nginx/conf.d/
目录中。
步骤2:包含防火墙规则:
打开主要的Nginx配置文件,通常位于/nginx/nginx.conf
,并在http
块内添加以下行:
include /etc/nginx/conf.d/7g-firewall.conf;
确保文件路径与服务器上的目录结构匹配。
步骤3:包含条件逻辑:
接下来,打开本地/站点配置文件,通常位于/nginx/sites-enabled/example.com
,并在server
块内添加以下行:
include /etc/nginx/conf.d/7g.conf;
再次验证文件路径是否适用于服务器的目录结构。
测试您的Nginx配置是否有任何错误:
nginx -t
步骤4:重新启动服务器:
在进行这些更改后,您需要重新启动Nginx服务器以使新配置生效。
sudo systemctl reload nginx
步骤5:测试:
有了包含在Nginx配置中的7G防火墙文件,并且服务器已重新启动,现在是进行彻底测试的时候了。检查您的网站是否正常运作,并验证7G防火墙是否正确阻止了恶意请求。您可以使用像nginxdev.com这样的工具来发出测试请求,并比较服务器响应以查看各种7G查询的结果。
替代安装(Nginx 1.18+)
如果您使用的是Nginx版本1.18或更高版本,则有一种替代的安装方法可以简化过程。按照以下步骤操作:
- 将
7g-firewall.conf
添加到/etc/nginx/conf.d
。 - 将
7g.conf
添加到/etc/nginx/snippets
。 - 在您的配置文件的
server
指令中,添加以下行:include /etc/nginx/snippets/7g.conf;
。
这种替代方法利用了Nginx 1.18引入的snippets
目录功能。
结论
在Nginx服务器上实施7G防火墙是增强网站安全性的有效方法。请务必在实施后进行全面测试,以确保一切正常运作。