一、文档定位与目标
本文档为《阿里云服务器搭建全记录》的进阶篇,专注于Day 2 运维场景。针对 1核 0.5GB 内存 的极限环境,提供一套“轻量级、高生存率”的安全加固与性能优化方案。
适用人群:已完成 Hexo 博客基础部署,希望提升服务器安全性、访问速度及建立容灾体系的初学者。
核心价值:
- 安全加固:从网络层到应用层构建四道防线,抵御自动化脚本攻击。
- 性能压榨:在不升级硬件的前提下,通过 Gzip 和缓存策略大幅提升加载速度。
- 容灾自动化:建立“异地双备份”与“一键发布”流程,确保数据万无一失。
二、安全加固全景图 (Security Panorama)
在执行本指南前,请对照下表确认当前状态。
| 检查项 | 加固前 (Risky) | 加固后 (Hardened) | 作用 |
|---|---|---|---|
| 登录方式 | Root 账户 + 密码登录 | 普通用户 + 仅密钥登录 | 防止暴力破解密码 |
| 防火墙 | 阿里云安全组 (端口全开) | UFW 防火墙 (仅开 22/80/443) | 最小化攻击面 |
| 主动防御 | 无 | Fail2Ban (自动封禁恶意 IP) | 阻断 SSH 爆破脚本 |
| Web 伪装 | Nginx 显示版本号 (如 1.18.0) | 隐藏版本号 | 减少针对特定版本的漏洞攻击 |
| SSL 证书 | 手动申请,90天后过期 | Certbot 自动续期 | 防止证书过期导致网站不可用 |
三、分阶段加固操作手册
阶段 1:账号与 SSH 访问控制
阶段目标:切断 Root 密码登录入口,仅允许持有密钥的用户进入。
1.1 创建普通 Sudo 用户(可选但推荐)
说明:避免直接使用 root 操作是 Linux 安全的最佳实践。
# 1. 创建用户 (将 <user> 替换为你喜欢的用户名)
adduser azure
# 2. 赋予 sudo 权限
usermod -aG sudo azure
1.2 强制 SSH 密钥认证
警告:修改配置前,请务必确保你已经可以通过 SSH 密钥成功登录服务器,否则会把自己锁在门外。
# 编辑 SSH 配置文件
sudo nano /etc/ssh/sshd_config
# --- 修改以下参数 ---
PermitRootLogin no # 禁止 root 直接登录 (若未创建普通用户,可暂设为 prohibit-password)
PasswordAuthentication no # 彻底禁止密码登录 (强制使用密钥)
PubkeyAuthentication yes # 确保开启密钥认证
# ------------------
# 保存退出:Ctrl+O -> Enter -> Ctrl+X
# 重启 SSH 服务生效
sudo systemctl restart ssh
- 验证步骤:保持当前终端不关闭,新开一个终端尝试登录。如果不需要输入密码直接进入,则配置成功。
阶段 2:构建系统防火墙 (UFW)
阶段目标:启用 Ubuntu 自带的 UFW 防火墙,只允许必要的端口通讯。
高危操作提示:必须先执行 allow ssh,否则启用防火墙瞬间会断开连接。
# 1. 检查状态 (默认为 inactive)
sudo ufw status
# 2. 【关键】放行 SSH 端口 (防止自锁)
sudo ufw allow ssh
# 注意:如果你修改过 SSH 端口 (如 2222),请使用 sudo ufw allow 2222
# 3. 放行 Web 服务 (80 和 443)
sudo ufw allow 'Nginx Full'
# 4. 启用防火墙
sudo ufw enable
# 提示 "Command may disrupt existing ssh connections..." 输入 y 并回车
- 验证步骤:执行
sudo ufw status,应看到Status: active且包含SSH和Nginx Full的规则。
阶段 3:Nginx 隐身与 SSL 续期
阶段目标:隐藏 Nginx 版本号,并确保 HTTPS 证书能自动续命。
3.1 隐藏 Nginx 版本号
# 编辑 Nginx 主配置
sudo nano /etc/nginx/nginx.conf
# 在 http { ... } 块中添加或取消注释:
http {
...
server_tokens off; # <--- 关键配置
...
}
# 重载 Nginx
sudo systemctl reload nginx
- 验证步骤:在本地终端执行
curl -I http://<服务器IP>。响应头Server字段应仅显示nginx,无数字版本号。
3.2 验证 SSL 自动续期
Let's Encrypt 证书有效期仅 90 天。Certbot 通常会自动配置定时任务。
# 1. 检查定时器是否存活
systemctl list-timers | grep certbot
# 2. 模拟续期测试 (Dry Run) - 关键验证
sudo certbot renew --dry-run
- 预期输出:若显示
Congratulations, all simulated renewals succeeded,则自动化机制正常。
阶段 4:部署 Fail2Ban (反暴力破解)
阶段目标:安装“全自动保安”,监控日志并封禁多次尝试登录失败的 IP。
4.1 安装与配置
# 1. 安装
sudo apt update && sudo apt install fail2ban -y
# 2. 复制配置文件 (永远不要直接修改 jail.conf)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 3. 编辑配置
sudo nano /etc/fail2ban/jail.local
4.2 关键参数修改指南
在 jail.local 文件中找到对应位置进行修改:
[DEFAULT]
# 封禁时间:1天 (86400秒)
bantime = 86400
# 允许失败次数
maxretry = 5
# 内存优化:确保 action 不发送邮件 (默认 action_ 即可)
[sshd]
enabled = true # <--- 必须显式开启
port = ssh
4.3 启动与状态检查
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
四、性能优化实战 (0.5GB 极限压榨)
对于小内存服务器,优化的核心是 “用计算换带宽” 和 “用缓存换计算”。
4.1 Nginx Gzip 压缩 (服务端)
开启 Gzip 可将 HTML/CSS/JS 体积减少 60%-80%。
# 编辑 /etc/nginx/nginx.conf,在 http 块中加入:
gzip on;
gzip_min_length 1k; # 小于1k不压缩
gzip_comp_level 6; # 压缩等级 (1-9),6 是性价比之选
gzip_types text/plain text/css application/json application/javascript text/xml;
gzip_proxied any;
4.2 静态资源缓存 (浏览器端)
告诉浏览器缓存图片和样式表,减少服务器请求。
# 编辑站点配置 (如 /etc/nginx/sites-available/default)
# 在 server 块内添加:
# 图片缓存 30 天
location ~* \.(jpg|jpeg|gif|png|ico|svg|webp)$ {
expires 30d;
access_log off;
}
# CSS/JS 缓存 7 天
location ~* \.(css|js)$ {
expires 7d;
access_log off;
}
操作后必做:sudo nginx -t (检查语法) -> sudo systemctl reload nginx。
4.3 本地构建优化 (Hexo Neat)
背景:hexo-all-minifier 依赖 C++ 编译,在 Windows 上极易报错。推荐使用纯 JS 实现的 hexo-neat。
-
安装插件 (在本地博客根目录):
npm install hexo-neat --save -
配置 _config.yml (添加至文件末尾):
neat_enable: true
neat_html:
enable: true
exclude:
neat_css:
enable: true
exclude:
- '**/*.min.css'
neat_js:
enable: true
mangle: true
exclude:
- '**/*.min.js'
五、容灾与自动化运维
5.1 异地双重备份 (Git Private Repo)
避免因电脑损坏或服务器宕机导致源码丢失。
-
GitHub 操作:创建一个新的 Private (私有) 仓库。
-
本地关联:
git remote add origin_backup git@github.com:<用户名>/<仓库名>.git -
日常备份:每次发布后执行
git push origin_backup main。
5.2 一键发布脚本 (npm run ship)
将清理、生成、部署、备份合并为一个命令。编辑本地 package.json 的 scripts 字段:
"scripts": {
"build": "hexo generate",
"clean": "hexo clean",
"deploy": "hexo deploy",
"push": "git add . && git commit -m \"Auto backup\" && git push origin_backup main",
"ship": "hexo clean && hexo generate && hexo deploy && npm run push"
}
- 使用方法:终端输入
npm run ship,即可全自动完成博客发布与源码备份。
5.3 外部监控 (UptimeRobot)
由于服务器内存紧张,不建议安装复杂的监控软件。推荐使用 UptimeRobot 免费版:
- 配置方式:添加
HTTPS Monitor,指向你的域名。 - 作用:每 5 分钟检查一次,网站宕机时发送邮件报警。
六、命令速查表
| 功能 | 命令 | 说明 |
|---|---|---|
| 系统监控 | htop | 显存/CPU 可视化监控 (推荐) |
| 防火墙 | sudo ufw status | 查看防火墙规则 |
| 封禁状态 | sudo fail2ban-client status sshd | 查看被 ban 的 IP 数量 |
| Nginx 测试 | sudo nginx -t | 修改配置后必须执行 |
| Nginx 重载 | sudo systemctl reload nginx | 平滑重启,不中断连接 |
| 证书测试 | sudo certbot renew --dry-run | 模拟证书续期 |
八、配置示例库
1. 推荐的 Fail2Ban 配置 (/etc/fail2ban/jail.local)
[DEFAULT]
bantime = 86400 # 封禁 1 天
findtime = 600 # 10分钟内
maxretry = 5 # 错 5 次
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
2. 包含 Gzip 的 Nginx 主配置片段 (/etc/nginx/nginx.conf)
http {
# 开启 Gzip
gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml;
# 隐藏版本号
server_tokens off;
}