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, 应用安全, 服务器加固, 系统运维, 网络调试, 自动化