KVM 架构的 VPS 如果服务商不提供自定义 ISO,预装系统可能带各种 agent、脚本与遗留账号,等同于把控制权部分让渡给厂商。用 DD 把磁盘镜像直接覆写为官方系统镜像,可以拿到一份干净的 Debian。本文给出 DD 流程,并补上拿到机器后立刻该做的安全加固。
风险提示:DD 会清空磁盘,IP 与 SSH 凭据均会变化;登录方式失败将无法补救。务必先确认厂商提供 VNC/IPMI 救援入口,或快照可回滚。
用 DD 重装为干净的 Debian 选脚本 社区常用脚本有两类:
MollyLau/leitbogioro 的 Network-Reinstall-System-Modify :维护活跃,支持 Debian 11/12、Ubuntu、AlmaLinux 等
bin456789/reinstall :覆盖更广,支持 BIOS/UEFI 双模式
下面以 reinstall 为例:
1 2 3 4 5 6 apt update && apt install -y wget xz-utils openssl wget --no-check-certificate -O reinstall.sh \ https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.shchmod +x reinstall.sh
执行重装 1 2 3 4 5 6 7 NEW_PWD=$(openssl rand -base64 18)echo "New root password: $NEW_PWD " ./reinstall.sh debian 12 --password "$NEW_PWD " reboot
重装过程通常 5-15 分钟,期间 SSH 不可达。安装结束后,新系统的 SSH 默认端口可能被脚本改写(reinstall 默认仍是 22,部分老脚本如 DebianNET 会改成 3022),用脚本输出的端口连入:
系统初始化 1 2 3 4 5 6 7 8 9 apt update && apt full-upgrade -y apt install -y vim sudo curl ca-certificates timedatectl set-timezone Asia/Shanghai apt install -y unattended-upgrades dpkg-reconfigure -f noninteractive unattended-upgrades
DNS 在 Debian 12 默认由 systemd-resolved 管理,不要直接改 /etc/resolv.conf 也不要 chattr +i,正确做法:
1 2 3 4 5 6 7 8 9 mkdir -p /etc/systemd/resolved.conf.dcat > /etc/systemd/resolved.conf.d/dns.conf <<'EOF' [Resolve] DNS=1.1.1.1 8.8.8.8 FallbackDNS=9.9.9.9 DNSOverTLS=opportunistic EOF systemctl restart systemd-resolved resolvectl status
加普通用户与 sudo 1 2 3 USERNAME=ops adduser "$USERNAME " usermod -aG sudo "$USERNAME "
把 sudo 规则写到 /etc/sudoers.d/,并用 visudo 校验语法(直接 chmod +w /etc/sudoers 是错误做法,会破坏权限位):
1 2 3 4 5 6 visudo -f /etc/sudoers.d/${USERNAME} ${USERNAME} ALL=(ALL) ALL
visudo 在保存时会校验语法错误,比直接编辑 /etc/sudoers 安全得多。
SSH 加固 生成密钥(在你本机,不是 VPS 上) 1 2 ssh-keygen -t ed25519 -C "your_email@example.com"
不要再用 ssh-keygen -b 1024,1024 位 RSA 早已不安全;如必须 RSA,最低 4096 位。
把本机 ~/.ssh/id_ed25519.pub 内容追加到 VPS 上 ~ops/.ssh/authorized_keys:
1 2 3 4 mkdir -p ~/.ssh && chmod 700 ~/.ssh vim ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
或在本机直接:
1 ssh-copy-id -p 22 ops@your-ip
改 sshd 配置 1 vim /etc/ssh/sshd_config.d/99-hardening.conf
写入(这种放在 sshd_config.d/ 的方式比改主配置更可靠,发行版升级时不会冲突):
1 2 3 4 5 6 7 8 Port 3022 PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes KbdInteractiveAuthentication no MaxAuthTries 3 LoginGraceTime 20 AllowUsers ops
先开新端口的 SSH 监听验证可用,再断开旧连接 :
1 2 3 4 sshd -t systemctl reload ssh
防火墙 UFW 是 iptables/nftables 的简化前端:
1 2 3 4 5 6 7 8 apt install -y ufw ufw default deny incoming ufw default allow outgoing ufw allow 3022/tcp comment 'SSH' ufw enable ufw status verbose
UFW 不会自动识别云厂商安全组,记得到控制台同步放行。
暴力破解防护 虽然已经禁用密码登录,但放一层 fail2ban 兜底,防止暴露的非 22 端口被扫描爆破:
1 2 3 4 5 6 7 8 9 10 11 apt install -y fail2bancat > /etc/fail2ban/jail.d/sshd.local <<'EOF' [sshd] enabled = true port = 3022 maxretry = 5 findtime = 10m bantime = 1h EOF systemctl restart fail2ban fail2ban-client status sshd
验收清单 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ssh -p 3022 root@your-ip ssh -p 3022 -o PreferredAuthentications=password ops@your-ip ssh -p 22 ops@your-ip systemctl status apt-daily-upgrade.timer ufw status
四项符合预期,则一台干净、自带补丁、最小开放面、密钥+IP白名单+fail2ban 三层防护的 Debian 主机就备好了。后续可以按业务需要安装 Web、代理、数据库等服务。