今天刚购买了一台云服务器和一个域名,用于将我的 blog 从 github pages 上迁移下来。
这个系列将记录我从零配置这个服务器的过程。
系统选的是 Ubuntu 24.04 LTS。这是第一篇配置记录,目标是先把安全基础打好——能安全地登录,不至于第一天就被人扫端口。
本地准备:密钥与 SSH Config
登录服务器之前,先在本地生成一对 ED25519 密钥,用于 ssh 免密登陆:
ssh-keygen -t ed25519 -C "aliyun-blog" -f ~/.ssh/aliyun_blog
然后编辑 ~/.ssh/config,加一段别名配置,这样只需要 ssh blog 即可使用 ssh 登陆服务器:
Host blog
HostName <your_server_ip>
Port 22
User <your_username>
IdentityFile ~/.ssh/aliyun_blog
首次登陆
购买服务器之后首次登陆可以使用 Workbench 在网页上远程连接,我们将在这创建普通用户并配置 SSH 密钥。
创建普通用户
创建一个非 root 用户。日常操作尽量不用 root。
# 创建用户并设置密码
useradd -m your_username
passwd your_username
# 加入 sudo 组(Ubuntu 的管理员组)
usermod -aG sudo your_username
上传密钥
然后切换到新创建的用户,把刚才生成的本地公钥写进去:
# 在 VNC 终端里执行
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "你的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
换了终端窗口验证一下:用 ssh blog 确认能登录,即代表配置成功。
现在你有一个能用的普通用户了。接下来的操作全部用 your_username + sudo 完成。
root 只作为兜底保留在当前的 VNC 或旧终端窗口里,以防误操作把自己锁在外面。
基础安全配置
Ubuntu 24.04 需要手动检查和加固几个基础安全项。
SSH 加固
编辑 /etc/ssh/sshd_config:
sudo vim /etc/ssh/sshd_config
改这几个值:
# 禁止 root 直接 SSH 登录
PermitRootLogin no
# 禁止空密码
PermitEmptyPasswords no
# 可选:换掉默认的 22 端口,减少扫描噪音
Port 2222
PermitRootLogin no 是关键——以后所有操作都通过 blogadmin 登录,需要 root 时 sudo。如果偶尔需要 root shell,sudo -i 即可。因为我们在上一步已经验证过 blogadmin 能登录且 sudo 能用了,关掉 root 登录没有风险。
改完保存后重启 sshd:
sudo systemctl restart sshd
fail2ban
因为仍然允许密码登录,安装 fail2ban 防暴力破解:
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
默认配置对 SSH 的保护比较保守,创建一个本地覆盖配置 /etc/fail2ban/jail.local:
sudo vim /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
[sshd]
enabled = true
port = 2222
意思是 10 分钟内失败 3 次就封禁 1 小时。port 记得填你改过的 SSH 端口。
sudo systemctl restart fail2ban
fail2ban-client status sshd # 查看状态
审计日志
Ubuntu 24.04 默认没有安装 auditd,需要手动装:
sudo apt install -y auditd
sudo systemctl enable --now auditd
sudo systemctl status auditd # 确认 active (running)
这三项配置完,基础安全层面就达到生产可用的水平了。
防火墙
在阿里云 ECS 控制台 → 安全组 → 入方向规则中,添加 80、443 端口。
收尾
做完这些,服务器的基本安全框架就搭好了:
- 密钥登录 + 禁用密码 → 杜绝弱口令风险
- root 禁止直接登录 → 所有操作经 sudo,可追溯
- 非标端口 + fail2ban → 大幅降低暴力破解噪音
- 双层防火墙(安全组 + UFW) → 最小化暴露面
- 基础安全配置 → 密码策略、登录锁定、审计日志已就位
- 所有操作已切换到普通用户 → root 仅作兜底
下一篇安装运行环境,让服务器能跑起这个博客。