RonMercier/securebydefault-server-hardening
GitHub: RonMercier/securebydefault-server-hardening
基于真实攻击日志的云VPS Linux服务器加固工具集,提供自动化脚本和配置,增强生产环境安全性。
Stars: 0 | Forks: 0
# 默认安全服务器加固
**适用于云VPS部署的生产级Linux服务器加固基线。**
基于 [SecureByDefault.io](https://securebydefault.io) 实际基础设施构建并经实战验证——这是一台位于Linode上的Ubuntu 24服务器,在上线24小时内即遭到机器人探测。这不是理论性的加固方案,而是从第一天起就抵御真实自动化攻击的精确配置。

## 覆盖范围
| 层级 | 配置内容 |
|---|---|
| **防火墙(UFW)** | 默认拒绝,仅开放22/80/443端口 |
| **SSH加固** | 仅密钥认证、禁用root登录、暴力破解限制 |
| **Nginx** | 安全头部、屏蔽敏感路径、速率限制 |
| **Fail2Ban** | SSH + Nginx监狱配置,优化封禁时间 |
| **SSL/TLS** | Certbot + Let's Encrypt、HTTPS重定向、HSTS |
| **系统** | 自动更新、内核加固sysctl参数 |
| **监控** | 日志审查清单、攻击模式参考 |
## 触发此项目的攻击事件
服务器上线24小时内——无公开链接,无公开流量——机器人即开始探测以下内容:
```
/.aws/credentials
/.env
/api/.env
/backend/.env
/app/.env
/secrets.json
/serviceAccountKey.json
```
## 仓库结构
```
securebydefault-server-hardening/
├── README.md ← You are here
├── nginx/
│ ├── securebydefault.conf ← Full Nginx server block (HTTPS + blog routing)
│ └── security-headers.conf ← Security headers snippet (include-ready)
├── fail2ban/
│ ├── jail.local ← SSH + Nginx jail configuration
│ └── nginx-req-limit.conf ← Nginx request-limit jail filter
├── ufw/
│ └── setup.sh ← UFW firewall setup script
├── ssh/
│ └── sshd_config.hardened ← Hardened SSH daemon config
├── system/
│ ├── sysctl.hardened.conf ← Kernel hardening parameters
│ └── unattended-upgrades.conf ← Automatic security updates config
├── scripts/
│ ├── harden.sh ← Full automated hardening script
│ └── audit.sh ← Quick security audit check script
└── docs/
├── ATTACK_LOG.md ← Real attack patterns observed post-launch
└── CHECKLIST.md ← Pre-launch hardening checklist
```
## 快速开始
### 1. 克隆仓库
```
git clone https://github.com/RonMercier/securebydefault-server-hardening.git
cd securebydefault-server-hardening
```
### 2. 运行自动化加固脚本
```
chmod +x scripts/harden.sh
sudo ./scripts/harden.sh
```
此脚本配置UFW、加固SSH设置、启用自动更新并应用sysctl加固参数。Nginx和Fail2Ban配置需单独应用(见下文),因为它们需要针对具体站点进行定制。
### 3. 应用Nginx配置(需先自定义)
```
# 编辑服务器名称和路径以匹配您的域名
nano nginx/securebydefault.conf
# 复制到 Nginx sites-available
sudo cp nginx/securebydefault.conf /etc/nginx/sites-available/yourdomain.conf
sudo ln -s /etc/nginx/sites-available/yourdomain.conf /etc/nginx/sites-enabled/
# 测试并重载
sudo nginx -t && sudo systemctl reload nginx
```
### 4. 应用Fail2Ban配置
```
sudo cp fail2ban/jail.local /etc/fail2ban/jail.local
sudo cp fail2ban/nginx-req-limit.conf /etc/fail2ban/filter.d/nginx-req-limit.conf
sudo systemctl restart fail2ban
sudo fail2ban-client status
```
### 5. 使用审计脚本验证
```
chmod +x scripts/audit.sh
sudo ./scripts/audit.sh
```
## 关键安全决策(及原因)
**仅SSH密钥认证**
完全禁用基于密码的SSH认证。日志中所有密码失败尝试都来自机器人——没有人在凌晨3点输错密码。完全移除攻击面比速率限制更彻底。
**UFW默认拒绝策略**
仅开放22、80、443端口。其他所有流量静默丢弃。这不仅是良好安全实践,还能保持日志可读性。无噪音的日志才是你会真正查看的日志。
**Nginx屏蔽凭据路径**
专用`location`块对所有常见凭据探测路径(`.env`、`.aws`、`.git`、`credentials`、`secrets`、`xmlrpc.php`等)返回404。机器人会立即跳过这些请求——它们在Web服务器层即被终止,不会触及应用代码。
**安全头部**
全局设置`X-Frame-Options`、`X-Content-Type-Options`、`X-XSS-Protection`、`Referrer-Policy`和`server_tokens off`。这些措施能防御特定类别攻击,并提升安全评分(可通过securityheaders.com检测)。
**优化版Fail2Ban配置**
默认Fail2Ban配置过于宽松——允许过多失败尝试后才封禁,且封禁时间太短。本仓库中的监狱配置针对未运行用户认证服务的生产服务器优化:更快失败、更严格封禁、更长封禁期。
**启用自动更新**
VPS中凭据窃取后最常见的攻击途径是未修补的CVE漏洞。自动安全更新意味着不依赖他人记得运行`apt upgrade`。设置后测试,然后忘记它。每月审查升级日志即可。
## 实际攻击模式记录(首个24小时)
这些来自我的Nginx日志的实际探测路径记录在`docs/ATTACK_LOG.md`中。本仓库的加固配置已拦截所有这些攻击。
```
Credential file probes: /.env, /.aws/credentials, /api/.env, /secrets.json
CMS exploits: /wp-login.php, /xmlrpc.php, /wp-config.php
Admin panel discovery: /admin, /phpmyadmin, /manager/html
Backup file hunting: /backup.sql, /db.sql, /.git/config
Service fingerprinting: /server-status, /info.php, /phpinfo.php
```
## 环境
测试环境:
- **操作系统:** Ubuntu 24.04 LTS
- **Web服务器:** Nginx 1.24+
- **PHP:** 8.3-FPM(用于`/blog`子目录的WordPress)
- **SSL:** Let's Encrypt / Certbot
- **防火墙:** UFW
- **入侵防御:** Fail2Ban 1.0+
## 贡献
欢迎提交Issue和PR。如果您观察到`ATTACK_LOG.md`中未记录的攻击模式,请创建新Issue——保持该列表更新对大家都有帮助。
## 许可证
MIT许可证 - 自由使用,适应您的配置,不提供任何保证。
## 关于
由**Ron Mercier**构建 — 云与网络安全工程师。曾在Akamai Technologies负责DDoS缓解和事件响应。网络安全硕士,持有CySA+、PenTest+、AWS CCP认证。
🌐 [securebydefault.io](https://securebydefault.io) · 📬 [通讯订阅](https://newsletter.securebydefault.io) · 💼 [领英](https://www.linkedin.com/in/ron-mercier)
标签:Fail2Ban配置, Let's Encrypt, Nginx安全, SSH安全, SSL/TLS加密, sysctl加固, UFW, 云VPS防护, 云服务器安全, 内存分配, 子域名枚举, 安全基线, 安全头配置, 安全最佳实践, 应用安全, 攻击防御, 教学环境, 数字取证, 暴力破解防护, 服务器加固, 生产环境, 生产级配置, 监控日志, 真实攻击案例, 系统安全, 网络安全, 自动化脚本, 防火墙配置, 隐私保护