在最近经常收到腾讯云的欠费通知,因为平时也就很少的流量,最近突然动不动就是几十个G的下行流量,还是有点恐怖的,在6月份 的某一天,流量高达8G,没有太在意,以为是用户量比较大。
7月9日,外网下行流量高达 30多个G,感觉非常不正常,由于站点也接入了百度统计,通过百度统计发现: 一个恶意访问网站的黑客,进行网站攻击,其 IP 来源于江苏南京,不断地去刷我的网站页面,由于是静态页面的站点,其中我损失主要是流量、也没有什么有价值的东西,但是看着这些流量还是有些蛋疼的。
在 7 月 9 日晚上11点多的时候,无疑浏览到异常外网流量下载,通过百度统计发现,确实却在恶意的用户在刷去页面信息,通过拼接 url 的方式,主要有以下几类 url
/wp-content/uploads/2021/12/themes.php
/wp-includes/css/ty.php
/wp-content/languages/404.php
/class-IXR-data.php
/wp-includes/SimplePie/HTTP
/index8.php
/wp-content/themes/lightspeed/framework/_scripts/valums_uploader
/wp-includes/IXR/atomlib.php
... 几乎都是 /wp-includes 开头的内容
在受到攻击之后,首先想到的方法是,封禁其对应的 ip 地址、后面发下,其访问的 ip 应该是一个 ip 组,不断变化着 ip 来请求,针对这种情况,想到了三种方法
- 关闭 cdn 的资源访问,减少带来的流量损失。(关闭 cdn 之后其实主要是图片会显示不了,但是文字都是正常显示的)
- 从腾讯云的容器上,增加防火墙,策略,将对应的 ip 端,改为拒绝。
- 从 nginx 上拦截对应的 IP 段。
- 从 nginx 上,基于 path 做拦截。
经过上面的几种尝试,发现,1和2 基本上拦截不到,没有什么效果,3 没有办法验证,实际有没有效果,也不太确定。方法 4 是比较有效地,下面主要讲讲 3 和 4 的方法吧。
拦截恶意来源 ip 段
最开始想到的办法就是拦截恶意来源 ip 段,通过分析看到来源的恶意 ip 主要是以下的几个 ip 段:
220.196.160.0/24129.211.162.0/24220.196.0.0/1659.83.0.0/16180.101.0.0/16
然后就在对应的 nginx 配置文件中拒绝这几个 ip 段的来源 ip 访问。
location / {
## ...... 此处省 略了其他配置
## 默认都允许访问
allow all;
## 拒绝访问的 ip 段
deny 220.196.160.0/24;
deny 129.211.162.0/24;
deny 220.196.0.0/16;
deny 59.83.0.0/16;
deny 180.101.0.0/16;
}
增加了如下的配置之后,重启 nginx 发现好像并没有生效,
拦截恶意访问的路径
通过 nginx 的日志观测到,该用户攻击的方式有两个特征:
- 通过
/wp-content/的路径访问网站,不断的尝试各种涉及到文件上传和 php 执行脚本。 - 随机尝试各种
.php结尾的路径访问。
通过 nginx 进行拦截
- 所有访问以
/wp-content/开头的路径都直接禁止,返回 403 页面。 - 所有以
.php结尾的路径访问,也拦截截止访问,返回 403 页面。
在 nginx.conf 中增加如下配置。
## ..... 省略了其他配置
# 匹配以 .php 结尾的任何请求,并返回 403 状态码
location ~* \.php$ {
return 403;
}
location / {
if ($request_uri ~* ^/wp-content/*) {
return 403;
}
## ..... ..... 省略了其他配置
}
总结
自己搭建的就是一个静态的知识分享类的网站,一是方便自己平时查阅自己的总结知识,二是督促自己不断学习,真没有必要攻击我的网站吧,站点的配置也非常低,且这个站点也不盈利,就算服务器攻破了也没事,也没啥值钱的东西。
经过这次的攻击处理方法,也算是进一步学习了如何拦截一些 Nginx 的相关知识吧。如果大家有什么更好地方案,欢迎留言与交流。