惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog
GbyAI
GbyAI
Google DeepMind News
Google DeepMind News
博客园 - 【当耐特】
阮一峰的网络日志
阮一峰的网络日志
The Cloudflare Blog
N
Netflix TechBlog - Medium
P
Privacy International News Feed
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
G
Google Developers Blog
Recorded Future
Recorded Future
The Hacker News
The Hacker News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
B
Blog RSS Feed
G
GRAHAM CLULEY
A
Arctic Wolf
N
News | PayPal Newsroom
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
The Register - Security
The Register - Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
V
Visual Studio Blog
Webroot Blog
Webroot Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 三生石上(FineUI控件)
aimingoo的专栏
aimingoo的专栏
P
Proofpoint News Feed
H
Heimdal Security Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Microsoft Azure Blog
Microsoft Azure Blog
小众软件
小众软件
M
MIT News - Artificial intelligence
V2EX - 技术
V2EX - 技术
Jina AI
Jina AI
TaoSecurity Blog
TaoSecurity Blog
NISL@THU
NISL@THU
云风的 BLOG
云风的 BLOG
爱范儿
爱范儿
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
WordPress大学
WordPress大学
V
V2EX
Cyberwarzone
Cyberwarzone
Stack Overflow Blog
Stack Overflow Blog
Cloudbric
Cloudbric
H
Hackread – Cybersecurity News, Data Breaches, AI and More

Dejavu's Blog

甲骨文 ARM 实例部署 Gemma 4 模型 Headscale + Tailscale 组建虚拟专用网 在 Linux 上使用 Yubikey OpenPGP 应用 BuyVM VPS 块存储挂载教程 Alpine Linux 服务器配置指南 Alpine Linux 安装 Cloudflared Docker 多容器共享中心数据库 安装 Komari 服务器监控工具 Scaleway VPS 安装 Debian Linux Debian 13 下部署 AsmBB 论坛 使用 Kopia 自动化备份服务器数据 给 Docker 启用 IPv6 支持 Netcup 服务器安装自定义 ISO 镜像 烽火 HG5582A 光猫开启桥接模式 Docker 自托管 Shlink 短链服务 部署 Obsidian LiveSync 实时同步服务指南 我的 2025 年不完全回顾 Linux 下 Intel 核显驱动配置与硬件加速 Fedora Linux 安装配置记录 2025 年优雅地自托管 RSS 服务 Woodpecker CI 和 Gitea 实现 Hugo 自动部署 Gitea/Forgejo 集成 Woodpecker CI/CD 在 Blinko 中使用 Ollama 作为 AI 供应商 Docker 部署 Gitea/Forgejo Plausible CE 启用城市级地理位置识别 Blinko 开源 AI 知识库 Docker 部署指南 Netcup 免税账号注册及购买服务器全记录 Docker 自托管 Cloudreve Pro 私有网盘服务 GiffGaff SIM 卡使用体验和注意事项 简体中文互联网在变得糟糕吗? 如何低成本申请 S/MIME 证书用于个人邮件服务 迁移到 NameCrane Mail 域名邮箱套件服务 香烟与咖啡 在 Windows 中使用 Yubikey 的 OpenPGP 应用 Windows 11 IoT LTSC 养老指南 巧用浏览器生成 HAR 文件批量下载所需网页资源 聊聊静态网站的评论系统 在 Hugo 站点中优雅地展示实况照片 使用 snac 部署一个简洁优雅的 ActivityPub 实例 当 25 岁来临的时候 断网的这两年 从 Bitwarden/Vaultwarden 到 KeePassXC 也许是 Android 上最好的本地播放器 - 椒盐音乐 2023 半年小结 写一个好玩的 Hugo 货币汇率转换短代码 写一个 Hugo 短代码将不同类别的总字数统计转换为书名显示 海信 Touch Lite 墨水屏音乐阅读器的简单体验 从 Debian 11(bullseye) 无感升级到 Debian 12(bookworm) 使用 GitHub Actions 自动提交 URL 到 IndexNow 批量重写 Git 历史提交记录 使用 cgit 托管小小的也很可爱的 Git 服务器 在 Debian 上使用 stagit 和 Nginx 的简单 Git 服务器 托管简单 Git 服务器的一些尝试 使用 stagit 自托管纯静态 Git 存储库 使用 Docker 快速部署单人 Fediverse 实例 我是如何建立自己的个人博客的? 简单、隐私友好的谷歌分析替代品,Plausible 自托管部署指南 服务器使用 Cloudflare CDN 的最佳实践 甲骨文服务器分配并启用 IPv6 地址 Git 版本控制学习笔记(二) Cloudflare WAF 防护策略简易指南 Mastodon 服务器批量导入自定义表情 低成本自托管 Mastodon 实例简明指南 自托管服务指南──有了服务器可以做什么? 使用 Miniflux + RSSHub 打造个人 RSS 阅读器 构建支持多种 CPU 架构的 Docker 镜像 一个可自托管的静态短链接应用 别了,二〇二二! Duplicacy CLI 进阶使用指南 Duplicacy CLI 备份工具的基本使用 初探 Cloudflare 零信任 - 通过 Docker 部署 Bitwarden 密码管理器 Yubikey 转运日志及上手指南 初探 Cloudflare 零信任 — 通过 Cloudflare Tunnel 搭建 SSH 聊天室 初探 Cloudflare 零信任 - 通过 Cloudflare Tunnel 访问服务 某科学的 PGP 算号指南 2022 年的 MacBook Air M1 使用体验及应用推荐 使用 Vercel 和 Supabase 自托管 Cusdis 评论系统 为什么你的搜索引擎不好用? 个人在 Windows 上常用软件清单 macOS 基础开发环境设置指南 在 macOS 上使用 Canokey 的 OpenPGP 应用 提取 Windows UWP 应用商店的安装包以供离线安装 Git 版本控制学习笔记(一) 使用 Notion 管理 GitHub Star 项目 使用 Vercel 免费部署 Giscus 评论系统 将博客评论从 Utterances 无缝迁移到 Giscus Canokey 签名和认证应用指南 Canokey 的基本使用指南 Canokey Pigeon 揽件日志及简单开箱 关于 Google Play 保护机制和 DRM 安全等级的那些事 记录一次捡垃圾装机 GitHub 使用 GPG 密钥提交签名认证 使用 Scoop 管理 Windows 下的软件和开发环境 Windows Terminal+PowerShell 7 打造 Windows 下最好用的终端 一个好用的 Telegram 文件批量上传/下载工具 Clash for Windows 优雅地使用 TUN 模式接管系统流量 全平台搭建 Hexo 静态博客指南 尝试将 Manjaro 作为主力操作系统使用 Hexo 进行 SEO 优化的基本指南 使用本地代理给 Git 和 NPM 加速
在 Debian 13 上自托管 Mox 邮局
Dejavu Moe · 2026-01-18 · via Dejavu's Blog

介绍

Mox 一体化自托管邮件服务,摒弃传统邮件系统依赖众多组件拼装的复杂架构,通过单一二进制文件实现 简单、安全、现代 且真正 去中心化 的邮件服务。

核心功能特性

  • 全协议支持: 完整支持 SMTP/IMAP4 及 SPF/DKIM/DMARC 等核心邮件协议;
  • 开箱即用: 内置 Web 管理后台 (Web Admin)、网页版邮件客户端 (Web Mail)、Web API 与 WebHooks;
  • 自动化安全: 全自动 ACME 证书管理,支持 DANE、MTA-STS 和 REQUIRETLS 构成的全链路强制 TLS 验证;
  • 智能过滤: 基于贝叶斯原理的垃圾邮件过滤系统,支持自动学习;
  • 现代标准: 严格遵循现代 RFC 规范及拓展,支持国际化电子邮件 (EAI) 及 Prometheus 结构化监控指标;
  • 极简运维: 单个二进制文件,极简的「无痛」运维,轻松部署与平滑升级。

此外,它的资源占用极低,1vCPU、512MB RAM 即可流畅运行。

resource.webp

先决条件

本文假设你已具备电子邮件托管的基础知识,并对 DNS 记录及邮件等基本协议有初步的了解。

选择服务器

选择开放邮件端口并支持 反向 DNS 解析 (rDNS) 的云服务提供商,本文使用 Netcup VPS nano G11s 部署,月付仅需 13.21 元。

设置 rDNS 解析

  1. 正向解析: 将域名的 A/AAAA 记录分别指向服务器 IPv4/IPv6
  2. 反向解析 (rDNS): 将服务器 IPv4 和 IPv6 地址的 rDNS 指向邮件服务器主机名

修正主机名

sudo hostnamectl set-hostname via.moe
sudo systemctl restart systemd-hostnamed

确保 /etc/hosts 类似这样:

127.0.0.1          localhost
# 公网 IPv4/IPv6
<IPv4 地址>        via.moe
<IPv6 地址>        via.moe

::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

开放端口

除了 SSH 端口外,Mox 需要另外开放以下端口(均为 TCP 协议)

端口用途
80HTTP/ACME
443HTTPS
25SMTP
465SMTPS
993IMAP

对于现代 Linux 操作系统,不再推荐使用 iptables + UFW 来管理网络防火墙,请考虑迁移到 nftables。

参考阅读: 配置 nftables 防火墙教程 ,下面是一个示例 nftables 配置文件:

#!/usr/sbin/nft -f
# 用途:仅用于 Mox 邮件服务 + SSH
# 开放端口:51973(SSH), 80, 443, 25, 465, 993

# 清空现有规则
flush ruleset

table inet filter {
  # ============================================================
  # INPUT 链:处理入站流量
  # ============================================================
  chain input {
    # 规则外流量拒绝
    type filter hook input priority filter; policy drop;

    # 放行已建立连接
    ct state established, related accept
    # 丢弃无效包
    ct state invalid drop
    # 允许回环接口
    iif "lo" accept
    # 允许 IPv6 NDP
    ip6 nexthdr icmpv6 icmpv6 type { nd-neighbor-solicit, nd-neighbor-advert, nd-router-advert } accept
    # 允许 ICMP (速率限速)
    ip protocol icmp limit rate 4/second accept
    ip6 nexthdr icmpv6 icmpv6 type echo-request limit rate 4/second accept
    # 允许 SSH 服务(修改实际的端口号)
    tcp dport 22122 accept

    # 4. 允许 Mox 邮件与 Web 服务
    # 80, 443: 用于 Mox Webmail 界面及自动申请 SSL 证书 (ACME)
    # 25:  SMTP 接收外域邮件 (必须全球开放)
    # 465: SMTPS 客户端发信
    # 993: IMAPS 客户端收信
    tcp dport { 25, 80, 443, 465, 993 } accept
  }

  # ============================================================
  # FORWARD 链:转发流量
  # ============================================================
  chain forward {
    type filter hook forward priority filter; policy drop;
  }

  # ============================================================
  # OUTPUT 链:出站流量
  # ============================================================
  chain output {
    # 默认允许所有出站
    type filter hook output priority filter; policy accept;
  }
}

启用 DNSSEC

Mox 原生支持 RFC 标准的 DANE MTA-STS ,这是现代邮件服务必备的安全特性。启用 DANE 必须先为域名开启 DNSSEC 保护。

若不清楚如何操作,建议查阅域名服务商帮助手册,或参考 Cloudflare DNSSEC 指南

首次设置后建议验证一下 DNSSEC 效果,可使用 DNSViz 在线工具,或 delv 命令:

delv via.moe
; fully validated
via.moe.                300     IN      A       <IP>
via.moe.                300     IN      RRSIG   A 13 2 300 20260118172803 20260116152803 34505 via.moe. /sSl/<…………签名…………>

使用 Unbound

安装 Unbound

由于 Linux 自带的 systemd-resolved 不支持本地 DNSSEC 解析,我们需要部署 Unbound 作为本地递归 DNS 服务。

Unbound 是一款高效的递归型 DNS 解析工具,主打隐私安全以及对现代开放标准的支持,在 DNSSEC 验证方面表现出色。

安装所需软件包:

sudo apt install bind9-dnsutils \
                 unbound \
                 dns-root-data \
                 unbound-anchor

配置 Unbound

设置信任锚点及权限

sudo unbound-anchor -a /var/lib/unbound/root.key || true
sudo chown unbound:unbound /var/lib/unbound/root.key

备份默认配置

sudo cp -r /etc/unbound/unbound.conf.d /etc/unbound/unbound.conf.d.bak

新建配置文件

sudo vim /etc/unbound/unbound.conf.d/local-resolver.conf

示例如下:

server:
    # 只监听 localhost(防止公网暴露)
    interface: 127.0.0.1
    # 如果服务器禁用 IPv6,可注释掉此行并加 do-ip6: no
    interface: ::1

    # 端口默认 53,无需改
    port: 53

    do-ip4: yes
    do-ip6: yes             # 如果无 IPv6,改为 no

    # 只允许本地访问(Mox 只需本地查询)
    access-control: 127.0.0.0/8 allow
    access-control: ::1/128 allow

    # 其他 hardening(提升安全和隐私)
    harden-dnssec-stripped: yes
    harden-referral-path: yes
    qname-minimisation: yes
    use-caps-for-id: yes
    aggressive-nsec: yes

    # 根提示(Debian 包已提供)
    root-hints: "/usr/share/dns/root.hints"

    # 允许处理较大的 DNSSEC 数据包(避免截断导致的验证失败)
    edns-buffer-size: 1232

    # 隐私隐藏
    hide-identity: yes
    hide-version: yes

    # chroot 和用户(Debian 默认已设,无需重复)
    # chroot: "/var/lib/unbound"
    # username: "unbound"

# 如果想禁用 remote-control(可选,如果你不用 unbound-control 命令)
# remote-control:
#     control-enable: no

推荐设置

cat <<EOF >/etc/unbound/unbound.conf.d/ede.conf
server:
    ede: yes
    val-log-level: 2
EOF

检查配置

禁用 systemd-resolved 服务

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
sudo systemctl mask systemd-resolved
sudo rm /etc/resolv.conf
# 根据需要选择是否启用 IPv6 支持
sudo bash -c 'cat << EOF > /etc/resolv.conf
nameserver 127.0.0.1
nameserver ::1
EOF'
# 锁定文件编辑
sudo chattr +i /etc/resolv.conf
# 若需要解锁
sudo chattr +i /etc/resolv.conf

启动 Unbound 服务

sudo systemctl daemon-reload
sudo systemctl start unbound
sudo systemctl enable unbound
sudo systemctl status unbound

检查监听状态

sudo ss -tulpn | grep :53
# 就像这样
udp   UNCONN 0      0                             127.0.0.1:53         0.0.0.0:*    users:(("unbound",pid=770,fd=3))
udp   UNCONN 0      0                                 [::1]:53            [::]:*    users:(("unbound",pid=770,fd=5))
tcp   LISTEN 0      256                           127.0.0.1:53         0.0.0.0:*    users:(("unbound",pid=770,fd=4))
tcp   LISTEN 0      256                               [::1]:53            [::]:*    users:(("unbound",pid=770,fd=6))

测试 DNS 递归服务器

dig blog.dejavu.moe

; <<>> DiG 9.20.15-1~deb13u1-Debian <<>> blog.dejavu.moe
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51736
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;blog.dejavu.moe.               IN      A

;; ANSWER SECTION:
blog.dejavu.moe.        300     IN      A       172.67.174.250
blog.dejavu.moe.        300     IN      A       104.21.31.49

;; Query time: 32 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) <——成功标志 127.0.0.1
;; WHEN: Sat Jan 17 16:26:17 UTC 2026
;; MSG SIZE  rcvd: 76

正确配置 rDNS 与 DNSSEC 的服务器,执行以下两条命令时,输出结果应保持一致,比如

dig via.moe
dig @127.0.0.1 via.moe

其中 flag 字段的 ad 标志,是 Unbound 成功解析 DNSSEC 的标志。

添加用户

sudo useradd -m -d /home/mox mox

编译安装

由于在线构建 Mox 二进制文件服务持续处于 Pending 状态,建议采用手动编译。

pending.webp

准备 Golang 工具链

wget https://go.dev/dl/go1.26.0.linux-amd64.tar.gz
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.26.0.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
sudo rm -rf /home/mox/go

编译安装

GOBIN=$PWD CGO_ENABLED=0 go install github.com/mjl-/mox@latest
sudo mv mox /home/mox/
sudo chown mox:mox /home/mox/mox
sudo chmod +x /home/mox/mox

清理构建环境

rm go1.26.0.linux-amd64.tar.gz
sudo rm -rf /usr/local/go go

基本配置

快速开始

Mox 会进行一些检测和初始化,自动进行系统检测并生成配置。

sudo -i
cd /home/mox
./mox quickstart <管理员邮箱>

输出的关键信息会同步保存在 quickstart.log 中,包含检测结果、建议操作以及初始用户凭据。

守护进程

安装 Systemd 守护进程服务

sudo chmod 644 mox.service
sudo systemctl enable $PWD/mox.service
sudo systemctl start mox.service
# 查看日志
sudo journalctl -f -u mox.service

管理面板

通过 SSH 隧道安全访问 Mox 服务器后台:

ssh -L 8080:localhost:80 <用户名>@<IP> -p <SSH 端口>

在浏览器打开 http://localhost:8080/admin/,即可访问后台,使用管理员密码登录。

first-login.webp

查看你的域名

config-domain.webp

初期由于 DNS 记录尚未添加,看到大量非绿色状态属于正常现象

add-dns-record.webp

检查所需 DNS 记录

required-dns-records.webp

将 Mox 提供的 DNS 解析记录(灰色框内容)保存为本地 TXT 文件(编码为 UTF-8),可以直接在 Cloudflare DNS 解析设置里导入,减少了手动录入的步骤。

save-dns-records.webp

需要注意:

Mox 为兼容部分垃圾 DNS 服务商,将 2 条 DKIM 长记录拆分为多段,Cloudflare 支持标准长记录。请务必手动将 DKIM 字段拼接为完整的记录,确保邮件签名校验正常。

dkim.webp

比如:

; Outgoing messages will be signed with the first two DKIM keys. The other two
; configured for backup, switching to them is just a config change.
; NOTE: The following is a single long record split over several lines for use
; in zone files. When adding through a DNS operator web interface, combine the
; strings into a single string, without ().
2026a._domainkey.via.moe.   TXT (
        "v=DKIM1;h=sha256;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwN9QmP4YkY3S7sFQ0x2JvZKZk"
        "xZ9zQ3F9r4V9Z2Zx4wF2NnZ0R0X8aC4GvHnHnMZ1xQkR9mNQ0kG5zZ6yUuEJq8T8H"
        "d5WZxF8Y9C2H0kFzK1c6H3F2y1JH7V6z4KxY9Jp3Y5A8ZQ9k2nP7V4E6ZQmZ3F0J"
        "C7Qx9A1H3N7V8Z5G2K8C6E3X9H7N0Q5Z8F3E9K4V2QIDAQAB"
)
; NOTE: The following is a single long record split over several lines for use
; in zone files. When adding through a DNS operator web interface, combine the
; strings into a single string, without ().
2026b._domainkey.via.moe.   TXT (
        "v=DKIM1;h=sha256;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv7ZQK9H3R4P8xZC2M1FJ8XK"
        "E7A5C9VZxN6Z8T3R7H4C2E0Y9X6MZ7F3P2R5QJ0C1H8Z9V7N5K6X3F4A2M1P8E"
        "9Z4TQ6V7C8K0R2F5XH3YJ1MZ6N7P8A9E4C5H0Q2R3F6X8YVZJ1MIDAQAB"
)

拼接为:

2026a._domainkey.via.moe.   TXT
"v=DKIM1;h=sha256;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwN9QmP4YkY3S7sFQ0x2JvZKZkxZ9zQ3F9r4V9Z2Zx4wF2NnZ0R0X8aC4GvHnHnMZ1xQkR9mNQ0kG5zZ6yUuEJq8T8Hd5WZxF8Y9C2H0kFzK1c6H3F2y1JH7V6z4KxY9Jp3Y5A8ZQ9k2nP7V4E6ZQmZ3F0JC7Qx9A1H3N7V8Z5G2K8C6E3X9H7N0Q5Z8F3E9K4V2QIDAQAB"

2026b._domainkey.via.moe.   TXT
"v=DKIM1;h=sha256;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv7ZQK9H3R4P8xZC2M1FJ8XKE7A5C9VZxN6Z8T3R7H4C2E0Y9X6MZ7F3P2R5QJ0C1H8Z9V7N5K6X3F4A2M1P8E9Z4TQ6V7C8K0R2F5XH3YJ1MZ6N7P8A9E4C5H0Q2R3F6X8YVZJ1MIDAQAB"

验证 DNS 解析结果,预期应该像这样:

check.webp

Web Admin 管理面板可以查看域名的一些报告

report-summary.webp

管理 MTA-STS 策略

mta-sts-policies.webp

此处可以检查 IP 是否在已知黑名单里(无效打码😅)

dns-blocklist-status.webp

Web 邮件客户端

Mox 内置一个 Web Mail 客户端,你可以查看 Mox 网站的 更多截图 ,我非常喜欢这个设计风格,当前可以通过 SSH 隧道访问 http://localhost:8080/webmail/

webmail.webp

访问策略

Mox 默认遵循 最小化访问 的安全设计,将 Web 面板置于 SSH 隧道或 WireGuard 后仅限本地访问,是兼顾安全与可控的最佳实践。

若需要方便地使用 Web Mail 收发邮件,可将其移至 public 监听器下。

编辑配置文件:

sudo vim /home/mox/config/mox.conf

Listeners.public 部分启用 WebmailHTTPS

Listeners:
        public:
                IPs:
                        - <ipv4>
                        - <ipv6>
                SMTP:
                        Enabled: true
                Submissions:
                        Enabled: true
                IMAPS:
                        Enabled: true
                AutoconfigHTTPS:
                        Enabled: true
                MTASTSHTTPS:
                        Enabled: true

                # Web Mail HTTPS 公网访问
                # 添加下面配置
                WebmailHTTPS:
                        Enabled: true

修改后重启服务生效

sudo systemctl restart mox.service

其他服务都通过这种方式进行公网暴露或隐藏,具体可查询 Mox 配置手册

测试邮件

得分测试

mail-test-1.webp

完整测试

mail-test-2.webp

尝试和朋友发信、回信,一切没问题的话,进入 Cloudflare DNS 解析设置,将此前调试期间的 TTL 值5 分钟 设置为 更高 或者 自动

结论

Mox 的核心哲学是 1 + 1 = 1,即 一台服务器 + 一个域名 = 一个完整的邮件服务器,这使得部署和维护的流程变得极其简单。

这意味着我们 无需

  • 设置任何反向代理服务器
  • 使用 Fail2ban 保护 Mox 本身
  • 手动申请和安装 TLS 证书

只需要 三步即可使用自己的电子邮件服务器:

  • 准备服务器
  • 安装 Mox 生成配置
  • 设置 DNS 解析记录

此外,尽管 Mox 支持在现有反向代理后运行,但官方最推崇的做法是 将服务器流量 (80/443) 完全交给 Mox 管理。这可以最大限度减少攻击面与配置难度,本文也遵循了这一最佳实践。

虽说没必要「踩一捧一」,但是相比较 Stalwart,我更喜欢 Mox 的设计理念,使用起来更 符合用户直觉