这个过程我们将使用经典的 LAMP 架构,并结合以下核心组件:

- MTA (Mail Transfer Agent): Postfix - 负责接收和发送邮件。
- MDA (Mail Delivery Agent): Dovecot - 负责将邮件投递到用户的邮箱,并提供 IMAP/POP3 服务,让邮件客户端可以收信。
- 数据库: MySQL - 存储用户账户、域名、别名等信息。
- Web 界面: PostfixAdmin - 一个基于 Web 的管理工具,用于轻松添加/删除邮箱、域名和别名。
- 反垃圾邮件/病毒: SpamAssassin 和 ClamAV - 过滤垃圾邮件和病毒邮件。
重要前提:准备阶段
-
系统更新: 确保系统是最新状态。
yum update -y
-
主机名: 设置一个唯一的、完全限定域名,这非常重要,因为邮件服务器需要正确的反向 DNS 解析。
hostnamectl set-hostname mail.yourdomain.com # 编辑 /etc/hosts 文件,确保 127.0.0.1 对应 mail.yourdomain.com vim /etc/hosts
-
静态 IP 地址: 服务器必须有一个静态的公网 IP 地址。
-
DNS 记录: 在您的域名解析服务商(如阿里云、腾讯云、Cloudflare 等)处添加以下 A 记录和 MX 记录。
(图片来源网络,侵删)- A 记录:
mail.yourdomain.com-> 您服务器的公网 IP 地址。
- MX 记录:
yourdomain.com->mail.yourdomain.com.(注意末尾的句点)
- PTR 记录 (反向 DNS): 这是最关键的一步! 您需要联系您的服务器提供商(如 VPS 供应商),将您的服务器 IP 地址反向解析到
mail.yourdomain.com,没有正确的 PTR 记录,绝大多数邮件服务器都会拒绝您的邮件。
- A 记录:
第一步:安装基础组件
-
安装 EPEL 仓库: CentOS 6.5 的官方仓库软件包较旧,EPEL 提供了更多更新的软件。
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
-
安装 Web 服务器和数据库:
yum install -y httpd mysql-server php php-mysql php-mbstring php-imap php-mcrypt
-
启动并设置开机自启:
service httpd start service mysqld start chkconfig httpd on chkconfig mysqld on
-
配置 MySQL:
(图片来源网络,侵删)mysql_secure_installation
按照提示操作,设置 root 密码,并删除匿名用户、禁止 root 远程登录、移除测试数据库、重新加载权限表。
第二步:安装和配置 Postfix (MTA)
-
安装 Postfix 和相关依赖:
yum install -y postfix dovecot mysql dovecot-mysql clamav clamav-update spamassassin
-
配置 Postfix: 备份原始配置文件,然后编辑主配置文件。
cp /etc/postfix/main.cf /etc/postfix/main.cf.bak vim /etc/postfix/main.cf
在文件中找到并修改/添加以下内容:
# myhostname: 系统的主机名 myhostname = mail.yourdomain.com # mydomain: 您的域名 mydomain = yourdomain.com # myorigin: 发件人邮件的域名后缀 myorigin = $mydomain # inet_interfaces: Postfix 监听的网卡接口 # loopback-only: 只监听本地回环地址(127.0.0.1) # all: 监听所有网络接口 inet_interfaces = all # mydestination: 接收哪些域名的邮件 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain # mynetworks: 允许中继邮件的网络地址 # 127.0.0.0/8 表示只允许本机发送邮件 mynetworks = 127.0.0.0/8, [::ffff:127.0.0.0]/104, [::1]/128 # home_mailbox: 邮箱文件存储在用户主目录下的 Maildir/ 中 home_mailbox = Maildir/ # mailbox_command: 不使用本地 delivery agent (如 procmail) mailbox_command = # --- 添加虚拟域和虚拟用户支持 --- # 启用虚拟域 virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-domains.cf # 虚拟邮箱的映射 virtual_mailbox_base = /home/vmail virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-maps.cf # 虚拟别名 virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
-
创建 MySQL 查询文件: 创建三个文件,用于 Postfix 从数据库中查询信息。
-
虚拟域映射 (
/etc/postfix/mysql-virtual-domains.cf):user = postfixadmin password = your_postfixadmin_db_password hosts = localhost dbname = postfix table = domain select_field = domain where_field = domain # 1 表示该域是活动状态 additional_conditions = AND active = 1
-
虚拟邮箱映射 (
/etc/postfix/mysql-virtual-maps.cf):user = postfixadmin password = your_postfixadmin_db_password hosts = localhost dbname = postfix table = mailbox select_field = maildir where_field = username additional_conditions = AND active = 1
-
虚拟别名映射 (
/etc/postfix/mysql-virtual-alias-maps.cf):user = postfixadmin password = your_postfixadmin_db_password hosts = localhost dbname = postfix table = alias select_field = goto where_field = address additional_conditions = AND active = 1
-
-
创建数据库和用户: 登录 MySQL 并创建数据库和用户。
mysql -u root -p
在 MySQL 命令行中执行:
CREATE DATABASE postfix; CREATE USER 'postfixadmin'@'localhost' IDENTIFIED BY 'your_postfixadmin_db_password'; GRANT ALL PRIVILEGES ON postfix.* TO 'postfixadmin'@'localhost'; FLUSH PRIVILEGES; EXIT;
-
启动 Postfix 并设置开机自启:
service postfix start chkconfig postfix on
第三步:安装和配置 Dovecot (MDA)
-
配置 Dovecot: 备份并编辑主配置文件
/etc/dovecot/dovecot.conf,确保以下行被取消注释或正确设置:protocols = imap pop3 listen = * mail_location = maildir:/home/vmail/%d/%n
-
配置 Dovecot 认证 (MySQL): 编辑
/etc/dovecot/dovecot-sql.conf.ext文件(或/etc/dovecot-mysql.conf,取决于版本):driver = mysql connect = host=localhost dbname=postfix user=postfixadmin password=your_postfixadmin_db_password default_pass_scheme = SHA512-CRYPT user_query = SELECT maildir, 1000 AS uid, 1000 AS gid FROM mailbox WHERE username = '%u' AND active = '1' password_query = SELECT username AS user, password FROM mailbox WHERE username = '%u' AND active = '1'
-
配置 Dovecot 的认证机制: 编辑
/etc/dovecot/conf.d/10-auth.conf,确保使用plain和login机制:auth_mechanisms = plain login
-
启动 Dovecot 并设置开机自启:
service dovecot start chkconfig dovecot on
第四步:安装和配置 PostfixAdmin
-
下载并解压:
cd /var/www/html wget https://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.93/postfixadmin-2.93.tar.gz tar -xzf postfixadmin-2.93.tar.gz mv postfixadmin-2.93 mailadmin chown -R apache:apache mailadmin
-
创建配置文件: 进入
mailadmin目录,复制config.inc.php为config.local.inc.php。cd /var/www/html/mailadmin cp config.inc.php config.local.inc.php
编辑
config.local.inc.php,修改以下关键配置:$CONF['configured'] = true; // 必须设置为 true // 数据库配置 $CONF['database_type'] = 'mysql'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfixadmin'; $CONF['database_password'] = 'your_postfixadmin_db_password'; $CONF['database_name'] = 'postfix'; // 邮箱存储路径 $CONF['mailboxes_dir'] = '/home/vmail'; $CONF['domain_path'] = 'YES'; $CONF['domain_in_mailbox'] = 'NO'; // 管理员邮箱 $CONF['admin_email'] = 'admin@yourdomain.com'; $CONF['admin_password'] = 'set_a_strong_admin_password_here';
-
通过 Web 界面初始化数据库: 在浏览器中访问
http://yourdomain.com/mailadmin/setup.php。- 它会检查配置,如果没有错误,点击 "Create database and tables"。
- 创建成功后,删除
setup.php文件以确保安全:rm /var/www/html/mailadmin/setup.php
第五步:安装和配置反垃圾邮件/病毒
-
配置 ClamAV: 更新病毒库并启动服务。
freshclam service clamd start chkconfig clamd on
-
配置 SpamAssassin: 启动服务。
service spamassassin start chkconfig spamassassin on
-
配置 Postfix 使用 SpamAssassin 和 ClamAV: 安装
spamd和clamd的 Postfix 过滤器。yum install -y spamass-milter clamav-milter
编辑
/etc/postfix/main.cf,在文件末尾添加:# 使用 SpamAssassin 过滤 content_filter = spamassassin:[127.0.0.1]:10025 # 使用 ClamAV 过滤 smtpd_milters = unix:/var/run/clamav/clamav-milter.sock non_smtpd_milters = $smtpd_milters milter_protocol = 2 milter_default_action = accept
-
重启 Postfix 应用新配置:
service postfix restart service spamassassin restart service clamd restart
第六步:最终测试
-
通过 Web 界面添加域名和邮箱: 访问
http://yourdomain.com/mailadmin,使用你之前设置的admin账号登录。- 添加你的域名 (
yourdomain.com)。 - 添加一个邮箱账号,
user@yourdomain.com。
- 添加你的域名 (
-
测试发送和接收邮件:
- 本地测试: 使用
mail命令从服务器本身发送一封邮件给自己。echo "Test body" | mail -s "Test Subject" user@yourdomain.com
检查
/home/vmail/yourdomain.com/user/目录下是否有新邮件。 - 客户端测试: 使用 Outlook、Thunderbird 或 Foxmail 等邮件客户端,配置 IMAP/SMTP 服务器地址为
mail.yourdomain.com,然后收发邮件。 - 在线工具测试: 使用 mxtoolbox.com 等在线工具检查您的 DNS 记录、反垃圾邮件评分等。
- 本地测试: 使用
警告与后续优化
- 安全: CentOS 6.5 已停止安全更新,系统存在大量已知漏洞。切勿将其用于处理任何敏感或重要的数据。
- 防火墙: 确保防火墙开放了必要的端口:
- 25 (SMTP)
- 587 (SMTPS/Submission)
- 465 (SMTPS, 已不推荐但仍有使用)
- 143 (IMAP)
- 993 (IMAPS)
- 110 (POP3)
- 995 (POP3S)
- 监控: 设置日志监控,例如使用
logwatch,以便及时发现邮件服务器的问题。 - 备份: 定期备份数据库 (
/var/lib/mysql) 和用户邮件 (/home/vmail)。
这个过程非常繁琐,任何一个环节出错都可能导致邮件无法正常收发,请耐心排查,/var/log/maillog 是排查问题的最佳朋友,祝您成功!
