面向实战的 Linux 服务器安全加固清单,覆盖SSH 入口防护、最小权限、补丁与防火墙、日志审计、备份恢复等关键环节。所有配置均给出可直接落地的命令与参数,并兼顾可用性与可回滚,适合上线前自检与日常巡检。
一、为什么你的服务器总在被暴力破解
- 默认端口22与root可登录是最常见的“欢迎页”,配合弱口令或字典攻击,极易被自动化脚本批量尝试。
- 密码认证一旦开启,配合脚本工具(如 Hydra、Medusa)即可对成千上万 IP 进行“密码喷洒”。
- 即便更改端口,若仍允许密码登录、无失败锁定与告警,攻击依旧有效。
- 结论:把“入口”收敛到密钥登录 + 限制用户 + 自动封禁,才能从源头降压。
二、10 分钟快速加固清单(可直接复制执行)
- SSH 入口收敛(先开新窗测试,确保新端口可连后再切换)
- 生成密钥(推荐 Ed25519):ssh-keygen -t ed25519 -C "you@example.com"
- 上传公钥:ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
- 修改配置 /etc/ssh/sshd_config:
- Port 2222(示例高位端口)
- PermitRootLogin no
- PasswordAuthentication no
- PubkeyAuthentication yes
- MaxAuthTries 3;ClientAliveInterval 300;ClientAliveCountMax 2
- AllowUsers deploy admin(按需收紧)
- 可选:禁用转发与弱算法(AllowTcpForwarding no;X11Forwarding no;KexAlgorithms/ Ciphers/ MACs 选强套件)
- 重启服务:systemctl restart sshd
- 防火墙放行新端口(示例):ufw allow 2222/tcp 或 iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
- 自动拦截暴力破解
- 安装与启用 Fail2ban(Debian/Ubuntu):apt update && apt install -y fail2ban
- 配置 /etc/fail2ban/jail.local(示例):
- [DEFAULT] bantime=3600;findtime=600;maxretry=3;ignoreip=127.0.0.1/8 10.0.0.0/8
- [sshd] enabled=true;port=2222;logpath=/var/log/auth.log;maxretry=3;bantime=86400
- 启动:systemctl enable --now fail2ban
- 最小权限与 sudo 治理
- 禁止空密码与多余账户:passwd -l <user>;检查空口令 awk -F: '($2==""){print $1}' /etc/shadow
- 精细化 sudo:visudo 仅授予必要命令,如:
- deploy ALL=(www-data) NOPASSWD: /usr/bin/systemctl restart apache2
- 定期审计:sudo -l -U <user>;sudo visudo -c
- 系统与内核安全基线
- 及时更新:apt update && apt upgrade -y(或 yum/dnf 等价命令)
- 内核防护(/etc/sysctl.conf):
- kernel.dmesg_restrict=1;kernel.kptr_restrict=2;kernel.yama.ptrace_scope=1
- net.ipv4.conf.all.log_martians=1;net.ipv4.icmp_echo_ignore_broadcasts=1
- 可选:启用 SELinux/AppArmor 强制访问控制
- 文件与目录权限
- 关键文件:chmod 644 /etc/passwd;chmod 600 /etc/shadow;chmod 440 /etc/sudoers
- 家目录与密钥:chmod 700 ~/.ssh;chmod 600 ~/.ssh/id_;chmod 644 ~/.ssh/.pub
- 日志、审计与监控
- 审计关键文件:auditctl -w /etc/passwd -p wa -k passwd_changes;auditctl -w /var/log/auth.log -p wa -k ssh_access
- 实时查看:journalctl -f -u ssh
- 日志轮转:/etc/logrotate.d/sshd 示例(每周轮转、保留 52 周、压缩)
- 防火墙与网络最小暴露
- UFW:ufw default deny incoming;ufw allow 2222/tcp,80/tcp,443/tcp;ufw enable
- 或 iptables:仅放行 lo、已建立连接、以及业务端口,其余默认 DROP
- 备份与恢复演练
- 原则:3-2-1(3 份副本、2 种介质、1 份异地/离线)
- 示例:rsync -aAX --delete /data/ backup@remote:/backup/$(date +%F);定期恢复演练验证可用性
三、进阶加固与可观测性(按需启用)
- 双因素认证(2FA)
- PAM + Google Authenticator:apt install -y libpam-google-authenticator;每个用户执行 google-authenticator 生成密钥;在 /etc/pam.d/sshd 追加一行:auth required pam_google_authenticator.so
- 文件完整性监控(AIDE)
- 初始化:aide --init;mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
- 周期检查:aide --check(配合 cron 与告警)
- Web 服务安全头(Nginx 示例)
- server_tokens off;add_header X-frame-Options DENY;add_header X-Content-Type-Options nosniff;add_header X-XSS-Protection "1; mode=block"
- 容器与云原生场景
- Docker 最小权限:docker run --read-only --tmpfs /tmp --security-opt=no-new-privileges --cap-drop=ALL --cap-add=NET_BIND_SERVICE --user 1000:1000 app
- 云上:严格 IAM 最小权限、安全组白名单、KMS 加密与密钥轮换、镜像与运行时安全基线
四、一键自检脚本与常见误区
- 一键自检脚本(复制保存为 check_sec.sh,chmod +x 后执行)
- 检查 SSH 关键项:grep -E '^(PermitRootLogin|PasswordAuthentication|Port|Protocol)' /etc/ssh/sshd_config
- 检查空口令:awk -F: '($2=="" || $2=="!") && $1 != "root" {print "空口令: "$1}' /etc/shadow
- 检查 SSH 失败登录:grep "Failed password" /var/log/auth.log | tail -20
- 检查监听端口:ss -tulpen | grep -E '(:22|:2222)'
- 检查防火墙状态:ufw status verbose 或 iptables -S
- 检查 sudo 权限:sudo -l -U $(whoami)
- 常见误区
- 只改端口不改认证方式(仍允许密码)
- 直接禁用防火墙或不做出站策略
- root 可登录 + 密钥/口令并存
- 备份不演练、不可回滚
- 有告警但不处置、无变更留痕
五、30 天落地计划与工具清单
- 第 1 周:完成“快速加固清单”,上线 Fail2ban、UFW/iptables、SSH 密钥登录与 sudo 收敛;做一次全量备份与恢复演练。
- 第 2 周:补齐审计与完整性(auditd/AIDE)、日志轮转与集中化采集;建立基线报表(用户、端口、进程、权限)。
- 第 3 周:按需启用 2FA、容器最小权限、Web 安全头;做一次渗透测试或红队演练的“蓝队复盘”。
- 第 4 周:把以上检查写入 Ansible/脚本,纳入CI/CD 或 GitOps;建立“变更—审计—告警—回滚”的闭环。
- 工具清单:fail2ban、ufw/iptables、auditd/aide、logrotate/journalctl、ssh-keygen、rsync、Ansible。
结语
安全不是一次性工程,而是围绕最小权限、纵深防御、持续监测与快速恢复的持续迭代。把上面的清单变成你的“上线前必做”和“每周例行”,就能把绝大多数自动化攻击挡在门外,并为业务连续性提供坚实底座。
