凌峰创科服务平台

centos 6.4 邮件服务器

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

centos 6.4 邮件服务器-图1
(图片来源网络,侵删)

这个组合可以构建一个功能齐全的 Webmail 邮件系统,具备虚拟域和虚拟用户管理、反垃圾邮件、反病毒等功能。


架构概览

我们将搭建以下组件:

  1. MTA (邮件传输代理): Postfix - 负责发送和接收邮件。
  2. MDA (邮件分发代理): Dovecot - 负责将邮件投递到用户的邮箱,并提供 IMAP/POP3 服务。
  3. 数据库: MySQL - 存储虚拟域、虚拟用户、别名等信息。
  4. Web 管理界面: PostfixAdmin - 通过 Web 界面管理域和用户。
  5. 垃圾邮件过滤器: SpamAssassin - 过滤垃圾邮件。
  6. 病毒扫描器: ClamAV - 扫描邮件附件中的病毒。
  7. Webmail 客户端 (可选): RoundcubeSOGo - 提供网页版邮箱。

第一步:系统基础准备

确保您的服务器是最新的,并配置好主机名和解析。

  1. 更新系统

    centos 6.4 邮件服务器-图2
    (图片来源网络,侵删)
    yum update -y
  2. 设置主机名mail.yourdomain.com 替换为您自己的邮件服务器域名。

    hostname mail.yourdomain.com
    echo "mail.yourdomain.com" > /etc/hostname
  3. 配置 hosts 文件

    vi /etc/hosts

    添加以下内容,确保 IP 地址和主机名正确对应:

    0.0.1   localhost localhost.localdomain
    YOUR_SERVER_IP mail.yourdomain.com mail
  4. 配置防火墙 邮件服务器需要开放多个端口。

    centos 6.4 邮件服务器-图3
    (图片来源网络,侵删)
    # 永久开放必要端口
    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 来存储用户信息。

  1. 安装 MySQL 服务器

    yum install -y mysql-server
  2. 启动并设置开机自启

    service mysqld start
    chkconfig mysqld on
  3. 安全配置 MySQL 运行 mysql_secure_installation 脚本,它会引导您设置 root 密码、移除匿名用户、禁止 root 远程登录等。

    mysql_secure_installation

    根据提示操作,建议对所有问题都回答 "Y" (是)。

  4. 创建邮件数据库和用户

    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 支持。

  1. 安装 Apache 和 PHP

    yum install -y httpd php php-mysql php-imap php-mbstring php-pear php-gd php-xml
  2. 启动并设置开机自启

    service httpd start
    chkconfig httpd on
  3. 创建网站根目录

    mkdir -p /var/www/postfixadmin
    chown -R apache:apache /var/www/postfixadmin

第四步:安装 PostfixAdmin

PostfixAdmin 是管理虚拟域和用户的工具。

  1. 下载并解压

    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*
  2. 配置 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';
  3. 设置目录权限

    chown -R apache:apache /var/www/postfixadmin
    chmod -R 644 /var/www/postfixadmin/config.inc.php
  4. 通过 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

  1. 安装 Postfix 和 MySQL 支持

    yum install -y postfix postfix-mysql
  2. 备份并编辑主配置文件

    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
  3. 创建 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
  4. 创建虚拟用户邮箱目录

    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
  5. 生成 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
  6. 启动并设置开机自启

    service postfix start
    chkconfig postfix on

第六步:安装和配置 Dovecot

  1. 安装 Dovecot 及相关组件

    yum install -y dovecot dovecot-mysql
  2. 备份并编辑主配置文件

    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
  3. 配置 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
    }
  4. 创建 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
  5. 启动并设置开机自启

    service dovecot start
    chkconfig dovecot on

第七步:安装反垃圾邮件和反病毒

  1. 安装 SpamAssassin 和 ClamAV

    yum install -y spamassassin clamav clamav-daemon clamav-update
  2. 配置和启动服务

    # 更新 ClamAV 病毒库
    freshclam
    # 启动并设置开机自启
    service clamd on
    service clamd start
    service spamassassin start
    chkconfig clamd on
    chkconfig spamassassin on
  3. 配置 Postfix 使用它们 安装 spamdclamd 的 Postfix 过滤器。

    yum install -y postfix-policyd-spf-python

    配置 Postfix 来调用这些服务比较复杂,通常需要配置 master.cf 并设置内容过滤器,由于这部分配置非常繁琐且容易出错,这里不展开详细步骤,您可以参考相关文档。


第八步:测试

  1. 检查服务状态

    service postfix status
    service dovecot status
    service httpd status
    service mysqld status
  2. 发送测试邮件 使用 telnetswaks 等工具测试 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
  3. 使用邮件客户端 在 Outlook, Thunderbird 或手机邮件客户端中配置您的邮箱:

    • IMAP: 服务器 mail.yourdomain.com, 端口 993, SSL/TLS
    • SMTP: 服务器 mail.yourdomain.com, 端口 587, STARTTLS, 需要认证
    • 用户名: test@yourdomain.com
    • 密码: 您在 PostfixAdmin 中设置的密码
  4. 访问 Webmail 在浏览器中访问 http://YOUR_SERVER_IP/postfixadmin/ 登录管理界面,或者安装 Roundcube/SOGo 来提供 Webmail 服务。


重要提醒

  • PTR 记录: 为了避免邮件被标记为垃圾邮件,请确保您的服务器 IP 地址有正确的反向 DNS 解析,指向 mail.yourdomain.com,这需要联系您的 VPS/服务器提供商设置。
  • DNS 记录: 确保您的域名的 DNS 解析中正确设置了:
    • A 记录: yourdomain.com -> 您的服务器 IP
    • MX 记录: yourdomain.com -> mail.yourdomain.com
    • TXT 记录: 用于 SPF (v=spf1 mx ~all) 和 DKIM/DMARC (如果配置了 DKIM)。
  • 安全: CentOS 6.4 已停止安全更新,存在大量已知漏洞。切勿将此服务器暴露在公网上处理重要邮件,仅用于学习和测试目的,如果您需要生产环境,请升级到更新的 CentOS/RHEL 版本或使用其他仍在维护的发行版。

这个过程非常漫长,任何一个环节出错都可能导致问题,请务必仔细检查每一步的配置和日志文件 (/var/log/maillog),祝您好运!

分享:
扫描分享到社交APP
上一篇
下一篇