OpenResty WAF设置指南:增强Web应用安全
弁言在当今的网络安全情况中,Web应用面对着各种威胁。WAF(Web
应用防火墙)作为一个关键的防御组件,可以有效地保护您的Web应用免受SQL注入、XSS、CSRF等攻击。OpenResty
WAF模块以其高效和机动性,成为许多企业和开发者的首选。
WAF 模块获取
您可以通过以下两种方式之一获取 Nginx Lua WAF:
Git 克隆
# git clone https://github.com/loveshell/ngx_lua_waf.git
Wget 下载
# wget https://github.com/loveshell/ngx_lua_waf/archive/master.zip
安装步调
[*]下载并解压 :将下载的 ngx_lua_waf 文件夹解压到您的 Nginx 设置目次中。
[*]重命名 :将解压后的文件夹重命名为 waf。
[*]验证 :检查 waf 文件夹是否已准确放置。
# mv ngx_lua_waf/ waf
# 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_typeapplication/octet-stream;
server {
listen 80;
server_namewww.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)攻击
# curl http://www.test.com/?id=../etc/passwd
{"retcode":"20001","messages":"请求失败,请稍后再试!","body":{}}
# 路径遍历,类似于LFI,攻击者尝试访问受限资源或目录之外的文件
# curl http://www.test.com/?file=../../../../etc/shadow
{"retcode":"20001","messages":"请求失败,请稍后再试!","body":{}}
# 跨站脚本 (XSS)
# 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规则,以保持最佳的安全姿态。
末了
从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同砚们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,本领越强机会才越多。
因为入门学习阶段知识点比较杂,以是我讲得比较笼统,各人如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相干资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。
干货主要有:
①1000+CTF历届题库(主流和经典的应该都有了)
②CTF技术文档(最全中文版)
③项目源码(四五十个有趣且经典的练手项目及源码)
④ CTF大赛、web安全、分泌测试方面的视频(得当小白学习)
⑤ 网络安全学习路线图(告别不入流的学习)
⑥ CTF/分泌测试工具镜像文件大全
⑦ 2023暗码学/隐身术/PWN技术手册大全
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里
页:
[1]