WAF拦截海外SQL注入XSS跨站恶意攻击配置
WAF(Web应用防火墙)的作用是站在网站前面,把常见的恶意请求挡在门外。
本文要解决的是海外IP持续扫描、SQL注入和XSS跨站攻击这三类高频问题。
看完你能在宝塔面板或Nginx环境中完成基础WAF配置,并用真实攻击请求验证是否生效。
适合刚接触服务器安全的站长,照着操作即可。
开始前需要准备什么
先用远程工具登录服务器,确认当前的Web环境。如果你用的是宝塔面板,直接在左侧菜单找到“安全”或“防火墙”即可。如果是自建Nginx环境,需要先确认规则文件存放路径,比如 /www/server/nginx/conf 或 /etc/nginx/conf.d。不管哪种方式,操作前都建议先备份现有配置。
另外建议确认一下服务器是否开启了系统防火墙(如firewalld或iptables),因为部分恶意IP拦截可以直接在系统防火墙层完成,比WAF更省资源。
第一步:封禁高频攻击来源IP
海外攻击大多来自固定网段,可以先按IP或地区封禁。宝塔面板操作路径:安全 → 系统防火墙 → 添加端口规则 旁边选择 IP规则,填入恶意IP段,端口范围选择 ALL,策略设为 拒绝。
Nginx环境可以用iptables封禁。
先查询正在尝试登录或扫描的IP:
# 查看SSH登录失败来源
journalctl -u sshd | grep "Failed password" | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -20
确认来源IP后直接封禁:
iptables -I INPUT -s 203.0.113.5 -j DROP
如果想封禁整个恶意网段,把IP换成 203.0.113.0/24 即可。
用 iptables -L -n 可以查看当前规则是否生效。
第二步:在Web层拦截SQL注入与XSS特征
IP封禁只能挡住已知来源,攻击者换IP后依然能访问。这时候需要WAF层拦截恶意请求特征。宝塔面板自带的“防火墙”插件可以直接开启:安全 → 宝塔防火墙 → 打开 总开关,并确认 SQL注入、XSS攻击、常见漏洞 等规则处于开启状态。
如果是自建Nginx,建议使用ngx_http_secure_link_module搭配自定义规则,或直接部署OpenResty环境。
这里给出一段精简的Nginx层过滤示例,放在 server 段内:
# 拦截常见SQL注入关键字
if ($query_string ~* "(union.*select|insert.*into|delete.*from|drop\s+table)") {
return 403;
}
# 拦截XSS典型脚本标签
if ($request_uri ~* "("
同样返回403就证明XSS规则也生效了。
同时打开网站日常页面,确认没有出现样式错乱或功能异常。
最后再盯几天Nginx访问日志,观察来自海外的恶意请求是否明显减少:
tail -f /www/wwwlogs/你的域名.log | grep -E "(403|444)"
看到大量403日志属于正常现象,说明WAF正在替你挡掉这些攻击。
到此,你已经完成了一套基础的WAF拦截配置。
如果需要处理更复杂的CC攻击或自定义规则,建议参照官方文档按需开启高级功能。