下面给你一个从零部署 Debian 邮件服务器的实用指南,适合生产环境,以 Postfix + Dovecot + MariaDB + Let’s Encrypt 为常见组合,支持 SMTP / IMAP / 多域名 / 虚拟用户。
example.com)example.com A -> 服务器IP
mail.example.com A -> 服务器IP
example.com MX -> mail.example.com
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
安装过程中:
example.commysql -u root -p
CREATE DATABASE mailserver;
GRANT ALL ON mailserver.* TO 'mailuser'@'localhost' IDENTIFIED BY 'strongpassword';
FLUSH PRIVILEGES;
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)
);
/etc/postfix/main.cfmyhostname = 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
/etc/postfix/mysql-domains.cfuser = mailuser
password = strongpassword
hosts = 127.0.0.1
dbname = mailserver
query = SELECT name FROM domains WHERE name='%s'
/etc/postfix/mysql-users.cfquery = SELECT 1 FROM users WHERE email='%s'
/etc/postfix/mysql-aliases.cfquery = SELECT destination FROM aliases WHERE source='%s'
/etc/dovecot/dovecot.confprotocols = imap lmtp
/etc/dovecot/conf.d/10-mail.confmail_location = maildir:/var/mail/vhosts/%d/%n
创建目录:
mkdir -p /var/mail/vhosts
chown -R vmail:vmail /var/mail/vhosts
/etc/dovecot/conf.d/10-auth.confdisable_plaintext_auth = no
auth_mechanisms = plain login
!include auth-sql.conf.ext
/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
}
/etc/dovecot/dovecot-sql.conf.extdriver = 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';
certbot certonly --standalone -d mail.example.com
自动续期:
systemctl enable certbot.timer
systemctl restart postfix dovecot mariadb
systemctl enable postfix dovecot mariadb
echo "test" | mail -s "hello" user@example.com
mail.example.commail.example.com✅ 配置 SPF / DKIM / DMARC
✅ 开启 Fail2ban
✅ 禁用 SMTP 开放中继
✅ 定期更新系统
如果你愿意,我可以:
✅ 给你 一键部署脚本
✅ 指导 DKIM / SPF / DMARC 配置
✅ 帮你 排查发信被 Gmail 拒收问题
只要告诉我你的 Debian 版本 + 域名结构 即可。