云服务器配置指南 (一):别让你的服务器裸奔

拿到一台新的云服务器,第一件事做什么?装 Docker?跑代码?

错!第一件事是给它穿上“防弹衣”。

公网环境就是黑暗森林,你的服务器IP一旦暴露,每天都会遭受成千上万次自动化脚本的扫描和暴力破解。如果不做初始化配置,你的服务器可能活不过第一集。

本章我们不谈复杂的架构,只做最基础、最保命的三件事:SSH密钥登录系统加固防火墙配置

服务器配置:4vCPU | 8GB RAM | 5M带宽 | 50GB存储
系统版本:Ubuntu 24.04 64位


1.1 SSH密钥登录:告别密码,告别被黑

为什么要折腾密钥?

还在用密码登录服务器?那你就是在赌博。

  • 密码太弱123456 秒破。
  • 密码太强:你自己都记不住。
  • 暴力破解:黑客的脚本24小时不睡觉地试你的密码。

SSH密钥认证就像是银行的U盾。你手里拿着私钥(钥匙),服务器存着公钥(锁)。没有私钥,神仙也进不去。

步骤1:在本地生成密钥对

在你的电脑上(Windows PowerShell 或 Mac 终端)执行:

1
2
# 推荐使用 ED25519 算法,比 RSA 更安全且更快
ssh-keygen -t ed25519 -C "your_email@example.com"

一路回车即可。如果你比较谨慎,可以设置一个密码短语(Passphrase),这样即使私钥文件被偷了,小偷也得猜密码。

生成后,你会得到两个文件:

  • id_ed25519私钥。打死也不能给别人看!
  • id_ed25519.pub公钥。这个是要上传到服务器的。

步骤2:把公钥丢给服务器

Linux/Mac/Git Bash 用户(最快):

1
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@your_server_ip

Windows PowerShell 用户(手动挡):

  1. 打开公钥文件,复制里面的内容(以 ssh-ed25519 开头的一长串)。
  2. 登录服务器:ssh root@your_server_ip
  3. 在服务器上执行:
    1
    2
    3
    4
    mkdir -p ~/.ssh
    echo "粘贴你的公钥内容" >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys # 权限必须是600,否则SSH不认
    chmod 700 ~/.ssh

步骤3:关上密码登录的大门

有了密钥,密码登录就可以关掉了。这才是安全的关键。

1
sudo vim /etc/ssh/sshd_config

找到并修改以下配置(没有就添加):

1
2
3
4
5
6
7
8
9
10
11
# 禁用密码登录(核心!)
PasswordAuthentication no

# 禁用 root 密码登录(双重保险)
PermitRootLogin prohibit-password

# 禁用空密码
PermitEmptyPasswords no

# 只允许公钥认证
PubkeyAuthentication yes

避坑指南
很多云厂商(阿里云、AWS等)会在 /etc/ssh/sshd_config.d/ 下放一些默认配置,优先级比主配置文件高。
如果修改后不生效,记得去那个目录下检查一下有没有“内鬼”文件把 PasswordAuthentication 设为了 yes

重启 SSH 服务:

1
sudo systemctl restart ssh

警告:重启后千万别关掉当前的终端窗口!新开一个窗口测试能不能用密钥登录。如果配置错了,你还有救;如果关了窗口,你就得去云厂商控制台重置系统了。


1.2 系统加固:给服务器雇个保镖

步骤1:别总用 root 裸奔

Root 权限太大,手一抖 rm -rf / 就全完了。
创建一个普通用户,平时用普通用户,需要权限时再 sudo

1
2
3
4
5
# 创建用户 devuser
sudo adduser devuser

# 给它 sudo 权限
sudo usermod -aG sudo devuser

记得把 root 的公钥也复制一份给新用户,或者重新上传一份,保证新用户也能用密钥登录。

步骤2:Fail2Ban —— 自动封禁恶意IP

Fail2Ban 是个好东西。它会监控日志,发现有人在疯狂试密码(虽然我们已经禁用了密码,但看着日志烦),直接把他的 IP 拉黑。

1
sudo apt install fail2ban -y

创建一个配置文件 /etc/fail2ban/jail.local

1
2
3
4
5
6
7
8
[DEFAULT]
# 封禁时间:10分钟
bantime = 600
# 允许失败次数:5次
maxretry = 5

[sshd]
enabled = true

启动它:

1
2
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

现在,谁敢暴力破解,Fail2Ban 就让他去“小黑屋”冷静十分钟。

步骤3:自动更新安全补丁

虽然我不建议自动更新内核(怕挂),但安全补丁还是自动打上比较好。

1
2
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades

Yes,搞定。


1.3 防火墙 (UFW):只开该开的门

Ubuntu 自带的 UFW (Uncomplicated Firewall) 真的非常 Uncomplicated。

原则:默认拒绝所有进入,只开放需要的端口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1. 默认拒绝所有入站连接
sudo ufw default deny incoming

# 2. 默认允许所有出站连接(服务器要上网下载东西)
sudo ufw default allow outgoing

# 3. 允许 SSH (22端口) —— 这步不做,启用防火墙你就失联了!
sudo ufw allow 22/tcp

# 4. 允许 Web 服务 (80, 443)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 5. 启用防火墙
sudo ufw enable

查看状态:

1
sudo ufw status

1.4 常用工具:工欲善其事

最后,把该装的工具装一装,把时间校准一下。

1
2
3
4
5
6
7
8
# 更新软件源
sudo apt update && sudo apt upgrade -y

# 安装常用工具包
sudo apt install -y curl wget vim git htop tree zip unzip net-tools

# 设置时区为上海(不然日志时间对不上)
sudo timedatectl set-timezone Asia/Shanghai

总结

至此,你的服务器已经从“裸奔”状态变成了“全副武装”。

  • 进门:必须有密钥。
  • 监控:Fail2Ban 盯着。
  • 围墙:UFW 挡着。

虽然不能说固若金汤,但至少能挡住 99% 的脚本小子。接下来,我们就可以放心地在上面折腾各种服务了。