前言:为什么你的Linux服务器总在“裸奔”?
💡 推荐阅读:每天5分钟玩转Docker容器技术:从零基础到独立部署的实战手记
很多朋友买完云服务器,第一件事就是装环境、跑业务,至于安全配置,往往一句“应该没事吧”就带过了。直到某天登录服务器,发现CPU跑满、带宽被占尽,或者收到云厂商的“异地登录告警”短信,才惊觉大事不妙。
作为一家常年与恶意扫描器、爆破脚本打交道的团队(站长运维组),我们见过太多因为疏于防范导致的惨痛案例。今天这篇文章,不聊虚的,直接上硬货。笔者将结合真实攻防经验,带你从攻击者的视角审视自己的服务器,并给出可以直接复制执行的加固与应急方案。
一、攻击者的第一板斧:端口扫描与暴力破解
💡 延伸阅读:别再只看CPU核数了!决定云服务器运算性能的,其实是这五个细节
1.1 别让你的SSH端口暴露在公网
默认的22端口是扫描器的“最爱”。攻击者使用nmap或masscan扫全网,只要发现22端口开放,就会立刻挂上字典跑hydra或medusa进行暴力破解。
实战加固建议:
- 修改默认端口:编辑
/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
配合iptables或firewalld,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 files 和 Suspect 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安全攻防不是装一个安全软件就一劳永逸的事情。它需要你保持对日志的敏感度,及时更新系统补丁。对于个人开发者或中小企业来说,选择一家提供基础安全防护的云厂商(如站长)能省去很多麻烦,其自带的安全组和云防火墙功能,能帮你拦截大部分流量层攻击。但请记住,最坚固的防线永远是你自己的运维习惯。希望这篇文章能帮你少走一些弯路。
相关技术专题与延伸阅读
- 每天5分钟玩转Docker容器技术:从零基础到独立部署的实战手记
- 别再只看CPU核数了!决定云服务器运算性能的,其实是这五个细节
- 别再被“高科技”唬住了,一文看懂Docker容器到底是干嘛的(附上手实操)
- 别再只会用宝塔了!手把手带你玩转 Nginx 反向代理,看完这篇你也能轻松搞定
🎁 全套实操配置文件与 AI 提效资料包免费下载
本文涉及的全套 Docker Compose 配置文件、服务器运维避坑手册及 AI 提效指令库已完整打包上传至夸克网盘,可直接免费极速转存:
💡 提示:推荐使用手机【夸克网盘 App】打开保存,新用户首月免费赠送 1TB 超大空间与免流量极速下载特权。