凌峰创科服务平台

Ubuntu搭建mail服务器要注意哪些问题?

方案概述

我们将采用业界公认的经典组合,这个组合稳定、功能强大且文档丰富:

Ubuntu搭建mail服务器要注意哪些问题?-图1
(图片来源网络,侵删)
  • Postfix: 用于发送和接收邮件的邮件传输代理。
  • Dovecot: 用于处理 IMAP 和 POP3 协议,让用户可以从邮件客户端(如 Outlook, Thunderbird)或手机上收邮件的邮件代理服务器。
  • MariaDB (MySQL): 存储用户信息、域名和邮件路由规则的数据库。
  • SpamAssassin: 用于过滤垃圾邮件的强大工具。
  • Amavisd-new: 一个接口程序,用于将 Postfix 和反病毒/反垃圾邮件工具(如 SpamAssassin, ClamAV)连接起来。
  • ClamAV: 开源的反病毒引擎。
  • Let's Encrypt / Certbot: 为邮件服务器提供免费的 TLS/SSL 证书,加密邮件传输,这是现代邮件服务的必需项

第一步:准备工作

  1. 一台干净的 Ubuntu 服务器

    • 推荐使用 Ubuntu 22.04 LTS。
    • 最低配置: 1核CPU, 1GB RAM, 20GB 硬盘空间。
    • 公网静态IP地址: 这是绝对必需的,因为邮件服务器需要固定的IP进行DNS解析和信誉管理。
    • 完整的域名: mail.yourdomain.com,我们将使用这个域名来配置邮件服务器。
  2. 更新系统:

    sudo apt update && sudo apt upgrade -y
  3. 设置主机名: 邮件服务器的主机名必须是其完全限定域名,如果你的邮件域名是 mail.yourdomain.com,那么主机名也应该设置为这个。

    sudo hostnamectl set-hostname mail.yourdomain.com
  4. 配置防火墙:

    Ubuntu搭建mail服务器要注意哪些问题?-图2
    (图片来源网络,侵删)
    sudo ufw allow OpenSSH
    sudo ufw allow 25,587,143,993,465,110,995/tcp
    sudo ufw enable
    • 25: SMTP (邮件传输)
    • 587: SMTPS (带TLS的邮件传输,用于客户端提交)
    • 465: SMTPS (另一个端口,有时也用)
    • 143: IMAP (非加密)
    • 993: IMAPS (带TLS的IMAP)
    • 110: POP3 (非加密)
    • 995: POP3S (带TLS的POP3)

第二步:安装和配置 Postfix (MTA)

Postfix 负责处理邮件的接收和发送。

  1. 安装 Postfix 和相关工具:

    sudo apt install postfix postfix-mysql -y

    安装过程中会出现一个配置界面:

    • General type of mail configuration: 选择 "Internet Site"
    • System mail name: 输入你的主域名,yourdomain.com不是 mail.yourdomain.com
  2. 配置 Postfix: 编辑主配置文件:

    Ubuntu搭建mail服务器要注意哪些问题?-图3
    (图片来源网络,侵删)
    sudo nano /etc/postfix/main.cf

    在文件末尾添加或修改以下内容:

    # 设置主机名和域名
    myhostname = mail.yourdomain.com
    mydomain = yourdomain.com
    myorigin = $mydomain
    # 设置 inet_interfaces 为 all,监听所有网络接口
    inet_interfaces = all
    # 设置 mydestination,只接收发给本域的邮件
    mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
    # 设置邮件存放目录
    home_mailbox = Maildir/
    # --- 下面是与数据库相关的配置,稍后会用到 ---
    # 设置虚拟域和虚拟邮箱的映射文件
    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_sasl_authenticated, permit_mynetworks, reject_unauth_destination
  3. 创建 Postfix 与数据库的连接文件: 我们需要为 Postfix 创建几个配置文件,让它知道如何从 MariaDB 数据库中查找信息。

    • 创建目录:

      sudo mkdir /etc/postfix/mysql
    • 创建虚拟域映射文件 virtual_mailbox_domains.cf:

      sudo nano /etc/postfix/mysql/virtual_mailbox_domains.cf
      user = mail_admin
      password = your_strong_password
      hosts = 127.0.0.1
      dbname = mailserver
      query = SELECT 1 FROM domains WHERE domain='%s'
    • 创建虚拟邮箱映射文件 virtual_mailbox_maps.cf:

      sudo nano /etc/postfix/mysql/virtual_mailbox_maps.cf
      user = mail_admin
      password = your_strong_password
      hosts = 127.0.0.1
      dbname = mailserver
      query = SELECT 1 FROM mailboxes WHERE username='%s'

    注意: 请务必将 your_strong_password 替换为你自己设置的强密码。

  4. 重启 Postfix 使配置生效:

    sudo systemctl restart postfix

第三步:安装和配置 MariaDB

我们需要数据库来存储用户和域名信息。

  1. 安装 MariaDB:

    sudo apt install mariadb-server mariadb-client -y
  2. 安全配置 MariaDB:

    sudo mysql_secure_installation

    按照提示操作,设置 root 密码,移除匿名用户,禁止 root 远程登录等。

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

    sudo mysql -u root -p

    在 MariaDB shell 中执行以下 SQL 语句:

    -- 创建数据库
    CREATE DATABASE mailserver;
    -- 创建专用用户并授权
    CREATE USER 'mail_admin'@'localhost' IDENTIFIED BY 'your_strong_password';
    GRANT ALL PRIVILEGES ON mailserver.* TO 'mail_admin'@'localhost';
    FLUSH PRIVILEGES;
    -- 创建存放域名的表
    USE mailserver;
    CREATE TABLE domains (
        id INT NOT NULL AUTO_INCREMENT,
        domain VARCHAR(255) NOT NULL,
        PRIMARY KEY (id)
    );
    -- 创建存放邮箱的表
    CREATE TABLE mailboxes (
        id INT NOT NULL AUTO_INCREMENT,
        username VARCHAR(255) NOT NULL,
        password VARCHAR(255) NOT NULL,
        domain_id INT NOT NULL,
        PRIMARY KEY (id),
        UNIQUE (username),
        FOREIGN KEY (domain_id) REFERENCES domains(id) ON DELETE CASCADE
    );
    -- 创建存放别名(转发)的表
    CREATE TABLE aliases (
        id INT NOT NULL AUTO_INCREMENT,
        source_address VARCHAR(255) NOT NULL,
        destination_address VARCHAR(255) NOT NULL,
        domain_id INT NOT NULL,
        PRIMARY KEY (id),
        UNIQUE (source_address),
        FOREIGN KEY (domain_id) REFERENCES domains(id) ON DELETE CASCADE
    );
    EXIT;
  4. 添加你的域名到数据库:

    sudo mysql -u mail_admin -p mailserver

    在 MariaDB shell 中:

    INSERT INTO domains (domain) VALUES ('yourdomain.com');
    -- 如果你还有其他域名,也添加进来
    -- INSERT INTO domains (domain) VALUES ('anotherdomain.com');
    EXIT;

第四步:安装和配置 Dovecot

Dovecot 负责用户认证和邮件的存储/访问。

  1. 安装 Dovecot:

    sudo apt install dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-lmtpd -y
  2. 配置 Dovecot: Dovecot 的配置文件在 /etc/dovecot/ 目录下。

    • 编辑 10-mail.conf:

      sudo nano /etc/dovecot/conf.d/10-mail.conf

      确保以下配置正确:

      mail_location = maildir:/var/vmail/%d/%n
      mail_privileged_group = mail
    • 编辑 10-auth.conf:

      sudo nano /etc/dovecot/conf.d/10-auth.conf

      启用 SQL 认证:

      !include auth-sql.conf.ext
      # 禁用不安全的认证方式
      disable_plaintext_auth = yes
    • 创建 SQL 认证配置文件 auth-sql.conf.ext:

      sudo nano /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 配置文件 dovecot-sql.conf.ext:

      sudo nano /etc/dovecot/dovecot-sql.conf.ext
      driver = mysql
      connect = host=127.0.0.1 dbname=mailserver user=mail_admin password=your_strong_password
      default_pass_scheme = SHA512-CRYPT
      password_query = SELECT username AS user, password FROM mailboxes WHERE username = '%u';
  3. 配置 SSL/TLS:

    • 编辑 10-ssl.conf:
      sudo nano /etc/dovecot/conf.d/10-ssl.conf

      启用 SSL 并指定证书路径(稍后我们会用 Certbot 填充):

      ssl = required
      ssl_cert = </etc/letsencrypt/live/mail.yourdomain.com/fullchain.pem
      ssl_key = </etc/letsencrypt/live/mail.yourdomain.com/privkey.pem
  4. 创建系统用户和目录:

    sudo groupadd -g 5000 vmail
    sudo useradd -g vmail -u 5000 vmail -d /var/vmail -s /sbin/nologin
    sudo mkdir -p /var/vmail
    sudo chown -R vmail:vmail /var/vmail
  5. 重启 Dovecot:

    sudo systemctl restart dovecot

第五步:配置 SPF, DKIM, DMARC (防止邮件被当作垃圾邮件)

这是邮件服务器能否成功发送邮件的关键一步,这些记录需要添加到你域名的 DNS 设置中。

  1. SPF (Sender Policy Framework): 在 DNS 中添加一条 TXT 记录,指定哪些服务器可以代表你的域名发送邮件。

    Type: TXT
    Name: @
    Value: "v=spf1 mx -all"

    v=spf1 mx 表示只有你域名的 MX 记录指向的服务器才能发邮件。-all 表示拒绝所有其他服务器的邮件。

  2. DKIM (DomainKeys Identified Mail): DKIM 为你的邮件添加数字签名,接收方可以验证邮件是否真的来自你且未被篡改。

    • 安装 OpenDKIM:
      sudo apt install opendkim opendkim-tools -y
    • 配置 OpenDKIM: 这部分比较复杂,需要生成密钥对,配置 Postfix 和 OpenDKIM 的集成,过程略,但核心是:
      1. 生成公钥和私钥。
      2. 将公钥添加到 DNS 的 TXT 记录中。
      3. 配置 OpenDKIM 服务。
      4. 配置 Postfix 通过 OpenDKIM 签名邮件。
  3. DMARC (Domain-based Message Authentication, Reporting & Conformance): DMARC 基于 SPF 和 DKIM 的结果,告诉接收方如何处理未通过验证的邮件。 在 DNS 中添加一条 TXT 记录:

    Type: TXT
    Name: _dmarc
    Value: "v=DMARC1; p=quarantine; rua=mailto:admin@yourdomain.com"

    p=quarantine 表示将未通过验证的邮件放入垃圾箱。rua 是接收 DMARC 报告的邮箱。


第六步:配置反垃圾邮件和反病毒

  1. 安装 Amavisd-new, SpamAssassin, ClamAV:

    sudo apt install amavisd-new spamassassin clamav clamav-daemon -y

    安装后,ClamAV 需要更新病毒库:

    sudo freshclam
  2. 配置 Postfix 与 Amavisd-new 的连接: 编辑 Postfix 的主配置文件 main.cf,在 master.cf 中添加内容,使邮件流经过 Amavisd-new,这部分配置比较繁琐,请参考官方文档或详细的教程。


第七步:获取并配置 SSL/TLS 证书

使用 Certbot 免费获取 Let's Encrypt 证书。

  1. 安装 Certbot:

    sudo apt install certbot python3-certbot-postfix -y
  2. 获取证书:

    sudo certbot certonly --standalone -d mail.yourdomain.com

    按照提示操作,输入你的邮箱地址并同意条款,证书会存放在 /etc/letsencrypt/live/mail.yourdomain.com/

  3. 配置自动续期: Certbot 会自动设置续期任务,你可以测试一下:

    sudo certbot renew --dry-run
  4. 重启 Postfix 和 Dovecot:

    sudo systemctl restart postfix dovecot

第八步:创建一个测试邮箱

回到 MariaDB shell:

sudo mysql -u mail_admin -p mailserver

执行 SQL 创建一个邮箱,user@yourdomain.com,密码会自动进行 SHA512 加密:

-- 首先获取 yourdomain.com 的 domain_id
SELECT id FROM domains WHERE domain = 'yourdomain.com';
-- 假设返回的 id 是 1
-- 然后创建邮箱
INSERT INTO mailboxes (username, password, domain_id) VALUES ('user@yourdomain.com', '{SHA512-CRYPT}$6$...', 1);
-- 注意:密码需要是加密后的,你可以使用 `doveadm pw` 命令生成加密后的密码:
-- sudo doveadm pw -s SHA512-CRYPT -p 'your_plain_text_password'
-- 将输出的加密字符串替换掉上面的 $6$... 部分
EXIT;

第九步:测试你的邮件服务器

  1. 测试发送和接收:

    • 使用邮件客户端(如 Thunderbird)配置 IMAP/SMTP 服务器。
      • 服务器: mail.yourdomain.com
      • 端口: IMAPS (993), SMTPS (587)
      • 加密: SSL/TLS
      • 认证: 密码
    • 或者使用命令行工具 telnetswaks 进行测试。
  2. 检查邮件日志:

    • Postfix 日志: tail -f /var/log/mail.log
    • Dovecot 日志: tail -f /var/log/mail.log (Dovecot 的日志通常也在这里) 或 /var/log/dovecot.log
  3. 使用在线工具检查: 访问 https://www.mail-tester.com/,他们会给你一个特殊的邮箱地址,发送一封邮件到这个地址,然后网站会给你一个详细的评分和改进建议,这是优化你服务器配置的最好方法。


总结与后续

恭喜!你已经成功搭建了一个功能齐全的邮件服务器,后续工作包括:

  • 监控: 定期检查日志,监控系统资源。
  • 备份: 定期备份 MariaDB 数据库和 /var/vmail 目录。
  • 优化: 根据邮件服务器的负载和需求,调整 Postfix 和 Dovecot 的配置参数。
  • 安全: 保持系统和所有软件包为最新版本。

这个过程非常漫长且容易出错,请务必耐心,并仔细阅读每个软件的官方文档,祝你成功!

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