下面我将为您提供一个完整的、分步的指南,使用当时非常流行且稳定的组合:Postfix + Dovecot + MySQL + PostfixAdmin + SpamAssassin + ClamAV。

这个组合可以构建一个功能齐全的 Webmail 邮件系统,具备虚拟域和虚拟用户管理、反垃圾邮件、反病毒等功能。
架构概览
我们将搭建以下组件:
- MTA (邮件传输代理): Postfix - 负责发送和接收邮件。
- MDA (邮件分发代理): Dovecot - 负责将邮件投递到用户的邮箱,并提供 IMAP/POP3 服务。
- 数据库: MySQL - 存储虚拟域、虚拟用户、别名等信息。
- Web 管理界面: PostfixAdmin - 通过 Web 界面管理域和用户。
- 垃圾邮件过滤器: SpamAssassin - 过滤垃圾邮件。
- 病毒扫描器: ClamAV - 扫描邮件附件中的病毒。
- Webmail 客户端 (可选): Roundcube 或 SOGo - 提供网页版邮箱。
第一步:系统基础准备
确保您的服务器是最新的,并配置好主机名和解析。
-
更新系统
(图片来源网络,侵删)yum update -y
-
设置主机名 将
mail.yourdomain.com替换为您自己的邮件服务器域名。hostname mail.yourdomain.com echo "mail.yourdomain.com" > /etc/hostname
-
配置 hosts 文件
vi /etc/hosts
添加以下内容,确保 IP 地址和主机名正确对应:
0.0.1 localhost localhost.localdomain YOUR_SERVER_IP mail.yourdomain.com mail -
配置防火墙 邮件服务器需要开放多个端口。
(图片来源网络,侵删)# 永久开放必要端口 iptables -I INPUT -p tcp --dport 22 -j ACCEPT iptables -I INPUT -p tcp --dport 25 -j ACCEPT # SMTP iptables -I INPUT -p tcp --dport 587 -j ACCEPT # Submission (SMTPS with auth) iptables -I INPUT -p tcp --dport 465 -j ACCEPT # SMTPS (deprecated but common) iptables -I INPUT -p tcp --dport 110 -j ACCEPT # POP3 iptables -I INPUT -p tcp --dport 995 -j ACCEPT # POP3S iptables -I INPUT -p tcp --dport 143 -j ACCEPT # IMAP iptables -I INPUT -p tcp --dport 993 -j ACCEPT # IMAPS # 保存规则 service iptables save # 重启防火墙 service iptables restart
第二步:安装数据库
我们使用 MySQL 来存储用户信息。
-
安装 MySQL 服务器
yum install -y mysql-server
-
启动并设置开机自启
service mysqld start chkconfig mysqld on
-
安全配置 MySQL 运行
mysql_secure_installation脚本,它会引导您设置 root 密码、移除匿名用户、禁止 root 远程登录等。mysql_secure_installation
根据提示操作,建议对所有问题都回答 "Y" (是)。
-
创建邮件数据库和用户
mysql -u root -p
在 MySQL 提示符下,执行以下 SQL 语句:
-- 创建数据库 CREATE DATABASE mailserver; -- 创建数据库用户,并授权 -- 请将 'your_strong_password' 替换为一个安全的密码 GRANT ALL PRIVILEGES ON mailserver.* TO 'mailuser'@'localhost' IDENTIFIED BY 'your_strong_password'; -- 刷新权限 FLUSH PRIVILEGES; -- 退出 EXIT;
第三步:安装 Web 服务器和 PHP
PostfixAdmin 需要 Web 服务器和 PHP 支持。
-
安装 Apache 和 PHP
yum install -y httpd php php-mysql php-imap php-mbstring php-pear php-gd php-xml
-
启动并设置开机自启
service httpd start chkconfig httpd on
-
创建网站根目录
mkdir -p /var/www/postfixadmin chown -R apache:apache /var/www/postfixadmin
第四步:安装 PostfixAdmin
PostfixAdmin 是管理虚拟域和用户的工具。
-
下载并解压
cd /tmp wget http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.93.7/postfixadmin-2.93.7.tar.gz tar -xvzf postfixadmin-2.93.7.tar.gz cp -r postfixadmin-2.93.7/* /var/www/postfixadmin/ rm -rf postfixadmin-2.93.7*
-
配置 PostfixAdmin
cd /var/www/postfixadmin/ cp config.inc.php config.inc.php.orig vi config.inc.php
修改以下关键配置项:
// $CONF['configured'] = false; // 改为 true $CONF['configured'] = true; // 数据库配置 $CONF['database_type'] = 'mysql'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'mailuser'; $CONF['database_password'] = 'your_strong_password'; // 您在 MySQL 中设置的密码 $CONF['database_name'] = 'mailserver'; // 域配置 $CONF['default_domain'] = 'yourdomain.com'; // 您的域名 // 加密方式 $CONF['encrypt'] = 'md5crypt'; // 或 'dovecot:SHA512-CRYPT',后者更现代 // 管理员邮箱 $CONF['admin_email'] = 'admin@yourdomain.com'; // 域列表 $CONF['domain_path'] = 'YES'; $CONF['domain_in_mailbox'] = 'NO';
-
设置目录权限
chown -R apache:apache /var/www/postfixadmin chmod -R 644 /var/www/postfixadmin/config.inc.php
-
通过 Web 界面完成安装 在浏览器中访问
http://YOUR_SERVER_IP/postfixadmin/setup.php。- 系统会检查配置,如果没有问题,会显示一个哈希值。
- 将此哈希值复制到
config.inc.php文件的$CONF['setup_password']行。 - 刷新页面,点击 "Generate password hash" 来为管理员创建密码。
- 将生成的哈希值再次复制到
$CONF['setup_password']。 - 访问
http://YOUR_SERVER_IP/postfixadmin/,使用您刚刚创建的管理员账号登录。 - 创建第一个域(
yourdomain.com)和第一个邮箱用户(test@yourdomain.com)。
第五步:安装和配置 Postfix
-
安装 Postfix 和 MySQL 支持
yum install -y postfix postfix-mysql
-
备份并编辑主配置文件
cp /etc/postfix/main.cf /etc/postfix/main.cf.bak vi /etc/postfix/main.cf
清空文件内容,然后添加以下配置:
# 基本设置 myhostname = mail.yourdomain.com mydomain = yourdomain.com myorigin = $mydomain mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain # 虚拟域设置 virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf virtual_mailbox_base = /var/vmail virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf virtual_mailbox_limit = 512000000 virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual-mailbox-limit-maps.cf virtual_mailbox_limit_override = yes virtual_maildir_extended = yes virtual_create_maildirsize = yes virtual_mailbox_limit_message = "Sorry, the user's maildir has overdrawn his diskspace quota, please try again later." virtual_overquota_bounce = yes # 邮件投递代理 mail_spool_directory = /var/spool/mail # 网络接口 inet_interfaces = all inet_protocols = all # 客户端认证 smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous, noplaintext smtpd_sasl_tls_security_options = noanonymous # 客户端限制 smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_rbl_client zen.spamhaus.org smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unknown_sender_domain smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_helo_hostname, reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net smtpd_data_restrictions = reject_unauth_pipelining # TLS/SSL 设置 (强烈建议启用) smtpd_tls_security_level = may smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem smtpd_tls_key_file = /etc/pki/tls/private/postfix.key smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_security_level = may smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache -
创建 MySQL 查询文件 Postfix 需要这些文件来查询数据库。
vi /etc/postfix/mysql-virtual-mailbox-domains.cf
user = mailuser password = your_strong_password hosts = localhost dbname = mailserver query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
vi /etc/postfix/mysql-virtual-mailbox-maps.cf
user = mailuser password = your_strong_password hosts = localhost dbname = mailserver query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
vi /etc/postfix/mysql-virtual-alias-maps.cf
user = mailuser password = your_strong_password hosts = localhost dbname = mailserver query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
为这些文件设置正确的权限:
chown root:postfix /etc/postfix/mysql-*.cf chmod 640 /etc/postfix/mysql-*.cf
-
创建虚拟用户邮箱目录
groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /var/vmail -s /sbin/nologin mkdir -p /var/vmail chown -R vmail:vmail /var/vmail
-
生成 TLS 证书 如果没有购买证书,可以自签一个(客户端会警告,但可以工作)。
mkdir /etc/pki/tls/certs/postfix cd /etc/pki/tls/certs/postfix openssl req -new -x509 -days 3650 -nodes -out postfix.pem -keyout postfix.key # 填写信息,Common Name 填写您的邮件服务器域名 mail.yourdomain.com
-
启动并设置开机自启
service postfix start chkconfig postfix on
第六步:安装和配置 Dovecot
-
安装 Dovecot 及相关组件
yum install -y dovecot dovecot-mysql
-
备份并编辑主配置文件
cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.bak vi /etc/dovecot/dovecot.conf
确保以下行被取消注释并设置正确:
# Protocols protocols = imap pop3 lmtp # Mail location mail_location = maildir:/var/vmail/%d/%n # SSL settings ssl = required ssl_cert = </etc/pki/tls/certs/postfix/postfix.pem ssl_key = </etc/pki/tls/private/postfix/postfix.key # Authentication !include auth-sql.conf.ext
-
配置 SQL 认证 编辑
/etc/dovecot/conf.d/auth-sql.conf.ext:vi /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 } -
创建 Dovecot SQL 配置文件
vi /etc/dovecot/dovecot-sql.conf.ext
driver = mysql connect = host=localhost dbname=mailserver user=mailuser password=your_strong_password default_pass_scheme = MD5-CRYPT user_query = SELECT email AS user, maildir, 5000 AS uid, 5000 AS gid, CONCAT('*:storage=', quota, 'B') AS quota_rule FROM mailbox WHERE username = '%u' AND active = '1' password_query = SELECT username AS user, password FROM mailbox WHERE username = '%u' AND active = '1'设置权限:
chown root:dovecot /etc/dovecot/dovecot-sql.conf.ext chmod 640 /etc/dovecot/dovecot-sql.conf.ext
-
启动并设置开机自启
service dovecot start chkconfig dovecot on
第七步:安装反垃圾邮件和反病毒
-
安装 SpamAssassin 和 ClamAV
yum install -y spamassassin clamav clamav-daemon clamav-update
-
配置和启动服务
# 更新 ClamAV 病毒库 freshclam # 启动并设置开机自启 service clamd on service clamd start service spamassassin start chkconfig clamd on chkconfig spamassassin on
-
配置 Postfix 使用它们 安装
spamd和clamd的 Postfix 过滤器。yum install -y postfix-policyd-spf-python
配置 Postfix 来调用这些服务比较复杂,通常需要配置
master.cf并设置内容过滤器,由于这部分配置非常繁琐且容易出错,这里不展开详细步骤,您可以参考相关文档。
第八步:测试
-
检查服务状态
service postfix status service dovecot status service httpd status service mysqld status
-
发送测试邮件 使用
telnet或swaks等工具测试 SMTP 连接和发信。# 安装 swaks yum install -y swaks # 发送一封测试邮件 swaks --to test@yourdomain.com --from admin@yourdomain.com --server mail.yourdomain.com --auth-user admin@yourdomain.com --auth-password YOUR_MAIL_PASSWORD
-
使用邮件客户端 在 Outlook, Thunderbird 或手机邮件客户端中配置您的邮箱:
- IMAP: 服务器
mail.yourdomain.com, 端口993, SSL/TLS - SMTP: 服务器
mail.yourdomain.com, 端口587, STARTTLS, 需要认证 - 用户名:
test@yourdomain.com - 密码: 您在 PostfixAdmin 中设置的密码
- IMAP: 服务器
-
访问 Webmail 在浏览器中访问
http://YOUR_SERVER_IP/postfixadmin/登录管理界面,或者安装 Roundcube/SOGo 来提供 Webmail 服务。
重要提醒
- PTR 记录: 为了避免邮件被标记为垃圾邮件,请确保您的服务器 IP 地址有正确的反向 DNS 解析,指向
mail.yourdomain.com,这需要联系您的 VPS/服务器提供商设置。 - DNS 记录: 确保您的域名的 DNS 解析中正确设置了:
A记录:yourdomain.com-> 您的服务器 IPMX记录:yourdomain.com->mail.yourdomain.comTXT记录: 用于 SPF (v=spf1 mx ~all) 和 DKIM/DMARC (如果配置了 DKIM)。
- 安全: CentOS 6.4 已停止安全更新,存在大量已知漏洞。切勿将此服务器暴露在公网上处理重要邮件,仅用于学习和测试目的,如果您需要生产环境,请升级到更新的 CentOS/RHEL 版本或使用其他仍在维护的发行版。
这个过程非常漫长,任何一个环节出错都可能导致问题,请务必仔细检查每一步的配置和日志文件 (/var/log/maillog),祝您好运!
