本文目录
安全配置最重要的是顺序
加固服务器不是越快关闭功能越安全。稳妥顺序应该是:在自己的电脑生成密钥,把公钥交给 deploy,另开窗口证明密钥能登录,先在防火墙放行 SSH,再启用防火墙,最后才收紧 SSH 策略。整个过程保留服务商网页控制台和原来的会话。
在本地生成 Ed25519 密钥
密钥在自己的电脑上生成,不是在服务器上生成。Ubuntu 官方文档把 Ed25519 作为合适的默认选择。给私钥设置口令,私钥不能上传到网站、网盘公开目录或 Git 仓库。
ssh-keygen -t ed25519 -C 'my-laptop'
ssh-copy-id deploy@203.0.113.10
ssh deploy@203.0.113.10把 203.0.113.10 换成真实 IP。ssh-copy-id 不可用时,可以通过服务商控制台把本地 .pub 文件的内容加入 /home/deploy/.ssh/authorized_keys;只复制公钥,绝不能复制没有 .pub 后缀的私钥。新窗口登录后执行 sudo whoami,确认输出 root,并保持这个窗口在线。
先放行 SSH,再启用 UFW
很多 Ubuntu 镜像里的 UFW 默认未启用。一定先添加 SSH 规则,再执行 enable。如果你已把 SSH 改到自定义端口,就要放行真实端口,不能照抄 22。
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw status verbose最终列表应当包含 SSH、80/TCP 和 443/TCP。80 用于 HTTP 和证书签发验证,443 用于 HTTPS。数据库端口、开发服务器端口和内部应用端口不要因为“以后可能会用”就向整个互联网开放。云厂商如果还有一层安全组,也要配置相同的必要端口。
验证完成后再收紧 SSH
当前 Ubuntu 可以把自定义配置放在 /etc/ssh/sshd_config.d 中,便于以后知道哪一项是自己改的。不同发行版和版本的默认值不完全相同,修改前要看对应版本的官方 OpenSSH 文档。
sudoedit /etc/ssh/sshd_config.d/99-aioos-hardening.conf
sudo sshd -t
sudo systemctl reload ssh
sudo sshd -T | grep -E 'passwordauthentication|permitrootlogin|pubkeyauthentication'配置文件可以设置 PubkeyAuthentication yes、PasswordAuthentication no、PermitRootLogin no,但只有密钥登录和 sudo 都确认成功后才能这样做。sshd -t 没有输出通常表示语法通过;reload 后再开第三个全新窗口验证,旧窗口最后再关。
打开自动安全更新
如果镜像没有预装 unattended-upgrades,可以安装并启用自动安全更新。它能处理系统安全补丁,但不会替你升级所有应用依赖,也不代表以后不用人工检查。
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
systemctl status unattended-upgrades --no-pager建议每周仍查看一次更新和日志;大型版本升级先备份、先测试,不要在访问高峰直接执行。
官方资料
执行前请对照 Ubuntu OpenSSH 官方指南 与 Ubuntu 防火墙官方指南,确认当前系统版本的服务名称和配置目录。
我的踩坑体会
最危险的命令往往不是错误命令,而是顺序错了的正确命令。关闭密码登录本身没有问题,但密钥没验证就关闭,五分钟的操作会变成一次控制台救援。现在我把每次权限修改都当成迁移:先增加新入口,验证新入口,再移除旧入口。
完成标准
重新打开一个完全独立的终端,确认密钥登录正常、sudo 正常、UFW 规则正确,并能从日志看到自己的登录记录。私钥应有安全备份。接下来开始选择并保护 网站域名。
启用前的访问与回退检查
上面的 OpenSSH 配置仅适用于已核对该 profile 与实际 SSH 端口一致的机器;自定义端口必须单独核验规则。端口 80/443 也只在服务确实需要时放行。规则准备不等于防火墙已经启用。保留原会话、验证第二个密钥登录和 sudo,并确认服务商控制台可用;备份原规则后,才按 Ubuntu 官方防火墙流程由管理员启用。不能确认恢复入口时不要启用。失联时通过服务商控制台恢复原规则,而不是继续叠加新限制。
下一步
按当前任务继续,不必一次读完所有内容。
返回项目路线 →