引言
在当今的网络安全环境中,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 | string | WAF 规则文件的目录路径 |
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 | table | IP 白名单的 IP 地址列表 |
ipBlocklist | table | IP 黑名单的 IP 地址列表 |
CCDeny | string | 是否开启 CC 攻击防护,默认为 “off” |
CCrate | string | CC 攻击频率限制,格式为请求数/时间(秒) |
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环境中配置和优化WAF,以提高Web应用的安全性。记得定期审查和更新您的WAF规则,以保持最佳的安全姿态。
最后
从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。
因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。
干货主要有:
①1000+CTF历届题库(主流和经典的应该都有了)
②CTF技术文档(最全中文版)
③项目源码(四五十个有趣且经典的练手项目及源码)
④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)
⑤ 网络安全学习路线图(告别不入流的学习)
⑥ CTF/渗透测试工具镜像文件大全
⑦ 2023密码学/隐身术/PWN技术手册大全
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
扫码领取