OpenResty WAF配置指南:增强Web应用安全

引言

在当今的网络安全环境中,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 

安装步骤

  1. 下载并解压:将下载的 ngx_lua_waf 文件夹解压到您的 Nginx 配置目录中。
  2. 重命名:将解压后的文件夹重命名为 waf
  3. 验证:检查 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":{}}]]
参数类型描述
RulePathstringWAF 规则文件的目录路径
attacklogstring是否开启攻击日志记录,默认为 “on”
logdirstring攻击日志存放的目录
UrlDenystring是否开启 URL 访问拦截,默认为 “on”
Redirectstring拦截后是否重定向,默认为 “on”
CookieMatchstring是否开启 Cookie 攻击拦截,默认为 “on”
postMatchstring是否开启 POST 攻击拦截,默认为 “on”
whiteModulestring是否开启 URL 白名单,默认为 “on”
black_fileExttable不允许上传的文件后缀类型列表
ipWhitelisttableIP 白名单的 IP 地址列表
ipBlocklisttableIP 黑名单的 IP 地址列表
CCDenystring是否开启 CC 攻击防护,默认为 “off”
CCratestringCC 攻击频率限制,格式为请求数/时间(秒)
htmlstring自定义失败提示信息,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环境中配置和优化WAF,以提高Web应用的安全性。记得定期审查和更新您的WAF规则,以保持最佳的安全姿态。

  • 14
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值