服务器安全加固与入侵检测实战:从SSH加固、防火墙策略到挖矿木马排查

说明:本文为服务器安全运维的技术学习笔记,文中配置与方法来自公开官方文档及本人多台实例的实操记录,提及的硬件 / 机房参数来自厂商公开资料与本人实测,请以官方最新信息为准。文中讨论的所有操作均针对自有或已获书面授权的服务器;请勿将相关技术用于未授权探测、入侵他人系统或任何违法违规活动。请在合法合规的前提下使用。

前言

做运维这些年,最让人后背发凉的不是"服务器挂了",而是"服务器不知道什么时候已经被别人用了"。

我处理过的最典型一例:一台对外提供服务的 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 确认被入侵后的应急流程

一旦确认被入侵,不要急着删文件,按顺序处理:

  1. 隔离:先断网或改防火墙策略,防止攻击者继续操作、防止横向扩散;
  2. 取证:保留现场------记录异常进程、网络连接、日志(截图/导出),用于事后分析入口;
  3. 找入口 :翻auth.log、Web访问日志,确定是怎么进来的(弱密码?应用漏洞?);
  4. 清除:删恶意进程、计划任务、后门账号、authorized_keys里的陌生公钥;
  5. 加固:堵上被利用的入口,再恢复服务;
  6. 改密:所有相关密码、密钥全部更换(假设已全部泄露)。

特别注意 :如果被入侵程度较深(有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天未续费,多数平台会释放实例和数据,安全日志、备份务必提前转存或开自动续费。


九、加固检查清单(新机上线必做)

按优先级排序,新机器到手照这个清单跑一遍:

必做(不做等于裸奔)

  1. SSH换非默认端口
  2. 配置密钥登录,关闭密码登录
  3. 禁止root直接密码登录
  4. 开启fail2ban
  5. UFW默认拒绝,只放行必要端口
  6. 数据库/中间件只监听内网,绝不开公网
  7. 设强密码,禁用默认账号

建议做(提升安全水位)

  1. 开启自动安全更新
  2. 内核参数加固(SYN Cookie 等)
  3. Web 层拒绝敏感文件访问(.git/.env/.sql)
  4. 关闭所有无用服务与端口
  5. 安装 rkhunter/chkrootkit 定期扫描
  6. AIDE 建立文件完整性基线

持续做(长期运营)

  1. 每天自动备份 + 异地存储
  2. 定期跑入侵检测命令(登录记录、进程、计划任务)
  3. 半年一次备份恢复演练
  4. 关注服务商安全公告与漏洞信息
  5. 业务被打时确认机房 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 基线
持续:异地备份 + 定期入侵检测
持续:恢复演练 + 关注安全公告

十、避坑清单

  1. SSH 还用默认端口 + 弱密码------被爆破的头号原因,30 分钟就能解决
  2. 改配置后直接重启 SSH------没测试就重启,一个语法错误把自己锁在门外
  3. 防火墙漏放 SSH 端口 ------ufw enable 一执行就失联,务必先确认
  4. Redis/MySQL 开在公网------数据被清空/勒索的高发原因,必须只监听内网
  5. 敏感文件暴露 Web 目录 ------.env/.git 泄露等于把密码送到攻击者手里
  6. 只看进程不看计划任务------删了挖矿程序,后门计划任务还在,几分钟后又回来
  7. 备份和源数据同机------被入侵/勒索时一起完蛋,必须异地+离线
  8. 备份不演练恢复------真出事才发现备份是坏的,等于没备
  9. 指望VPS抗DDoS------流量型攻击必须靠机房,选型阶段就要确认防护能力
  10. 被入侵后只删文件不重装------深度入侵(有rootkit)应重装系统,别赌没残留
  11. 从不看登录日志------被爆破了几个月都不知道,定期排查是必修课

结语

服务器安全这件事,核心就四步:

关入口(SSH 加固 + 防火墙)→堵漏洞(更新 + 最小权限 + 数据库不外露)→能发现(入侵检测 + 文件完整性)→保底线(异地离线备份)

对不同场景,我的建议很直接:

  • 个人站点/小项目:先把 SSH 和防火墙加固做扎实,加上 fail2ban,成本几乎为零,能挡九成攻击;
  • 对外提供服务的业务:全套基线加固 + 定期入侵检测 + 每日异地备份,缺一不可;
  • 容易被攻击的业务(游戏服、站群、有竞争关系的行业) :一定选带机房级 DDoS 防护的产品(如带 20Gbps+ 防护的独立服务器)和多 IP 方案。

新机器到手,按这个顺序走一遍就不会裸奔:改 SSH 端口→配密钥登录→关密码登录→开 fail2ban→配 UFW→关数据库公网监听→关无用服务→建文件基线→配异地备份→定期跑入侵检测。

有加固或排查的具体问题,欢迎评论区交流,看到都会回。

相关推荐
霂鳯1 小时前
新手勇闯网络安全 | MySQL复习
mysql·安全·web安全
对我的心脏有害1 小时前
小心!你的飞书私聊,可能会被人看到
安全
运维行者_1 小时前
供应链安全成最大风险源,企业如何构建可控的运维体系?
运维·开发语言·网络·数据库·安全·云计算·流量监控
pt10432 小时前
Cisco设备网络安全系列-20:DevSecOps集成
网络·安全·架构
安教安全员通关宝2 小时前
2026年河北安全员B证考试题库+答案+解析
安全
数据库小学妹2 小时前
AI Agent连数据库怎么控权限?只读账号的4个缺口
数据库·人工智能·安全·数据库权限·审计·ai数据库·只读账号
小此方2 小时前
C++ 工程组件与基础设施(三)详解RPC服务的概念与安装,图片介绍Brpc服务器和客户端的搭建过程
服务器·c++·rpc
老李IT笔记2 小时前
抹除之后机器上的受管应用可以留下:这一步省掉的是哪段时间
运维·服务器
是真的小外套2 小时前
网络安全实战第12期:三步定位已知漏洞CVE+NSE+searchsploit
安全·web安全