最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何在CentOS服务器上配置WAF规则来阻断SQL注入扫描?
时间:2026-07-16 08:19:52 编辑:袖梨 来源:一聚教程网
Fail2Ban无法直接阻断SQL注入,只能基于Web日志中已记录的攻击痕迹(如union select、' OR '1'='1)进行IP封禁;其有效性取决于日志是否真实记录请求参数、filter正则是否精准匹配、jail配置是否适配firewalld、以及云平台安全组是否同步放行/拒绝。
Fail2Ban 本身不能直接阻断 SQL 注入扫描——它只能基于 Web 日志中已记录的攻击痕迹做 IP 封禁,且依赖你日志是否真存了 union select、' OR '1'='1 这类内容。
确认 Nginx/Apache 日志是否记录攻击载荷
很多默认配置根本不会把 URL 参数写进 /var/log/nginx/access.log,导致 Fail2Ban “无料可筛”。
- 运行
grep log_format /etc/nginx/nginx.conf,确保包含$request_uri或$args;更稳妥的是显式启用完整请求行:log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent'; - 手动发一次测试请求:
curl "https://yoursite.com/search?q=1%27%20OR%20%271%27%3D%271",然后立刻执行:tail -n 20 /var/log/nginx/access.log | grep -i "or.*1.*1" - 如果没输出,说明日志字段缺失,后续所有 filter 都无效;Apache 用户需检查
LogFormat是否含%r,且CustomLog引用了它
编写 Fail2Ban filter 匹配典型 SQL 注入特征
不能复用 sshd 的配置,必须新建 /etc/fail2ban/filter.d/nginx-sql.conf,且正则要防绕过。
-
failregex必须以^<HOST>开头,结尾保留$,否则可能跨行误匹配 - 用
(?=.*)正向先行断言组合多个关键词,比如:unions+select|sleep(|'s*ors*'1's*=s*'1,避免只匹配单个词被绕过 - 不要写
.*匹配中间任意字符,性能差还易误杀;改用[^&nr]{0,50}限制长度 - 保存后务必验证:
fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-sql.conf,看是否真能捕获刚才的测试请求
配置 jail 并启用 firewalld-rich-rules 动作
CentOS 7+/8 默认用 firewalld,不能用老式 iptables-allports,否则封禁不生效。
- 在
/etc/fail2ban/jail.local中添加:
[nginx-sql]enabled = truefilter = nginx-sqllogpath = /var/log/nginx/access.logmaxretry = 3bantime = 3600action = %(action_fwrich)s[name=%(__name__)s, port="http,https", protocol="tcp"]
-
action_fwrich是 CentOS 上适配firewalld的内置动作,会自动调用firewall-cmd --add-rich-rule - 若用云服务器(如阿里云、腾讯云),还需同步配置安全组放行或拒绝,Fail2Ban 只管本机防火墙
- 启动后检查:
fail2ban-client status nginx-sql,确认 jail 已加载且有匹配计数
为什么开了规则却拦不住 ' OR 1=1 -- 这种基础 payload
最常见原因不是规则写得不够狠,而是日志没记全、或 Fail2Ban 没读到最新行。
- 确认
logpath路径和日志轮转设置是否冲突——logrotate每天切日志时,Fail2Ban 默认不会自动跟踪新文件,需加backend = systemd或用gamin后端 - 检查 SELinux 是否阻止 Fail2Ban 读取日志:
ausearch -m avc -ts recent | grep fail2ban,若有拒绝记录,执行:setsebool -P fail2ban_read_log on - 注意:Fail2Ban 是“事后封禁”,它不拦截请求本身,只封 IP;真正实时阻断 SQL 注入,得靠 ModSecurity 或云 WAF
真正难的不是写正则,而是让日志、filter、jail、firewalld 四者对齐——漏掉任一环,failregex 再准也形同虚设。
相关文章
- 王者荣耀世界零氪玩家如何生存 07-28
- 快手极速版怎么绑定手机号 07-28
- 明日方舟和轻松小熊联动活动内容一览 07-28
- 逆战未来黎明之光 逆战未来黎明之光玩法机制与新手入门指南 07-28
- 植物大战僵尸融合版毁灭土豆地雷介绍 07-28
- 逆战未来飓风之龙 逆战未来飓风之龙武器获取方法详解 07-28