SuperAPI AI 工具集

server-security-init-skill

安全与审计

查看项目

更新于 10-15 14:03

技能介绍

用途

server-security-init-skill 是一个 AI 智能体技能,用于指导用户安全地初始化和加固全新的 Ubuntu/Debian SSH 服务器。它通过分阶段的引导流程,逐步完成从公钥登录到防火墙、fail2ban 的配置,并在每一步进行验证,防止因配置失误导致服务器被锁定。

主要能力

该技能提供以下方面的指导:

  • 公钥 SSH 引导,避免在命令、日志或配置文件中暴露 root 密码
  • 分阶段 SSH 加固,在禁用旧访问路径前先验证非 root sudo 登录可用
  • UFW 防火墙设置,默认拒绝入站并显式允许所需端口
  • Fail2ban jail 配置,用于 SSH 暴力破解防护,并支持管理 IP 例外
  • Debian 12/systemd socket 检查,防止 ssh.socket 静默地将 SSH 保持在旧端口
  • 使用 ss -ltnp、sshd -T、systemctl 和 ufw status 进行服务器端验证
  • 针对 fail2ban 封禁、防火墙错误和 SSH 监听不匹配的恢复检查

使用方式

该技能应通过将 server-security-init/ 目录复制到 AI 智能体的用户级技能目录来安装。

对于 AI 智能体:

  • 仅安装 server-security-init/ 目录,而非仓库根目录
  • 不要在技能安装期间执行服务器初始化
  • 安装后,告知用户其智能体是否需要重启或重新加载技能

对于使用 npx 的人类用户:

npx skills add https://github.com/DeerYang/server-security-init-skill/tree/main/server-security-init -g

指定特定智能体:

npx skills add https://github.com/DeerYang/server-security-init-skill/tree/main/server-security-init -g -a codex

分阶段安全初始化流程

阶段 1:预检与引导

在进行任何更改之前,收集并验证服务器 IP、当前用户、SSH 端口、管理 IP、本地 SSH 密钥、目标用户和目标 SSH 端口等信息。检查现有 SSH 密钥或生成新密钥(未经用户确认不要自动化此步骤)。测试基于密码的 root SSH 访问。

阶段 2:安装公钥

将公钥复制到服务器,可使用 ssh-copy-id 或手动方式。验证公钥登录是否有效。关键:在公钥认证验证通过之前,不要继续下一步。

阶段 3:创建非 root sudo 用户

创建用户并授予 sudo 权限,将 SSH 密钥复制到新用户,验证新用户可以通过 SSH 登录并免密使用 sudo。关键:在新用户验证通过之前,不要继续下一步。

阶段 4:配置防火墙(UFW)

安装 UFW,设置默认策略(拒绝入站、允许出站),在启用防火墙之前先允许新的 SSH 端口,然后启用防火墙并验证规则。

阶段 5:更改 SSH 端口

编辑 sshd_config,检查 ssh.socket(Debian 12+),重启 SSH 服务,验证新端口正在监听,并测试新端口。关键:在新端口验证通过之前,保持旧 SSH 会话打开。

阶段 6:加固 SSH 配置

禁用 root 登录、禁用密码认证、启用公钥认证、禁用 ChallengeResponseAuthentication,测试配置并重启 SSH,验证生效配置。

阶段 7:配置 Fail2ban

安装 fail2ban,创建本地 jail 配置,启用并重启服务,验证状态。

阶段 8:更新本地 SSH 配置

在本地 ~/.ssh/config 中添加服务器条目,测试简化连接。

验证清单

完成所有阶段后,在服务器端验证以下内容:

  • SSH 服务:检查 SSH 仅监听正确端口,检查生效的 sshd 配置,检查 ssh.socket 是否干扰(Debian 12)
  • 防火墙:状态为 active,默认入站为 deny,新 SSH 端口已允许,没有允许端口 22 的规则
  • Fail2ban:服务处于 active,sshd jail 已启用,管理 IP 在 ignoreip 中
  • 用户与 Sudo:以非 root 用户登录,用户具有 NOPASSWD sudo,用户在 sudo 组中

常见模式

  • 添加额外管理 IP
  • 开放额外防火墙端口
  • 检查被封禁的 IP
  • 解封 IP

故障排除

  • 更改端口后被锁定:使用提供商控制台/VNC 访问,检查实际监听端口,检查 ssh.socket 和 ssh.service 状态,查看 /var/log/auth.log
  • UFW 阻止了新 SSH 端口:使用控制台/VNC,禁用 UFW,允许新端口,重新启用
  • Fail2ban 封禁了你的 IP:检查封禁状态,解封自己,添加到 ignoreip
  • SSH 端口恢复为 22(Debian 12):当 ssh.socket 处于活动状态时会发生,禁用 ssh.socket 并启用 ssh.service
  • Root 登录仍然有效:检查生效配置,确保 sshd_config 中 PermitRootLogin no 未被注释,没有 Match 块覆盖,重启 SSH
  • 密码认证仍被接受:检查生效配置,编辑 sshd_config 设置 PasswordAuthentication no 和 ChallengeResponseAuthentication no,测试并重启

安全注意事项

  • 更改 SSH 或防火墙设置时,始终保持现有 SSH 会话打开
  • 在进入下一阶段之前验证每个阶段
  • 在公钥登录验证通过之前,绝不要禁用密码认证
  • 在防火墙允许新端口之前,绝不要更改 SSH 端口
  • 在非 root sudo 用户验证通过之前,绝不要禁用 root 登录
  • 提供商控制台/VNC 访问是最终的恢复途径
  • 不要将私钥粘贴到提示、脚本或日志中
  • 在配置更改后重启 SSH 之前,测试 sudo sshd -t

系统要求

  • Ubuntu 20.04+ 或 Debian 11+
  • OpenSSH 服务器
  • systemd init 系统
  • UFW(Uncomplicated Firewall)
  • apt 仓库中可用的 fail2ban 包

该技能为 AI 辅助服务器管理提供指导。在生产系统上执行生成的命令之前,请始终审查。