温馨提示×

Debian邮件服务器怎么多域名

小樊
46
2026-08-02 17:34:20
栏目: 云计算

在 Debian 上搭建支持多域名的邮件服务器,常见做法是使用 Postfix + Dovecot + MySQL(或 PostgreSQL),通过虚拟域名/虚拟用户来实现。下面给你一个实战型思路 + 关键配置示例,适用于 Debian 11/12。


一、整体架构(推荐)

Postfix:SMTP(发信 / 收信)
Dovecot:IMAP / POP3
MySQL:存储多域名、用户、别名
PostfixAdmin(可选):Web 管理多域名
Let’s Encrypt:SSL 证书(每个域名)

支持:

  • 多域名:example.comtest.com
  • 多用户:user@example.comuser@test.com
  • 同一个服务器、同一个 IP

二、安装基础软件

apt update
apt install postfix postfix-mysql dovecot-core dovecot-imapd \
dovecot-lmtpd dovecot-mysql mariadb-server

三、数据库设计(多域名核心)

1️⃣ 创建数据库

CREATE DATABASE mailserver;
GRANT ALL ON mailserver.* TO 'mailuser'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

2️⃣ 核心表结构

域名表

CREATE TABLE domains (
  id INT AUTO_INCREMENT PRIMARY KEY,
  domain VARCHAR(50) NOT NULL UNIQUE
);

用户表

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  domain_id INT NOT NULL,
  email VARCHAR(100) NOT NULL UNIQUE,
  password VARCHAR(100) NOT NULL,
  FOREIGN KEY (domain_id) REFERENCES domains(id)
);

别名表(可选)

CREATE TABLE aliases (
  id INT AUTO_INCREMENT PRIMARY KEY,
  source VARCHAR(100),
  destination VARCHAR(100)
);

四、Postfix 多域名配置

1️⃣ 主配置 /etc/postfix/main.cf

myhostname = mail.example.com
mydestination = localhost

virtual_mailbox_domains = mysql:/etc/postfix/mysql-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-users.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-aliases.cf

virtual_transport = lmtp:unix:private/dovecot-lmtp

⚠️ 不要把多域名写进 mydestination,否则会变成系统用户。


2️⃣ MySQL 查询文件

/etc/postfix/mysql-domains.cf

user = mailuser
password = password
hosts = 127.0.0.1
dbname = mailserver
query = SELECT domain FROM domains WHERE domain='%s'

/etc/postfix/mysql-users.cf

user = mailuser
password = password
hosts = 127.0.0.1
dbname = mailserver
query = SELECT email FROM users WHERE email='%s'

五、Dovecot 多域名支持

1️⃣ /etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:/var/mail/vhosts/%d/%n

目录结构:

/var/mail/vhosts/
├── example.com/
│   └── user/
├── test.com/
│   └── user/

2️⃣ Dovecot MySQL 认证

/etc/dovecot/conf.d/auth-sql.conf.ext

passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}

userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}

3️⃣ /etc/dovecot/dovecot-sql.conf.ext

driver = mysql
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=password
default_pass_scheme = SHA512-CRYPT
password_query = SELECT email AS user, password FROM users WHERE email='%u';

六、LMTP(Postfix ↔ Dovecot)

Postfix

virtual_transport = lmtp:unix:private/dovecot-lmtp

Dovecot

protocols = imap lmtp
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    user = postfix
    group = postfix
    mode = 0600
  }
}

七、多域名 SSL(重要)

1️⃣ 每个域名证书

certbot certonly --standalone -d mail.example.com
certbot certonly --standalone -d mail.test.com

2️⃣ Postfix

smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem

SNI 支持(Postfix 3.4+)

smtpd_tls_chain_files =
  /etc/letsencrypt/live/mail.example.com/privkey.pem,
  /etc/letsencrypt/live/mail.example.com/fullchain.pem
  /etc/letsencrypt/live/mail.test.com/privkey.pem,
  /etc/letsencrypt/live/mail.test.com/fullchain.pem

八、DNS 设置(每个域名)

MX  example.com → mail.example.com
A   mail.example.com → 服务器IP
TXT v=spf1 mx ~all

九、常见问题

❓ 多域名用户会混吗?

✅ 不会,通过 domain_id + email 区分

❓ 一个 IP 能跑多个域名吗?

✅ 可以,标准做法

❓ 推荐管理面板?

PostfixAdmin(支持多域名、多用户、别名)


十、总结一句话

Debian 邮件服务器多域名 = Postfix 虚拟域名 + MySQL + Dovecot 虚拟用户 + 正确 DNS/SSL


如果你愿意,我可以:

  • ✅ 给你 完整一键部署脚本
  • ✅ 帮你 排查现有配置
  • ✅ 给你 PostfixAdmin 多域名实战配置

你现在用的是 Debian 几?已经装了 Postfix 吗?

0