admin 发布的文章

这个blog每天就百十个IP,还大多数是机器人/搜索引擎等,当然是不需要这么玩的。 这个只是拿来示范一下防CC。
有的时候,需要把自己的网站地址放出去,但一放出去就很容易遭到无聊的人的CC攻击。当然,可以把CF的安全级别拉高,然而这样对用户体验会很差,也许本就是去想弄流量的,结果,把已经有的用户都一起赶跑了。
所以,缓存的用处就来了。比如全站缓存一下不回源,再怎么CC也是CC去CF那里,关咱啥事呢。能把CF都放倒,那咱们也没办法了。
第一步,设置需要缓存的URL。
既然是全站,那就只是设一下例外了。
对这个blog(typecho)来说,后台管理 /admin 评论/comment 登出/logout 搜索 .../search/...需要是动态的,不能缓存。
s2.jpg
非常重要! 在Cache key设置中,需要激活 Ignore query string,就是忽略查询字符串。
缓存过期时间TTL根据自己情况设一下,我设的2个小时。其实对blog来说,设置24小时都不是问题,毕竟更新不频繁。
第二步,上面放的几个不缓存的例外口子需要加固一下,就是设置人机验证。这个影响体验,然而大多数人是不会出现的,无所谓。
s1.jpg
完工。
这样一弄,人家再怎么DD怎么CC都无所谓了,对吧? 而且对用户体验也没太大影响。如果稍微对Typecho二开一下,就是有新评论后清除一下缓存是最好,毕竟现在的评论也一起被缓存2个小时了。哪天我无聊的时候来给typecho打个补丁。

**说明一下,CF的rate limit是没太大用处的,因为它只能限制同IP来源。然而,现在的CC攻击都是动用大量的IP,比如1万台肉鸡,每分钟10次请求,这个rate limit通常都会允许的,然而,实际情况是,每分钟10万次请求,服务器和网络已经崩了。
**缺陷: 如果服务器性能太差以及带宽太小,可以被404攻击打死。就是,CC攻击来的链接都是不重复的不存在的。

C语言小代码,占用1核的CPU资源,以及2G内存。
解释一下原理。C是单线程的,所以,最后那个while死循环将占用完一核的CPU所有资源。
malloc分配2G这个不用解释了,后面的for填充,是因为编译器和操作系统会优化malloc分配的内存,如果你没有用到分配的空间,它并不会真的实际分配。
编译: cc waste.c -o waste 啥? cc不存在? 那就 apt install gcc啦。
运行: nohup ./waste > /dev/null 2>&1
如果想占用更多,就多运行几个呗。当然,想写成service也可以,配置文件我就不贴了。

#include <stdio.h>
#include <stdlib.h>

int main() {
    long long int size = 2LL * 1024LL * 1024LL * 1024LL; // 2GB
    char *memory = (char *)malloc(size);
    if (memory == NULL) {
        printf("内存分配失败!\n");
        return 1;
    }
    long long i;
    unsigned char ch;
    for (i=0;i<size;i++) {
      ch=i%2;
      *(memory+i)=ch;
    }
    while (1) {
    }
    return 0;
}

运行实例(2C12G的vps):

root@sin1:~# uptime
 00:45:47 up 12 days, 11:12,  2 users,  load average: 1.00, 1.00, 1.00

root@sin1:~# free
               total        used        free      shared  buff/cache   available
Mem:        12237708     2523608     7098556        3912     2839040     9714100
Swap:         999420           0      999420

随便找了个3杂的net来替换,字面上没任何意义,当然,换成米虫还是可以硬拼一气,但我不会。
以前那个域名我其实不想用,因为是我的网名,拿着做blog还行,但做任何其它的就不妥了,而新的域名没啥感觉,没感觉总好过不想用了。

Linux出了个大漏洞,CVE-2024-6387,就是ssh可以远程未授权Root登录。想象一下是多可怕。。
我的机器都是debian,国外机器源都是直接用的debian官方的,国内阿里和腾讯的是用的相应的他们的镜象。
国外apt的ssh都已经更新了,阿里也更新了,但腾讯仍然停留在老版。这是十足的坑爹啊! **7/2早上,在晚了几个小时后腾讯也终于更新了。但如果运气不好,机器早就给人黑了!
国外太慢,阿里又不让腾讯的机器访问他家镜像,迫不得已,用了爱国云的镜像,问题解决!

root@VM-28-14-debian:~# apt update
Hit:1 http://mirrors.tencentyun.com/debian bookworm InRelease
Get:2 http://mirrors.tencentyun.com/debian bookworm-updates InRelease [55.4 kB]
Get:3 http://mirrors.tencentyun.com/debian-security bookworm-security InRelease [48.0 kB]
Fetched 103 kB in 0s (216 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.    这太过份了吧!!!
root@VM-28-14-debian:~# vi /etc/apt/sources.list
root@VM-28-14-debian:~# apt update
Get:1 http://mirrors.huaweicloud.com/debian bookworm InRelease [151 kB]
Get:2 http://mirrors.huaweicloud.com/debian bookworm-updates InRelease [55.4 kB]
Get:3 http://mirrors.huaweicloud.com/debian-security bookworm-security InRelease [48.0 kB]
Get:4 http://mirrors.huaweicloud.com/debian bookworm/main amd64 Packages [8,786 kB]
.....
3 packages can be upgraded. Run 'apt list --upgradable' to see them.
root@VM-28-14-debian:~# apt upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required:
  linux-headers-6.1.0-17-amd64 linux-headers-6.1.0-17-common linux-headers-6.1.0-18-amd64 linux-headers-6.1.0-18-common
  linux-headers-6.1.0-20-amd64 linux-headers-6.1.0-20-common linux-headers-6.1.0-21-amd64 linux-headers-6.1.0-21-common
  linux-headers-6.1.0-9-common linux-image-6.1.0-17-amd64 linux-image-6.1.0-18-amd64 linux-image-6.1.0-20-amd64
  linux-image-6.1.0-21-amd64
Use 'apt autoremove' to remove them.
The following packages will be upgraded:
  openssh-client openssh-server openssh-sftp-server     更新了
3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,513 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
.....

没错,就是在说阿里CDT的200G啦。
阿里的SDK似乎没相应的API,所以就简单粗暴的弄弄了,有洁癖的就别看了。
步骤一,增加 crontab,每个月重启机器清除网卡统计数据。 粗爆吧。
0 0 1 * * /usr/sbin/reboot
步骤二,检查网卡流量
先在crontab里加入一个每分钟一次的任务来检查
*/1 * * * * /usr/local/bin/check.sh #check.sh是你检查的脚本,文件名当然根据实际的来
脚本是假定使用共享流量包,就是进出取大者计算。

脚本如下:

#!/bin/bash

# 获取 ifconfig eth0 的输出
output=$(ifconfig eth0)

# 提取 RX 和 TX 的字节数
rx_bytes=$(echo "$output" | grep -oP 'RX packets \d+  bytes \K\d+')
tx_bytes=$(echo "$output" | grep -oP 'TX packets \d+  bytes \K\d+')

# 将 190 GB 转换为字节。保险一点,没用200G。
limit=$((190 * 1024 * 1024 * 1024))

# 比较 RX 和 TX 的字节数并输出较大的那个值
if [ "$rx_bytes" -gt "$tx_bytes" ]; then
    larger_value=$rx_bytes
else
    larger_value=$tx_bytes
fi

echo "Larger value: $larger_value"

# 检查是否超过 190 GB
if [ "$larger_value" -gt "$limit" ]; then
    echo "Warning: The value exceeds 190 GB!"
    /usr/sbin/shutdown now
fi