如果你的网站直接暴露在公网上,那么 SQL 注入、XSS、目录扫描、恶意爬虫几乎每天都会光顾。Web 应用防火墙(WAF)的作用,是在请求到达网站程序之前先过一遍检查,把明显的攻击挡在外面。本文演示如何用 Docker 部署 NGFW One WAF 免费版,整个过程通常在 10 分钟内可以完成。
部署前准备
- 一台可以访问公网的 Linux 服务器,已安装 Docker(最低配置以下载页标注为准)。
- 服务器的 80、443、9443 端口未被占用,并在安全组 / 防火墙中放行。其中 9443 是管理后台端口,建议只对你自己的办公 IP 放行。
- 你的网站(下文称「源站」)的地址,例如
10.0.0.5:8080或另一台服务器的内网 IP。 - 网站的 HTTPS 证书和私钥文件(如已启用 HTTPS)。
第一步:启动容器
在服务器上执行:
docker run -d --name ngfw-waf --restart unless-stopped \
-p 80:80 -p 443:443 -p 9443:9443 \
-v /opt/ngfw:/data \
ngfwone/waf-free:latest
各参数的含义:
| 参数 | 作用 |
|---|---|
--restart unless-stopped | 服务器重启或容器异常退出后自动拉起 |
-p 80:80 -p 443:443 | 对外提供网站访问,所有请求先经过 WAF |
-p 9443:9443 | 管理后台 |
-v /opt/ngfw:/data | 配置、证书和日志持久化到宿主机,升级或重建容器不丢数据 |
执行 docker ps,看到 ngfw-waf 状态为 Up 即表示启动成功。
第二步:登录管理后台
浏览器访问 https://<服务器IP>:9443。首次访问时后台使用自签名证书,浏览器会提示不安全,确认后继续即可。首次登录的初始化步骤请参照快速开始文档,登录后第一件事是修改管理员密码。
第三步:添加站点
在后台新增一个防护站点,填写三项核心信息:
- 域名:例如
www.example.com。 - 源站地址:WAF 把检查通过的请求转发到哪里。
- 证书:上传该域名的证书与私钥,由 WAF 负责 HTTPS 终结。
保存后,把域名的 DNS 解析改为 WAF 服务器的公网 IP。解析生效后,访客的流量就会先到 WAF,再到源站。
第四步:验证防护是否生效
用一个带有典型注入特征的请求做测试:
curl -i "https://www.example.com/?id=1%27%20or%20%271%27=%271"
正常情况下,这个请求会被拦截并返回拦截页面,同时在后台的攻击日志中能看到对应记录,包括来源 IP、命中规则和请求内容。再用浏览器正常访问网站,确认页面功能不受影响。
上线后的几个建议
- 防止绕过:在源站的防火墙或安全组里,只允许 WAF 服务器的 IP 访问网站端口。否则攻击者一旦知道源站真实 IP,就能绕开 WAF 直接访问。
- 观察误拦:上线第一周每天看一次拦截日志。如果有正常业务请求被拦(例如后台编辑器提交的富文本),针对具体路径加白,而不是整体关闭规则。
- 备份:定期备份
/opt/ngfw目录。 - 升级:拉取新镜像后重建容器,配置保存在挂载目录中不受影响:
docker pull ngfwone/waf-free:latest
docker stop ngfw-waf && docker rm ngfw-waf
docker run -d --name ngfw-waf --restart unless-stopped \
-p 80:80 -p 443:443 -p 9443:9443 \
-v /opt/ngfw:/data \
ngfwone/waf-free:latest
什么时候需要更多
免费版解决的是「网站被打」这一个问题。当你开始需要管理办公网出口、给员工做上网认证、在内网发现异常设备,或者希望把告警、审计和封停串成闭环时,可以了解 NGFW One 企业版。免费版中积累的站点配置思路可以直接沿用。