# 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`: ```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 ``` 验证: ```bash 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 入站。 ```bash 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 ``、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 和应用内部端口不得开放。 修改规则时: ```bash 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 中。 ```bash sudo fail2ban-client -t sudo fail2ban-client status sshd ``` ## 8. 回滚 仅回滚防火墙: ```bash sudo /var/backups/lisglosips-s03/20260620184404/rollback-firewall.sh ``` 恢复 fstab: ```bash sudo cp -a /var/backups/lisglosips-s03/20260620184404/fstab.before-nfs-fix /etc/fstab sudo systemctl daemon-reload ``` 恢复 chrony 配置: ```bash 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、挂载和备份。