说明:本文为服务器安全运维的技术学习笔记,文中配置与方法来自公开官方文档及本人多台实例的实操记录,提及的硬件 / 机房参数来自厂商公开资料与本人实测,请以官方最新信息为准。文中讨论的所有操作均针对自有或已获书面授权的服务器;请勿将相关技术用于未授权探测、入侵他人系统或任何违法违规活动。请在合法合规的前提下使用。
前言
做运维这些年,最让人后背发凉的不是"服务器挂了",而是"服务器不知道什么时候已经被别人用了"。
我处理过的最典型一例:一台对外提供服务的 VPS,某天监控告警CPU长期100%,登上去一查------被人种了挖矿程序,跑了整整三天。追溯原因很简单:SSH 用的还是默认 22 端口 + root 密码登录,密码是"公司名+123456"这种。攻击者用字典跑了一晚上就进来了。。
比挖矿更糟的是另外几种:
- SSH被爆破成功后装后门,攻击者随时能回来,你删了挖矿程序他再装一遍;
- 应用漏洞被利用,网站被挂马、跳转到博彩页面,搜索引擎直接标记"该网站可能含有恶意软件";
- 服务器沦为跳板,被用来攻击第三方,然后你的IP被投诉封禁、服务商强制停机。
这类事的共同点是:事后处理成本远高于事前加固成本。一台新机器花30分钟做基线加固,能挡掉绝大多数自动化攻击------因为互联网上90%的入侵都是"扫端口+撞密码+打已知漏洞"这套流水线,而不是针对你的定向攻击。
这篇文章把我一直用的这套流程完整拆开讲:先讲最常见的入侵路径,再是SSH加固→防火墙→应用层防护的基线配置,然后是入侵检测与挖矿木马排查的完整命令,接着是备份与应急响应预案,最后是几台实测样本对比和一份加固检查清单。所有命令都能直接复制运行。
一、先搞清:90%的入侵是怎么进来的
加固之前先明白攻击者的路径,才知道往哪加固。
| 入侵路径 | 原理 | 占比 | 对应加固 |
|---|---|---|---|
| SSH 暴力破解 | 扫 22 端口,字典撞 root 弱密码 | 最高 | 换端口 + 密钥登录 + fail2ban |
| 应用漏洞利用 | 网站/中间件已知漏洞(如未授权访问、反序列化) | 高 | 及时更新 + 最小权限 + WAF |
| 数据库弱口令暴露 | 3306/6379/27017 开在公网 + 空密码/弱密码 | 高 | 只监听内网 + 强密码 + 防火墙 |
| 供应链/脚本投毒 | 装了来路不明的脚本或镜像 | 中 | 只用官方源 + 校验签名 |
| 配置泄露 | .git、.env、备份文件暴露在 Web 目录 |
中 | 目录加固 + 禁止敏感文件访问 |
关键认知 :绝大多数入侵不需要"黑科技" ,就是扫端口+撞密码+打已知漏洞。所以加固的重点不是"防高级APT",而是把低门槛的入口堵死------这一步就能挡掉九成以上的自动化攻击。
把上表的入侵路径占比画成图,一眼就能看出加固优先级:
#mermaid-svg-TaO5yfmlXfHV3b9t{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-TaO5yfmlXfHV3b9t .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-TaO5yfmlXfHV3b9t .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-TaO5yfmlXfHV3b9t .error-icon{fill:#552222;}#mermaid-svg-TaO5yfmlXfHV3b9t .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-TaO5yfmlXfHV3b9t .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-TaO5yfmlXfHV3b9t .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-TaO5yfmlXfHV3b9t .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-TaO5yfmlXfHV3b9t .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-TaO5yfmlXfHV3b9t .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-TaO5yfmlXfHV3b9t .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-TaO5yfmlXfHV3b9t .marker{fill:#333333;stroke:#333333;}#mermaid-svg-TaO5yfmlXfHV3b9t .marker.cross{stroke:#333333;}#mermaid-svg-TaO5yfmlXfHV3b9t svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-TaO5yfmlXfHV3b9t p{margin:0;}#mermaid-svg-TaO5yfmlXfHV3b9t .pieCircle{stroke:#000000;stroke-width:2px;opacity:0.7;}#mermaid-svg-TaO5yfmlXfHV3b9t .pieOuterCircle{stroke:#000000;stroke-width:1px;fill:none;}#mermaid-svg-TaO5yfmlXfHV3b9t .pieTitleText{text-anchor:middle;font-size:25px;fill:#000000;font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-TaO5yfmlXfHV3b9t .slice{font-family:"trebuchet ms",verdana,arial,sans-serif;fill:#000000;font-size:17px;}#mermaid-svg-TaO5yfmlXfHV3b9t .legend text{fill:#000000;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:17px;}#mermaid-svg-TaO5yfmlXfHV3b9t :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 40%25%18%9%8%"常见入侵路径占比(示意)" SSH 暴力破解 40 应用漏洞利用 25 数据库弱口令暴露 18 供应链/脚本投毒 9 配置泄露 8
二、SSH加固:把最大的入口关严
SSH 是服务器管理入口,也是被爆破最多的端口。先加固这里,收益最大。
2.1 备份配置(改错会锁死自己,务必先备份)
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
2.2 关键配置项
编辑 /etc/ssh/sshd_config,重点改这几处:
# 1. 换掉默认端口(能挡掉90%的无脑扫描)
Port 你的自定义端口
# 2. 禁止root直接用密码登录
PermitRootLogin prohibit-password
# 3. 禁用密码登录,只用密钥(加固的核心)
PasswordAuthentication no
PubkeyAuthentication yes
# 4. 限制认证尝试次数
MaxAuthTries 3
# 5. 缩短空闲超时
ClientAliveInterval 300
ClientAliveCountMax 2
# 6. 只允许特定用户登录(可选,更严)
AllowUsers 你的用户名
改完不要立刻断开当前会话,先新开一个终端测试能登进去,再重启服务:
# 先测试新配置语法(有报错就是配置错了)
sshd -t
# 确认可以登录后,再重启
systemctl restart sshd
这一步顺序极其重要------很多人改完直接重启,发现自己被锁在外面,只能去控制台救。
2.3 配置密钥登录
# 本地生成密钥对(如果没有)
ssh-keygen -t ed25519 -C "yourname"
# 上传公钥到服务器
ssh-copy-id -p 你的端口 你的用户名@服务器IP
# 验证免密登录成功
ssh -p 你的端口 你的用户名@服务器IP
确认密钥登录可用后,再关闭密码登录 (上一步的 PasswordAuthentication no)。
2.4 用 fail2ban 自动封禁爆破 IP
换了端口仍有扫描,加一层自动封禁:
apt install -y fail2ban
# 新建本地配置(不要直接改jail.conf,升级会被覆盖)
cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 3600 # 封禁1小时
findtime = 600 # 10分钟内
maxretry = 3 # 失败3次即封
[sshd]
enabled = true
port = 你的SSH端口
EOF
systemctl enable --now fail2ban
systemctl status fail2ban
验证与查看封禁情况:
# 查看当前被封的IP
fail2ban-client status sshd
# 手动解封某个IP(如果是自己误封)
fail2ban-client set sshd unbanip 1.2.3.4
三、防火墙:默认拒绝,按需放行
安全的基本原则是 "默认拒绝,白名单放行",而不是"先全开,再关掉一些"。
3.1 UFW 基础配置
# 安装并设默认策略
apt install -y ufw
ufw default deny incoming # 默认拒绝所有入站
ufw default allow outgoing # 允许出站
# 只放行必要端口
ufw allow 你的SSH端口/tcp
ufw allow 80/tcp
ufw allow 443/tcp
# 启用(会提示确认,注意别把自己SSH端口漏了)
ufw enable
# 查看规则
ufw status verbose
血泪提醒 :启用防火墙前,务必先确认 SSH 端口已放行 ,否则一执行 ufw enable 就把自己关在门外。
3.2 数据库/中间件只监听内网
这是最容易被忽视、也最容易致命的一条。Redis、MongoDB、MySQL 被直接暴露公网导致数据被清空/勒索的案例极多。
# 检查监听情况:看哪些端口开在0.0.0.0(对所有网卡开放)
ss -tulnp | grep -E '0.0.0.0|:::'
# Redis:改bind只监听本地
# /etc/redis/redis.conf
# bind 127.0.0.1
# requirepass 你的强密码
# MySQL:改bind-address只监听本地
# /etc/mysql/mysql.conf.d/mysqld.cnf
# bind-address = 127.0.0.1
判读原则 :只应监听 127.0.0.1(本地)或内网 IP 的服务,如果出现在 0.0.0.0,说明开放到了公网,必须立刻处理。
3.3 端口开放对照表
| 端口 | 服务 | 是否应开公网 |
|---|---|---|
| 22(或自定义) | SSH | 是(建议改端口 + 限 IP) |
| 80/443 | HTTP/HTTPS | 是(业务需要) |
| 3306 | MySQL | 否,只监听内网 |
| 6379 | Redis | 否,只监听内网 |
| 27017 | MongoDB | 否,只监听内网 |
| 9200 | Elasticsearch | 否,只监听内网 |
| 9100 | node_exporter | 否,仅监控机可访问 |
四、应用层与系统层加固
SSH 和防火墙是"门锁",应用和系统本身也要加固。
4.1 系统更新与内核参数
# 定期更新安全补丁(生产环境建议先测试再上)
apt update && apt upgrade -y
# 开启自动安全更新(Ubuntu/Debian)
apt install -y unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades
内核安全参数:
cat >> /etc/sysctl.conf << 'EOF'
# 禁止响应ICMP广播(防放大攻击)
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 开启SYN Cookie防护(防SYN Flood)
net.ipv4.tcp_syncookies = 1
# 禁止源路由
net.ipv4.conf.all.accept_source_route = 0
# 记录可疑数据包
net.ipv4.conf.all.log_martians = 1
EOF
sysctl -p
4.2 Web应用层加固
- 及时更新:CMS/中间件/依赖的已知漏洞是主要入口,定期更新;
- 最小权限:Web进程用非root用户运行,目录权限收紧;
- 禁止敏感文件访问 :
.git、.env、*.sql、*.bak绝不能通过Web访问到。
Nginx层面拒绝敏感文件:
# 放在server块中
location ~ /\.(git|env|svn) {
deny all;
return 404;
}
location ~* \.(sql|bak|old|zip|tar\.gz)$ {
deny all;
return 404;
}
4.3 关闭无用服务
# 查看所有监听端口,逐个确认是否必要
ss -tulnp
# 查看已启用的开机服务,关掉不需要的
systemctl list-unit-files --state=enabled
systemctl disable --now 不需要的服务
原则:用不到的服务一律关掉,暴露的服务越少,攻击面越小。
五、入侵检测:怎么知道"已经被进了"
加固是防,检测是"万一被进来了,能尽快发现"。下面这套排查命令建议定期跑。
5.1 登录与账号排查
# 当前登录的用户
w
# 最近成功登录记录(看有没有陌生IP)
last | head -20
# 登录失败记录(看爆破来源)
lastb | head -20
# SSH失败尝试统计(数量巨大说明正在被爆破)
grep "Failed password" /var/log/auth.log | wc -l
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head
# 检查是否有异常账号(UID=0的账号只应有root)
awk -F: '$3==0 {print $1}' /etc/passwd
# 检查最近新增的用户
grep -E "useradd|adduser" /var/log/auth.log
重点看两处:有没有你不认识的登录 IP;有没有多出来 UID=0 的"影子 root"账号。
5.2 进程与网络排查
# 按CPU占用排序(挖矿进程通常CPU吃满)
ps aux --sort=-%cpu | head -10
# 按内存占用排序
ps aux --sort=-%mem | head -10
# 查看某个可疑进程的真实可执行文件路径
ls -la /proc/进程PID/exe
# 查看进程的完整启动命令
cat /proc/进程PID/cmdline | tr '\0' ' '; echo
# 查看所有对外的网络连接(异常连接是重要线索)
ss -antp | grep ESTABLISHED
排查技巧 :挖矿进程常伪装成系统进程名(如伪造成 [kworker]、[kswapd0] 这类内核线程样式),但内核线程不会有 /proc/PID/exe 的真实路径 ------如果它指向 /tmp 或某个奇怪目录,基本可以确定有问题。
5.3 持久化后门排查
攻击者进来后都会留"后门",重点看这几处:
# 1. 用户级计划任务
crontab -l
for u in $(cut -f1 -d: /etc/passwd); do echo "== $u =="; crontab -l -u $u 2>/dev/null; done
# 2. 系统级计划任务(攻击者最爱藏这里)
ls -la /etc/cron.*/
cat /etc/crontab
cat /etc/cron.d/*
# 3. systemd 服务(新型后门常伪装成服务)
systemctl list-unit-files --state=enabled
ls -la /etc/systemd/system/
# 4. 开机启动
cat /etc/rc.local 2>/dev/null
# 5. SSH 后门(authorized_keys 里有没有别人的公钥)
cat ~/.ssh/authorized_keys
cat /root/.ssh/authorized_keys
这一步是查后门的关键 :很多人在/tmp里删掉了挖矿程序,却没发现 /etc/cron.d/ 里藏了一条"每 5 分钟重新下载并运行"的计划任务------删了也白删。
5.4 文件完整性检查
# rkhunter:检查rootkit/后门/可疑文件
apt install -y rkhunter
rkhunter --update
rkhunter --check --skip-keypress
# chkrootkit:rootkit专项扫描
apt install -y chkrootkit
chkrootkit
# AIDE:文件完整性监控(记录关键文件哈希,变动即告警)
apt install -y aide
aideinit # 初始化基线数据库
aide --check # 后续对比检查
AIDE 的价值在于"建立基线后持续对比" ------/etc/passwd、/etc/ssh/sshd_config、关键二进制文件被篡改,都能被发现。
六、备份与应急响应
6.1 备份是"最后一道防线"
前面所有加固都可能失效,但只要有干净的离线备份,最坏情况也就是"重装 + 恢复数据"。
# 每天凌晨3点备份关键配置和数据库,保留7天
cat > /root/secure_backup.sh << 'EOF'
#!/bin/bash
DATE=$(date +%Y%m%d)
mkdir -p /root/sbackup
# 备份关键配置
tar zcf /root/sbackup/etc_$DATE.tar.gz /etc/ssh /etc/fail2ban /etc/nginx 2>/dev/null
# 备份数据库(按需修改)
# mysqldump -u user -p密码 dbname | gzip > /root/sbackup/db_$DATE.sql.gz
# 同步到异地(关键!)
# rsync -avz /root/sbackup/ user@备份机:/backup/
find /root/sbackup -name "*.gz" -mtime +7 -delete
EOF
chmod +x /root/secure_backup.sh
echo "0 3 * * * /root/secure_backup.sh" >> /etc/crontab
核心原则:
- 异地备份:备份和源数据同机,被勒索加密时一起完蛋;
- 离线备份:最安全的一份应该是攻击者访问不到的(离线硬盘 / 只读对象存储);
- 定期演练恢复:没验证过能恢复的备份,不算备份。
6.2 确认被入侵后的应急流程
一旦确认被入侵,不要急着删文件,按顺序处理:
- 隔离:先断网或改防火墙策略,防止攻击者继续操作、防止横向扩散;
- 取证:保留现场------记录异常进程、网络连接、日志(截图/导出),用于事后分析入口;
- 找入口 :翻
auth.log、Web访问日志,确定是怎么进来的(弱密码?应用漏洞?); - 清除:删恶意进程、计划任务、后门账号、authorized_keys里的陌生公钥;
- 加固:堵上被利用的入口,再恢复服务;
- 改密:所有相关密码、密钥全部更换(假设已全部泄露)。
特别注意 :如果被入侵程度较深(有rootkit、核心二进制被篡改),最稳妥的做法是备份数据后重装系统,而不是"缝缝补补"------你无法100%确认是否还有残留后门。
七、DDoS防护:从机房层面要能力
上面讲的是"主机安全",还有一类攻击是主机层面挡不住的:流量型 DDoS。
7.1 主机防护 vs 机房防护
| 攻击类型 | 能否主机层面防 | 说明 |
|---|---|---|
| SSH 爆破 | 能 | fail2ban + 密钥登录 |
| 应用层攻击(CC) | 部分能 | Nginx 限速 + WAF |
| 小流量连接耗尽 | 部分能 | 内核参数 + iptables connlimit |
| 流量型 DDoS(Gbps 级) | 不能 | 必须在机房层面清洗 |
关键认知 :流量型DDoS打的是你的带宽,主机上一万条iptables规则也没用------流量根本到不了你的机器,是机房出口被打满 。所以能不能抗DDoS,取决于你选的服务商和机房,这是选型阶段就要问清楚的。
用一张图对比「主机层面能挡」和「必须靠机房」的边界:
#mermaid-svg-zrHpYthvxOee7d5e{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-zrHpYthvxOee7d5e .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-zrHpYthvxOee7d5e .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-zrHpYthvxOee7d5e .error-icon{fill:#552222;}#mermaid-svg-zrHpYthvxOee7d5e .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-zrHpYthvxOee7d5e .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-zrHpYthvxOee7d5e .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-zrHpYthvxOee7d5e .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-zrHpYthvxOee7d5e .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-zrHpYthvxOee7d5e .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-zrHpYthvxOee7d5e .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-zrHpYthvxOee7d5e .marker{fill:#333333;stroke:#333333;}#mermaid-svg-zrHpYthvxOee7d5e .marker.cross{stroke:#333333;}#mermaid-svg-zrHpYthvxOee7d5e svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-zrHpYthvxOee7d5e p{margin:0;}#mermaid-svg-zrHpYthvxOee7d5e .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-zrHpYthvxOee7d5e .cluster-label text{fill:#333;}#mermaid-svg-zrHpYthvxOee7d5e .cluster-label span{color:#333;}#mermaid-svg-zrHpYthvxOee7d5e .cluster-label span p{background-color:transparent;}#mermaid-svg-zrHpYthvxOee7d5e .label text,#mermaid-svg-zrHpYthvxOee7d5e span{fill:#333;color:#333;}#mermaid-svg-zrHpYthvxOee7d5e .node rect,#mermaid-svg-zrHpYthvxOee7d5e .node circle,#mermaid-svg-zrHpYthvxOee7d5e .node ellipse,#mermaid-svg-zrHpYthvxOee7d5e .node polygon,#mermaid-svg-zrHpYthvxOee7d5e .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-zrHpYthvxOee7d5e .rough-node .label text,#mermaid-svg-zrHpYthvxOee7d5e .node .label text,#mermaid-svg-zrHpYthvxOee7d5e .image-shape .label,#mermaid-svg-zrHpYthvxOee7d5e .icon-shape .label{text-anchor:middle;}#mermaid-svg-zrHpYthvxOee7d5e .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-zrHpYthvxOee7d5e .rough-node .label,#mermaid-svg-zrHpYthvxOee7d5e .node .label,#mermaid-svg-zrHpYthvxOee7d5e .image-shape .label,#mermaid-svg-zrHpYthvxOee7d5e .icon-shape .label{text-align:center;}#mermaid-svg-zrHpYthvxOee7d5e .node.clickable{cursor:pointer;}#mermaid-svg-zrHpYthvxOee7d5e .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-zrHpYthvxOee7d5e .arrowheadPath{fill:#333333;}#mermaid-svg-zrHpYthvxOee7d5e .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-zrHpYthvxOee7d5e .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-zrHpYthvxOee7d5e .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-zrHpYthvxOee7d5e .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-zrHpYthvxOee7d5e .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-zrHpYthvxOee7d5e .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-zrHpYthvxOee7d5e .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-zrHpYthvxOee7d5e .cluster text{fill:#333;}#mermaid-svg-zrHpYthvxOee7d5e .cluster span{color:#333;}#mermaid-svg-zrHpYthvxOee7d5e div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-zrHpYthvxOee7d5e .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-zrHpYthvxOee7d5e rect.text{fill:none;stroke-width:0;}#mermaid-svg-zrHpYthvxOee7d5e .icon-shape,#mermaid-svg-zrHpYthvxOee7d5e .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-zrHpYthvxOee7d5e .icon-shape p,#mermaid-svg-zrHpYthvxOee7d5e .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-zrHpYthvxOee7d5e .icon-shape .label rect,#mermaid-svg-zrHpYthvxOee7d5e .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-zrHpYthvxOee7d5e .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-zrHpYthvxOee7d5e .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-zrHpYthvxOee7d5e :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} SSH 爆破 / CC / 连接耗尽
流量型 DDoS(Gbps 级)
攻击流量
攻击类型
主机层面可缓解
fail2ban + 密钥登录
Nginx 限速 + WAF
内核参数 + connlimit
主机层面无效
机房出口清洗
多 IP 切换
SLA 应急响应
7.2 选机器时要确认的防护信息
- 机房是否自带 DDoS 防护,量级多少(常见入门款赠20Gbps级基础防护)
- 防护策略是"清洗"还是"黑洞":清洗能过滤攻击流量保住服务;黑洞是直接封锁IP一段时间,等于服务中断
- 是否支持多 IP 切换:被攻击时可快速切换 IP 恢复服务
- 是否有 SLA 与应急响应:被攻击时能否快速联系到机房
作为对照,我手上用于对外服务的机器里,配置相对完整的方案通常具备:机房20Gbps以上的DDoS防护、多个独立IPv4(便于攻击时切换和做服务隔离)、基础网络监控。这类能力在"业务开始有人气、可能被同行或恶意攻击者盯上"的阶段,比多1GB内存重要得多。
八、几台实测样本对比(供参考)
下面是我手上/测试过的几台机器,从安全运维角度看的适配表现。网络、防护与配置数据来自各平台公开页面与本人实测记录,价格为官方公开定价,可能随活动调整,下单前请以官网为准:
| 样本 | 硬件配置 | 网络/防护 | 磁盘 | 价格 | 安全运维适配判断 |
|---|---|---|---|---|---|
| 香港 CN2 GIA 入门 VPS | 1 vCPU/1GB/70GB NVMe | 电信AS4809双向,广东10-12ms | 70GB NVMe | $8.80/月 | 个人站点/探针,机房基础防护 |
| 香港 CN2 GIA 中配 VPS | 2 vCPU/4GB/70GB NVMe | 10Mbps独享,晚高峰近0丢包 | 70GB NVMe | $26.40/月 | 中小业务,可挂fail2ban+WAF |
| 德国大带宽 VPS | 入门512MB起 | 1Gbps端口 | 按套餐 | $4.93/月起 | 大带宽,适合做代理/中转 |
| 香港独立服务器(入门) | Intel Xeon E3-1230 v3四核/32GB DDR3 ECC | 香港CN2 GIA方向,40Mbps独享不限流量,3个独立IPv4,20Gbps+ DDoS防护 | 1TB HDD(可加选NVMe) | $264/月 | 对外服务的合适形态:有防护、多IP、资源独占 |
| 香港独立服务器(高配) | 双路E5-2680 v4/128GB/2TB NVMe | 同上 | 2TB NVMe | 约$440/月 | 多业务隔离部署、长期安全运营 |
说明一下 LuckVM 的实测记录:
- 香港 CN2 GIA VPS :入门 1 vCPU/1GB/70GB NVMe/10Mbps 双向 8.80/月;中配 2 核 4G/70GB NVMe/10Mbps 独享 26.40/月。回程电信AS4809(59.43.. ),广东电信晚高峰10ms级、0丢包。做安全场景,它的价值在于线路真实(远程管理不卡,应急时能快速登入处理)和NVMe盘(日志、备份写入稳定)。
- 香港独立服务器(入门款) :Intel Xeon E3-1230 v3四核、32GB DDR3 ECC 、1TB HDD(可加选NVMe) 、40Mbps独享不限流量 、3个独立IPv4 、CN2 GIA方向、20Gbps+ DDoS防护 ,$264/月。从安全运维角度看,这是最完整的形态------机房级DDoS防护是主机层面买不到的、3个独立IP便于做服务隔离和攻击时切换、物理机独占资源不用担心"邻居"被攻陷牵连自己。
客观说短板,不然很容易买错:
- VPS产品的DDoS防护是机房"基础"级别 (通常不是高防),扛不住大流量攻击;业务容易被打就应选带20Gbps+防护的独立服务器或高防产品,别指望VPS扛住流量型攻击;
- VPS入门款1GB内存 ,跑fail2ban+基础防护够用,跑WAF、日志分析等较重的安全组件会吃紧,需要上中配;
- 独立服务器是月付预付制($264/月起),交付需1-2小时(装机、配IPMI、测网络),短期试水不建议一上来就签;
- 入门独服是1TB机械盘(可加选NVMe),日志写入、备份场景机械盘够用,追求IO性能建议加选NVMe;
- 它属于较新的服务商 (官方口径2020年前后开始运营),长期稳定性和大规模口碑积累还不如老牌厂商,把核心业务迁上去前,建议先小规模验证;
- 作为通用服务商,它不提供托管式安全服务(如代管WAF、渗透测试),安全仍需自行负责------这条对所有基础服务商都成立,别指望买了机器就自带安全团队。
作为补充:它支持支付宝、PayPal、信用卡、Google Pay、USDT 等付款方式,覆盖40+全球节点,机房普遍带基础DDoS防护(独服20Gbps+),并提供SLA可用性承诺。另外提醒一条实操要点:到期后超过3天未续费,多数平台会释放实例和数据,安全日志、备份务必提前转存或开自动续费。
九、加固检查清单(新机上线必做)
按优先级排序,新机器到手照这个清单跑一遍:
必做(不做等于裸奔)
- SSH换非默认端口
- 配置密钥登录,关闭密码登录
- 禁止root直接密码登录
- 开启fail2ban
- UFW默认拒绝,只放行必要端口
- 数据库/中间件只监听内网,绝不开公网
- 设强密码,禁用默认账号
建议做(提升安全水位)
- 开启自动安全更新
- 内核参数加固(SYN Cookie 等)
- Web 层拒绝敏感文件访问(.git/.env/.sql)
- 关闭所有无用服务与端口
- 安装 rkhunter/chkrootkit 定期扫描
- AIDE 建立文件完整性基线
持续做(长期运营)
- 每天自动备份 + 异地存储
- 定期跑入侵检测命令(登录记录、进程、计划任务)
- 半年一次备份恢复演练
- 关注服务商安全公告与漏洞信息
- 业务被打时确认机房 DDoS 防护策略
把清单按优先级画成执行顺序,照着从上往下做即可:
#mermaid-svg-MWP8M0wb5w9SMWYM{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-MWP8M0wb5w9SMWYM .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-MWP8M0wb5w9SMWYM .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-MWP8M0wb5w9SMWYM .error-icon{fill:#552222;}#mermaid-svg-MWP8M0wb5w9SMWYM .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-MWP8M0wb5w9SMWYM .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-MWP8M0wb5w9SMWYM .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-MWP8M0wb5w9SMWYM .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-MWP8M0wb5w9SMWYM .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-MWP8M0wb5w9SMWYM .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-MWP8M0wb5w9SMWYM .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-MWP8M0wb5w9SMWYM .marker{fill:#333333;stroke:#333333;}#mermaid-svg-MWP8M0wb5w9SMWYM .marker.cross{stroke:#333333;}#mermaid-svg-MWP8M0wb5w9SMWYM svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-MWP8M0wb5w9SMWYM p{margin:0;}#mermaid-svg-MWP8M0wb5w9SMWYM .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-MWP8M0wb5w9SMWYM .cluster-label text{fill:#333;}#mermaid-svg-MWP8M0wb5w9SMWYM .cluster-label span{color:#333;}#mermaid-svg-MWP8M0wb5w9SMWYM .cluster-label span p{background-color:transparent;}#mermaid-svg-MWP8M0wb5w9SMWYM .label text,#mermaid-svg-MWP8M0wb5w9SMWYM span{fill:#333;color:#333;}#mermaid-svg-MWP8M0wb5w9SMWYM .node rect,#mermaid-svg-MWP8M0wb5w9SMWYM .node circle,#mermaid-svg-MWP8M0wb5w9SMWYM .node ellipse,#mermaid-svg-MWP8M0wb5w9SMWYM .node polygon,#mermaid-svg-MWP8M0wb5w9SMWYM .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-MWP8M0wb5w9SMWYM .rough-node .label text,#mermaid-svg-MWP8M0wb5w9SMWYM .node .label text,#mermaid-svg-MWP8M0wb5w9SMWYM .image-shape .label,#mermaid-svg-MWP8M0wb5w9SMWYM .icon-shape .label{text-anchor:middle;}#mermaid-svg-MWP8M0wb5w9SMWYM .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-MWP8M0wb5w9SMWYM .rough-node .label,#mermaid-svg-MWP8M0wb5w9SMWYM .node .label,#mermaid-svg-MWP8M0wb5w9SMWYM .image-shape .label,#mermaid-svg-MWP8M0wb5w9SMWYM .icon-shape .label{text-align:center;}#mermaid-svg-MWP8M0wb5w9SMWYM .node.clickable{cursor:pointer;}#mermaid-svg-MWP8M0wb5w9SMWYM .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-MWP8M0wb5w9SMWYM .arrowheadPath{fill:#333333;}#mermaid-svg-MWP8M0wb5w9SMWYM .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-MWP8M0wb5w9SMWYM .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-MWP8M0wb5w9SMWYM .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MWP8M0wb5w9SMWYM .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-MWP8M0wb5w9SMWYM .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MWP8M0wb5w9SMWYM .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-MWP8M0wb5w9SMWYM .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-MWP8M0wb5w9SMWYM .cluster text{fill:#333;}#mermaid-svg-MWP8M0wb5w9SMWYM .cluster span{color:#333;}#mermaid-svg-MWP8M0wb5w9SMWYM div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-MWP8M0wb5w9SMWYM .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-MWP8M0wb5w9SMWYM rect.text{fill:none;stroke-width:0;}#mermaid-svg-MWP8M0wb5w9SMWYM .icon-shape,#mermaid-svg-MWP8M0wb5w9SMWYM .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MWP8M0wb5w9SMWYM .icon-shape p,#mermaid-svg-MWP8M0wb5w9SMWYM .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-MWP8M0wb5w9SMWYM .icon-shape .label rect,#mermaid-svg-MWP8M0wb5w9SMWYM .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MWP8M0wb5w9SMWYM .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-MWP8M0wb5w9SMWYM .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-MWP8M0wb5w9SMWYM :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 新机上线
必做:SSH 换端口 + 密钥登录
必做:fail2ban + UFW 默认拒绝
必做:数据库只监听内网
建议:自动更新 + 内核参数
建议:Web 拒绝敏感文件 + 关无用服务
建议:rkhunter + AIDE 基线
持续:异地备份 + 定期入侵检测
持续:恢复演练 + 关注安全公告
十、避坑清单
- SSH 还用默认端口 + 弱密码------被爆破的头号原因,30 分钟就能解决
- 改配置后直接重启 SSH------没测试就重启,一个语法错误把自己锁在门外
- 防火墙漏放 SSH 端口 ------
ufw enable一执行就失联,务必先确认 - Redis/MySQL 开在公网------数据被清空/勒索的高发原因,必须只监听内网
- 敏感文件暴露 Web 目录 ------
.env/.git泄露等于把密码送到攻击者手里 - 只看进程不看计划任务------删了挖矿程序,后门计划任务还在,几分钟后又回来
- 备份和源数据同机------被入侵/勒索时一起完蛋,必须异地+离线
- 备份不演练恢复------真出事才发现备份是坏的,等于没备
- 指望VPS抗DDoS------流量型攻击必须靠机房,选型阶段就要确认防护能力
- 被入侵后只删文件不重装------深度入侵(有rootkit)应重装系统,别赌没残留
- 从不看登录日志------被爆破了几个月都不知道,定期排查是必修课
结语
服务器安全这件事,核心就四步:
关入口(SSH 加固 + 防火墙)→堵漏洞(更新 + 最小权限 + 数据库不外露)→能发现(入侵检测 + 文件完整性)→保底线(异地离线备份)
对不同场景,我的建议很直接:
- 个人站点/小项目:先把 SSH 和防火墙加固做扎实,加上 fail2ban,成本几乎为零,能挡九成攻击;
- 对外提供服务的业务:全套基线加固 + 定期入侵检测 + 每日异地备份,缺一不可;
- 容易被攻击的业务(游戏服、站群、有竞争关系的行业) :一定选带机房级 DDoS 防护的产品(如带 20Gbps+ 防护的独立服务器)和多 IP 方案。
新机器到手,按这个顺序走一遍就不会裸奔:改 SSH 端口→配密钥登录→关密码登录→开 fail2ban→配 UFW→关数据库公网监听→关无用服务→建文件基线→配异地备份→定期跑入侵检测。
有加固或排查的具体问题,欢迎评论区交流,看到都会回。