主力服务器遭遇黑客入侵勒索

1. 前言

  • 昨天晚上10点钟(2026.05.09; 22:00;UTC+08),突然发现部署在洛杉矶服务器的所有网站网络都连接不上,部署的探针网站也挂了。赶紧通过SSH进去看一眼,发现docker都停止了。docker目录下的compose.yml都被加了.locked后缀,打开全是乱码。
  • 一开始以为是自己中午用了docker image prune -a清理不用的镜像缓存导致的。后来发现并不是,/root目录下非compose.yml的文件也被加上了.locked后缀,打开也全是乱码。
  • 难道是系统突然重启导致文件被锁?一开始没头绪还问了AI。

屏幕截图 2026-05-11 190304.png
屏幕截图 2026-05-11 190525.png

2. 水落石出

  • 带着疑惑用SFTP工具一个个翻看文件,突然发现/root路径下多了一个名字为还原你的数据.txt文件。
  • 注意时间戳是一个小时前的晚上8:43PM(新加坡标准时间,UTC+08)。

屏幕截图 2026-05-09 230355.png

  • 赶紧远程下载txt文件到电脑本地查看(一时心急,错误示范),发现黑客留下一串加密货币BTC地址。

    在不确定txt文件安全性的情况下,不要乱下载别人文件,而是在服务器用cat指令查看。

屏幕截图 2026-05-09 230404.png

  • 按照当时汇率,0.000002BTC相当于1人民币伤害不大,侮辱性极强。
    屏幕截图 2026-05-11 191638.png

  • 至此原因确定了——服务器被黑客入侵勒索了。

  • 然而我并没有急着重装系统,而是先排查入侵的漏洞。(最后也没完全确定原因。

3. 查找原因

3.1 ssh入侵日志

  • 在服务器终端输入last指令,查看ssh登录记录。发现我是晚上22:19进去ssh排查原因的,多了一个陌生的ip——66.42.99.107。黑客在22:07还连进去了。
  • 黑客的ip是66.42.99.107,在20:3022:15之间进行了多达3次的成功连接,每次连接时间都在10分钟左右。
1
2
3
4
5
6
7
8
9
root@MEGABOX-PRO# last
root pts/0 158.179.xx.xx Sat May 9 22:19 - 22:23 (00:04) #本机ip
root pts/1 66.42.99.107 Sat May 9 22:07 - 22:15 (00:07) #黑客ip
root pts/0 66.42.99.107 Sat May 9 22:07 - 22:15 (00:07)
root pts/1 66.42.99.107 Sat May 9 20:31 - 20:44 (00:12)
root pts/0 66.42.99.107 Sat May 9 20:31 - 20:44 (00:12)
root pts/1 66.42.99.107 Sat May 9 20:10 - 20:30 (00:19)
root pts/0 66.42.99.107 Sat May 9 20:10 - 20:30 (00:19)

  • 到公开的数据库网站查看ip的归属,发现是vultr服务商的洛杉矶ip,ASN20473。(估计要被abuse封号)

屏幕截图 2026-05-11 193126.png
屏幕截图 2026-05-11 193200.png

  • 紧接着用grep "Accepted" /var/log/auth.log指令查看登录的具体方式。
1
2
3
4
5
6
7
8
9
10
11

2026-05-09T20:10:35.542800+08:00 MEGABOX-PRO sshd[623306]: Accepted keyboard-interactive/pam for root from 66.42.99.107 port 49414 ssh2
2026-05-09T20:12:03.667766+08:00 MEGABOX-PRO sshd(pam_google_authenticator)[642831]: Accepted google_authenticator for root
2026-05-09T20:12:03.840809+08:00 MEGABOX-PRO sshd[642228]: Accepted keyboard-interactive/pam for root from 66.42.99.107 port 55918 ssh2
2026-05-09T20:31:26.937649+08:00 MEGABOX-PRO sshd(pam_google_authenticator)[957039]: Accepted google_authenticator for root
2026-05-09T20:31:27.114866+08:00 MEGABOX-PRO sshd[957037]: Accepted keyboard-interactive/pam for root from 66.42.99.107 port 38662 ssh2
2026-05-09T20:43:48.538266+08:00 MEGABOX-PRO sshd(pam_google_authenticator)[999898]: Accepted google_authenticator for root
2026-05-09T20:43:48.718729+08:00 MEGABOX-PRO sshd[999885]: Accepted keyboard-interactive/pam for root from 66.42.99.107 port 35062 ssh2
2026-05-09T22:07:30.559502+08:00 MEGABOX-PRO sshd(pam_google_authenticator)[1030411]: Accepted google_authenticator for root
2026-05-09T22:07:30.729246+08:00 MEGABOX-PRO sshd[1030390]: Accepted keyboard-interactive/pam for root from 66.42.99.107 port 34864 ssh2

  • 我服务器配置了密钥+谷歌验证器的双重验证登录,但是看SSH记录:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
20:10:35
来源 IP:66.42.99.107
用户名:root
SSH 连接方式:keyboard-interactive/pam(通过 PAM 验证密码或系统认证)
结果:登录成功
20:12:03
来源 IP:66.42.99.107
用户名:root
SSH 连接方式:pam_google_authenticator(Google Authenticator 二步验证)
结果:验证成功
备注:这是上次密码验证之后的二步验证完成


20:12:03(紧接上一次)
来源 IP:66.42.99.107
用户名:root
SSH 连接方式:keyboard-interactive/pam
结果:登录成功
20:31:26
来源 IP:66.42.99.107
用户名:root
SSH 连接方式:pam_google_authenticator
结果:验证成功


20:31:27(紧接上一次)
来源 IP:66.42.99.107
用户名:root
SSH 连接方式:keyboard-interactive/pam
结果:登录成功
20:43:48
来源 IP:66.42.99.107
用户名:root
SSH 连接方式:pam_google_authenticator
结果:验证成功


20:43:48(紧接上一次)
来源 IP:66.42.99.107
用户名:root
SSH 连接方式:keyboard-interactive/pam
结果:登录成功
22:07:30
来源 IP:66.42.99.107
用户名:root
SSH 连接方式:pam_google_authenticator
结果:验证成功


22:07:30(紧接上一次)
来源 IP:66.42.99.107
用户名:root
SSH 连接方式:keyboard-interactive/pam
结果:登录成功

  • 在上面日志里面,每次成功登录都有两条记录keyboard-interactive/pam → 密码或系统认证通过pam_google_authenticator → 二步验证通过。
  • 紧接着查看66.42.99.107的尝试记录。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root@MEGABOX-PRO:~# grep "66.42.99.107" /var/log/auth.log
2026-05-09T19:51:57.120999+08:00 MEGABOX-PRO sshd[617505]: Connection closed by 66.42.99.107 port 59866 [preauth]
2026-05-09T19:52:32.345409+08:00 MEGABOX-PRO sshd[617549]: Connection closed by 66.42.99.107 port 43996 [preauth]
2026-05-09T20:03:25.918398+08:00 MEGABOX-PRO sshd[621177]: Connection closed by authenticating user root 66.42.99.107 port 43244 [preauth]
2026-05-09T20:04:55.183681+08:00 MEGABOX-PRO sshd[621404]: error: PAM: Authentication failure for root from 66.42.99.107
2026-05-09T20:05:01.218419+08:00 MEGABOX-PRO sshd[621404]: error: PAM: Authentication failure for root from 66.42.99.107
2026-05-09T20:10:35.542800+08:00 MEGABOX-PRO sshd[623306]: Accepted keyboard-interactive/pam for root from 66.42.99.107 port 49414 ssh2
2026-05-09T20:12:03.840809+08:00 MEGABOX-PRO sshd[642228]: Accepted keyboard-interactive/pam for root from 66.42.99.107 port 55918 ssh2
2026-05-09T20:30:53.974019+08:00 MEGABOX-PRO sshd[956742]: error: PAM: Authentication failure for root from 66.42.99.107
2026-05-09T20:30:54.148464+08:00 MEGABOX-PRO sshd[956742]: error: Received disconnect from 66.42.99.107 port 51380:3: com.gV: \\345\\217\\226\\346\\266\\210\\347\\231\\273\\345\\275\\225\\350\\256\\244\\350\\257\\201 [preauth]
2026-05-09T20:30:54.148568+08:00 MEGABOX-PRO sshd[956742]: Disconnected from authenticating user root 66.42.99.107 port 51380 [preauth]
2026-05-09T20:31:27.114866+08:00 MEGABOX-PRO sshd[957037]: Accepted keyboard-interactive/pam for root from 66.42.99.107 port 38662 ssh2
2026-05-09T20:43:48.718729+08:00 MEGABOX-PRO sshd[999885]: Accepted keyboard-interactive/pam for root from 66.42.99.107 port 35062 ssh2
2026-05-09T22:07:05.875474+08:00 MEGABOX-PRO sshd[1030228]: error: PAM: Authentication failure for root from 66.42.99.107
2026-05-09T22:07:06.460631+08:00 MEGABOX-PRO sshd[1030228]: error: Received disconnect from 66.42.99.107 port 41380:3: com.gV: \\345\\217\\226\\346\\266\\210\\347\\231\\273\\345\\275\\225\\350\\256\\244\\350\\257\\201 [preauth]
2026-05-09T22:07:06.460762+08:00 MEGABOX-PRO sshd[1030228]: Disconnected from authenticating user root 66.42.99.107 port 41380 [preauth]
2026-05-09T22:07:30.729246+08:00 MEGABOX-PRO sshd[1030390]: Accepted keyboard-interactive/pam for root from 66.42.99.107 port 34864 ssh2
root@MEGABOX-PRO:~#

屏幕截图 2026-05-09 234017.png

时间戳 日志内容 解释 / 攻击行为
2026-05-09T19:51:57 Connection closed by 66.42.99.107 port 59866 [preauth] 攻击者首次尝试连接 SSH,未通过认证(preauth 阶段关闭连接)
2026-05-09T19:52:32 Connection closed by 66.42.99.107 port 43996 [preauth] 攻击者继续尝试连接 SSH,仍未成功
2026-05-09T20:03:25 Connection closed by authenticating user root 66.42.99.107 port 43244 [preauth] 攻击者尝试以 root 登录,连接中断,PAM 或密码验证失败
2026-05-09T20:04:55 error: PAM: Authentication failure for root from 66.42.99.107 PAM 验证失败,攻击者未通过两步验证或系统密码
2026-05-09T20:05:01 error: PAM: Authentication failure for root from 66.42.99.107 攻击者重复尝试 PAM 验证,仍未成功
2026-05-09T20:10:35 Accepted keyboard-interactive/pam for root from 66.42.99.107 port 49414 ssh2 关键事件:PAM 认证成功,攻击者可能利用系统漏洞或已存在 root shell
2026-05-09T20:10:35 Accepted google_authenticator for root PAM 模块触发 Google Authenticator 验证,也可能通过 root shell 绕过
2026-05-09T20:12:03 Accepted keyboard-interactive/pam for root from 66.42.99.107 port 55918 ssh2 攻击者进行第二次成功 SSH 登录,可能已经写入自己的 authorized_keys
2026-05-09T20:30:53 error: PAM: Authentication failure for root from 66.42.99.107 攻击者尝试新连接失败,测试其他端口或用户
2026-05-09T20:30:54 error: Received disconnect from 66.42.99.107 port 51380:3: com.gV … [preauth] SSH 连接断开
2026-05-09T20:30:54 Disconnected from authenticating user root 66.42.99.107 port 51380 [preauth] SSH session 终止
2026-05-09T20:31:27 Accepted keyboard-interactive/pam for root from 66.42.99.107 port 38662 ssh2 再次成功登录,攻击者保持持久化访问
2026-05-09T20:43:48 Accepted keyboard-interactive/pam for root from 66.42.99.107 port 35062 ssh2 持续验证访问,说明 authorized_keys 已写入或 shell 持续存在
2026-05-09T22:07:05 error: PAM: Authentication failure for root from 66.42.99.107 尝试失败,可能使用不同 session 或连接已被删除
2026-05-09T22:07:06 error: Received disconnect from 66.42.99.107 port 41380:3: com.gV … [preauth] SSH 断开
2026-05-09T22:07:06 Disconnected from authenticating user root 66.42.99.107 port 41380 [preauth] SSH session 终止
2026-05-09T22:07:30 Accepted keyboard-interactive/pam for root from 66.42.99.107 port 34864 ssh2 攻击者成功登录,持久化访问仍然可用

3.2 检查本地的ssh认证配置

  • 查看SSH配置文件和google认证器配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
root@MEGABOX-PRO:~# cat /etc/ssh/sshd_config

Include /etc/ssh/sshd_config.d/*.conf
PubkeyAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
# Expect .ssh/authorized_keys2 to be disregarded by default in future.
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
PasswordAuthentication no
KbdInteractiveAuthentication yes
ChallengeResponseAuthentication yes
UsePAM yes

X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_*

# override default of no subsystems
Subsystem sftp /usr/lib/openssh/sftp-server

UseDNS no
PermitRootLogin yes
Port 6902
  • 配置解读:
  1. PubkeyAuthentication yes → 支持密钥登录
  2. AuthenticationMethods publickey,keyboard-interactive → 理论上要求“公钥 + PAM/键盘交互认证” #AuthenticationMethods publickey,keyboard-interactive (指定登录顺序:先验证SSH密钥的密码短语,再验证TOTP验证码,顺序别搞反)
  3. PasswordAuthentication no → 禁止直接用密码登录
  4. UsePAM yes → SSH 认证会调用 PAM
  5. PermitRootLogin yes → root 可以登录
  6. Port 6902 → 自定义端口,不是默认 22
  7. ChallengeResponseAuthentication yes (必须打开,TOTP属于挑战响应式认证)
  • SSH 理论上要求 公钥 + 谷歌动态验证码PAM(keyboard-interactive)。
  • 检查谷歌两步认证的配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
root@MEGABOX-PRO:~# cat /etc/pam.d/sshd
auth required pam_google_authenticator.so

# @include common-auth

# 账户检查
account required pam_nologin.so
@include common-account

# 会话管理
session required pam_loginuid.so
session optional pam_keyinit.so force revoke

@include common-session
@include common-session-noninteractive
root@MEGABOX-PRO:~#
  • @include common-auth这一行,我在前面加#注释掉了它(因为我们不需要系统密码验证,只留密钥+TOTP谷歌两步认证)
  • 服务器原先安装了Fail2Ban,但是黑客失败次数没有达到封禁的次数门槛——5次。(黑客似乎一开始就有正确的密钥+TOTP谷歌认证?)
  • 到此,SSH的配置似乎并没有问题,给AI看了也说不出所以然来。

4.可能的漏洞。

  • 攻击路径推演——他们是怎么凑齐两把钥匙的?即密钥+谷歌动态验证码TOTP。
  • 既然必须同时具备“私钥”和“Google 动态码”才能登录,攻击者的入侵路径基本可以锁定在以下两种情况:

4.1 路径 A:服务器“内鬼”式入侵(概率最高)

  • 服务器在 20:10 之前,已经通过其他非 SSH 途径(例如 Web 漏洞、宝塔面板漏洞、MySQL 弱口令等)被植入了 WebShell(网页后门)。

    PS:我这段时间确实在这个服务器反复安装并卸载了一大堆新奇的“玩具”项目。

  • 攻击者通过网页后门,读取了私钥以及/root/.google_authenticator 文件,拿到了动态密码的种子。

  • 攻击者通过网页后门,将自己的 SSH 公钥偷偷追加到了 /root/.ssh/authorized_keys 文件中。

  • 随后,攻击者用自己的私钥 + 算出来的 Google 验证码,正大光明地通过 SSH 客户端(如 FinalShell)登录了你的服务器。

4.2 路径 B:客户端全面失陷(魔幻推测

  • 平时用来连接服务器的个人电脑中了木马(例如运行了带有恶意代码的破解软件、不知名的脚本等)。

  • 木马窃取了电脑 ~/.ssh/ 目录下的私钥文件(如 id_rsa)。

  • 个人倾向版本A,更多证据见5.2分析。😭

5. 黑客入侵后干了什么?

  • 除了第一小节说的,黑客除了把重要数据文件被加密打上了.locked后缀,以及留下勒索的信外,还有以下操作。

5.1获取数据库等重要密码

通过查看bash的历史输入指令

1
cat /root/.bash_history
  • 黑客输入了以下历史指令,不排除没有被服务器日志记录的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
lscpu
docker ps
docker inspect ezbookkeeping | grep -iE 'USER|PASS|ADMIN'
docker exec -it ezbookkeeping-mysql mysql -uezbookkeeping -pezbookkeeping
1pctl user-info
cat /opt/1panel/conf/settings.conf
1pctl user-info --show
1pctl echo password
1pctl user-info | grep "面板密码" -A 1
find / -name "1Panel.db"
sqlite3 /opt/1panel/db/1Panel.db "SELECT * FROM settings WHERE key = 'password';"
python3 encrypt.py
pip3 install pycryptodome
python3 -m pip install pycryptodome
sudo apt install python3-pip
pip3 install pycryptodome
python3 -m venv .venv
apt install python3.11-venv
python3 -m venv .venv
source .venv/bin/activate
pip install pycryptodome
python encrypt.py
deactivate
export LANG="en_US";export LANGUAGE="en_US";export LC_ALL="en_US";top
top
docker stop $(docker ps -aq)
  • lscpu指令:查看 CPU 架构和性能。看性能适不适合挖矿?
  • docker ps指令:列出当前运行的 Docker 容器,黑客用来发现应用和数据库服务。
  • docker inspect ezbookkeeping | grep -iE 'USER|PASS|ADMIN' 指令:查看 ezbookkeeping 容器配置,并筛选出用户名、密码或管理员信息。(ezbookkeeping是我用来记账的数据库。)
  • docker exec -it ezbookkeeping-mysql mysql -uezbookkeeping -pezbookkeeping指令:进入容器内的 MySQL 数据库,使用明文用户名和密码访问数据。(记账的数据库的密码。)
  • 1pctl user-info:查看 1Panel 面板的用户信息。
  • cat /opt/1panel/conf/settings.conf:查看 1Panel 面板的配置文件,包含数据库或管理员密码。
  • 1pctl user-info --show:显示完整用户信息,包括敏感字段。
  • 1pctl echo password尝试直接显示面板密码
  • 1pctl user-info | grep "面板密码" -A 1搜索 1Panel 面板中标记为“面板密码”的字段,并显示下一行内容(密码)。
  • find / -name "1Panel.db":搜索整个系统,查找面板数据库文件 1Panel.db
  • sqlite3 /opt/1panel/db/1Panel.db "SELECT * FROM settings WHERE key = 'password';":使用 SQLite 读取面板数据库中密码字段的明文或加密值
  • python3 encrypt.py:运行黑客准备的 Python 脚本,用于解密面板或数据库加密密码

  • 后面的pycryptodome加密相关内容可能是为了给我本地文件随机加密打上.locked后缀

  • pip3 install pycryptodome:安装 Python 的加密库 pycryptodome

  • python3 -m pip install pycryptodome:同上,通过 Python 模块方式安装 pycryptodome

  • sudo apt install python3-pip:安装 Python 的包管理器 pip,用于后续安装解密库。

  • pip3 install pycryptodome:再次安装 pycryptodome,确保环境中存在加密库。

  • python3 -m venv .venv:创建 Python 虚拟环境 .venv,隔离运行解密脚本所需的依赖。

  • apt install python3.11-venv:安装 Python venv 模块,支持创建虚拟环境。

  • python3 -m venv .venv:再次创建虚拟环境。

  • source .venv/bin/activate:激活虚拟环境,确保接下来的 Python 命令在隔离环境中执行。

  • pip install pycryptodome:在虚拟环境中安装加密库 pycryptodome

  • python encrypt.py:运行解密脚本,将面板或数据库加密。

  • deactivate:退出 Python 虚拟环境。

  • export LANG="en_US";export LANGUAGE="en_US";export LC_ALL="en_US":将系统语言设置为英文,方便脚本解析命令输出。

  • top:查看系统当前进程和资源使用情况。

  • docker stop $(docker ps -aq):停止所有 Docker 容器,可能用于破坏服务。提醒我上号看留下的还原你的数据.txt文件,然后交赎金。

5.2 黑客给自己“配”了一把大门钥匙

  • 查看本地公钥保存的路径。
1
2
3
4
5
6
root@MEGABOX-PRO:~# ls -l /root/.ssh
total 12
-rw------- 1 root root  668 May  9 20:14 authorized_keys
-rw-r--r-- 1 root root 2602 Apr 22 11:50 id_rsa
-rw-r--r-- 1 root root  570 Apr 22 11:50 id_rsa.pub
root@MEGABOX-PRO:~# 
  1. 攻击者在 20:10 登录成功后,仅仅花了 4 分钟熟悉环境,在 20:14 将他们自己的 SSH 公钥写入了你的 authorized_keys 文件中,留下了持久化后门。
1
-rw------- 1 root root  668 May  9 20:14 authorized_keys
  1. 权限完全裸奔的私钥。当初在服务器生成的私钥和公钥,结果忘记删除了,**把私钥留在了服务器。
1
-rw-r--r-- 1 root root 2602 Apr 22 11:50 id_rsa
  • 结合之前的 sshd_config(要求同时具备私钥 + Google 验证码),黑客的入侵手法已经100%清晰了:
  1. 第一步(信息窃取):服务器上大概率存在某个 Web 服务漏洞(例如:任意文件读取漏洞、目录遍历漏洞,或者某个面板的漏洞)。因为 id_rsa 是所有人可读的,黑客通过这个 Web 漏洞,直接打包下载了 /root/.ssh/id_rsa 和 /root/.google_authenticator。

  2. 第二步(组合钥匙): 黑客在自己的电脑上,将偷来的 id_rsa 权限改为 600 绕过本地客户端限制,并将其导入;同时用偷来的 Google 密钥种子在手机上绑定了你的动态密码。

  3. 第三步(大摇大摆登录): 20:10:35,黑客使用组合好的“双重钥匙”成功登录服务器。

  4. 第四步(巩固后门): 20:14,黑客为了防止被发现后删掉旧私钥,立刻把自己的公钥塞进了你的 authorized_keys 文件里。

  • 查看黑客的自己公钥:
1
2
3
4
5
6
7
root@MEGABOX-PRO:~# cat /root/.ssh/authorized_keys

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDCUg9XqvMb0lDGBjI/ySooyEW2gQFKCkRgwiWAqkjMVW05toG5Qrrv/Q16lIOeex+UrMABksItcNqJC3DPkbixrmmv0DF9EoJXLXJi+Y7aYIgOB9Ob9cvJtXka/nuusM1DcoLXhgMY+7rjQW4uNN1F0lJ3BEvbzKqKRkEkE8mRUs/z94hOTGYegxiaar7uf2sEhYXHF3OiIN0xnMRJ/vijMSfw+H5jATlc5bJpVmo0lpGCzqxRDpaBNpTngXsl0WYO740cpn7Vu0GcFdlkAY3M4wT1nYqavU09Q4yGBuHrnVcs8BLzQb5bOxFyVl4+VR7gsECWHEfi5O2S/Q6WQPwgpp6lSlncSGW0fazzbUP8zbKMKIBDgt27tDWupiZ9oPSS77HF52lkBMyFu9mZA+Gzw5UzPocY3Ba11jnHrYpjyJQ8FOR+qVqPppnshNoW20Oj8N0VkB6fRZA2TrrP1CU02kTc7CjzX13VtXLETl7xBQbf9y/hUVpVnpGRvqe0+qs= root@MEGABOX-PRO

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBXe4kV2Ua5M9uzQIvUVv0fdS0oASzqU/rZJiWey37FP root@MEGABOX-PRO

root@MEGABOX-PRO:~#
  • 黑客在 20:14 写入了这第二行公钥(ED25519算法)。为了防止我查日志时觉得刺眼,他们故意在自己公钥的末尾伪造了root@MEGABOX-PRO 这个后缀?。

6. 后续处理

6.1 服务器处理

  • 我服务器没有重要的数据,没什么好说——销毁现有数据并重装系统
  • 重置所有网站的管理员密码。
  • 重置所有网站记录的api token。
  • 重置一切节点UUID。

6.2 吃一堑长一智

  • 不要乱下载。

  • 禁止使用来路不明的一键脚本

  • 及时更新有漏洞的程序;

  • “玩具”项目别在主力服务器折腾;

  • 服务器只允许特定ip登录。

1
nano /etc/ssh/sshd_config
  • 粘贴如下内容
1
AllowUsers ubuntu@1.1.1.1 root@8.8.8.8
  • ubuntu@1.1.1.1 → 允许用户名为 ubuntu 的用户从 IP 1.1.1.1 登录。

  • root@8.8.8.8 → 允许用户名为 root 的用户从 IP 8.8.8.8 登录。

  • 除了1.1.1.1和8.8.8.8外,其他ip会被禁止。

  • 我只允许自己服务器ip登录。把自己锁门外我也认了——通过服务器提供商救援模式登录

  • 正确生成私钥和公钥。

  • 在本地离线生成密钥对!

  • 在本地离线生成密钥对!

  • 在本地离线生成密钥对!


  • 不要在服务器生成密钥。

  • 不要在服务器生成密钥。

  • 不要在服务器生成密钥。

  • 密钥对生成,在本地Windows打开CMD面板,输入:

1
ssh-keygen -t ed25519 -C "your_email@example.com"
  • Windows提示下面内容,输入保存密钥对的路径。
1
Enter file in which to save the key (C:\Users\XXX/.ssh/id_ed25519):
  • 输入路径后,Windows会提示输入一个密码,用于客户端解密私钥用。
1
2
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
  • 只有会提示生成成功。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
C:\Users\abc>ssh-keygen -t ed25519 -C "your_email@example.co
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\abc/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\abc/.ssh/id_ed25519
Your public key has been saved in C:\Users\abc/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:4cgS0Iw6nJxnOfr7XUYCMDQ6snUeT+TAOPDKN650K8M your_email@example.co
The key's randomart image is:
+--[ED25519 256]--+
|..o@. . |
| .=.B+ |
|++=.=.o . |
|=O.B *.o . |
|oo+o+ +.S. |
| .o .. o |
|...o o |
|.Eo.. . o |
| .ooo. . |
+----[SHA256]-----+

C:\Users\abc>

  • 公钥public key上传到服务器/root/.ssh路径,公钥后缀一般是.pub,假如公钥名字是id_rsa.pub
  • 不要把私钥上传到服务器!不要把私钥上传到服务器!不要把私钥上传到服务器!
  • 将公钥内容追加到授权文件(替换下面的公钥内容)
1
2
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys  #更改成自己的公钥名字。

  • 设置正确的权限,600表示只有root用户能改该文件,防止被乱加公钥进去。
  • 600权限为仅允许所有者读、写;700权限为仅允许所有者读、写、执行/进入目录。
1
2
3
4
5
6
7
8
r = 4
w = 2
x = 1

#所有:
7 = 4+2+1 = rwx
6 = 4+2 = rw-
5 = 4+1 = r-x
1
2
chmod 700 /root/.ssh/
chmod 600 /root/.ssh/authorized_keys
1
chmod 600 /root/.ssh/id_rsa.pub  #改成自己的公钥名字
  • 修改ssh配置,禁止密码登录。
1
/etc/ssh/sshd_config
  • 将配置里面内容修改成如下:
1
2
3
4
5
6
7
Port 6666  #ssh端口,改成非22
PermitRootLogin prohibit-password #禁止通过密码方式进入root
PubkeyAuthentication yes #启用密钥认证
PermitEmptyPasswords no
KbdInteractiveAuthentication no
ChallengeResponseAuthentication no
PasswordAuthentication no
  • 修改完后在英文输入法下,按ctl+x,输入y回车进行保存并退出。
  • 重启SSH
1
systemctl restart ssh
  • 妥善保存私钥,这是大门的”钥匙”。

  • 禁止ping

  • 禁PING的意思是:不允许电脑、设备或服务器使用PING功能。一般情况下电脑、防火墙、服务器都是允许PING功能的,不需要特别设置不禁止PING,但是远程的服务器(比如某个网站会禁止PING功能也是根据自己业务的属性来去选择)
    服务器禁ping的好处与坏处。

  • 好处:一定程度上在互联网上隐藏自己防止一些批量扫描软件探测主机,减少被入侵的几率

  • 坏处:无法使用常用的ping或者监控软件来检测站点是否正常,服务器是否在线,当别人PING用户的时候会耗费用户的连接资源。

  • 永久禁Ping:

1
nano /etc/sysctl.conf
  • 在末尾添加
1
net.ipv4.icmp_echo_ignore_all = 1 # 0表示允许,1表示禁止
  • 然后执行:
1
sysctl -p
  • 安装fail2ban
  • fail2ban是一款入侵防御软件,启动后会通过检测系统行为日志识别暴力破解行为,对于在短时间内多次未能通过身份验证的请求,fail2ban会自动调用系统自带的防火墙或包管理框架(如iptables或tcp wrapper等)进行封禁。
  • 一行行粘贴执行下面指令:
1
2
3
4
sudo apt-get update #更新软件源
sudo apt-get install -y fail2ban #安装fail2ban
sudo systemctl start fail2ban #启动fail2ban服务
sudo systemctl enable fail2ban #设置开机自启
  • 用任意文本编辑器打开 /etc/fail2ban/jail.local
1
nano /etc/fail2ban/jail.local
  • 在文件填写如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[sshd]
enabled = true

#修改为ssh的端口
port = 6666

filter = sshd
logpath = /var/log/auth.log
backend = systemd

#最大试错次数
maxretry = 2

#失败次数统计时间范围,即6000000s内失败超过2次封禁。
findtime = 6000000

#封禁时长,单位s,-1为永久封禁,不要手软。
bantime = -1

#可以无限试错的ip,一般为本机的
ignoreip = 8.8.8.8 1.1.1.1 #可以无限试错的ip,一般为本机的ip
  • 重启并查看fail2ban运行状态。
1
2
sudo systemctl restart fail2ban
sudo systemctl status fail2ban
  • 查看当前封禁IP:
1
sudo fail2ban-client status sshd
  • 解禁某一IP:
1
sudo fail2ban-client set sshd unbanip 1.1.1.1
  • 封禁某一IP:
1
sudo fail2ban-client set sshd banip 66.42.99.107
  • 安装komari等探针时,勾选禁止远程控制:
    屏幕截图 2026-05-10 125344.png
    屏幕截图 2026-05-11 221454.png

  • docker等compose的配置,不要把端口暴露在公网:

  • 只允许通过本地127.0.0.1反代访问。

  • 例如原始的compose.yml关于端口部分:

1
2
3
ports:
- "5121:80"
- "5120:443"
  • 上面配置,在公网可以通过ip:端口直接访问,容易被绕过Cloudflare的域名防御。修改为下面配置:
1
2
3
ports:
- "127.0.0.1:5121:80"
- "127.0.0.1:5120:443"
  • 通过1panel等反代127.0.0.1:5120进行访问,ip:端口的路径被堵死。