BLOG / 教程

Stalwart Mail Server 安装与初步配置教程

使用官方安装脚本部署 Stalwart Mail Server,涵盖安装、Web 管理面板配置、域名添加、DNS 记录、TLS 证书、邮箱账号创建与客户端连接。

约 12 分钟0次浏览
  • #教程
  • #邮件服务器
  • #Stalwart

之前用 Poste.io 搭过邮件服务器,能用但总觉得功能上有点受限。后来发现了 Stalwart,Rust 写的,原生支持 JMAP、IMAP、POP3、SMTP,性能和安全性都不错,管理面板也挺现代化。这篇文章记录一下用官方安装包从零部署的整个过程。

前置条件

动手之前先确认几件事:

  1. 一台 Linux 服务器,推荐 Ubuntu 22.04/24.04 LTS 或 Debian 12。
  2. 25 端口必须开放。很多云厂商默认封 25 端口防垃圾邮件,买之前问清楚或者买完测一下。测试方法:
    bash
    telnet smtp.gmail.com 25
    连得上就说明没被封。
  3. 一个域名,能管理 DNS 记录(Cloudflare、Namecheap 之类的都行)。
  4. 域名已解析到服务器 IP,至少先把 mail.example.com 的 A 记录指过去。

安装

用官方提供的安装脚本,一行搞定:

bash
curl --proto '=https' --tlsv1.2 -sSf https://get.stalw.art/install.sh -o install.sh
sudo bash install.sh

脚本会把服务安装到 /opt/stalwart 目录下。安装过程大概一分钟,结束后会在终端输出类似这样的信息:

plain
✅ Installation complete!

Admin username: admin
Admin password: Rk8x#mP2$vLn9Qw

Web interface: https://<your-server-ip>:443

这个临时管理员密码务必复制下来,后面登录管理面板要用,登进去之后可以改。

安装完成后 Stalwart 会自动以 systemd 服务运行。可以检查一下状态:

bash
sudo systemctl status stalwart-mail

看到 active (running) 就说明没问题。

需要放行的端口

Stalwart 默认会监听以下端口,防火墙需要全部放行:

端口协议用途
25TCPSMTP(接收外部邮件)
465TCPSMTPS(加密发信)
587TCPSubmission(客户端提交邮件)
143TCPIMAP(收邮件)
993TCPIMAPS(加密收邮件)
110TCPPOP3(收邮件)
995TCPPOP3S(加密收邮件)
443TCPHTTPS(管理面板 + JMAP + autoconfig)
8080TCPHTTP(管理面板备用端口)

ufw 的话:

bash
sudo ufw allow 25,465,587,143,993,110,995,443,8080/tcp

iptables 的话逐个放行就行,这里不赘述了。

后续登入后台后,你也可以在 Settings → Server → Listeners 中直观地查看或修改所有服务的监听端口(例如 HTTP、IMAP、SMTP 等):

Listeners 监听端口设置

登录管理面板

浏览器打开 https://<你的服务器IP>:443

首次访问会因为自签证书弹安全警告,跳过就行,后面配好 Let's Encrypt 就正常了。

用安装时给的用户名 admin 和临时密码登录。

登入后的界面可能比较空,点击右上角的 Actions 按钮,选择 Manage 进入管理后台:

Manage 按钮

进去之后建议第一件事就是改密码:

Management → Directory → Accounts → admin → 修改密码

配置主机名

登进管理面板后先把主机名设好,这是为了确保邮件服务器能正确标识自己。

点击侧边栏最下方的 Settings 菜单:

侧边栏设置

进入 Server → Network,在 Hostname 栏填入你的邮件服务器域名,比如 mail.example.com,然后保存。

网络设置

这个主机名会出现在 SMTP HELO/EHLO、TLS 证书请求、自动发现等各种地方,写错会导致一堆问题。

配置 TLS 证书

如果你已经有现成的证书(比如用宝塔面板、Nginx Proxy Manager 申请好的),可以直接在面板里引用。也可以用 Stalwart 自带的 ACME 自动签发。

手动指定现有证书

Settings → Server → TLS → Certificates 中点击 Add

  • Certificate ID: 随便起个名字,比如 ruawd.de
  • Certificate: 填入证书文件路径,格式为 %file:/路径/到/fullchain.pem%(对应截图中的宝塔路径)。
  • Private Key: 填入私钥文件路径,格式为 %file:/路径/到/privkey.pem%

TLS 证书配置

注意:Stalwart 运行在自己的用户下,确保它对这些证书文件有读取权限。

ACME 自动签发

如果想直接让 Stalwart 自己管证书,在 Settings → Server → TLS → ACME Providers 中新建:

  • Directory URL: https://acme-v02.api.letsencrypt.org/directory
  • Challenge: 选 tls-alpn-01http-01
  • Domains: 填你的邮件域名,如 mail.example.com

保存后 Stalwart 会自动申请并续期。配置好后,记得在 Settings → Server → TLS → Defaults 里勾选默认使用的证书。

添加域名

在左侧菜单栏进入 Directory → Domains,点击右上角的 Create domain(新建域名):

添加域名

Domain name(域名)一栏填入你的主域名,比如 example.com,其他项可以留空,然后点击 Save changes 保存:

新建域名

保存之后回到域名列表,找到你刚才添加的域名,点击最右侧的三个点菜单,选择 View DNS records

查看 DNS 记录

在这个页面,Stalwart 会把接下来你需要配置的 DNS 记录全部列出来。

配置 DNS 记录

按管理面板给出的记录,到你的 DNS 服务商(Cloudflare 等)里添加。下面以 example.com 为例列出典型的记录:

基础记录

类型名称说明
Amail<服务器IP>邮件服务器地址
MX@mail.example.com(优先级 10)指定邮件接收服务器

SPF 记录

类型名称
TXT@v=spf1 mx ~all

告诉收件方:只有 MX 记录指向的服务器才有资格代这个域名发信。

DKIM 记录

类型名称
TXTstalwart._domainkeyv=DKIM1; k=ed25519; p=<公钥>

DKIM 的公钥和 selector 名称在管理面板的 DNS 记录页面里能直接复制,照着填就行。

DMARC 记录

类型名称
TXT_dmarcv=DMARC1; p=none; rua=mailto:[email protected]

刚开始建议 p=none(仅监控),确认邮件收发正常后再逐步收紧到 p=quarantinep=reject

自动发现记录(可选但推荐)

类型名称
CNAMEautoconfigmail.example.com
CNAMEautodiscovermail.example.com

配了这两条,Thunderbird、Outlook 等客户端在添加账号时可以自动检测服务器设置。

MTA-STS(可选)

MTA-STS 强制入站邮件走 TLS 加密,防止中间人降级攻击。需要两步:

  1. 添加 DNS 记录:
类型名称
TXT_mta-stsv=STSv1; id=20260331;
  1. https://mta-sts.example.com/.well-known/mta-sts.txt 提供策略文件:
plain
version: STSv1
mode: enforce
mx: mail.example.com
max_age: 86400

这个文件可以用 Nginx 反代或者直接让 Stalwart 处理(需要在 ACME 里把 mta-sts.example.com 也加上)。

创建邮箱账号

DNS 记录配好、传播生效后(通常几分钟到几小时),就可以建邮箱账号了。

Management → Directory → Accounts → 新建账号

填写:

  • 用户名:比如 me,对应的邮箱地址就是 [email protected]
  • 域名:选择刚才添加的 example.com
  • 密码:设一个足够强的密码

保存完就能用了。

连接邮件客户端

Stalwart 本身不带 Webmail 界面,需要用外部客户端。推荐 Thunderbird(桌面)或者 FairEmail(Android)。

客户端配置参数

项目
收信服务器 (IMAP)mail.example.com,端口 993,SSL/TLS
发信服务器 (SMTP)mail.example.com,端口 465,SSL/TLS
用户名[email protected]
密码账号密码

如果配了 autoconfig/autodiscover 的 CNAME 记录,Thunderbird 和 Outlook 可以自动识别配置,直接填邮箱地址和密码就行。

反向代理(可选)

如果你的服务器上已经跑着 Nginx,想把管理面板和 HTTPS 流量走 Nginx 代理,可以这么配:

HTTPS 反代(管理面板 / JMAP)

nginx
server {
    listen 443 ssl http2;
    server_name mail.example.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass https://127.0.0.1:8443;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

SMTP / IMAP 反代

邮件协议是纯 TCP,需要用 Nginx 的 stream 模块:

nginx
stream {
    # SMTP
    server {
        listen 25;
        proxy_pass 127.0.0.1:10025;
        proxy_protocol on;
    }

    # IMAPS
    server {
        listen 993;
        proxy_pass 127.0.0.1:10993;
        proxy_protocol on;
    }

    # SMTPS
    server {
        listen 465;
        proxy_pass 127.0.0.1:10465;
        proxy_protocol on;
    }
}

用了 Proxy Protocol 的话,记得在 Stalwart 的 Listener 配置里也开启 Proxy Protocol 支持,不然 Stalwart 拿不到真实客户端 IP。

测试发信

配完之后发封测试邮件到 Gmail 或者 Outlook,然后检查以下几点:

  1. 能否正常收到,没进垃圾箱。
  2. 查看邮件原始头,确认 SPF、DKIM、DMARC 都是 pass
  3. MXToolboxmail-tester.com 跑一下评分。

如果 SPF 或 DKIM 显示 fail,回去检查 DNS 记录有没有填错或者还没生效。

上线前清单

  • 管理员密码已更改为强密码
  • 主机名设置正确且与域名一致
  • TLS 证书已通过 ACME 自动签发
  • MX、SPF、DKIM、DMARC 记录已添加并生效
  • 25 端口确认可用,未被云厂商封锁
  • 防火墙已放行所有需要的端口
  • 测试邮件发送接收正常
  • 邮件通过 SPF/DKIM/DMARC 验证

总结

Stalwart 整体体验比传统方案(Postfix + Dovecot 那套)简单太多了,一个二进制文件把 SMTP、IMAP、JMAP 全搞定,自带管理面板,还能自动签证书。坑主要在 DNS 记录和端口放行上,把这些理顺了基本就没什么问题。

不过 Stalwart 目前没有内置 Webmail,如果需要网页收发邮件得另外搭一个 Roundcube 或 SnappyMail 接上去。日常用 Thunderbird 或者手机自带邮件 app 直连 IMAP 也完全够用。

KEEP READING

继续阅读

DISCUSSION

文章评论

0
正在读取