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规则,以保持最佳的安全姿态。

最后

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。

干货主要有:

①1000+CTF历届题库(主流和经典的应该都有了)

②CTF技术文档(最全中文版)

③项目源码(四五十个有趣且经典的练手项目及源码)

④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)

⑤ 网络安全学习路线图(告别不入流的学习)

⑥ CTF/渗透测试工具镜像文件大全

⑦ 2023密码学/隐身术/PWN技术手册大全

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

扫码领取

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值