ServerFakt欧洲服务器与主机技术参考

自建服务配置实战手册:自建邮局(25 端口 / Postfix / DNS)、Docker 防火墙加固与 PostgreSQL 调优

提供可直接复制进生产环境的配置文件与命令:涵盖在 netcup KVM 服务器上解封 TCP 25 端口、配置正反向一致解析(FCrDNS / PTR)与 Postfix IPv6 绑定、封堵 Docker 绕过 UFW 防火墙漏洞、以及针对 8 GB DDR5 + NVMe 的 PostgreSQL 17 内核调优。

数据核对: · 约 14 分钟

1. 自建有状态服务对底层 KVM 宿主机的权限要求

自建独立发信邮局(Mailcow / Stalwart / Postfix)、关系型数据库(PostgreSQL / MariaDB)与私有云盘(Nextcloud / Immich)依赖多项常被普通云厂商限制的底层网络与存储权限:

自建服务与架构需求netcup Root Server G12.5netcup VPS G12.5Hetzner Cloud (CX / CCX)OVHcloud VPSContabo 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.comA46.38.240.10正向 IPv4 解析,必须与 SCP 中的 IPv4 PTR 完全一致(FCrDNS)
mail.example.comAAAA2a03:4000:60:1234::1正向 IPv6 解析,必须与 SCP 中的 IPv6 PTR 完全一致
example.comMX10 mail.example.com.指定收信服务器优先级与主机名
example.comTXTv=spf1 ip4:46.38.240.10 ip6:2a03:4000:60:1234::1 mx -allSPF 硬拒绝策略:仅允许该 IPv4/IPv6 与 MX 主机代表域名发信
dkim._domainkey.example.comTXTv=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A...2048 位 RSA(或 Ed25519)DKIM 数字签名公钥(由 Rspamd / Mailcow / Stalwart 生成)
_dmarc.example.comTXTv=DMARC1; p=quarantine; rua=mailto:[email protected]; 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)用途说明
#1INGRESS(入站)TCP0.0.0.0/0, ::/022ACCEPTSSH 远程管理(建议改为密钥登录)
#2INGRESS(入站)TCP0.0.0.0/0, ::/080, 443ACCEPTWeb HTTP / HTTPS 与反向代理
#3INGRESS(入站)UDP0.0.0.0/0, ::/0443ACCEPTHTTP/3 (QUIC) 协议支持
#4INGRESS(入站)TCP0.0.0.0/0, ::/025, 465, 587, 993ACCEPT仅在运行自建邮局时放行 SMTP / IMAPS
#5INGRESS(入站)ICMP / ICMPv60.0.0.0/0, ::/0全部ACCEPT允许 Ping 监测与 IPv6 邻居发现 (NDP / PMTUD)
#6INGRESS(入站)ALL(其余全部)0.0.0.0/0, ::/01-65535DROP默认丢弃所有未明确放行的公网入站连接(彻底保护 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)

4 个备用码
  • 36nc17833646272
  • 36nc17833646271
  • 36nc17833646274
  • 36nc17833646273

产品码为一次性使用。如果 netcup 提示该码已被使用,请换下一个。

详情与价格 →
Root Server 独享· 新老客户均可

RS 1000 G12.5

  • 4 独享核心
  • 8 GB 内存
  • 128 GB NVMe
  • 2.5 Gbit/s

免费 2 个月

价值约 €36.52(2 × €18.26 · 12 个月合约月价,0% 税率(不含税))

6874nc17940391780
带码打开 netcup 购物车 →
4 个备用码
  • 6874nc17942152510
  • 6874nc17940129280
  • 6874nc17942196620
  • 6874nc17943134860

产品码为一次性使用。如果 netcup 提示该码已被使用,请换下一个。

详情与价格 →
Root Server 独享· 新老客户均可

RS 2000 G12.5

  • 8 独享核心
  • 16 GB 内存
  • 256 GB NVMe
  • 2.5 Gbit/s

免费 1 个月

价值约 €34.20(1 × €34.20 · 12 个月合约月价,0% 税率(不含税))

6875nc17939086810
带码打开 netcup 购物车 →
4 个备用码
  • 6875nc17942234940
  • 6875nc17938806380
  • 6875nc17939016850
  • 6875nc17937997610

产品码为一次性使用。如果 netcup 提示该码已被使用,请换下一个。

详情与价格 →
VPS· 新老客户均可

VPS 1000 G12.5

  • 4 vCore 共享核心
  • 8 GB 内存
  • 128 GB SSD
  • 2.5 Gbit/s

免费 1 个月

价值约 €12.18(1 × €12.18 · 12 个月合约月价,0% 税率(不含税))

6877nc17942858710
带码打开 netcup 购物车 →
4 个备用码
  • 6877nc17939050380
  • 6877nc17939634411
  • 6877nc17940520550
  • 6877nc17940514860

产品码为一次性使用。如果 netcup 提示该码已被使用,请换下一个。

详情与价格 →