温馨提示×

怎样部署debian邮件服务器

小樊
52
2026-10-17 06:22:43
栏目: 云计算

下面给你一份从零部署 Debian 邮件服务器的实用指南,适合小型企业 / 个人服务器使用。内容以 Postfix + Dovecot + MariaDB + Let’s Encrypt 为例,支持 SMTP / IMAP / 加密 / 虚拟用户。


一、准备工作

1. 系统要求

  • Debian 11 / 12(推荐 12)
  • 一个公网 IP
  • 一个域名(如 example.com)
  • 服务器 hostname 设置正确
hostnamectl set-hostname mail.example.com

2. 域名解析(非常重要)

在 DNS 中添加:

类型 主机名 值
A mail 服务器IP
MX @ mail.example.com
TXT @ v=spf1 mx ~all
TXT _dmarc v=DMARC1; p=none
TXT mail._domainkey (后面 DKIM 生成)

二、安装基础软件

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

安装 Postfix 时:

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

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

1. 创建数据库

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

2. 建表

USE mailserver;

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

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  email VARCHAR(100) NOT NULL,
  password VARCHAR(100) NOT NULL,
  domain VARCHAR(50)
);

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

示例用户:

INSERT INTO domains VALUES (1,'example.com');
INSERT INTO users (email,password,domain)
VALUES ('user@example.com', ENCRYPT('password'), 'example.com');

四、Postfix 配置

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_use_tls = yes
smtpd_tls_auth_only = yes

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

2. MySQL 查询文件

示例 /etc/postfix/mysql-users.cf

user = mailuser
password = 强密码
hosts = localhost
dbname = mailserver
query = SELECT 1 FROM users WHERE email='%s'

五、Dovecot 配置

1. 启用 LMTP

/etc/dovecot/conf.d/10-master.conf

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

2. 认证

/etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = no
auth_mechanisms = plain login

3. SQL 用户

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

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

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

driver = mysql
connect = host=localhost dbname=mailserver user=mailuser password=强密码
default_pass_scheme = ENCRYPT
password_query = SELECT password FROM users WHERE email='%u';
user_query = SELECT '/var/mail/%d/%n' AS mail FROM users WHERE email='%u';

六、SSL 证书

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

自动续期:

certbot renew --dry-run

七、DKIM(防垃圾邮件)

apt install opendkim opendkim-tools

生成密钥并配置 TXT 记录(略,可单独写一节)


八、启动服务

systemctl restart postfix dovecot
systemctl enable postfix dovecot

测试:

telnet mail.example.com 25
openssl s_client -connect mail.example.com:993

九、安全建议

  • 启用 fail2ban
  • 禁用 root 登录
  • 仅开放 25 / 465 / 587 / 993
  • 定期更新系统

如果你愿意,我可以: ✅ 给你 一键脚本 ✅ 讲 DKIM / DMARC 详细配置 ✅ 教你 用 Roundcube 做 Web 邮箱 ✅ 或只做 最简单的发信服务器

你打算用在什么场景?

0 踩