运维人手一份:从 SSH 到 K8s 的实战安全基线,Checklist + 一键脚本

一、为什么这套清单值得你立刻执行

  • 暴力破解、弱口令、未打补丁、SSH 暴露面过大,是服务器被入侵的高频路径;容器与 K8s 若缺少 RBAC、网络策略、准入控制,一旦失陷极易横向扩散。
  • 本清单覆盖从 SSH 登录审计 → Fail2ban → 最小权限 → 防火墙 → 补丁策略 → 密钥登录 → 容器/K8s 基线 的闭环,提供可验证的 Checklist一键脚本,照着做即可显著降低风险。

运维人手一份:从 SSH 到 K8s 的实战安全基线,Checklist + 一键脚本

二、Linux 主机加固 Checklist(可直接照表执行)

类别

检查项

期望状态

验证命令/方法

身份与权限

创建普通用户并加入 sudo

已创建且可用

id <user>;sudo -l

身份与权限

禁止 root 直登 SSH

PermitRootLogin no

grep -E '^PermitRootLogin' /etc/ssh/sshd_config

SSH 认证

强制密钥登录、禁用密码

PubkeyAuthentication yes;PasswordAuthentication no

grep -E '^(Pubkey

SSH 访问

限制可登录用户/组

AllowUsers/AllowGroups 已配置

grep -E '^(AllowUsers

SSH 韧性

限制认证尝试与超时

MaxAuthTries 3;LoginGraceTime 30

grep -E '^(MaxAuthTries

登录审计

记录认证日志

日志正常写入

tail -n50 /var/log/auth.log 或 /var/log/secure

暴力破解防护

部署 Fail2ban

服务 Active;SSH 监狱启用

systemctl status fail2ban;fail2ban-client status sshd

防火墙

默认拒绝入站、仅放行必需端口

策略生效

ufw status verbose 或 firewall-cmd –list-all

端口最小化

关闭无用端口/服务

无多余监听

ss -tulnp;systemctl list-units –type=service –state=running

补丁策略

系统与关键软件及时更新

无安全更新积压

apt list –upgradable 或 yum check-update;必要时配置自动安全更新

系统防护

启用 SELinux/AppArmor

Enforcing/相应策略生效

getenforce 或 aa-status

审计与完整性

启用 auditd、部署 AIDE

审计规则就位;AIDE 数据库初始化

auditctl -l;aide –check

文件系统

关键目录权限最小化

如 /etc/shadow 600

stat -c '%a %U:%G' /etc/shadow

说明:

  • SSH 提议禁用密码、禁用 root 直登、限制登录用户、缩短认证超时,并配合 Fail2ban 动态封禁,能显著降低自动化爆破成功率。
  • 防火墙遵循“默认拒绝、按需放行”,仅开放 SSH/80/443 等必要端口;端口最小化与冗余服务关闭可缩小攻击面。
  • 补丁与安全更新应常态化;SELinux/AppArmor 提供强制访问控制;auditd 与 AIDE 负责审计与文件完整性校验。

运维人手一份:从 SSH 到 K8s 的实战安全基线,Checklist + 一键脚本

三、一键脚本 Harden.sh(先备份、再执行、保留控制台会话)

  • 使用说明
    • root 或具备 sudo 权限执行;脚本会交互确认关键变更(如禁用密码登录)。
    • 先保留当前 SSH 会话,新开一个终端测试登录后再退出旧会话,避免锁死。
    • 自定义变量:SSH_PORT(默认 22022)、ALLOW_USERS(如 admin)、F2B_BANTIME(如 86400 秒)。
#!/usr/bin/env bash
set -Eeuo pipefail

# ===== 可配置参数 =====
SSH_PORT="${SSH_PORT:-22022}"
ALLOW_USERS="${ALLOW_USERS:-admin}"
F2B_BANTIME="${F2B_BANTIME:-86400}"   # 封禁 24h

# ===== 工具与发行版检测 =====
if command -v apt-get >/dev/null 2>&1; then
  PKG="apt-get -y install"
  UPDATE="apt-get update"
elif command -v yum >/dev/null 2>&1; then
  PKG="yum -y install"
  UPDATE="yum makecache"
elif command -v dnf >/dev/null 2>&1; then
  PKG="dnf -y install"
  UPDATE="dnf makecache"
else
  echo "Unsupported OS"; exit 1
fi

# ===== 备份函数 =====
backup() {
  local f="$1"
  [[ -f $f ]] && cp -a "$f" "$f.bak-$(date +%F-%H%M%S)"
}

# ===== 主流程 =====
echo "[+] 开始安全加固(SSH 端口: $SSH_PORT)"

# 0) 更新索引
$UPDATE

# 1) 基础工具
$PKG fail2ban ufw aide || true

# 2) UFW 防火墙(按需开启,示例仅放行 SSH/HTTP/HTTPS)
ufw default deny incoming
ufw default allow outgoing
ufw allow "$SSH_PORT"/tcp
ufw allow 80/tcp
ufw allow 443/tcp
yes | ufw enable || true

# 3) SSH 加固
backup /etc/ssh/sshd_config
sed -i "s/^#*Port .*/Port $SSH_PORT/" /etc/ssh/sshd_config
sed -i 's/^#*PermitRootLogin .*/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/^#*PasswordAuthentication .*/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/^#*PubkeyAuthentication .*/PubkeyAuthentication yes/' /etc/ssh/sshd_config
sed -i 's/^#*MaxAuthTries .*/MaxAuthTries 3/' /etc/ssh/sshd_config
sed -i 's/^#*LoginGraceTime .*/LoginGraceTime 30/' /etc/ssh/sshd_config
grep -q '^AllowUsers' /etc/ssh/sshd_config || echo "AllowUsers $ALLOW_USERS" >> /etc/ssh/sshd_config

# 4) Fail2ban SSH 监狱
cat >/etc/fail2ban/jail.local <<EOF
[DEFAULT]
bantime = $F2B_BANTIME
findtime = 600
maxretry = 3
ignoreip = 127.0.0.1/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16

[sshd]
enabled = true
port = $SSH_PORT
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = $F2B_BANTIME
EOF
systemctl enable --now fail2ban

# 5) 系统更新与自动安全更新
if command -v unattended-upgrades >/dev/null 2>&1; then
  dpkg-reconfigure -plow unattended-upgrades || true
elif command -v dnf-automatic >/dev/null 2>&1; then
  systemctl enable --now dnf-automatic.timer || true
fi

# 6) 审计与完整性
systemctl enable --now auditd || true
if command -v aide >/dev/null 2>&1; then
  aide --init && mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
  echo "0 2 * * * /usr/bin/aide --check | /usr/bin/tee /var/log/aide_check.log" | crontab -
fi

# 7) 提示
echo "[+] 加固完成。请在新窗口测试 SSH 登录(端口 $SSH_PORT),确认无误后再关闭当前会话。"
echo "    如需回滚,请检查各 .bak-* 文件与 /etc/fail2ban/jail.local 配置。"

使用方法:

  • 保存为 Harden.sh,赋权并执行:chmod +x Harden.sh && sudo ./Harden.sh
  • 加固要点:禁用密码前务必先配置好 SSH 密钥登录;Fail2ban 的 logpathRHEL/CentOS 一般为 /var/log/secure;如需放行公司网段,请在 UFW/firewalld 中先行添加白名单。

运维人手一份:从 SSH 到 K8s 的实战安全基线,Checklist + 一键脚本

四、容器与 K8s 安全基线 Checklist

领域

检查项

期望状态

验证/工具

镜像与准入

镜像漏洞扫描 + 准入控制拦截高风险镜像

未授权/高危镜像无法部署

镜像扫描器 + 准入控制器(如 OPA/Gatekeeper、Kyverno)

运行时检测

容器异常行为检测

规则命中即告警/阻断

Falco

Pod 安全

启用 Pod Security Admission(替代 PSP)

namespace 打标签启用 restricted

kubectl get ns –show-labels

网络策略

命名空间/应用间微分段

默认拒绝,按需放行

kubectl get networkpolicy -A

Kubelet

关闭匿名访问、启用 RBAC、NodeRestriction

–anonymous-auth=false;–authorization-mode=Webhook

kubelet 配置与 API 审计

控制面与 etcd

CIS 基线核查

关键项 PASS

kube-bench(CIS Benchmark)

审计与取证

API 审计日志开启与留存

审计记录完整

集群审计策略与日志后端

说明:

  • 提议以 CIS Kubernetes Benchmark 为准绳,使用 kube-benchControlPlane/etcd/Node 逐项核查并整改,形成持续合规机制。
  • 通过 准入控制 强制执行镜像安全与配置基线,在部署阶段阻断风险;运行时用 Falco 检测异常系统调用与可疑行为。
  • RBAC 最小化授权,配合 Pod Security AdmissionNetworkPolicy 实现“默认拒绝、按需放行”的零信任姿态。

运维人手一份:从 SSH 到 K8s 的实战安全基线,Checklist + 一键脚本

五、落地实施与运维提议

  • 分阶段推进:先非侵入项(更新、防火墙、Fail2ban、审计),再关键项(禁用密码、密钥登录、最小权限),最后做 K8s 基线;每一步都保留回滚方案。
  • 变更风险控制:修改 sshd_config 前先备份;新开终端验证登录成功再关闭旧会话;Fail2ban 规则与防火墙策略变更要可回滚。
  • 持续监测与演练:聚焦采集 auth.log/secure、Fail2ban、auditd、K8s 审计日志;定期做备份恢复演练与基线复测,形成闭环。

六、风险提示与免责声明

  • 本清单与脚本涉及生产系统变更,请在测试环境验证后再上线;操作前务必完整备份保留应急会话
  • 禁用密码登录、调整防火墙策略、变更 K8s 准入/安全策略,可能导致业务中断或访问受阻;请结合贵司变更流程与回滚预案执行。
  • 安全是一个持续过程,需结合日志分析、漏洞通告与合规要求定期复盘与优化
© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容