安全加固 OCI Linux 服务器
以保留恢复入口和逐步验证为前提,为 OCI Debian/Ubuntu 实例配置用户、更新、SSH、UFW、Fail2ban 和自动安全更新。
[!warning] 最重要的规则 始终保留一个已连接的 SSH 会话;任何 SSH 或防火墙变更都先添加新入口并验证,再移除旧入口。修改前确认 OCI Console、MFA 和控制台连接可用。
安全加固 OCI Linux 服务器
目标
适用于 Debian 12、Ubuntu 22.04/24.04。完成后:
- 日常使用非 root sudo 用户;
- 系统安装安全更新;
- SSH 仅允许密钥,禁止 root 和密码远程登录;
- OCI 云侧与 UFW 同时执行最小端口策略;
- Fail2ban 观察真实 SSH 端口;
- 新会话和重启验证通过;
- 所有修改都有备份和恢复路径。
0. 建立基线与恢复点
set -o pipefail
date -Is
cat /etc/os-release
uname -a
uname -m
whoami
sudo ss -lntup
sudo systemctl --failed
sudo ufw status verbose 2>/dev/null || true
sudo nft list ruleset 2>/dev/null | sed -n '1,160p'
在 OCI 控制台记录实例、VNIC、NSG 和引导卷 OCID。保持当前 SSH 会话打开。
1. 更新系统
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get -y upgrade
sudo apt-get install -y ca-certificates curl vim git jq ufw fail2ban unattended-upgrades
如果提示需要重启,先完成登录入口准备,再安排重启。
2. 创建日常管理员
用 operator 举例,实际选择不易猜但可识别的用户名:
sudo adduser operator
sudo usermod -aG sudo operator
sudo install -d -m 700 -o operator -g operator /home/operator/.ssh
sudo install -m 600 -o operator -g operator ~/.ssh/authorized_keys /home/operator/.ssh/authorized_keys
从本机新开会话验证:
ssh -i ~/.ssh/oci_a1 operator@SERVER_IP
sudo -v
只有新用户和 sudo 都成功后,才能继续禁止默认用户或 root。
3. 先配置 OCI 云侧规则
在 NSG/Security List 中保留当前 SSH 端口,并把来源收紧到可信 CIDR。计划改端口时,先额外添加新端口规则,不要删除旧端口。
4. 配置 UFW
变量示例:
ADMIN_CIDR='203.0.x.x/32'
SSH_PORT='22'
执行:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow from "$ADMIN_CIDR" to any port "$SSH_PORT" proto tcp comment 'trusted SSH'
sudo ufw limit "$SSH_PORT"/tcp
sudo ufw --force enable
sudo ufw status verbose
limit 不能代替来源限制和密钥认证。不要安装来源不明的 iptables 脚本,也不要为了保护 UFW 而长期 apt-mark hold ufw,这会阻碍安全更新。
5. 写入 SSH 加固 drop-in
先备份:
stamp=$(date +%Y%m%d-%H%M%S)
sudo cp -a /etc/ssh/sshd_config "/etc/ssh/sshd_config.$stamp.bak"
sudo install -d -m 755 /etc/ssh/sshd_config.d
创建 /etc/ssh/sshd_config.d/60-local-hardening.conf:
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
X11Forwarding no
MaxAuthTries 4
LoginGraceTime 30
AllowUsers operator
检查有效配置:
sudo sshd -t
sudo sshd -T | grep -E '^(port|permitrootlogin|pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication|allowusers)'
sudo systemctl reload ssh || sudo systemctl reload sshd
从本机新建 operator 密钥会话,并确认旧会话仍存在。
6. 是否修改 SSH 端口
修改端口只能减少日志噪声,不是主要安全措施。若仍要修改:
- OCI NSG 和 UFW 先允许新端口;
- 在 drop-in 添加
Port 2222; sudo sshd -t;- reload SSH;
sudo ss -lntp | grep 2222;- 从本机
ssh -p 2222 ...新建会话; - 重启后再次验证;
- 最后删除旧端口云规则和 UFW 规则。
[!warning] Ubuntu 24.04 的 socket activation Ubuntu 24.04 的 sshd 监听端口由 systemd
ssh.socket管理,generator 会自动从 sshd_config 的Port指令生成 socket 配置。切勿再手动创建/etc/systemd/system/ssh.socket.d/override.conf,否则ListenStream重复导致Address already in use、socket failed、新连接全断。详见 Ubuntu 24.04 改 SSH 端口的 socket activation 陷阱。改端口后务必同步 UFW 和云侧规则,否则新端口被防火墙挡住,见 OCI SSH 与端口连通性排查。
7. 配置 Fail2ban
创建 /etc/fail2ban/jail.d/sshd.local:
[sshd]
enabled = true
backend = systemd
port = 22
maxretry = 5
findtime = 10m
bantime = 1h
若改端口,必须同步修改 port。验证:
sudo fail2ban-client -t
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
8. 自动安全更新与时间
sudo dpkg-reconfigure -plow unattended-upgrades
timedatectl status
systemctl status systemd-timesyncd --no-pager 2>/dev/null || true
自动更新仍需观察失败和待重启状态:
test -f /var/run/reboot-required && cat /var/run/reboot-required || true
journalctl -u unattended-upgrades --since '7 days ago' --no-pager
9. 最终验证
sudo sshd -t
sudo systemctl is-active ssh || sudo systemctl is-active sshd
sudo systemctl is-active fail2ban
sudo ufw status verbose
sudo ss -lntup
sudo systemctl --failed
然后:
- 新 SSH 会话使用管理员密钥成功
- 密码登录失败
- root SSH 登录失败
- sudo 成功
- OCI 与 UFW 仅开放预期端口
- 重启后再次完成上述验证
- 串行控制台或 Run Command 恢复路径可用
回滚
在旧会话中:
sudo rm -f /etc/ssh/sshd_config.d/60-local-hardening.conf
sudo cp -a /etc/ssh/sshd_config.TIMESTAMP.bak /etc/ssh/sshd_config
sudo sshd -t
sudo systemctl reload ssh || sudo systemctl reload sshd
将 TIMESTAMP 替换为实际备份。不要在配置语法未通过时 reload。
Related notes
- 所属 MOC:甲骨文云服务器 MOC
- 云侧收尾:完成实例加固后的 OCI 控制台配置
- 网络层:OCI VCN、子网、VNIC 与安全层
- UFW:UFW
- 恢复:OCI 服务器生命周期与恢复阶梯
- 改端口陷阱:Ubuntu 24.04 改 SSH 端口的 socket activation 陷阱
- fail2ban 误封:Fail2ban 误封导致 SSH 连接被立即关闭
- 加密组网:在 OCI VPS 上接入 Tailscale 做远程访问