百科

网站防火墙怎么设置

时间:2010-12-5 17:23:32  作者:知识   来源:探索  查看:  评论:0
内容摘要:去年有个做外贸的朋友找我,说网站被人刷了三天,服务器账单飙到两千多美金。我登进去一看,日志里全是来自东欧某个IP段的请求,一秒几百次,全是往登录接口怼。他问我怎么办,我说先把防火墙规则加上,再慢慢查。

去年有个做外贸的网站朋友找我,说网站被人刷了三天,防火服务器账单飙到两千多美金。墙设我登进去一看,网站日志里全是防火来自东欧某个IP段的请求,一秒几百次,墙设全是网站往登录接口怼。他问我怎么办,防火我说先把防火墙规则加上,墙设再慢慢查。网站这事让我意识到,防火很多站长对防火墙的墙设理解还停留在“装个插件就行”的阶段,真出事了才发现配置全是网站默认值。

网站防火墙(WAF)分两种:云端的防火和本地的。Cloudflare、墙设阿里云盾这类属于云端,流量先过它们的节点再回源;ModSecurity、Nginx自带的limit模块属于本地,跑在你自己的服务器上。选哪个?小站直接用Cloudflare免费版,五分钟接入,不用碰服务器配置。大站或者有合规要求的,本地WAF加云端组合着来。

设置的核心就三件事:拦谁、放谁、怎么拦。

拦谁——先看日志。别急着抄网上的规则,打开你的访问日志,看看最近一周的异常请求长什么样。是集中在某个URL路径?还是某个User-Agent?还是某个地理区域?我那个朋友的情况,攻击全来自/wp-login.php,且UA是空的。这就好办了,直接在WAF里加规则:空UA的请求,一律拦截。

放谁——白名单比黑名单重要。你的支付回调IP、监控服务IP、CDN回源IP,这些必须放行。我见过有人把Cloudflare的IP段给封了,结果整个网站打不开,因为流量全从CF节点过来。白名单先配好,再谈拦截。

怎么拦——别一上来就“拒绝”。先设成“挑战”模式,比如JS挑战或验证码。正常用户浏览器会自动完成,脚本请求直接卡死。观察几天,确认误杀率低了,再改成直接拒绝。ModSecurity有个SecRuleEngine DetectionOnly模式,只记录不拦截,用来调规则特别有用。

具体操作层面,Nginx用户可以在http块里加limit_req_zone,限制单IP的请求频率。比如limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;,然后在location里应用limit_req zone=login burst=3 nodelay;。意思是登录接口每分钟最多5次请求,突发允许3次。这比装任何插件都直接。

Cloudflare那边,进Security → WAF → Custom rules。新建规则时,表达式可以写(http.user_agent eq "") or (ip.geoip.country eq "RU"),动作选Block。免费版有5条自定义规则额度,够小站用了。还有个Rate Limiting功能,免费版能设一条,专门保护登录页。

有个细节容易被忽略:防火墙规则要定期清理。我见过一个站,三年前加的规则还在跑,拦的是当时某个攻击IP段,结果那个段早被回收分配给正常用户了。每季度过一遍规则列表,删掉过期的,合并重复的。

最后说个真实教训。某次我给一个客户配WAF,规则写得太严,把Googlebot也拦了。一周后收录掉了一半。所以任何拦截规则上线前,先用curl -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"测一下,确保主流爬虫能过。防火墙是盾,别把自己人挡在外面。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap