服务器被黑才知道的痛:Linux安全攻防实战笔记,从入侵检测到应急响应全记录

前言:为什么你的Linux服务器总在“裸奔”?

💡 推荐阅读:每天5分钟玩转Docker容器技术:从零基础到独立部署的实战手记

很多朋友买完云服务器,第一件事就是装环境、跑业务,至于安全配置,往往一句“应该没事吧”就带过了。直到某天登录服务器,发现CPU跑满、带宽被占尽,或者收到云厂商的“异地登录告警”短信,才惊觉大事不妙。

作为一家常年与恶意扫描器、爆破脚本打交道的团队(站长运维组),我们见过太多因为疏于防范导致的惨痛案例。今天这篇文章,不聊虚的,直接上硬货。笔者将结合真实攻防经验,带你从攻击者的视角审视自己的服务器,并给出可以直接复制执行的加固与应急方案。

一、攻击者的第一板斧:端口扫描与暴力破解

💡 延伸阅读:别再只看CPU核数了!决定云服务器运算性能的,其实是这五个细节

1.1 别让你的SSH端口暴露在公网

默认的22端口是扫描器的“最爱”。攻击者使用nmapmasscan扫全网,只要发现22端口开放,就会立刻挂上字典跑hydramedusa进行暴力破解。

实战加固建议:

  • 修改默认端口:编辑 /etc/ssh/sshd_config,将 Port 22 改为 Port 55221(五位数高位端口)。
  • 禁用Root直接登录: 设置 PermitRootLogin no,日常使用普通用户 + sudo 提权。
  • 启用密钥认证: 关闭密码登录 PasswordAuthentication no,私钥文件务必设置强密码。
# 生成密钥对(本地执行)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 上传公钥到服务器
ssh-copy-id -p 55221 user@your_server_ip

1.2 使用Fail2ban实施“自动反击”

光改端口还不够,对于内网渗透或定向攻击,我们需要动态防御。Fail2ban 通过扫描日志,对多次尝试失败的IP进行临时封禁。

# Debian/Ubuntu安装
apt install fail2ban -y
# CentOS/RHEL安装
yum install fail2ban -y

# 配置jail.local
cat > /etc/fail2ban/jail.local <<EOF
[sshd]
enabled = true
port = 55221
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
EOF

systemctl restart fail2ban

配合iptablesfirewalld,Fail2ban能自动写入DROP规则,让恶意IP直接超时,极大消耗扫描器的资源池。

二、文件权限与Web层攻击:别让上传点变成后门

💡 深度技术指南:别再被“高科技”唬住了,一文看懂Docker容器到底是干嘛的(附上手实操)

2.1 警惕WebShell与文件上传漏洞

如果你的服务器运行着PHP或Java应用,文件上传是最大的风险敞口。攻击者通常会尝试上传一句话木马(如 shell.php)或图片马。

关键目录权限设置:

目录/文件 建议权限 说明
Web根目录(/var/www/html) 755 root:root 主目录只读,禁止写入
上传目录(/uploads) 755 www-data:www-data 仅允许写入,禁止执行PHP
配置文件(.env / config.php) 600 root:root 严禁Web用户读取敏感信息
# 禁止uploads目录执行PHP脚本(Nginx示例)
location ~* /uploads/.*\.(php|php5)$ {
    deny all;
}

2.2 锁定关键文件属性

利用 chattr 命令将关键文件设置为不可修改,即使攻击者拿到root权限,也无法篡改或删除。

# 锁定/etc/passwd和/etc/shadow
chattr +i /etc/passwd
chattr +i /etc/shadow
# 解除锁定
chattr -i /etc/passwd

这一招对防御勒索病毒和篡改类攻击非常有效,很多攻击者拿到权限后执行 rm -rf 会发现“Operation not permitted”。

三、入侵检测:如何发现“隐形”的敌人?

3.1 检查系统登录痕迹

攻击者总会留下蛛丝马迹。我们需要定期审查登录日志。

# 查看最近成功登录记录
last -n 20
# 查看所有用户的最后登录时间
lastlog

# 检查当前登录用户及其来源IP
who
# 检查登录失败记录(暴力破解痕迹)
grep "Failed password" /var/log/auth.log | tail -n 20

如果发现来自境外或异常地区的IP连接,应立即使用 netstat -tnpa | grep ESTABLISHED 查看实时连接。

3.2 利用RKHunter扫描Rootkit

Rootkit是攻击者用来隐藏踪迹的利器。建议安装 rkhunter 进行定期扫描。

apt install rkhunter -y
# 更新特征库
rkhunter --update
# 全盘扫描
rkhunter --check --skip-keypress

重点关注输出中的 Warning 项,特别是关于 Hidden filesSuspect files 的告警。

四、核心防御:系统内核与账户安全

4.1 账户口令策略

弱口令是Linux服务器被黑的首要原因。设置强密码策略并定期更换是必须的。

# 安装密码质量库
apt install libpam-pwquality -y

# 配置密码策略(/etc/pam.d/common-password)
password requisite pam_pwquality.so retry=3 minlen=12 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1

上述配置要求密码最少12位,且必须包含数字、大写字母、小写字母和特殊字符。

4.2 使用SELinux或AppArmor

很多云服务器默认关闭了SELinux。虽然开启会带来一些兼容性问题,但它能有效限制进程的越权行为。

# 查看SELinux状态
getenforce
# 临时启用(Enforcing)
setenforce 1
# 永久启用(修改配置文件)
sed -i 's/SELINUX=disabled/SELINUX=enforcing/' /etc/selinux/config

如果担心影响业务,可以先使用 permissive 模式运行一段时间,观察日志中是否有违规操作,再决定是否强制开启。

五、应急响应:当服务器真的被攻破时

假设你发现服务器已经被入侵,不要慌,按照以下步骤进行“止血”。

5.1 立即隔离网络

在云厂商控制台(如站长的安全组),将服务器出方向规则全部拒绝,仅保留SSH管理端口。如果是内网机器,直接断开网线或拔掉虚拟交换机。

5.2 保留证据并排查后门

# 查看历史命令(攻击者可能使用过)
history
# 查看当前所有用户的计划任务
for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l 2>/dev/null; done

# 检查SSH授权密钥(重点排查)
cat /root/.ssh/authorized_keys
cat /home/*/.ssh/authorized_keys

重点关注 authorized_keys 文件中是否有多余的陌生公钥。攻击者经常通过添加公钥来维持长期权限。

5.3 重装系统是最稳妥的方案

如果核心业务数据被加密,或者系统文件被大面积篡改,建议直接备份数据后重装系统。不要抱有侥幸心理,手动清除后门往往会有遗漏。

结语:安全是动态的过程

Linux安全攻防不是装一个安全软件就一劳永逸的事情。它需要你保持对日志的敏感度,及时更新系统补丁。对于个人开发者或中小企业来说,选择一家提供基础安全防护的云厂商(如站长)能省去很多麻烦,其自带的安全组和云防火墙功能,能帮你拦截大部分流量层攻击。但请记住,最坚固的防线永远是你自己的运维习惯。希望这篇文章能帮你少走一些弯路。

相关技术专题与延伸阅读

💡 【高性价比独享云服务器限时 1 折起】

新手搭建网站或部署容器,推荐选择高性价比独享云服务器。点击下方通道可享受限时折扣与专属优惠券:

👉 点此前往领取云服务器限时优惠券

🎁 全套实操配置文件与 AI 提效资料包免费下载

本文涉及的全套 Docker Compose 配置文件、服务器运维避坑手册及 AI 提效指令库已完整打包上传至夸克网盘,可直接免费极速转存:

👉 点击前往夸克网盘免费极速转存获取

💡 提示:推荐使用手机【夸克网盘 App】打开保存,新用户首月免费赠送 1TB 超大空间与免流量极速下载特权。

滚动至顶部