当前位置:首页 >  IDC >  服务器 >  正文

WAF不是大站专利:ModSecurity加OWASP免费规则,老站也能上

 2026-08-30 10:38  来源: 互联网   我来投稿 撤稿纠错

  一键部署OpenClaw

 

WAF这个词听着像金融级配置,其实开源方案零授权费。ModSecurity是老牌WAF引擎,OWASP CRS是一套社区维护的攻击特征规则,两个加起来能挡住绝大多数SQL注入、XSS、路径穿越扫描。你被WebShell和注入攻击折腾过的站,这套东西值得配一次。

Nginx上跑ModSecurity用v3版本(libmodsecurity),主流发行版有包可装。装完引擎只是个空壳,真正干活的是规则集。

# Ubuntu/Debian 安装
apt install libmodsecurity3 libnginx-mod-http-modsecurity

# 下载OWASP CRS规则集
cd /etc/nginx
wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v4.5.0.tar.gz
tar zxf v4.5.0.tar.gz && mv coreruleset-4.5.0 crs
cp crs/crs-setup.conf.example crs/crs-setup.conf

# nginx.conf 启用
modsecurity on;
modsecurity_rules_file /etc/nginx/modsecurity.conf;
# /etc/nginx/modsecurity.conf
Include /etc/nginx/crs/crs-setup.conf
Include /etc/nginx/crs/rules/*.conf

# 上线初期务必用只检测模式,只记日志不拦截
SecRuleEngine DetectionOnly

DetectionOnly这个设置是整个流程里最关键的一步。CRS规则很激进,富文本编辑器的内容、搜索关键词里的特殊字符都可能被误判成攻击。直接开拦截等于给网站埋雷,先跑一两周只记录模式,看日志里有没有正常业务被标记,把误报规则加白名单。

# 误报处理:比如后台文章发布富文本总被拦
# crs-setup.conf 或单独规则文件
SecRuleUpdateTargetById 942100 "!ARGS:content"
# 意思是942100这条规则不再检查content参数

验证:日志在/var/log/modsec_audit.log,拿测试语句打一下自己的站,比如URL里加个单引号加union select,日志里应该出现对应规则ID和命中记录。误报清理得差不多后,把SecRuleEngine改成On,再观察几天错误日志。

我的建议:老站、有历史包袱的站用DetectionOnly跑一个月再说;新站可以直接开拦截,规则挑着用,SQL注入和文件上传相关的规则留着,爬虫和行为分析类的规则看情况。WAF不是装完就一劳永逸,CRS每月更新,记得跟着升级,规则过期对新攻击就没用了。

数据来源:OWASP Core Rule Set官网

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

相关标签
php教程
网站服务器

相关文章

  • 被CC打挂之前先做这三步:SYN Flood内核参数调优实战

    SYNFlood的原理一句话:攻击者狂发TCP握手第一个包(SYN),但不回第三次握手的ACK,服务器傻等,半连接队列被占满,正常用户的握手请求进不来,表现为网站打不开但机器负载并不高。这种攻击成本极低,一个脚本就能打,站长几乎人人会遇到。先确认是不是这个病:ss-s看一眼,或者netstat-an

  • phpredis扩展装完就完事?连接超时、序列化和长连接三个坑先排掉

    PHP连Redis基本都用phpredis这个C扩展,pecl一键装完,newRedis一句就连上了。但默认配置是给本机测试用的,直接上生产迟早出问题。下面三个坑是我见过翻车率最高的。第一个坑:连接超时没设。默认连接超时是0,意思是永远等。Redis那边要是卡了,PHP进程全在等连接,FPM的wor

  • Redis重启数据全丢?RDB和AOF持久化怎么选,别拍脑袋

    Redis快是真快,代价是数据在内存里,进程一崩、机器一断电,没落盘的数据就没了。站长场景里最疼的两种:一是拿Redis存Session,重启一次全员掉线重登;二是拿它存计数器和队列,重启后数字归零、任务丢失。持久化配置平时没人看,出事才知道疼。Redis给两种持久化方案。RDB是定时快照,每隔一段

    标签:
    php教程
  • 网站加了两台服务器用户就掉线?PHP Session存Redis,十分钟搞定多机共享

    单机跑得好好的站,一上负载均衡就出怪事:用户登录着,刷新一下变成未登录;购物车里的东西随机消失。十有八九是Session的问题——Session默认存在本机文件里,用户第一次请求落在A机,Session写在A机,第二次请求被分到B机,B机根本没这个Session,可不就掉线了。解决思路就一句话:Se

    标签:
    php教程
  • Redis缓存穿透打垮数据库?空值缓存加布隆过滤器双保险

    缓存穿透的典型场景:有人拿脚本扫你的站,每次请求一个根本不存在的ID,比如/goods.php?id=99999999。Redis里查不到,请求全落到MySQL,而MySQL也查不到,什么都不缓存。下一波请求还是这个流程,数据库白挨打,缓存形同虚设。跟缓存击穿(某个热key过期)不一样,穿透的点是“

    标签:
    php教程

热门排行

信息推荐