引言
在当今的网络安全环境中,Web应用面临着各种威胁。WAF(Web 应用防火墙)作为一个关键的防御组件,可以有效地保护您的Web应用免受SQL注入、XSS、CSRF等攻击。OpenResty WAF模块以其高效和灵活性,成为许多企业和开发者的首选。
WAF 模块获取
您可以通过以下两种方式之一获取 Nginx Lua WAF:
Git 克隆
[root@master ~]# git clone https://github.com/loveshell/ngx_lua_waf.git
Wget 下载
[root@master ~]# wget https://github.com/loveshell/ngx_lua_waf/archive/master.zip
安装步骤
- 下载并解压:将下载的
ngx_lua_waf
文件夹解压到您的 Nginx 配置目录中。 - 重命名:将解压后的文件夹重命名为
waf
。 - 验证:检查
waf
文件夹是否已正确放置。
[root@master nginx]# mv ngx_lua_waf/ waf[root@master conf]# ll
配置详解
以
/usr/local/openresty/nginx/conf
作为 Nginx 安装路径的示例:
Nginx 配置
在 Nginx 的
http
块中添加以下配置:
http {
lua_package_path "/usr/local/openresty/nginx/conf/waf/?.lua";# 设置 Lua 脚本搜索路径
lua_shared_dict limit 10m;# 定义一个共享字典用于限制检查
init_by_lua_file /usr/local/openresty/nginx/conf/waf/init.lua;# 初始化 WAF
access_by_lua_file /usr/local/openresty/nginx/conf/waf/waf.lua;# 访问控制
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name www.test.com;...
}}
config.lua
文件配置
以下是
config.lua
文件的配置项及其描述:
RulePath ="/usr/local/openresty/nginx/conf/waf/wafconf/"
attacklog ="on"
logdir ="/usr/local/openresty/nginx/logs/hack/"
UrlDeny="on"
Redirect="on"
CookieMatch="on"
postMatch="on"
whiteModule="on"
black_fileExt={"php","jsp"}
ipWhitelist={"127.0.0.1"}
ipBlocklist={"1.0.0.1"}
CCDeny="on"
CCrate="50/1"
html =[[{"retcode":"20001","messages":"请求失败,请稍后再试!","body":{}}]]
参数类型描述
RulePath
stringWAF 规则文件的目录路径
attacklog
string是否开启攻击日志记录,默认为 “on”
logdir
string攻击日志存放的目录
UrlDeny
string是否开启 URL 访问拦截,默认为 “on”
Redirect
string拦截后是否重定向,默认为 “on”
CookieMatch
string是否开启 Cookie 攻击拦截,默认为 “on”
postMatch
string是否开启 POST 攻击拦截,默认为 “on”
whiteModule
string是否开启 URL 白名单,默认为 “on”
black_fileExt
table不允许上传的文件后缀类型列表
ipWhitelist
tableIP 白名单的 IP 地址列表
ipBlocklist
tableIP 黑名单的 IP 地址列表
CCDeny
string是否开启 CC 攻击防护,默认为 “off”
CCrate
stringCC 攻击频率限制,格式为请求数/时间(秒)
html
string自定义失败提示信息,JSON 格式
WAF规则文件
在 OpenResty WAF中,
wafconf/
目录下的各个子目录通常用于存放不同类型的检测规则。以下是每个子目录的含义及其作用:
- args:这个目录可能包含与 URL 参数或查询字符串参数相关的规则。例如,检测 SQL 注入攻击中常见的参数名或值,或者识别其他可疑的参数。
- cookie:包含用于检测 HTTP 请求中
Cookie
头中潜在恶意内容的规则。这可以包括检测跨站脚本(XSS)攻击、会话劫持等。 - post:用于存放与 HTTP POST 请求相关的规则,这些规则可能用于检测 POST 请求体中的恶意内容,如 XSS 攻击载荷、SQL 注入攻击尝试等。
- url:包含用于检测 URL 本身(不包括参数)的规则。这可能包括识别和阻止钓鱼链接、URL 重定向攻击或其它可疑的 URL 模式。
- user-agent:这个目录可能包含用于检查 HTTP 请求中的
User-Agent
头的规则。一些自动化的扫描工具或恶意用户可能会在User-Agent
中使用特定的字符串,这些规则可以帮助识别这些行为。 - whiteurl:通常用于定义 URL 白名单规则。如果请求的 URL 与这个目录下的规则匹配,那么即使其他条件满足,请求也不会被 WAF 拦截。
每个目录下的规则文件都可能包含一系列的检测条件,用于识别和响应特定的威胁。这些规则可以是正则表达式、字符串匹配或其他类型的模式匹配,具体取决于规则的编写和WAF的实现。
激活 WAF 模块
完成配置后,重启 Nginx 以应用更改:
/usr/local/nginx/sbin/nginx -s reload
测试 WAF 配置
通过发送恶意请求来测试 WAF 是否正确配置和生效:
# 典型的文件路径遍历攻击,也称为本地文件包含(LFI)攻击[root@master ~]# curl http://www.test.com/?id=../etc/passwd{"retcode":"20001","messages":"请求失败,请稍后再试!","body":{}}# 路径遍历,类似于LFI,攻击者尝试访问受限资源或目录之外的文件[root@master ~]# curl http://www.test.com/?file=../../../../etc/shadow{"retcode":"20001","messages":"请求失败,请稍后再试!","body":{}}# 跨站脚本 (XSS)[root@master ~]# curl http://www.test.com/?search=%22%3E%3Cscript%3Ealert%28123%29%3C%2Fscript%3E{"retcode":"20001","messages":"请求失败,请稍后再试!","body":{}}
尝试了几种攻击,都返回
{"retcode":"20001","messages":"请求失败,请稍后再试!","body":{}}
,说明 WAF 已成功拦截了该请求。
安全性最佳实践
- 定期更新WAF规则以应对新出现的威胁。
- 使用复杂的规则集以提高安全性。
- 启用日志记录以便于事后分析。
性能优化
- 监控WAF对性能的影响,并根据需要调整配置。
- 考虑使用CDN服务来减轻WAF的压力。
故障排查
- 检查日志文件以识别和解决攻击或误报问题。
- 使用调试模式来逐步检查WAF的行为。
社区和资源链接
- OpenResty 官方文档
- Nginx Lua WAF GitHub 仓库
总结
通过本指南,您应该能够成功地在您的OpenResty环境中配置和优化WAF,以提高Web应用的安全性。记得定期审查和更新您的WAF规则,以保持最佳的安全姿态。
版权归原作者 我是峰迹 所有, 如有侵权,请联系我们删除。