从零加固一台 Linux 服务器:防止被入侵与被当肉鸡的 20 项检查
一台暴露在公网的服务器,从开机到被扫描器盯上平均只需要 几十秒。暴力破解、漏洞利用、挖矿木马、代理肉鸡……攻击是全自动的,防守也必须全自动。本文给出我在生产环境落地的 20 项加固清单,覆盖 SSH、防火墙、内核、进程与更新五个层面。
先做备份。任何加固操作前,先确认有回滚手段:云厂商快照、关键配置 tar 归档、能进入救援模式。加固是为了防别人,别先把自己锁在外面。
一、SSH:第一道也是最重要的一道门
1. 改用密钥登录并禁用密码
# 本地生成密钥(Ed25519 优于 RSA)
ssh-keygen -t ed25519 -C "server-admin"
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@SERVER_IP
# 确认能密钥登录后:
vim /etc/ssh/sshd_config
PasswordAuthentication no
PermitRootLogin prohibit-password
禁用密码登录后,暴力破解直接失效。保留 root 密钥登录,日常操作建议再建普通用户 + sudo。
2. 限制重试与空闲断开
MaxAuthTries 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2
二、防火墙:默认拒绝一切入站
3. UFW 白名单策略
apt install ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp # SSH
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
ufw enable
原则:只开必要的端口。数据库、Redis、管理后台一律只监听 127.0.0.1,绝不暴露公网。
4. fail2ban 自动封禁
apt install fail2ban
# /etc/fail2ban/jail.local
[sshd]
enabled = true
maxretry = 5
bantime = 1h
findtime = 10m
被扫到连续失败 5 次即封禁一小时,配合 UFW 动作实现 IP 级拦截。
三、内核:堵住协议层漏洞
5. sysctl 加固配置
# /etc/sysctl.d/99-hardening.conf
net.ipv4.tcp_syncookies = 1 # SYN Flood 防护
net.ipv4.conf.all.rp_filter = 1 # 反地址欺骗
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.log_martians = 1
kernel.randomize_va_space = 2 # ASLR 强化
kernel.kptr_restrict = 1
fs.suid_dumpable = 0 # 禁止特权进程产生 core dump
sysctl --system
四、进程与文件:识别肉鸡化的痕迹
6. 高危进程排查
ps aux --sort=-%cpu | head -20
# 挖矿木马关键词
ps aux | grep -iE 'xmrig|minerd|kdevtmpfsi|kinsing'
7. 计划任务审计
crontab -l && ls -la /etc/cron.d/ /etc/cron.daily/
肉鸡木马最常见的持久化手段就是写 cron 每分钟拉取新负载,看到陌生 URL 的 cron 立刻清掉。
8. 端口与连接审计
ss -tlnp # 谁在监听
ss -tnp | head # 谁在向外连(可疑外连 = 数据外传)
五、更新与基线:让漏洞无处可钻
9. 开启自动安全更新
apt install unattended-upgrades
dpkg-reconfigure unattended-upgrades # 选择 yes
10. 最小化攻击面
- 卸载/停用用不到的服务(本机例子:iSCSI、FTP、Telnet)
- Nginx 隐藏版本号、拒绝访问
.env/.git等敏感路径 - Docker 容器数据库端口只绑定
127.0.0.1,不映射到0.0.0.0 - 定期
docker logs/journalctl检查异常登录
六、日常巡检三件套
| 工具 | 用途 | 频率 |
|---|---|---|
| fail2ban-client status | 查看封禁统计 | 每周 |
| ss -tlnp | 端口变化监控 | 每周 |
| ps aux --sort=-%cpu | CPU 异常(挖矿特征) | 每日 |
总结。安全不是一次性工程,而是「默认拒绝 + 最小权限 + 持续监控」的循环。先做 SSH 密钥化、UFW、fail2ban、自动更新这四件套,你就已经挡住了 90% 的自动化攻击。
#Linux#安全加固#运维#DevOps