WordPress防CC攻击设置教程

佚名 2021-1-7 2,046 1/7

前言

WordPress是一个功能强大的CMS,几乎可以通过插件和主题实现任意功能。功能强大的同时,WordPress因动态性而性能欠佳,不优化的情况下可能多刷新几次就挂了,更不用说恶意构造的CC攻击了。

WordPress的弱点

WordPress默认没有做静态化,所有请求都是动态生成内容再发送。访客少的情况下问题不大,流量起来了不使用缓存或者静态化基本上就GG了。所以WordPress性能优化中很重要的一条便是使用缓存/静态化插件。

开启了缓存/静态化插件,页面、文章访问一次后被缓存,下次请求不用再动态生成,性能极大改善,低配VPS也能轻松负载上万的ip,美滋滋。

但是对于WordPress的CC攻击,缓存远远不够,因为其致命弱点未解决:WordPress的动态性是其弱点,弱点中的弱点则是搜索。文章数量是固定的,但是搜索词无穷无尽,因此缓存对CC攻击不起作用。如果文章数上万,每一次搜索都很耗费资源,多来几次搜索型的CC攻击WordPress就趴下了。

总结一下:WordPress的弱点是动态化,致命弱点是搜索,必须解决这两个弱点才能防范住(缓解)CC攻击。

WordPress防CC攻击设置

1. 安装缓存/静态化插件,解决WordPress动态生成网页的弱点。其配置简单,性能也好。安装、启用插件后主要设置为:1. “通用”中勾选“启用缓存功能 (推荐)”;2. 高级中做如下设置:

WordPress防CC攻击设置教程

不勾选“不要为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_addr zone=limit_conn:10m;
  limit_req_zone $binary_remote_addr zone=limit_req:10m rate=10r/s;
  limit_req_zone $binary_remote_addr zone=limit_req_s:10m rate=10r/m;

  # 其他设置
}

2.2 打开网站配置文件(例如/etc/nginx/conf.d/tlanyan.conf),在server段中增加防CC攻击设置:

server {
  # 一些其他配置

  # 增加以下配置行
  limit_conn limit_conn 10; # 单个ip的并发连接数不能超过10(请按照自己情况修改)
  limit_req zone=limit_req burst=10 nodelay; # 使用limit_req限制正常请求
  location / {
    if ($query_string ~ "s=") {
      rewrite ^ /search.php?$query_string last; # 将搜索请求重定向
    }
    # 其他设置
  }

  location = /search.php {
    limit_req zone=limit_req_s burst=5 nodelay;  # 限制搜索频率
    fastcgi_pass php-fpm; # 这里请改成你php的设置
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    fastcgi_param REQUEST_URI /;
   }

  # 其他设置
}

上面的配置中,最重要的设置从 if ($query_string ~ "s=")开始,将搜索重定向,然后使用我们自定义的搜索频率设置。超过这个搜索频率,直接503返回错误信息。

2.3 使用 nginx -t 命令检查有无配置错误,然后 systemctl restart nginx 重启Nginx。

于是,通过连接数限制,单个ip无法无限发起对服务器的连接;通过正常请求速率,限制单ip对普通文章页面的请求速率;通过搜索限制,大大限制搜索频率,从而有效防止CC攻击,提升服务器性能。

配置好重启Nginx后,打开自己的WordPress博客,多搜索几次试试,就会出现”503 Service Temporarily Unavailable”提示,说明我们的搜索限制起作用了。

 

- THE END -

佚名

7月14日11:51

最后修改:2021年7月14日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论