第一次发帖,请大佬们轻喷。文章原文:https去掉://tlanyan.me/wordpress-protect-cc-attack/
WordPress是一个功能强大的CMS,几乎可以通过插件和主题实现任意功能。功能强大的同时,WordPress因动态性而性能欠佳,不优化的情况下可能多刷新几次就挂了,更不用说恶意构造的CC攻击了。
前文服务器简易防CC攻击设置简要介绍了网站遇到CC攻击的通用解决办法,本文针对WordPress给出较为全面的WordPress防CC攻击设置。
WordPress的弱点
WordPress默认没有做静态化,所有请求都是动态生成内容再发送。访客少的情况下问题不大,流量起来了不使用缓存或者静态化基本上就GG了。所以WordPress性能优化中很重要的一条便是使用缓存/静态化插件。
开启了缓存/静态化插件,页面、文章访问一次后被缓存,下次请求不用再动态生成,性能极大改善,低配VPS也能轻松负载上万的ip,美滋滋。
但是对于WordPress的CC攻击,缓存远远不够,因为其致命弱点未解决:WordPress的动态性是其弱点,弱点中的弱点则是搜索。文章数量是固定的,但是搜索词无穷无尽,因此缓存对CC攻击不起作用。如果文章数上万,每一次搜索都很耗费资源,多来几次搜索型的CC攻击WordPress就趴下了。
总结一下:WordPress的弱点是动态化,致命弱点是搜索,必须解决这两个弱点才能防范住(缓解)CC攻击。
WordPress防CC攻击设置
了解了WordPress的弱点,接下来介绍WordPress防CC攻击设置。
1.安装缓存/静态化插件,解决WordPress动态生成网页的弱点。本站用的WordPressSuperCache,其配置简单,性能也好。安装、启用插件后主要设置为:1.“通用”中勾选“启用缓存功能(推荐)”;2.高级中做如下设置:
WPSuperCache设置
WPSuperCache设置
不勾选“不要为GET请求缓存”,理论上解决了搜索的攻击问题,但是会让你的网站不正常
2.接着解决搜索的弱点。同通常CC攻击防范,主要手段是限制请求数和速率。假设我们用的Nginx,解决方法为:
2.1在Nginx主配置文件(例如/etc/nginx/nginx.conf)的http段中分配限制计数区:
http{
#一些其他配置
#增加下面三行,作用分别是:1.分配10MB大小的连接数计数区(能统计16万个ip);
# 2.分配正常请求的限制区,每秒请求次数不能超过10(请按照自己需求更改)
# 3.分配搜索限制区,每分钟搜索不能超过10次
limit_conn_zone$binary_remote_addrzone=limit_conn:10m;
limit_req_zone$binary_remote_addrzone=limit_req:10mrate=10r/s;
limit_req_zone$binary_remote_addrzone=limit_req_s:10mrate=10r/m;
#其他设置
}
2.2打开网站配置文件(例如/etc/nginx/conf.d/tlanyan.conf),在server段中增加防CC攻击设置:
server{
#一些其他配置
#增加以下配置行
limit_connlimit_conn10;#单个ip的并发连接数不能超过10(请按照自己情况修改)
limit_reqzone=limit_reqburst=10nodelay;#使用limit_req限制正常请求
if($query_string~"s="){
rewrite^/search.php?$query_stringlast;#将搜索请求重定向
}
location=/search.php{
limit_reqzone=limit_req_sburst=5nodelay; #限制搜索频率
fastcgi_passphp-fpm;#这里请改成你php的设置
includefastcgi_params;
fastcgi_paramSCRIPT_FILENAME$document_root/index.php;
fastcgi_paramREQUEST_URI/;
}
#其他设置
}
上面的配置中,最重要的设置从if($query_string~"s=")开始,将搜索重定向,然后使用我们自定义的搜索频率设置。超过这个搜索频率,直接503返回错误信息。
2.3使用nginx-t命令检查有无配置错误,然后systemctlrestartnginx重启Nginx。
于是,通过连接数限制,单个ip无法无限发起对服务器的连接;通过正常请求速率,限制单ip对普通文章页面的请求速率;通过搜索限制,大大限制搜索频率,从而有效防止CC攻击,提升服务器性能。
配置好重启Nginx后,打开自己的WordPress博客,多搜索几次试试,就会出现”503ServiceTemporarilyUnavailable”提示,说明我们的搜索限制起作用了。
delay参数、其他事项请参考服务器简易防CC攻击设置
其他
除了WordPress使用缓存插件,也可以开启Nginx的缓存功能提升性能,操作请参考:Nginx配置fastcgicache
“503ServiceTemporarilyUnavailable”这个页面可以修改,操作请参考:Nginx自定义错误页
可以结合fail2ban将恶意ip加入黑名单,操作请参考:使用fail2ban防止恶意扫描和CC攻击
-----------------------------------------------------
**网友回复**:
引用:llmwxt发表于2020-10-223:23
帮顶,学习一下
谢谢分享!
网友回复:
帮顶,学习一下
谢谢分享!
网友回复:
引用:micto发表于2020-10-223:32
学习个毛线,用程序这一层级抗CC,都是复制粘贴。。
网友回复:
引用:micto发表于2020-10-223:32
学习个毛线,用程序这一层级抗CC,都是复制粘贴。。
网友回复:
引用:laoxong发表于2020-10-223:41
我选择LitespeedCache+CF
网友回复:
引用:tlanyan发表于2020-10-223:43
CF很好用,最大的问题就是会降低连接速度
网友回复:
引用:fule发表于2020-10-300:06
天涯大佬的博客我经常逛的,支持一下
网友回复:
引用:darkst发表于2020-10-300:54
楼主不如写篇WP如何防采集
网友回复:
实践是检验真理的唯一标准,有没有用得试过才知道,得空测试一波
网友回复:
引用:laoxong发表于2020-10-223:45
可以国内用其他的,不一定要CF
网友回复:
引用:pack发表于2020-10-302:01
缓存到CDN上面 随便D
网友回复:
引用:1kuxyz发表于2020-10-307:57
没beian,哪家对国内比较快的,有推荐吗
网友回复:
引用:youtonghy发表于2020-10-312:53
直接全静态,虽然麻烦点,但是不怕cc
网友回复:
引用:tlanyan发表于2020-10-313:35
静态化的话搜索功能就用不了了
网友回复:
引用:youtonghy发表于2020-10-316:41
搜索引擎收录了的话可以接过来