启用 Web 应用防火墙(WAF)

 原创    2023-12-19

Web Application Firewall (WAF),即 Web 应用防火墙,通过监控和过滤客户端和 Web 应用之间的 HTTP 流量来保护 Web 应用,使其免受跨站伪造、跨站脚本(XSS)、SQL 注入等攻击的影响。

WAF 的工作原理

WAF的工作原理

WAF 和 Nginx 类似,也是一种“反向代理”的设计。以应用服务器为 Nginx 为例,WAF 通常部署在 Nginx 应用服务器的前端,直接暴漏给互联网公开访问。当用户客户端的发起请求时,请求流量会首先(或先经过CDN服务器)到达 WAF 服务器,WAF 通过一组规则对恶意流量过滤并清洗,仅对合法的流量放行到 Nginx 服务器。

WAF 的必要性

尽管 Nginx 和 Web 框架本身都有一些安全机制确保能来自客户请求的合法性,但正确识别和处理 Web 攻击是一个复杂而专业的事情,从系统设计角度来讲,各模块应该各司其职:WAF 清洗好网络流量将正常的流量放行,Nginx 处理好负载均衡、权限、跨越等通用问题,而 Web 框架则可更专注业务本身。

雷池 WAF - SafeLine

市面上可选的适合中小型网站的免费 WAF 产品并不是很多,看川博客目前采用的是来自国内网络信息安全公司 - 北京长亭科技的雷池 SafeLine 社区版。社区版在功能上肯定没有付费版本强大,但对于中小型网站来说功能足够了。

雷池 SafeLine 的部署、配置和使用方法在其官网有详细说明,这里我仅说下几个关键要点:

雷池 WAF 的资源占用

从实际使用上来看,雷池 WAF 是很轻量的服务,安装运行后系统整体内存和CPU使用率并没有明显提升。按雷池官网说明,最小化安装环境为:1 核 CPU / 1 GB 内存 / 5 GB 磁盘,能满足了绝大多数服务器环境。

独占 80/443 端口

启用 SafeLine 后,其作为用户流量的最先达到的服务器,应该独占 web 端口(80或443)。如果将其部署在和 Nginx 同一台服务器,需要 Nginx 使用其它端口,此时 WAF 和 Nginx 属于本地内部通信,Nginx 不需要启用 HTTPS,另外这种情形下如果启用 WAF,则所有 Nginx 站点都启用,无法做到部分启用部分不启用。

获取正确的客户端 IP

雷池默认通过 Socket 连接获取请求者的源 IP,如果请求在到达雷池之前,还经过了其他代理设备(如 CDN 等),则需要配置以便雷池正确获取请求者原始 IP。

以使用腾讯云 CDN 为例,请求链路中经过的所有节点的 IP 存储在请求 Headers 的 X-Forwarded-For 字段。

Nginx 服务器获取真实请求 IP

启用 WAF 后,从请求流量方向看,Nginx 服务器的上游为 WAF,如果不特殊处理,在 Nginx 的日志中请求总是会显示为 WAF 服务器的 IP。需要在 Nginx 的 http 域添加配置以确保 Nginx 能获取正确的客户端 IP:

set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;

相关文章:

优化 Nginx 配置提升网站性能
近期服务器的一些改进
Nginx 使用 http_image_filter_module 实现图片缩放旋转
使用 Filebeat 和 Elasticsearch 分析 Nginx 日志
Nginx 目录服务和反向代理的 web 鉴权认证

发表留言

您的电子邮箱地址不会被公开,必填项已用*标注。发布的留言可能不会立即公开展示,请耐心等待审核通过。