WordPress防刷新 ,小网站莫名其妙的CPU跑满,网站报错502,到底是怎么了?
WordPress防刷新 ,WP安全是第一位。很多做网站的朋友,最苦恼的一件事是,网站没流量时,绞尽脑汁做引流,做宣传。网站有了流量后,好事坏事就一起来了,网站莫名其妙的被攻击了,现在很多网站都是使用wordpress搭建的小博客,平时也就那么十几人同时在线,服务器CPU为什么会跑满100%,内存也是瞬间飙升到顶。很多网站用的都是按流量计费模式的国外主机,没几天流量跑光了,网站也就打不开了。
最近很多wordpress网站都遇到类似的问题。对于网站被攻击的原因,经过探索发现,下列几个原因。
- 因为利益发起的攻击:你的SEO优化比较好,排在了某些网站的前面,把你关键词打掉,没了引擎排名,自然也就没人攻击你了。一般常用于DDOS攻击,目前网络上DDOS攻击价格比较昂贵,切搜索引擎上的流量已经微乎其微了,大部分的互联网上的流量都在移动端,所以这几年很少在PC端网站遇到这类攻击了。
- 网站引流发起的攻击:这类攻击目前经常在使用WordPress搭建的网站上遇到,恶意刷关键字搜索量,因为你的搜索排名比较靠前,自然网站的新链接,搜索引擎会秒收录。WordPress的搜索可以在url中任意提交内容,之后搜索引擎会快速抓取提交的每一条链接,造成服务器CPU的巨大压力。
- 恶意搜索攻击:这种恶意搜索攻击,其实非常简单,就是通过既定的网址结构不断对网站发起不良关键词搜索访问,比如WordPress的搜索网址结构为 域名/?s=搜索词,而且可能还会顺便将访问的地址推送到各大搜索引擎,加快这些恶意网址的收录。这样,你的网站就会沦为这些不法之徒传播不良信息的渠道,这对网站排名是非常不利的,甚至可能会直接被搜索引擎K站。
- SQL注入攻击:这类攻击与恶意搜索攻击类似,不停的在搜索中提交各种检测sql注册的漏洞代码,这种攻击在wordpress中很常见,也有很多网站中招,现在的wordpress相对安全,目前新版本不存在sql注入的漏洞,这类攻击不停的提交代码,在代码提交后的页面,会被搜索引擎抓到,Google搜索比较智能会过滤掉这类页面,bing则会认为存在恶意刷新网站的嫌疑,会导致短时间内网站新内容的索引异常,这个问题可以直接给bing管理员发送邮件解决。
wordpress刷搜索,恶意搜索攻击,主要原因是为了推广一些见上不得台面的网站,这种网站为了推广,不择手段。
下面说一下wordpress在遇到刷搜索的时候的解决方法,同时分析了解一下wp刷搜索的原理。
wordpress的搜索功能很简单,在域名的后面加上”?s=”,=号后面,填写需要搜索的关键词,就可以完成搜索,例如:
https://bluesrt.com/?s=chatGPT
将网址复制到浏览器的地址栏中,就可以查询到网站中关于chatGPT相关的内容。在网站中正常的搜索,是在搜索框内输入关键词,然后通过表单提交的方式进行搜索。
既然wordpress可以通过地址栏输入URL进行搜索,那么攻击者可以编写一个简单的脚本,不停的刷新搜索,由于搜索会从数据库中索引信息,所以最后服务器上的数据库会跑满CPU
这类搜索攻击大多都是为了刷搜索的关键字排名,为了给黑灰产网站引流才这样做的,很多时候把服务器刷死机了,也是攻击者不想看到的,攻击者也没想到有些服务器是那么不堪一刷,刷新的频率高了,服务器就挂了!
知道了攻击者的攻击方式,和刷搜索的思路,下面我们解决掉这个问题。
屏蔽恶意搜索
要屏蔽恶意搜索,首先我们需要监控到对方使用什么恶意搜索词,所以我们先在后台安装 WP Search Analytics 插件,在仪表盘下面的搜索分析页面,我们就可以看到搜索词。
添加如下代码到functions.php文件中,建议使用插件添加!
add_action('admin_init', 'search_ban_key'); function search_ban_key() { add_settings_field('search_key', '搜索关键词屏蔽', 'search_key_callback_function', 'reading'); register_setting('reading','search_key'); } function search_key_callback_function() { echo '<textarea name="search_key" rows="10" cols="50" id="search_key" class="large-text code">' . get_option('search_key') . '</textarea>'; } add_action('template_redirect', 'search_ban'); function search_ban(){ if (is_search()) { global $wp_query; $search_key = get_option('search_key'); if($search_key){ $search_key = str_replace("\r\n", "|", $search_key); $BanKey = explode('|', $search_key); $S_Key = $wp_query->query_vars; foreach($BanKey as $Key){ if( stristr($S_Key['s'],$Key) != false ){ wp_die('输入的关键词已经被屏蔽!请不要再进行搜索攻击了!谢谢!'); } } } } }
然后在后台的设置菜单的阅读页面中添加你要屏蔽的关键词。
常用屏蔽的关键词,可以参考:https://github.com/jkiss/sensitive-words
修改 robots.txt 规则,加入禁止引擎索引网站搜索链接。
Disallow: /?s=* Disallow: /*/?s=*\
限制搜索频率可以在防火墙中设置,每秒页面的访问次数。
wordpress防刷新 的解决办法
这类刷新web网站类的攻击,大多都属于CC攻击。与DDOS攻击不同,DDOS攻击通过海量的肉鸡IP,集中对一个网站进行谢绝服务式访问,最后巨大的访问流量造成服务器网络堵塞瘫痪。如果遇到DDOS攻击,需要使用CDN分布式节点的方式解决,当然价格也是很昂贵的。
CC攻击一般很好解决,找到攻击方的攻击方式,然后进行围堵就可以了。
我们已经知道了是通过搜索进行的刷新访问,那么下面说一说如何解决。
限制同一IP地址访问网站的次数
需要在Nginx中进行配置HttpLimit模块,HttpLimit以针对条件,进行会话的并发连接数控制。(例如:限制每个IP的并发连接数。)
http{ #limit_zone one $binary_remote_addr 10m; limit_req_zone $binary_remote_addr zone=req_one:10m rate=10r/s; server{ #limit_conn one 1; limit_req zone=req_one burst=1; } }
上面有两种模块配置的使用方法,可根据不同情况设置。
方法1:
limit_zone one $binary_remote_addr 10m;
这里的 one 是声明一个 limit_zone 的名字,$binary_remote_addr是替代 $remore_addr 的变量,10m 是会话状态储存的空间
limit_conn one 1 ,限制客户端并发连接数量为1
方法2:
limit_req_zone $binary_remote_addr zone=req_one:10m rate=10r/s;
rate=10r/m 的意思是每个地址每分钟只能请求10次,也就是说根据令牌桶原理burst=1 一共有1块令牌,并且每分钟只新增10块令牌,
1块令牌发完后多出来的那些请求就会返回503
加上 nodelay 之后超过 burst大小的请求就会直接返回503
如果没有这个字段会造成大量的tcp连接请求等待。
limit_zone两种工作情况
limit_req zone=one burst=10 ;
默认情况下是这样配置的,这样每个请求就会有一个delay时间0
limit_req_zone $binary_remote_addr zone=one:100m rate=10r/m;
就是每分钟有10个令牌供用户使用,每个请求时间就是60/10,那每个请求时间就是6s。
limit_req zone=one burst=10 nodelay;
添加 nodelay 配置,这样就是根据你的网络状况访问,一分钟访问够10次后,服务器直接返回503。
imit_req_zone $binary_remote_addr zone=one:100m rate=10r/m;
就是每分钟有10个令牌供用户使用,会根据网络情况访问url,如果一分钟超过10个令牌,服务器返回503,等待下一个一分钟领取访问令牌。
配置完HttpLimit模块后,重新启动nginx。
安装wordpress安全插件
在wordpress中,安全插件是必不可少的,没有安全插件等于在互联网上裸奔。推荐安装 Wordfence 安全插件,可以实时查看网站上登陆的IP,包括一个端点防火墙和恶意软件扫描程序,它们是为保护 WordPress 从头开始构建的。最流行的 wordpress 防火墙和安全扫描器
强烈推荐wordpress用户安装这款Wordfence防火墙。
GPL高级版的功能已经可以满足一个普通网站的正常需求。
网站遇到了SQL搜索注入的攻击,攻击者不停的利用远程服务器对网站发起注入代码测试,不停的在搜索中输入注入代码,如果没有Wordfence防火墙的话,会大大的增加服务器CPU的负荷,安装Wordfence防火墙后,可以随时检测查看问题IP,防火墙还可以智能屏蔽恶意IP地址。即便是成千上万次的代码注入扫描,都会被防火墙拦截。不会对CPU造成影响,也不会增加服务器的运算费用。
我们一直认为很安全的互联网,每日都会有成千上万起的恶意攻击,即便是有些黑客攻击我们认为是没有意义的,但是这种攻击确实存在,安装一个web防火墙是势在必行的。推荐安装:
WordFence Premium 7.8.2 已激活中文版,免费下载🔰 WordPress防火墙 ☢️防病毒和恶意软件扫描
Wordfence 安全 – 防火墙、恶意软件扫描和登录安全
WordPress 安全性需要专门的分析师团队研究最新的恶意软件变体和 WordPress 漏洞,将它们转化为防火墙规则和恶意软件签名,并实时将它们发布给客户。Wordfence 被广泛认为是世界上排名第一的 WordPress 安全研究团队。我们的插件提供了一套全面的安全功能,我们团队的研究为我们的插件提供了强大的动力,并提供了我们众所周知的安全级别。
在 Wordfence,WordPress 安全不是我们业务的一个部门——WordPress 安全就是我们所做的一切。我们聘请了全球 24 小时专门事件响应团队,为我们的优先客户提供 1 小时的任何安全事件响应时间。我们的全球安全团队永不落山,我们运行一个复杂的威胁情报平台来汇总、分析最新的安全威胁并进行突破性的安全研究。
Wordfence Security 包括端点防火墙、恶意软件扫描程序、强大的登录安全功能、实时流量视图等。我们的威胁防御源为 Wordfence 提供最新的防火墙规则、恶意软件签名和恶意 IP 地址,以确保您的网站安全。Wordfence 由 2FA 和一套附加功能完善,是可用的最全面的 WordPress 安全解决方案。
WORDPRESS 防火墙
Web 应用程序防火墙识别并阻止恶意流量。由一个 100% 专注于 WordPress 安全性的大型团队构建和维护。
[高级版] 通过威胁防御源实时更新防火墙规则和恶意软件签名(免费版延迟 30 天)。
[高级] 实时 IP 阻止列表阻止来自最恶意 IP 的所有请求,在减少负载的同时保护您的网站。
在端点保护您的网站,实现与 WordPress 的深度集成。与云替代方案不同,它不会破坏加密,无法绕过也不会泄露数据。
集成的恶意软件扫描程序可阻止包含恶意代码或内容的请求。
通过限制登录尝试来防止暴力攻击。
WORDPRESS 安全扫描仪
恶意软件扫描程序检查核心文件、主题和插件是否存在恶意软件、错误 URL、后门、SEO 垃圾邮件、恶意重定向和代码注入。
[高级版] 通过威胁防御源实时更新恶意软件签名(免费版延迟 30 天)。
将您的核心文件、主题和插件与 WordPress.org 存储库中的内容进行比较,检查它们的完整性并向您报告任何更改。
通过用原始的原始版本覆盖它们来修复已更改的文件。删除任何不属于 Wordfence 界面的文件。
检查您的网站是否存在已知的安全漏洞,并在出现任何问题时提醒您。当插件被关闭或放弃时,还会提醒您注意潜在的安全问题。
通过扫描文件内容、帖子和评论中的危险 URL 和可疑内容来检查您的内容安全。
[高级] 检查您的网站或 IP 是否因恶意活动、生成垃圾邮件或其他安全问题而被列入黑名单。
登录安全
双因素身份验证 (2FA),一种最安全的远程系统身份验证形式,可通过任何基于 TOTP 的身份验证器应用程序或服务获得。
登录页面 CAPTCHA 阻止机器人登录。
禁用 2FA 或将 2FA 添加到 XML-RPC。
使用已知的泄露密码阻止管理员登录。
WORDFENCE 中心
Wordfence Central 是一种强大而有效的方式,可以在一个地方管理多个站点的安全性。
在一个视图中有效评估所有网站的安全状态。无需离开 Wordfence Central 即可查看详细的安全发现。
强大的模板使配置 Wordfence 变得轻而易举。
高度可配置的警报可以通过电子邮件、短信或 Slack 发送。通过利用严重级别选项和每日摘要选项来提高信噪比。
跟踪重要安全事件并发出警报,包括管理员登录、密码使用泄露和攻击活动激增。
免费用于无限站点。
安全工具
使用 Live Traffic,实时监控其他分析包中未显示的访问和黑客尝试;包括来源、他们的 IP 地址、一天中的时间和在您网站上花费的时间。
通过 IP 阻止攻击者或基于 IP 范围、主机名、用户代理和引荐来源网址构建高级规则。
Wordfence Premium 提供国家/地区屏蔽功能。
免费下载 WordFence Premium 7.8.2 已激活中文版
修改 WordPress 中默认搜索的 URL
修改默认的搜索链接,wordpress的默认搜索是”?s=”,默认链接很容易被扫到,可以将搜索链接改名,虽然在安全方面意义不大,可能会增加搜索引擎的收录。
具体修改方法请参考:修改 WordPress 中默认搜索的 URL ,增加 SEO 收录数量!
nginx安装HttpGuard防止CC攻击
HttpGuard一款基于nignx lua的工具。它的功能比较单一,但非常强大有效,主要功能依然是抵御CC攻击。主要通过技术手段检测访客是否为有效的浏览器以及是否支持跳转来判断是否需要拦截。但HttpGuard还有另一样特别本领,就是可以监测实时的连接数来判断是否需要开启防攻击模块。
在安装HttpGuard之前,需要安装OpenResty。
在 CentOS 系统中添加 openresty 仓库,这样就可以便于未来安装或更新我们的软件包。查看更多系统的安装方法
wget https://openresty.org/package/centos/openresty.repo sudo mv openresty.repo /etc/yum.repos.d/ sudo dnf check-update
然后就可以像下面这样安装软件包,比如 openresty:
sudo dnf install -y openresty
如果你想安装命令行工具 resty,那么可以像下面这样安装 openresty-resty 包:
sudo dnf install -y openresty-resty
安装编译工具和相关依赖。
dnf install pcre-devel openssl-devel gcc curl
OpenResty安装成功,你已经将OpenResty安装到 /usr/local/openresty 目录中(这是默认设置)
下载后将文件解压后上传到服务器根目录中。
cp -r HttpGuard/ /etc/nginx
将文件夹,拷贝到Nginx的安装目录,通过dnf安装的nginx目录在/etc/nginx,编译安装的nginx目录一般在/usr/local/nginx。复制前确定一下nginx的安装目录。
拷贝完毕之后,编辑nginx的配置文件 nginx.conf 。
#在http区块中添加以下内容 lua_package_path "/etc/nginx/HttpGuard/?.lua"; lua_shared_dict guard_dict 100m; lua_shared_dict dict_captcha 70m; init_by_lua_file '/etc/nginx/HttpGuard/init.lua'; access_by_lua_file '/etc/nginx/HttpGuard/runtime.lua'; lua_max_running_timers 1;
留言 | Comments