在Red Hat Enterprise Linux(RHEL)系统上搭建邮件服务器是一个涉及多个组件配置的过程,通常包括MTA(邮件传输代理)、MDA(邮件分发代理)、POP3/IMAP服务以及DNS记录设置等,以下以Postfix作为MTA、Dovecot作为MDA/POP3/IMAP服务器为例,详细说明搭建步骤。

系统环境准备
首先确保系统已更新至最新状态,并安装必要的软件包,以RHEL 8为例,需订阅Red Hat并启用相关仓库:
sudo dnf update -y sudo dnf install -y postfix dovecot dovecot-mysql mariadb-server
启动并设置开机自启:
sudo systemctl enable --now postfix mariadb sudo systemctl enable --now dovecot
数据库配置
-
初始化MariaDB:
sudo mysql_secure_installation
根据提示设置root密码并完成安全配置。
(图片来源网络,侵删) -
创建邮件数据库和用户:
mysql -u root -p CREATE DATABASE mailserver; CREATE USER 'mailuser'@'localhost' IDENTIFIED BY 'StrongPassword!'; GRANT ALL PRIVILEGES ON mailserver.* TO 'mailuser'@'localhost'; FLUSH PRIVILEGES; EXIT;
-
创建邮件域和用户表:
mysql mailserver -u mailuser -p CREATE TABLE domains ( id INT AUTO_INCREMENT PRIMARY KEY, domain 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 NOT NULL, FOREIGN KEY (domain_id) REFERENCES domains(id) ); CREATE TABLE aliases ( id INT AUTO_INCREMENT PRIMARY KEY, email VARCHAR(255) NOT NULL UNIQUE, destination VARCHAR(255) NOT NULL, domain_id INT NOT NULL, FOREIGN KEY (domain_id) REFERENCES domains(id) ); EXIT;
Postfix配置
Postfix负责邮件的传输和路由,主要配置文件为/etc/postfix/main.cf,关键参数如下:
| 参数 | 值 | 说明 |
|---|---|---|
| myhostname | mail.example.com | 邮件服务器主机名 |
| mydomain | example.com | 默认域名 |
| myorigin | $mydomain | 邮件来源域名 |
| mydestination | $myhostname, localhost.$mydomain, localhost, $mydomain | 接收邮件的域名列表 |
| home_mailbox | Maildir/ | 邮箱存储格式(与Dovecot兼容) |
| mailbox_command | /usr/libexec/dovecot/deliver | 邮件投递命令 |
| smtpd_sasl_type | dovecot | SASL认证类型 |
| smtpd_sasl_path | private/auth | Dovecot认证Socket路径 |
| smtpd_sasl_auth_enable | yes | 启用SMTP认证 |
| smtpd_recipient_restrictions | permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination | 收件人限制规则 |
修改后重启Postfix:

sudo systemctl restart postfix
Dovecot配置
Dovecot负责邮件的存储和访问,配置文件为/etc/dovecot/dovecot.conf及/etc/dovecot/conf.d/10-mail.conf等。
-
启用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/vmail/%d/%n } -
创建SQL配置文件:
/etc/dovecot/dovecot-sql.conf.extdriver = mysql connect = host=localhost dbname=mailserver user=mailuser password=StrongPassword! default_pass_scheme = SHA512-CRYPT user_query = SELECT email AS user, password FROM users WHERE email = '%u' password_query = SELECT email AS user, password FROM users WHERE email = '%u'
-
创建邮件存储目录并设置权限:
sudo useradd -r -s /sbin/nologin vmail sudo mkdir -p /var/vmail/example.com sudo chown -R vmail:vmail /var/vmail
-
启用SSL(可选但推荐): 生成自签名证书:
sudo openssl req -x509 -newkey rsa:4096 -nodes -keyout /etc/dovecot/private/dovecot.pem -out /etc/dovecot/certs/dovecot.pem -days 365
在
/etc/dovecot/conf.d/10-ssl.conf中设置ssl = required。
重启Dovecot:
sudo systemctl restart dovecot
DNS配置
确保域名的MX记录指向邮件服务器:
example.com. IN MX 10 mail.example.com.
同时添加A记录和PTR记录(反向解析)以避免邮件被标记为垃圾邮件。
防火墙与SELinux配置
开放必要端口:
sudo firewall-cmd --permanent --add-service={smtp,submission,imap,imaps}
sudo firewall-cmd --reload
配置SELinux策略(可选):
sudo setsebool -P postfix_smtp_client 1 sudo setsebool -P dovecot_auth_anon_access 1
测试与维护
- 发送测试邮件:
echo "Test body" | mail -s "Test Subject" user@example.com
- 查看日志:
- Postfix日志:
/var/log/maillog - Dovecot日志:
/var/log/dovecot.log
相关问答FAQs
Q1: 如何配置Postfix支持虚拟域和虚拟用户?
A1: 在Postfix的main.cf中添加以下参数:
virtual_mailbox_domains = hash:/etc/postfix/virtual_domains virtual_mailbox_base = /var/vmail virtual_mailbox_maps = hash:/etc/postfix/virtual_mailboxes virtual_minimum_uid = 1000 virtual_uid_maps = static:vmail virtual_gid_maps = static:vmail
然后创建对应的映射文件,如/etc/postfix/virtual_domains添加example.com,并执行postmap hash:/etc/postfix/virtual_domains生成数据库文件。
Q2: Dovecot认证失败可能的原因及解决方法?
A2: 常见原因包括:
- SQL配置文件中的数据库连接信息错误,检查
/etc/dovecot/dovecot-sql.conf.ext中的用户名、密码和数据库名。 - 邮箱目录权限问题,确保
/var/vmail及其子目录属主为vmail:vmail。 - 密码加密算法不匹配,确认
default_pass_scheme与数据库中存储的密码格式一致(如SHA512-CRYPT)。
可通过查看/var/log/dovecot.log定位具体错误信息。
