服务器安全加固与入侵检测实战,30分钟加固,挡住九成攻击

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

前言

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

我处理过的最典型一例:一台对外提供服务的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",而是把低门槛的入口堵死——这一步就能挡掉九成以上的自动化攻击。


二、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,取决于你选的服务商和机房,这是选型阶段就要问清楚的。

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. 设强密码,禁用默认账号

建议做(提升安全水位)8. 开启自动安全更新 9. 内核参数加固(SYN Cookie等) 10. Web层拒绝敏感文件访问(.git/.env/.sql) 11. 关闭所有无用服务与端口 12. 安装rkhunter/chkrootkit定期扫描 13. AIDE建立文件完整性基线

持续做(长期运营)14. 每天自动备份+异地存储 15. 定期跑入侵检测命令(登录记录、进程、计划任务) 16. 半年一次备份恢复演练 17. 关注服务商安全公告与漏洞信息 18. 业务被打时确认机房DDoS防护策略


十、避坑清单

  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→关数据库公网监听→关无用服务→建文件基线→配异地备份→定期跑入侵检测。

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

posted @ 2026-10-30 21:57  前端已挂  阅读(2)  评论(0)    收藏  举报