benvigano/ubuntu_sturdy

GitHub: benvigano/ubuntu_sturdy

一键式 Ubuntu Server 安全加固脚本,通过自动化配置内核、防火墙、入侵检测和完整性监控等安全组件,实现零维护的持续安全防护。

Stars: 2 | Forks: 1

## 描述 - 设置所有 **内核**、**操作系统**、**OpenSSH Server** 和 **GRUB Bootloader** 配置以实现最高安全性。 - 启用自动安全更新 (unattended-upgrades) - 设置**全面监控**,完全配置为纯邮件告警(无需定期检查)。仅在出现安全问题或检测到威胁时发送告警 - 没有定期邮件/摘要。 - **ClamAV**:每周进行系统扫描的防病毒软件 - **AIDE**:每日检查的文件完整性监控 - **rkhunter**:自动更新数据库的 Rootkit 检测 - **fail2ban**:针对惯犯启用 recidive jail 的入侵防御 - **auditd**:带有内核模块和权限提升监控的高级系统审计 - **AppArmor**:针对关键服务的强制访问控制 - **UFW**:严格的防火墙配置 - **unattended-upgrades**:自动安全补丁 - **Postfix**:通过 Gmail SMTP 发送邮件告警 - **Lynis**:通过邮件发送初始安全审计报告以供审查 - 确保无需长期维护操作: - 自动日志轮转和清理 - 每周更新安全工具数据库 ### 计划任务 *(所有时间均相对于 config.sh 中配置的 DAILY_TASKS_START_TIME)* **每日(通过 cron):** - START - 文件完整性检查 (AIDE) - START+1h - 安全更新 (unattended-upgrades) - START+2h - 防病毒特征库更新 (ClamAV) - START+3h - Rootkit 检查 (rkhunter) - START+4h - 时间同步检查 (chrony) - START+5h - 内核模块完整性检查 - START+6h - 软件包文件完整性检查 (debsums) **每周(通过 cron):** - 周日 - START - 全系统防病毒扫描 (ClamAV) - 周六 - START - Rootkit 数据库更新 (rkhunter) - 周六 - START+1h - 入侵防御更新 (fail2ban) *注意:特意将任务错开执行,以避免资源争用。 ## 运行 ``` git clone https://github.com/benvigano/sturdy_ubuntu.git` cd ubuntu_sturdy nano config.sh # Fill in your variables ``` ``` # 如果您的用户不是 sudo: sudo usermod -aG sudo your_username ``` ``` # 使脚本可执行 chmod +x *.sh ``` ``` # 运行配置 sudo ./run-all.sh # 在不关闭当前终端的情况下,从另一个终端测试 ssh 访问 # 从另一个终端测试 ssh 访问 sudo systemctl restart ssh ssh -p your_ssh_port your_admin_user@your_server_ip # 查看通过电子邮件发送的 Lynis 审计报告 # 将您在 config.sh 文件中设置的凭据保存在安全的地方: # 1. 与您设置的公钥对应的 ssh 密钥 # 2. ssh 端口号 # 3. GRUB 超级用户的用户名和密码 # (^^ 重要!同时丢失 GRUB 凭据和 ssh 密钥将使您被永久锁定在您的系统之外!) # 删除配置文件 shred -u config.sh # 重启系统 sudo reboot # 重启后,测试 GRUB 访问 ``` ## 未涵盖内容 ### 超出范围(但**强烈建议**手动设置) - **物理安全:** BIOS/UEFI 密码、安全启动、禁止从外部设备启动等。 - **安装选择:** 全盘加密 (LUKS)、ZFS、安全安装介质验证等。 - **局域网安全:** WiFi、路由器配置、网络分段。 - **备份策略:** 保留策略、版本控制等。 ### 容器主机的可选配置 在运行前在 `config.sh` 中设置(默认为空 = 严格监控): - **`FILE_INTEGRITY_EXCLUDE_PATHS`** — 每日文件完整性检查忽略的空格分隔路径(例如 `"/var/lib/docker /opt/homelab"`)。在数据库初始化时应用;如果以后更改,需重建完整性数据库。 ### 设计选择 - **禁用 GRUB 恢复模式:** 特意保留启用状态(受密码保护),因为禁用它会导致在意外失去对系统的访问权限时(丢失 ssh 密钥、用户被从 sudoers 中移除等)被永久锁定。 ### 可能的更改/增强功能 - SSH 的 MFA - Livepatch - SELinux 替代 AppArmor - grsecurity - HSMs - 要求使用预哈希的 grub 密码,以避免以明文形式保存 #### 如果是**面向外部的服务**: - 互联网暴露 - IP 过滤、地理封锁、VPN 检测 - 特定服务的强化 - Web 服务器、数据库、应用级安全 ## 故障排除 *(需要 GRUB 访问权限)* ### 情况:SSH 锁定 / 丢失私钥 - **物理服务器:** 在启动时,输入 GRUB 密码,选择“Advanced options”,然后选择“Recovery mode”。这将为您提供一个 root shell 来修复系统(例如,将新的 SSH 密钥添加到 `/home/your_user/.ssh/authorized_keys`)。 - **VPS:** 大多数提供商提供模拟物理访问的 VNC/KVM 控制台。使用它输入 GRUB 密码并像在物理机上一样访问恢复模式。 ### 情况:丢失 GRUB 凭据 / 拥有 SSH 访问权限 *(需要 ssh 访问权限和 sudo)* - **物理/VPS:** 通过 SSH 登录系统并执行: # 生成新的 GRUB 密码哈希 grub-mkpasswd-pbkdf2 # 编辑 GRUB 自定义配置 sudo nano /etc/grub.d/40_custom # 使用新的哈希更新 password_pbkdf2 行 sudo update-grub
标签:Bash, x64dbg, 应用安全, 服务器加固, 系统运维, 网络调试, 自动化