温馨提示×

怎么部署Debian邮件服务器

小樊
32
2026-07-18 22:38:12
栏目: 云计算

下面给你一个从零部署 Debian 邮件服务器的实用指南,适合生产环境,以 Postfix + Dovecot + MariaDB + Let’s Encrypt 为常见组合,支持 SMTP / IMAP / 多域名 / 虚拟用户


一、准备条件

1️⃣ 服务器环境

  • Debian 11 / 12(推荐 12)
  • 公网 IP
  • 域名(如 example.com
  • 以下 DNS 记录已配置:
example.com        A      -> 服务器IP
mail.example.com   A      -> 服务器IP
example.com        MX     -> mail.example.com

2️⃣ 主机名设置

hostnamectl set-hostname mail.example.com

确认:

hostname -f

二、安装基础软件

apt update
apt install -y postfix postfix-mysql dovecot-core dovecot-imapd \
dovecot-mysql dovecot-lmtpd mariadb-server \
mailutils certbot python3-certbot-nginx

安装过程中:

  • Postfix 选择 Internet Site
  • 系统邮件名:example.com

三、数据库配置(虚拟用户)

1️⃣ 初始化数据库

mysql -u root -p
CREATE DATABASE mailserver;
GRANT ALL ON mailserver.* TO 'mailuser'@'localhost' IDENTIFIED BY 'strongpassword';
FLUSH PRIVILEGES;

2️⃣ 创建表结构

USE mailserver;

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

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

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

四、配置 Postfix(SMTP)

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

myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
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

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

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

2️⃣ MySQL 查询文件

/etc/postfix/mysql-domains.cf

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

/etc/postfix/mysql-users.cf

query = SELECT 1 FROM users WHERE email='%s'

/etc/postfix/mysql-aliases.cf

query = SELECT destination FROM aliases WHERE source='%s'

五、配置 Dovecot(IMAP)

1️⃣ /etc/dovecot/dovecot.conf

protocols = imap lmtp

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

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

创建目录:

mkdir -p /var/mail/vhosts
chown -R vmail:vmail /var/mail/vhosts

3️⃣ /etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = no
auth_mechanisms = plain login

!include auth-sql.conf.ext

4️⃣ SQL 认证

/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
}

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

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

六、SSL 证书(Let’s Encrypt)

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

自动续期:

systemctl enable certbot.timer

七、启动服务

systemctl restart postfix dovecot mariadb
systemctl enable postfix dovecot mariadb

八、测试邮件服务器

1️⃣ 发信测试

echo "test" | mail -s "hello" user@example.com

2️⃣ 用邮件客户端

  • IMAP:mail.example.com
  • SMTP:mail.example.com
  • 端口:
    • IMAP: 143 / 993(SSL)
    • SMTP: 587(STARTTLS)

九、安全加固(强烈建议)

✅ 配置 SPF / DKIM / DMARC
✅ 开启 Fail2ban
✅ 禁用 SMTP 开放中继
✅ 定期更新系统


十、可选进阶

  • Webmail(Roundcube / RainLoop)
  • 反垃圾(SpamAssassin / Rspamd)
  • 多域名支持
  • 邮件队列监控

如果你愿意,我可以: ✅ 给你 一键部署脚本
✅ 指导 DKIM / SPF / DMARC 配置
✅ 帮你 排查发信被 Gmail 拒收问题

只要告诉我你的 Debian 版本 + 域名结构 即可。

0