一、为什么这套清单值得你立刻执行
- 暴力破解、弱口令、未打补丁、SSH 暴露面过大,是服务器被入侵的高频路径;容器与 K8s 若缺少 RBAC、网络策略、准入控制,一旦失陷极易横向扩散。
- 本清单覆盖从 SSH 登录审计 → Fail2ban → 最小权限 → 防火墙 → 补丁策略 → 密钥登录 → 容器/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 负责审计与文件完整性校验。

三、一键脚本 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 的 logpath 在 RHEL/CentOS 一般为 /var/log/secure;如需放行公司网段,请在 UFW/firewalld 中先行添加白名单。

四、容器与 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-bench 对 ControlPlane/etcd/Node 逐项核查并整改,形成持续合规机制。
- 通过 准入控制 强制执行镜像安全与配置基线,在部署阶段阻断风险;运行时用 Falco 检测异常系统调用与可疑行为。
- 以 RBAC 最小化授权,配合 Pod Security Admission 与 NetworkPolicy 实现“默认拒绝、按需放行”的零信任姿态。

五、落地实施与运维提议
- 分阶段推进:先非侵入项(更新、防火墙、Fail2ban、审计),再关键项(禁用密码、密钥登录、最小权限),最后做 K8s 基线;每一步都保留回滚方案。
- 变更风险控制:修改 sshd_config 前先备份;新开终端验证登录成功再关闭旧会话;Fail2ban 规则与防火墙策略变更要可回滚。
- 持续监测与演练:聚焦采集 auth.log/secure、Fail2ban、auditd、K8s 审计日志;定期做备份恢复演练与基线复测,形成闭环。
六、风险提示与免责声明
- 本清单与脚本涉及生产系统变更,请在测试环境验证后再上线;操作前务必完整备份与保留应急会话。
- 禁用密码登录、调整防火墙策略、变更 K8s 准入/安全策略,可能导致业务中断或访问受阻;请结合贵司变更流程与回滚预案执行。
- 安全是一个持续过程,需结合日志分析、漏洞通告与合规要求定期复盘与优化。

















暂无评论内容