在公有云环境下,虽然厂商提供了安全组和 DDoS 防护,但主机本身的安全(Host Security)依然是用户的责任。一旦攻击者突破边界防火墙,裸奔的 Linux 主机就是待宰的羔羊。
本文整理了一份标准化的 Linux 主机安全加固清单(Hardening Checklist),适用于生产环境的初始化配置。
1. 账户与认证安全
身份认证是第一道大门。
1.1 SSH 强化配置
修改 /etc/ssh/sshd_config:
- 禁止 Root 登录:
PermitRootLogin no。强制使用普通用户登录后sudo。 - 禁用密码认证:
PasswordAuthentication no。仅允许 SSH Key 密钥认证,彻底杜绝暴力破解。 - 修改默认端口: 将 Port 22 修改为高位端口(如 22222),减少扫描噪音(虽然不能防定点攻击,但能防脚本小子)。
- 限制重试次数:
MaxAuthTries 3。
1.2 密码策略
虽然禁用了 SSH 密码登录,但本地 sudo 仍需密码。使用 pam_pwquality 模块强制复杂度:
- 最小长度 12 位。
- 必须包含大小写字母、数字和特殊符号。
- 定期轮换(例如 90 天)。
2. 最小权限原则
2.1 Sudo 权限控制
不要给所有人都配置 ALL=(ALL) NOPASSWD: ALL。
- 精细化授权: 只给开发人员开启特定命令的 sudo 权限(如重启服务、查看日志),禁止
su或visudo。 - 审计: 所有的 sudo 操作都会记录在
/var/log/secure或/var/log/auth.log中,必须接入日志审计系统。
2.2 文件系统权限
- UMASK: 设置默认
umask 027,确保新建文件对“其他组”不可写。 - SUID/SGID: 查找并移除不必要的 SUID 程序(如
ping,mount如果业务不需要)。这些程序以 root 权限运行,若有漏洞极易提权。find / -type f -perm -4000 -o -perm -2000
3. 网络与服务加固
3.1 最小化服务
- 关闭不必要的端口: 使用
netstat -tulpn检查。停用 Postfix (25), RPC (111) 等非业务必须服务。 - 本地监听: 对于仅供本机使用的服务(如 Redis, MongoDB),配置
bind 127.0.0.1,防止监听 0.0.0.0 暴露到外网。
3.2 主机防火墙 (Iptables/Firewalld)
即使有云安全组,主机防火墙也是必要的第二道防线(Defense in Depth)。
- 默认策略设置为 DROP。
- 仅放行已知的业务端口和管理端口。
- 配置连接频率限制(Rate Limit)防止 DoS。
4. 入侵检测与审计
4.1 关键文件完整性 (AIDE)
使用 AIDE (Advanced Intrusion Detection Environment) 监控 /bin, /sbin, /etc 等目录。一旦系统文件被篡改(如被植入 Rootkit),立即告警。
4.2 历史命令记录
黑客入侵后通常会清除 ~/.bash_history。
- 加固: 设置
HISTCONTROL=ignoredups,增加HISTSIZE。 - 实时传输: 使用
PROMPT_COMMAND将操作实时通过 Syslog 发送到远程日志服务器,防止本地痕迹被抹除。
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
5. 总结
安全加固没有终点,它是一个持续对抗的过程。除了上述配置,及时修补内核漏洞(Kernel Patching)同样重要。建议建立自动化的基线扫描机制(如使用 OpenSCAP 或 CIS Benchmark),定期检查所有服务器的合规性,确保安全策略不随时间漂移。