5.1 KiB
Server B 基础系统 Runbook
对应任务:S03
完成日期:2026-06-20
环境:本地开发 Server B,Tailscale IP 100.90.90.91
1. 当前基线
| 项目 | 状态 |
|---|---|
| OS | Ubuntu 24.04.4 LTS |
| 内核 | 6.17.0-35-generic |
| 时间同步 | chrony 4.5,阿里云 NTP 优先、腾讯云 NTP 备用 |
| 防火墙 | nftables 1.0.9,默认拒绝入站 |
| SSH 防护 | fail2ban 1.0.2,sshd jail |
| 系统指标 | sysstat enabled |
| 数据盘 | 无独立盘;开发阶段 /data 位于根分区 |
| NFS | /home/hector/share 经 Tailscale automount |
完整变更前备份位于 B:
/var/backups/lisglosips-s03/20260620184404
目录权限为 0700,包含变更前 tar、包清单、网络/防火墙快照、变更后配置和 SHA-256 清单。
2. 系统用户
| 用户 | 主组 | 用途 | 登录 |
|---|---|---|---|
| lisglosips | lisglosips | API 与通用 Worker | nologin |
| lisglo-recorder | lisglosips | 录音搬运 | nologin |
| lisglo-monitor | lisglosips | 自定义监控采集 | nologin |
不要依赖当前数字 UID/GID;部署脚本应按名称解析。
3. 目录权限
| 目录 | 所有者 | 模式/说明 |
|---|---|---|
/data/mysql |
root:root | 0750,S04 安装后交给 mysql |
/data/redis |
root:root | 0750,S04 安装后交给 redis |
/data/recordings |
lisglo-recorder:lisglosips | 2750 |
/data/prometheus |
root:root | 0750,S06 后调整 |
/data/grafana |
root:root | 0750,S06 后调整 |
/data/homer |
root:root | 0750,S06 后调整 |
/data/backups |
root:root | 0700 |
/opt/lisglosips |
root:lisglosips | 2750 |
/etc/lisglosips |
root:lisglosips | 0750 |
/var/log/lisglosips |
lisglosips:lisglosips | 2750 |
/run/lisglosips、/run/lisglo-recorder、/run/lisglo-monitor 由 /etc/tmpfiles.d/lisglosips.conf 在启动时重建。
4. NFS 自动挂载
/etc/fstab:
100.120.96.71:/mnt/share /home/hector/share nfs _netdev,nofail,noatime,x-systemd.automount,x-systemd.requires=tailscaled.service,x-systemd.after=tailscaled.service,x-systemd.mount-timeout=30s 0 0
验证:
systemctl status home-hector-share.automount
ls /home/hector/share
findmnt /home/hector/share
业务数据库和录音暂不使用该共享。迁移阿里云时重新设计独立数据盘,不复制本地 fstab。
5. 时间同步
配置文件:
/etc/chrony/sources.d/lisglosips.sources- Ubuntu 默认 pool 与 DHCP 动态 NTP 源已在
chrony.conf中禁用。
当前网络会把部分公网 NTP 请求透明转发到不同响应地址,严格 conntrack 会拒绝该回复。因此选用能原地址响应的两个时间源,没有放宽 UDP 123 入站。
chronyc tracking
chronyc sources -v
timedatectl
验收标准:Stratum 非 0、Leap status 为 Normal、System clock synchronized: yes。
6. 防火墙
配置文件:
/etc/nftables.conf/etc/nftables.d/lisglosips.nft- 仓库副本:
infra/server-b/s03/
允许项:
| 来源 | 目标端口 | 用途 |
|---|---|---|
| 100.91.249.119、100.98.167.119 | TCP <SSH_ADMIN_PORT>、443 |
两台现有管理设备;SSH 保留 Key 登录 |
| 100.90.90.90 | TCP 6379 | A 到 Redis |
| 100.90.90.90 | UDP 9060 | A 到 HEP |
| 任意来源 | UDP 41641 | Tailscale 外层直连 |
| 任意来源 | ICMP/ICMPv6 | 诊断与 IPv6 必需控制报文 |
除此之外的入站流量默认丢弃。MySQL 3306、Prometheus 9090、Grafana 3000 和应用内部端口不得开放。
修改规则时:
sudo nft -c -f /etc/nftables.conf
sudo systemctl restart nftables
sudo nft list table inet lisglosips_filter
修改 SSH 端口或防火墙时,必须保持一个已验证 SSH 会话,并在另一个新会话中用 Key 登录验证成功后才能关闭旧会话。
7. Fail2ban
/etc/fail2ban/jail.d/lisglosips.local 启用 sshd jail:
- 10 分钟内失败 5 次;
- 封禁 1 小时;
- 使用 nftables multiport action;
- 当前开发机 100.91.249.119 在 ignoreip 中。
sudo fail2ban-client -t
sudo fail2ban-client status sshd
8. 回滚
仅回滚防火墙:
sudo /var/backups/lisglosips-s03/20260620184404/rollback-firewall.sh
恢复 fstab:
sudo cp -a /var/backups/lisglosips-s03/20260620184404/fstab.before-nfs-fix /etc/fstab
sudo systemctl daemon-reload
恢复 chrony 配置:
sudo cp -a /var/backups/lisglosips-s03/20260620184404/chrony.conf.before-lisglosips /etc/chrony/chrony.conf
sudo rm -f /etc/chrony/sources.d/lisglosips.sources
sudo systemctl restart chrony
系统包升级不建议逐包降级。若升级导致系统级故障,应从变更前虚拟机快照恢复;远端备份主要用于配置审计和局部恢复。
9. 已知事项
- SSH 由
ssh.socket启动:socket enabled、service active,ssh.service显示 disabled 属正常状态。 findmnt --verify对 swapfile 给出常规文件警告,不是解析错误。- 桌面、CUPS、Avahi、rpcbind 等服务仍存在,但已被主机防火墙隔离;精简桌面不属于 S03。
- 本地
/data只是开发布局。迁移阿里云前必须创建独立数据盘并重新验收容量、IOPS、挂载和备份。