1. 自建有状态服务对底层 KVM 宿主机的权限要求
自建独立发信邮局(Mailcow / Stalwart / Postfix)、关系型数据库(PostgreSQL / MariaDB)与私有云盘(Nextcloud / Immich)依赖多项常被普通云厂商限制的底层网络与存储权限:
| 自建服务与架构需求 | netcup Root Server G12.5 | netcup VPS G12.5 | Hetzner Cloud (CX / CCX) | OVHcloud VPS | Contabo Cloud VPS |
|---|---|---|---|---|---|
| 长期 100% 持续高负载 CPU 数据库、编译、Docker 集群 | 完全允许(EPYC 9645 独享物理核心) | 共享 vCore(长期跑满触发公平使用限频) | CX:共享核心 CCX:独享物理核心 | 共享 vCore | 共享 vCPU |
| 出站 TCP 25 端口(自建邮局) Postfix / Mailcow / Stalwart | 后台自助秒解(在 SCP 防火墙移除默认 Mail block 策略即可) | 后台自助秒解(SCP 防火墙) | 新账号默认封禁,需付清首张月账单满 1 个月后人工申请解封 | 部分区域默认限制,需工单审核 | 完成实名验证后开放 |
| IPv4 与 IPv6 反向解析 (rDNS/PTR) | SCP 面板即时自助设置(含 1×IPv4 + /64 IPv6) | SCP 面板即时自助设置 | 控制台与 API 即时设置 | OVH 面板可设(部分旧档仅分配单个 IPv6) | 客户面板可设 |
| 自定义 ISO 挂载与救援系统 | 支持自助上传任意 ISO + Grml 救援系统 | 支持自助上传任意 ISO + Grml 救援系统 | 内置 ISO 库 + Linux 救援(非列表 ISO 需发工单挂载) | 仅官方系统模板 + Netboot 救援 | 需付费插件或使用 Cloud-Init |
| 快照导出到本地电脑 异地冷备与迁移 | 免费导出 .raw.zst 镜像文件(关机状态下含 1 次免费配额) | 免费导出 .raw.zst 镜像文件 | 仅云端快照(€0.011/GB/月,0% 税率不含税),不支持直接下载裸盘文件 | 付费快照插件 | 仅云端快照 |
| 续费价格稳定性 | 续费维持原合同基础月租(无次年涨价) | 续费维持原合同基础月租 | 固定小时价与月上限 | 常规续费价 | 前 24 个月促销价到期后恢复为原价 |
2. 自建域名邮局完整配置:解封 25 端口、DNS 记录表与 Postfix IPv6 绑定
要让自建邮局向 Gmail、Outlook / Microsoft 365 及企业邮箱稳定直投且通过全部合规校验(SPF: PASS、DKIM: PASS、DMARC: PASS、PTR: PASS),请按顺序完成以下四步:
第一步:在 SCP 移除 netcup Mail block 并用命令验证 25 端口出站
登录 https://www.servercontrolpanel.de → 选择服务器 → 进入 Firewall → 移除默认挂载的 netcup Mail block 规则集并点击 Save。随后在服务器终端执行以下诊断命令,验证到 Gmail MX 服务器的 TCP 25 端口出站是否已打通:
# 1. 验证 IPv4 与 IPv6 到 Gmail 邮件网关的 TCP 25 端口出站连通性(应返回 succeeded / 220 mx.google.com ESMTP)
nc -zv -4 -w5 gmail-smtp-in.l.google.com 25
nc -zv -6 -w5 gmail-smtp-in.l.google.com 25
# 2. 核验当前服务器 IPv4 与发信 IPv6 地址的反向解析(PTR)是否已指向你的邮局域名
dig +short -x $(curl -s4 icanhazip.com)
dig +short -x 2a03:4000:60:1234::1
第二步:配置域名 DNS 解析与 SCP 反向解析(FCrDNS 标准记录表)
假设你的主域名为 example.com,邮局主机名为 mail.example.com,服务器 IPv4 为 46.38.240.10,分配的 IPv6 地址为 2a03:4000:60:1234::1。先在 SCP > Network 将上述两个 IP 的 rDNS 设为 mail.example.com,再在你的 DNS 服务商处添加以下 6 条记录:
| 主机记录 (Host) | 记录类型 | 记录值 (Value) — 请替换为你的实际 IP 与公钥 | 作用说明 |
|---|---|---|---|
mail.example.com | A | 46.38.240.10 | 正向 IPv4 解析,必须与 SCP 中的 IPv4 PTR 完全一致(FCrDNS) |
mail.example.com | AAAA | 2a03:4000:60:1234::1 | 正向 IPv6 解析,必须与 SCP 中的 IPv6 PTR 完全一致 |
example.com | MX | 10 mail.example.com. | 指定收信服务器优先级与主机名 |
example.com | TXT | v=spf1 ip4:46.38.240.10 ip6:2a03:4000:60:1234::1 mx -all | SPF 硬拒绝策略:仅允许该 IPv4/IPv6 与 MX 主机代表域名发信 |
dkim._domainkey.example.com | TXT | v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A... | 2048 位 RSA(或 Ed25519)DKIM 数字签名公钥(由 Rspamd / Mailcow / Stalwart 生成) |
_dmarc.example.com | TXT | v=DMARC1; p=quarantine; rua=mailto:postmaster@example.com; adkim=s; aspf=s | 开启严格对齐校验,未通过 SPF/DKIM 的伪造邮件直接进入隔离区 |
第三步:关键避坑 — 固定 Postfix 出站发信 IPv6 地址(防止 Gmail 拒信)
由于 netcup 分配的是整个 /64 IPv6 子网,若你在网卡上绑定了多个 IPv6 地址或开启了临时隐私地址,Postfix 出站时可能随机选取一个未配置 PTR 反向解析的 IPv6 地址连接 Gmail,导致直接报错 550-5.7.25 The IP address sending this message does not have a PTR record。请在 /etc/postfix/main.cf 中显式锁死发信源 IP:
# /etc/postfix/main.cf 关键发信绑定参数
myhostname = mail.example.com
smtp_helo_name = mail.example.com
inet_protocols = all
# 强制指定出站 SMTP 客户端使用的唯一 IPv4 与已配置 PTR 的 IPv6 地址
smtp_bind_address = 46.38.240.10
smtp_bind_address6 = 2a03:4000:60:1234::1
smtp_tls_security_level = may
smtpd_tls_security_level = may
3. 修复 Docker 绕过 UFW 防火墙漏洞:daemon.json 与 SCP 规则表
在 Linux 默认配置下,当你执行 docker run -p 5432:5432 postgres 时,Docker 守护进程会直接向内核 iptables 的 PREROUTING 与 FORWARD 链插入放行规则,完全绕过系统内的 ufw 或 firewalld 的 INPUT 链,导致数据库直接暴露在公网扫描之下。
双层防御配置方案(主机内部 + SCP 硬件外层)
第一层(容器侧):在 compose.yaml 中将内部数据库、Redis 等端口严格绑定在 127.0.0.1,并配置 /etc/docker/daemon.json 限制容器日志体积(防止日志写满 NVMe 导致无法创建 SCP 快照):
# /etc/docker/daemon.json(启用 IPv6 表管理 + 全局容器日志轮转限制为单容器最多 30MB)
{
"ipv6": true,
"fixed-cidr-v6": "fd00:dead:beef::/64",
"ip6tables": true,
"iptables": true,
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
第二层(SCP 宿主机硬件防火墙侧):在 SCP > Firewall 中配置以下宿主机级入站白名单。由于 SCP 防火墙在宿主机虚拟网桥(tap 接口)外侧过滤数据包,哪怕容器在系统内错误绑定了 0.0.0.0:5432,公网流量也会在进入虚拟机前被 SCP 直接丢弃:
| 规则序号 | 方向 (Direction) | 协议 (Protocol) | 源地址 (Source) | 目标端口 (Port) | 动作 (Action) | 用途说明 |
|---|---|---|---|---|---|---|
#1 | INGRESS(入站) | TCP | 0.0.0.0/0, ::/0 | 22 | ACCEPT | SSH 远程管理(建议改为密钥登录) |
#2 | INGRESS(入站) | TCP | 0.0.0.0/0, ::/0 | 80, 443 | ACCEPT | Web HTTP / HTTPS 与反向代理 |
#3 | INGRESS(入站) | UDP | 0.0.0.0/0, ::/0 | 443 | ACCEPT | HTTP/3 (QUIC) 协议支持 |
#4 | INGRESS(入站) | TCP | 0.0.0.0/0, ::/0 | 25, 465, 587, 993 | ACCEPT | 仅在运行自建邮局时放行 SMTP / IMAPS |
#5 | INGRESS(入站) | ICMP / ICMPv6 | 0.0.0.0/0, ::/0 | 全部 | ACCEPT | 允许 Ping 监测与 IPv6 邻居发现 (NDP / PMTUD) |
#6 | INGRESS(入站) | ALL(其余全部) | 0.0.0.0/0, ::/0 | 1-65535 | DROP | 默认丢弃所有未明确放行的公网入站连接(彻底保护 Docker 内部端口) |
4. PostgreSQL 17 生产环境 NVMe 调优参数(以 RS 1000 G12.5 4C/8G 为例)
PostgreSQL 默认的 postgresql.conf 极其保守(shared_buffers 默认仅 128 MB,random_page_cost 默认按机械硬盘设为 4.0)。在配备 4 核独享 EPYC 9645 + 8 GB DDR5 + 高速 NVMe 的 RS 1000 G12.5 上,建议在 /etc/postgresql/17/main/conf.d/99-netcup-nvme.conf 中写入以下调优参数:
# 针对 4 核独享 EPYC + 8 GB DDR5 + NVMe RAID 的 PostgreSQL 17 生产调优参数
max_connections = 100
shared_buffers = 2GB # 物理内存的 25%
effective_cache_size = 5GB # 物理内存的 60%–65%(供查询规划器评估 OS 缓存)
maintenance_work_mem = 512MB # 加速 VACUUM 与 CREATE INDEX
work_mem = 16MB # 单次排序/哈希表内存上限
wal_buffers = 16MB
min_wal_size = 1GB
max_wal_size = 4GB
checkpoint_completion_target = 0.9
# 关键:告知查询规划器底层为低延迟 NVMe SSD(默认 4.0 会导致规划器拒绝使用索引扫描)
random_page_cost = 1.1
effective_io_concurrency = 200
# 并行查询线程数匹配 RS 1000 的 4 颗物理核心
max_worker_processes = 4
max_parallel_workers_per_gather = 2
max_parallel_workers = 4
5. Nextcloud / Immich 备份策略与推荐服务器型号
- 增量热备 + 离线整机冷备(3-2-1 架构):日常通过
pg_dump+restic每日凌晨加密备份至异地对象存储或另一台存储服务器;每逢跨大版本升级前,在 SCP 将机器关机 3 分钟创建 Offline Snapshot,导出.raw.zst全盘镜像下载到本地存档。 - 按自建规模匹配机型与当前实时优惠码:
- 轻量套件(Stalwart 邮局 + 博客 + 反代,2–4 GB 内存):选 RS 500 G12.5 或 VPS 500 G12.5(首单配合 新客户首单券(0% 税率立减 €4.20))。
- 主力全栈(Mailcow 全功能邮局 + PostgreSQL + Nextcloud,8 GB 内存):选 RS 1000 G12.5(4 核独享 + 8 GB DDR5 + 128 GB NVMe,优惠:免费 2 个月)。
- 多租户与高算力栈(Immich 机器学习人脸特征索引 + GitLab CI/CD + 多库集群,16 GB 内存):选 RS 2000 G12.5(8 核独享 + 16 GB DDR5 + 256 GB NVMe,优惠:免费 1 个月)。
netcup 新客户首单优惠码(€4.20 不含税 / 票面 €5)
- 新账户首单通用
- 0% 税率直接抵扣 €4.20(含 19% 税票面 €5)
- 不适用于域名、VPS ARM、VPS Lite
立减 €4.20(0% 税率不含税)
价值约 €4.20(购物车按 0% 税率(不含税)一次性抵扣;含 19% 德国增值税票面为 €5.00)
36nc178336462704 个备用码
36nc1783364627136nc1783364627336nc1783364627236nc17833646274
产品码为一次性使用。如果 netcup 提示该码已被使用,请换下一个。
免费 2 个月
价值约 €36.52(2 × €18.26 · 12 个月合约月价,0% 税率(不含税))
6874nc179421525104 个备用码
6874nc179431348606874nc179403917806874nc179421966206874nc17940129280
产品码为一次性使用。如果 netcup 提示该码已被使用,请换下一个。
免费 1 个月
价值约 €34.20(1 × €34.20 · 12 个月合约月价,0% 税率(不含税))
6875nc179379976104 个备用码
6875nc179390868106875nc179388063806875nc179422349406875nc17939016850
产品码为一次性使用。如果 netcup 提示该码已被使用,请换下一个。
免费 1 个月
价值约 €12.18(1 × €12.18 · 12 个月合约月价,0% 税率(不含税))
6877nc179390503804 个备用码
6877nc179396344116877nc179405205506877nc179405148606877nc17942858710
产品码为一次性使用。如果 netcup 提示该码已被使用,请换下一个。