Web应用程序防火墙(WAF)是一种用于在应用程序级别保护组织的安全设备。WAF通过监控、过滤和分析互联网和web应用程序之间的流量来实现这一目标。作为反向代理,通用web应用程序防火墙的目的是保护应用程序免受恶意请求的影响,并在恶意请求到达web应用程序或用户之前将其停止。由于应用程序是攻击者连接有价值数据的手段,因此它们也是漏洞的主要来源,这使得实施正确的WAF成为一个关键步骤。有鉴于此,WAF可保护组织免受一系列应用层攻击,包括SQL注入、跨站点脚本(XSS)攻击、跨站点请求伪造(CSRF)、拒绝服务(DoS)和分布式拒绝服务(DDoS)攻击、cookie中毒和零日攻击。
Easywaf是开源的WEB应用防火墙,基于openresty开发,可以保护WEB应用或API接口,阻断常见的web攻击。同时Easywaf提供友好的后台管控界面,支持IP、URL、Referer、User-Agent等HTTP常见字段的自定义访问规则。
Easywaf 理论上支持的网关类型
基于lua_nginx模块开发网关,例如openresty,ingress-nginx,kong,apisix等理论上都可以使用。
在线体验
- 后台地址:Easy WAF
基于docker环境安装体验:
1. 创建docker网络
docker network create waf
2. 运行mysql服务
docker run --net waf --name mysql -e MYSQL_ROOT_PASSWORD=easywaf -d sk15team/wafmysql:1.0
如更改了MYSQL_ROOT_PASSWORD,需要到后台后端docker内修改相应DB配置。
3. 运行ES服务
docker run -d --name elasticsearch --net waf -e "discovery.type=single-node" elasticsearch:7.17.6
ES需要占用的内存较大,如果快速体验,无需日志功能,则可省略此服务。亦可使用已有自建的ES服务。
4. 启动后台后端服务
docker run -d --name backend --net waf sk15team/wafbackend:1.0
5. 启动后台前端服务
docker run -d --name frontend --net waf -p 8089:80 sk15team/waffrontend:1.0
6. 启动WAF节点
docker run -d --name agent --net waf -p 8000:80 -e "WAF_HOSTNAME=$(hostname)" -e "WAF_API_TOKEN=f26320c31aa756551df12480dbbe1eb8" -e "WAF_HOST=http://backend:8199" sk15team/waf:1.0
- 访问localhost:8089即可打开后台,默认密码为admin/easywaf。如您的WAF后台需要部署在公网,请立即修改默认口令。
- 初次启动节点可能会存在规则获取失败的情况,请等待10S左右。规则同步成功后,使用命令
curl http://localhost:8000/nohup.out
测试,规则生效则会返回阻断页面内容。