凌峰创科服务平台

CentOS 6.5邮件服务器如何搭建?

本指南将采用经典的 LAMP (Linux, Apache, MySQL, PHP) 架构,并结合 Postfix (SMTP)、Dovecot (IMAP/POP3) 和 SquirrelMail (Webmail) 来构建一个功能齐全的邮件服务器。

CentOS 6.5邮件服务器如何搭建?-图1
(图片来源网络,侵删)

架构概述

我们将安装以下核心组件:

  1. Postfix: 作为邮件传输代理,负责发送和接收邮件,它将替代传统的 Sendmail。
  2. Dovecot: 作为 IMAP/POP3 服务器,负责从邮件服务器上收取邮件。
  3. MySQL: 用于存储用户账户、域名等虚拟用户信息,而不是直接使用系统用户。
  4. SquirrelMail: 一个基于 Web 的邮件客户端,方便用户通过浏览器收发邮件。
  5. Courier-Authlib: Dovecot 的一个认证库,用于连接 MySQL 数据库进行用户认证。
  6. SpamAssassin & ClamAV: 用于垃圾邮件过滤和病毒扫描(可选,但强烈推荐)。

第一步:系统准备与基础安装

  1. 设置主机名 邮件服务器需要一个规范的主机名,mail.yourdomain.com

    hostname mail.yourdomain.com
    # 永久修改,编辑 /etc/sysconfig/network
    vi /etc/sysconfig/network
  2. 更新系统 确保所有软件包都是最新的。

    yum update -y
  3. 配置防火墙和 SELinux 这是搭建邮件服务器最关键也最容易出错的一步。

    CentOS 6.5邮件服务器如何搭建?-图2
    (图片来源网络,侵删)
    • 关闭 SELinux (为了简化,生产环境建议配置策略而非直接关闭)

      # 临时关闭
      setenforce 0
      # 永久关闭,编辑 /etc/selinux/config
      vi /etc/selinux/config
      # 将 SELINUX=enforcing 改为 SELINUX=disabled
    • 配置防火墙 (iptables) 邮件服务器需要开放多个端口:

      • 25: SMTP (发送邮件)
      • 587: SMTPS (带TLS的邮件提交,用于客户端发送)
      • 465: SMTPS (旧版,但仍有使用)
      • 110: POP3
      • 995: POP3S (带SSL的POP3)
      • 143: IMAP
      • 993: IMAPS (带SSL的IMAP)
      • 80: (可选,如果使用Webmail)
      # 清空现有规则
      iptables -F
      # 设置默认策略为DROP
      iptables -P INPUT DROP
      iptables -P FORWARD DROP
      iptables -P OUTPUT ACCEPT
      # 开放必要端口
      iptables -A INPUT -i lo -j ACCEPT
      iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
      iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH
      iptables -A INPUT -p tcp --dport 25 -j ACCEPT   # SMTP
      iptables -A INPUT -p tcp --dport 587 -j ACCEPT  # Submission
      iptables -A INPUT -p tcp --dport 465 -j ACCEPT  # SMTPS
      iptables -A INPUT -p tcp --dport 110 -j ACCEPT  # POP3
      iptables -A INPUT -p tcp --dport 995 -j ACCEPT  # POP3S
      iptables -A INPUT -p tcp --dport 143 -j ACCEPT  # IMAP
      iptables -A INPUT -p tcp --dport 993 -j ACCEPT  # IMAPS
      iptables -A INPUT -p tcp --dport 80 -j ACCEPT   # HTTP (Webmail)
      # 保存规则
      service iptables save
      # 重启iptables服务
      service iptables restart
  4. 安装基础依赖

    yum install -y wget gcc make

第二步:安装和配置数据库

  1. 安装 MySQL

    CentOS 6.5邮件服务器如何搭建?-图3
    (图片来源网络,侵删)
    yum install -y mysql-server mysql-devel
  2. 启动并设置 MySQL

    service mysqld start
    chkconfig mysqld on
  3. 安全初始化 运行 mysql_secure_installation 脚本,设置 root 密码,并移除匿名用户、测试数据库等。

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

    mysql -u root -p

    在 MySQL 命令行中执行:

    CREATE DATABASE mailserver;
    GRANT ALL PRIVILEGES ON mailserver.* TO 'mailuser'@'localhost' IDENTIFIED BY 'your_strong_password';
    FLUSH PRIVILEGES;
    EXIT;
  5. 创建数据库表结构 创建一个 SQL 文件 mailserver.sql如下:

    -- mailserver.sql
    USE mailserver;
    -- 存储虚拟域
    CREATE TABLE domains (
      id INT NOT NULL AUTO_INCREMENT,
      domain VARCHAR(50) NOT NULL,
      PRIMARY KEY (id),
      UNIQUE KEY (domain)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    -- 存储虚拟用户
    CREATE TABLE users (
      id INT NOT NULL AUTO_INCREMENT,
      domain_id INT NOT NULL,
      user VARCHAR(50) NOT NULL,
      password VARCHAR(120) NOT NULL,
      PRIMARY KEY (id),
      UNIQUE KEY (user),
      FOREIGN KEY (domain_id) REFERENCES domains(id) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    -- 存储别名
    CREATE TABLE aliases (
      id INT NOT NULL AUTO_INCREMENT,
      domain_id INT NOT NULL,
      source VARCHAR(100) NOT NULL,
      destination TEXT NOT NULL,
      PRIMARY KEY (id),
      FOREIGN KEY (domain_id) REFERENCES domains(id) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    导入 SQL 文件:

    mysql -u mailuser -p mailserver < mailserver.sql

第三步:安装和配置 Postfix

  1. 安装 Postfix 和相关库

    yum install -y postfix dovecot mysql-devel
  2. 配置 Postfix 备份原始主配置文件:

    cp /etc/postfix/main.cf /etc/postfix/main.cf.bak

    编辑 /etc/postfix/main.cf,修改或添加以下内容:

    # myhostname 和 mydomain 必须与你的服务器主机名匹配
    myhostname = mail.yourdomain.com
    mydomain = yourdomain.com
    myorigin = $mydomain
    # 网络接口设置
    inet_interfaces = all
    inet_protocols = all
    # 设置我的网络
    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_minimum_uid = 1000
    virtual_uid_maps = static:5000
    virtual_gid_maps = static:5000
    virtual_transport = lmtp:unix:private/dovecot-lmtp
    # SASL 认证设置,用于客户端发送邮件
    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth
    smtpd_sasl_auth_enable = yes
    smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_unknown_recipient_domain, reject_rbl_client sbl-xbl.spamhaus.org
    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_use_tls = yes
  3. 创建 Postfix 的 MySQL 查询文件 创建 /etc/postfix/mysql-virtual-mailbox-domains.cf:

    user = mailuser
    password = your_strong_password
    hosts = localhost
    dbname = mailserver
    query = SELECT 1 FROM domains WHERE domain='%s'

    创建 /etc/postfix/mysql-virtual-mailbox-maps.cf:

    user = mailuser
    password = your_strong_password
    hosts = localhost
    dbname = mailserver
    query = SELECT CONCAT('/var/vmail/', domain, '/', user, '/') FROM users WHERE user='%s' AND domain='%d'

    注意:确保这些文件的权限只有 Postfix 用户可读。

    chown postfix:postfix /etc/postfix/mysql-virtual-*.cf
    chmod 640 /etc/postfix/mysql-virtual-*.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. 生成 SSL 证书

    cd /etc/pki/tls/certs
    make mail.pem
    # 按照提示填写信息,可以全部使用默认值
    mv mail.pem postfix.pem
    cd /etc/pki/tls/private
    mv ../certs/postfix.pem .
  6. 启动并启用 Postfix

    service postfix start
    chkconfig postfix on

第四步:安装和配置 Dovecot

  1. 安装 Dovecot

    yum install -y dovecot dovecot-mysql
  2. 配置 Dovecot 备份并编辑主配置文件 /etc/dovecot/dovecot.conf:

    # 确保以下值被设置
    disable_plaintext_auth = yes
    mail_location = maildir:/var/vmail/%d/%n
    mail_privileged_group = vmail

    编辑认证配置文件 /etc/dovecot/conf.d/10-auth.conf:

    !include auth-sql.conf.ext
    # 禁用系统用户登录
    !include auth-passwdfile.conf.ext

    编辑 SQL 认证配置文件 /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 查询文件 /etc/dovecot/dovecot-sql.conf.ext:

    driver = mysql
    connect = host=localhost dbname=mailserver user=mailuser password=your_strong_password
    default_pass_scheme = SHA512-CRYPT
    user_query = SELECT CONCAT('/var/vmail/', domain, '/', user, '/') AS home, 'maildir:/var/vmail/' || domain || '/' || user AS mail, 5000 AS uid, 5000 AS gid FROM users WHERE user = '%u' AND domain = '%d'
    password_query = SELECT user, domain, password FROM users WHERE user = '%u' AND domain = '%d'

    注意:设置文件权限。

    chown root:dovecot /etc/dovecot/dovecot-sql.conf.ext
    chmod 640 /etc/dovecot/dovecot-sql.conf.ext

    编辑 LMTP 配置文件 /etc/dovecot/conf.d/10-master.conf:

    service lmtp {
      inet_listener lmtp {
        address = 127.0.0.1
        port = 24
      }
      # Postfix 的 virtual_transport 配置指向这里
      unix_listener /var/spool/postfix/private/dovecot-lmtp {
        mode = 0600
        user = postfix
        group = postfix
      }
    }
    service auth {
      unix_listener /var/spool/postfix/private/auth {
        mode = 0660
        user = postfix
        group = postfix
      }
    }
  3. 启动并启用 Dovecot

    service dovecot start
    chkconfig dovecot on

第五步:添加邮件用户

通过 MySQL 来添加用户:

mysql -u mailuser -p mailserver

在 MySQL 命令行中执行:

-- 添加一个虚拟域
INSERT INTO domains (domain) VALUES ('yourdomain.com');
-- 添加一个用户,密码需要用 doveadm 命令生成
-- 密码为 "P@ssw0rd"
-- 在服务器终端执行: doveadm pw -s SHA512-CRYPT -p 'P@ssw0rd'
-- 会生成一串类似 {SHA512-CRYPT}$6$...
INSERT INTO users (domain_id, user, password) VALUES (1, 'testuser', '{SHA512-CRYPT}$6$rounds=5000$L9t6k...'); -- 将这里替换为生成的密码
-- 添加一个别名,将 info@ 指向 testuser@
INSERT INTO aliases (domain_id, source, destination) VALUES (1, 'info@yourdomain.com', 'testuser@yourdomain.com');

第六步:安装 Webmail (SquirrelMail)

  1. 安装 Apache 和 PHP

    yum install -y httpd php php-mysql php-imap
  2. 配置 Apache

    service httpd start
    chkconfig httpd on
  3. 安装和配置 SquirrelMail

    yum install -y squirrelmail
    # 配置 SquirrelMail
    /usr/share/squirrelmail/config/conf.pl

    在交互式配置中,进行如下设置:

    • Server Settings -> Domain: yourdomain.com
    • Organization Preferences -> Organization Name: Your Company Name
    • General Options -> Data Directory: /var/lib/squirrelmail/data/
    • General Options -> Attachment Directory: /var/lib/squirrelmail/attach/
    • Database Settings -> Type: IMAP
    • Server Settings -> IMAP Server: localhost
    • Server Settings -> IMAP Port: 143
    • Server Settings -> Sendmail Path: /usr/sbin/sendmail
    • 保存并退出 (S -> Q)
  4. 配置 Apache 访问 SquirrelMail 编辑 /etc/httpd/conf.d/squirrelmail.conf,确保 Alias 配置正确。

    Alias /squirrelmail /usr/share/squirrelmail
    <Directory "/usr/share/squirrelmail">
      Options None
      AllowOverride None
      Order allow,deny
      Allow from all
    </Directory>

    重启 Apache:

    service httpd restart

你可以通过 http://your_server_ip/squirrelmail 访问你的 Webmail 了,用户名是 testuser@yourdomain.com,密码是你设置的 P@ssw0rd


第七步:测试与后续优化

  1. 测试发送和接收

    • 使用 telnet 测试 SMTP 连接:
      telnet localhost 25
      EHLO localhost
      MAIL FROM:<testuser@yourdomain.com>
      RCPT TO:<another_user@yourdomain.com>
      DATA
      Subject: Test Email
      This is a test.
      .
      QUIT
    • 使用 SquirrelMail 或邮件客户端 (如 Outlook, Thunderbird) 配置 IMAP/SMTP 服务器进行收发测试。
  2. PTR 记录 (反向解析) 这是邮件服务器能否成功发送邮件的关键,你需要联系你的 VPS 提供商或 IDC,将你的服务器 IP 地址的 PTR 记录指向你的邮件服务器主机名 mail.yourdomain.com

  3. DNS 记录 确保你的域名解析中设置了正确的 MX 记录:

    • MX 记录: yourdomain.com. IN MX 10 mail.yourdomain.com.
    • A 记录: mail.yourdomain.com. IN A <你的服务器IP>
  4. 安全加固

    • SpamAssassin & ClamAV: 安装并配置它们与 Postfix 集成,可以有效拦截垃圾邮件和病毒。
    • Fail2ban: 监控日志,自动封禁暴力破解 IP。
    • 定期更新: 虽然 CentOS 6.5 已停止维护,但如果你有第三方源,请尽量更新。

重要提醒

  • 防火墙和 DNS: 这是邮件服务器能否被外部世界接受的关键,务必确保防火墙规则正确,PTR 和 MX 记录配置无误。
  • IP 黑名单: 新建的邮件服务器 IP 很容易被列入黑名单,需要耐心测试和申诉。
  • 操作系统: 再次强调,CentOS 6.5 已过时,存在安全漏洞,请尽快计划升级到更新的操作系统(如 CentOS Stream, Rocky Linux, AlmaLinux 等)。
分享:
扫描分享到社交APP
上一篇
下一篇