在ubuntu使用Postfix搭建邮件服务器
Published in:2025-03-26 |
Words: 4.1k | Reading time: 15min | reading:

在ubuntu使用Postfix搭建邮件服务器

在 Ubuntu 服务器上搭建邮件服务器的教程。 Postfix 作为邮件传输代理 (MTA),Dovecot 作为邮件投递代理 (MDA)

目标:

  • 在 Ubuntu 服务器上搭建一个功能完善的邮件服务器。
  • 支持发送和接收邮件。
  • 实现基本的安全措施,防止垃圾邮件和未经授权的访问。

准备工作:

  1. 一台运行 Ubuntu Server 的服务器。 推荐使用 Ubuntu 20.04 或更高版本。
  2. 具有 sudo 权限的非 root 用户。
  3. 一个域名。 你需要一个注册的域名,以便设置邮件服务器的 DNS 记录。
  4. 一个静态 IP 地址。 你的服务器需要一个静态 IP 地址,以便 DNS 记录可以正确解析到你的服务器。
  5. 确保服务器主机名设置正确。 使用 hostnamectl 命令设置主机名。主机名应该与你的域名或子域名相关。例如,mail.example.com

步骤 1:安装 Postfix

Postfix 是一个流行的、安全的、易于配置的邮件传输代理 (MTA)。

1
2
sudo apt update
sudo apt install postfix

在安装过程中,会弹出一个配置窗口。选择 “Internet Site” 并输入你的域名(例如,example.com)。

步骤 2:配置 Postfix

编辑 Postfix 的主配置文件 main.cf

1
sudo nano /etc/postfix/main.cf

进行以下修改:

  • myhostname 设置服务器的主机名。

    1
    myhostname = mail.example.com
  • myorigin 设置发送邮件时使用的域名。

    1
    myorigin = example.com
  • mydestination 设置服务器接收邮件的域名。

    1
    mydestination = mail.example.com, example.com, localhost.localdomain, localhost
  • mynetworks 设置允许通过此服务器发送邮件的网络。

    1
    mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
  • relayhost 如果你需要通过另一个邮件服务器发送邮件,请设置此选项。 否则,注释掉或留空。

    1
    #relayhost =
  • inet_interfaces 设置 Postfix 监听的网络接口。

    1
    inet_interfaces = all
  • inet_protocols 设置 Postfix 使用的网络协议。

    1
    inet_protocols = all

保存并关闭文件。

步骤 3:安装 Dovecot

Dovecot 是一个流行的、安全的邮件投递代理 (MDA)。 它负责将邮件投递到用户的邮箱。

1
sudo apt install dovecot-core dovecot-imapd dovecot-pop3d

步骤 4:配置 Dovecot

配置 Dovecot 以使用 Postfix 进行邮件投递。

1
sudo nano /etc/dovecot/dovecot.conf

取消注释以下行:

1
2
3
!include conf.d/10-mail.conf
!include conf.d/10-auth.conf
!include conf.d/10-master.conf

保存并关闭文件。

编辑 10-mail.conf

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

设置 mail_location 选项:

1
mail_location = mbox:~/mail:INBOX=/var/mail/%u

保存并关闭文件。

编辑 10-auth.conf

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

取消注释 disable_plaintext_auth 选项并将其设置为 no(注意:在生产环境中,强烈建议启用 TLS/SSL 加密,并保持 disable_plaintext_auth = yes 以提高安全性。)

1
disable_plaintext_auth = no

找到 auth_mechanisms 行,并确保它包含 plainlogin

1
auth_mechanisms = plain login

保存并关闭文件。

编辑 10-master.conf

1
sudo nano /etc/dovecot/conf.d/10-master.conf

找到 service auth 部分,并确保 unix_listener /var/spool/postfix/private/auth 行存在且未注释:

1
2
3
4
5
6
7
8
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
...
}

找到 service imap-loginservice pop3-login 部分,确保 inet_listener 选项存在且未注释。

保存并关闭文件。

步骤 5:配置 Postfix 以使用 Dovecot 进行身份验证

编辑 Postfix 的 main.cf 文件:

1
sudo nano /etc/postfix/main.cf

添加以下行:

1
2
3
4
5
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_relay_restrictions = permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
broken_sasl_auth_clients = yes

保存并关闭文件。

步骤 6:设置 DNS 记录

你需要设置以下 DNS 记录,以便邮件服务器可以正常工作:

  • A 记录: 将你的域名或子域名(例如,mail.example.com)指向你的服务器的静态 IP 地址。

  • MX 记录: 指示邮件服务器的域名。 将 MX 记录指向你的域名或子域名(例如,mail.example.com)。

  • TXT 记录 (SPF): SPF 记录用于防止垃圾邮件。 添加一个 TXT 记录,指定允许从你的域名发送邮件的服务器。 例如:

    1
    v=spf1 mx a ip4:你的服务器IP地址 -all
  • TXT 记录 (DMARC): DMARC 记录用于进一步提高邮件安全性。 添加一个 DMARC 记录,指示如何处理未通过 SPF 和 DKIM 检查的邮件。 例如:

    1
    v=DMARC1; p=none; rua=mailto:postmaster@example.com;

    注意:rua=mailto:postmaster@example.com; 这部分是可选的,用于指定接收 DMARC 报告的邮箱。

    具体的 DNS 记录设置方法取决于你的域名注册商。

步骤 7:重新启动服务

重新启动 Postfix 和 Dovecot 服务以应用更改:

1
2
sudo systemctl restart postfix
sudo systemctl restart dovecot

步骤 8:测试邮件服务器

  1. 创建用户: 创建一个系统用户用于邮件测试
1
sudo adduser testuser
  1. 发送邮件: 使用 mail 命令发送邮件。
1
echo "This is a test email." | mail -s "Test Email" testuser@example.com
  1. 接收邮件: 使用 dovecot 提供的工具或者 mutt 命令来接收邮件。 首先安装 mutt:
1
sudo apt install mutt

然后运行 mutt:

1
mutt -f /var/mail/testuser

你应该能看到你发送的测试邮件。

步骤 9:安全加固 (重要!)

  • 启用 TLS/SSL 加密: 使用 Let’s Encrypt 获取免费的 TLS/SSL 证书,并配置 Postfix 和 Dovecot 以使用加密连接。 这可以保护你的邮件在传输过程中不被窃听。

    1
    2
    sudo apt install certbot python3-certbot-nginx
    sudo certbot --nginx -d mail.example.com

    然后,编辑 main.cf10-ssl.conf 文件以配置 TLS/SSL 加密。

  • 配置防火墙: 使用 ufw 防火墙,只允许必要的端口(例如,25, 143, 993, 587)通过。

    1
    2
    3
    4
    5
    sudo ufw allow 25
    sudo ufw allow 143
    sudo ufw allow 993
    sudo ufw allow 587
    sudo ufw enable
  • 安装和配置 Fail2ban: Fail2ban 可以自动阻止尝试暴力破解你的服务器的 IP 地址。

    1
    2
    3
    sudo apt install fail2ban
    sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    sudo nano /etc/fail2ban/jail.local

    编辑 jail.local 文件,启用对 Postfix 和 Dovecot 的保护。

  • 定期更新系统: 保持你的 Ubuntu 服务器更新到最新版本,以修补安全漏洞。

步骤 10:防止垃圾邮件

  • 设置反向 DNS (PTR) 记录: 确保你的服务器 IP 地址具有正确的反向 DNS 记录。 这可以帮助验证你的服务器是否是一个合法的邮件服务器。 联系你的服务器提供商设置 PTR 记录。
  • 使用 DKIM: DKIM(DomainKeys Identified Mail)是一种电子邮件身份验证方法,允许你的邮件服务器对发出的邮件进行数字签名。
  • 使用 DMARC: DMARC(Domain-based Message Authentication, Reporting & Conformance)是一种电子邮件身份验证策略,允许你指定如何处理未通过 SPF 和 DKIM 检查的邮件。

注意事项:

  • 安全性: 设置邮件服务器需要非常重视安全性。 请务必采取所有必要的安全措施,以防止垃圾邮件、网络钓鱼和其他恶意活动。
  • 可送达性: 确保你的邮件服务器符合电子邮件发送的最佳实践,以提高邮件的可送达性。 这包括设置正确的 DNS 记录、使用 DKIM 和 DMARC,以及避免发送垃圾邮件。
  • 监控: 持续监控你的邮件服务器的性能和安全状况。 检查日志文件,以便及时发现和解决任何问题。
  • **IP信誉:**保持IP信誉良好对于邮件的成功发送至关重要,务必遵守发送规则和避免发送垃圾邮件,否则你的邮件可能被标记为垃圾邮件。

客户端使用

在本地测试邮件服务器的可用性,是指在你的邮件服务器搭建好后,在不涉及到外部网络的情况下,验证它是否能够正确地发送和接收邮件。 这通常在你服务器搭建的初期阶段进行,用于排查基本配置问题。

以下是几种在本地测试邮件服务器可用性的方法:

方法 1:使用 mail 命令(简单快速)

mail 命令是一个简单的命令行邮件客户端,适用于快速测试。

  1. 确保 mail 命令已安装:

    1
    2
    sudo apt update
    sudo apt install mailutils
  2. 发送邮件到本地用户:
    假设你的系统上有一个用户名为 testuser,并且邮件服务器配置了域名 example.com,你可以尝试向 testuser@example.com 发送邮件。

    1
    echo "This is a test email." | mail -s "Test Email" testuser@example.com
  3. 检查本地用户的邮箱:

    本地用户的邮箱通常位于 /var/mail/<用户名>。 使用 mutt 或者直接查看文件内容:

    • 使用 mutt

      1
      2
      sudo apt install mutt  # 如果没有安装
      mutt -f /var/mail/testuser
    • 直接查看文件:

      1
      sudo cat /var/mail/testuser

    如果邮件服务器配置正确,你应该能在 testuser 的邮箱中看到你发送的测试邮件。

方法 2:使用 swaks 命令(更详细的测试)

swaks (Swiss Army Knife for SMTP) 是一个更强大的命令行 SMTP 测试工具。 它可以让你更详细地控制邮件发送过程,并检查服务器的响应。

  1. 安装 swaks

    1
    2
    sudo apt update
    sudo apt install swaks
  2. 发送邮件并检查响应:

    使用 swaks 命令发送邮件,并检查服务器的响应:

    1
    swaks --to testuser@example.com --from youruser@example.com --server localhost --header "Subject: Test Email from Swaks" --body "This is a test email from swaks." --verbose
    • --to:收件人地址。
    • --from:发件人地址(必须是邮件服务器允许发送的地址)。
    • --server:邮件服务器地址 (localhost 表示本地服务器)。
    • --header:邮件头部信息 (例如,主题)。
    • --body:邮件正文。
    • --verbose:显示详细的发送过程和服务器响应。

    检查 swaks 的输出,确保服务器返回了 “250 OK” 或类似的成功代码。 如果出现错误,可以根据错误信息排查问题。

方法 3:使用本地邮件客户端(例如 Thunderbird)

如果你的系统上安装了图形界面的邮件客户端 (例如 Thunderbird),你可以配置它来连接到本地邮件服务器,并发送和接收邮件。

  1. 配置邮件客户端:

    • 账户类型: 手动配置账户。
    • 收件服务器 (IMAP/POP3):
      • 服务器地址:localhost127.0.0.1
      • 端口:143 (IMAP) 或 110 (POP3) - 如果启用了 SSL/TLS,则使用 993 (IMAPS) 或 995 (POP3S)
      • 安全连接:根据你的服务器配置选择 “STARTTLS” 或 “SSL/TLS”。 如果你没有启用 TLS/SSL,则选择 “无加密”。
      • 身份验证方法:选择 “普通密码” 或 “加密密码”。
    • 发件服务器 (SMTP):
      • 服务器地址:localhost127.0.0.1
      • 端口:25 或 587 (如果使用 STARTTLS) - 如果启用了 SSL/TLS,则使用 465 (SMTPS)
      • 安全连接:根据你的服务器配置选择 “STARTTLS” 或 “SSL/TLS”。 如果你没有启用 TLS/SSL,则选择 “无加密”。
      • 身份验证方法:选择 “普通密码” 或 “加密密码”。
      • 用户名:必须设置为可用的用户,设置需要发送账号和用户密码
  2. 发送和接收邮件:
    使用邮件客户端发送邮件到本地用户(例如,testuser@example.com),并检查是否能够成功接收。

方法 4:检查邮件日志

无论使用哪种方法测试,都应该检查邮件服务器的日志文件,以了解邮件的发送和接收情况。

  • Postfix 日志: /var/log/mail.log/var/log/maillog
  • Dovecot 日志: /var/log/dovecot.log

可视化注册与使用方案

在 Ubuntu 服务器上搭建邮件服务器后,并不能直接“图形化注册邮箱”。 上述教程搭建的是邮件服务器的底层基础,需要手动创建 Linux 系统用户,这些用户才能通过 IMAP/POP3 等协议访问邮件。 如果你想要提供一种“图形化注册邮箱”的体验,你需要额外的软件来管理邮箱账户,并提供一个 Web 界面供用户注册和管理他们的邮箱。

以下是一些可行的方案,它们都需要安装额外的软件,并进行配置。

方案 1:使用 iRedMail (推荐)

iRedMail 是一个非常流行的、开源的邮件服务器解决方案,它提供了一个 Web 界面,用于管理邮箱、用户和域名。 iRedMail 可以自动化配置 Postfix、Dovecot、Roundcube Webmail 等组件,并提供了一个易于使用的管理界面。

  1. 下载 iRedMail 安装脚本:
    访问 https://www.iredmail.org/ 下载最新的 iRedMail 安装脚本。

  2. 运行安装脚本:

    1
    2
    3
    tar xzf iRedMail-x.y.z.tar.gz  # 解压下载的压缩包
    cd iRedMail-x.y.z
    sudo bash iRedMail.sh

    按照安装脚本的提示进行操作。 你需要设置管理员密码、选择数据库类型、设置域名等。

  3. 访问 iRedMail Web 管理界面:
    安装完成后,访问 iRedMail Web 管理界面。 界面地址通常是 https://你的服务器IP地址/iredadmin/https://你的域名/iredadmin/

  4. 使用 Web 界面创建邮箱账户:
    使用管理员账户登录 iRedMail Web 管理界面,然后你可以创建新的邮箱账户,设置密码等。

  5. 让用户访问Web邮箱

    iRedMail 集成了 Roundcube Webmail。 用户可以使用浏览器访问他们的邮箱,地址通常是https://你的服务器IP地址/mail/https://你的域名/mail/

方案 2:使用 Mail-in-a-Box

Mail-in-a-Box 是另一个易于使用的邮件服务器解决方案,旨在简化邮件服务器的设置和管理。 它也提供了一个 Web 界面,用于管理邮箱、用户和域名。

  1. 下载 Mail-in-a-Box 安装脚本:
    访问 https://mailinabox.email/ 获取最新的安装说明。

  2. 运行安装脚本:
    按照 Mail-in-a-Box 的安装说明进行操作。 安装过程相对简单,会自动配置所需的组件。

  3. 访问 Mail-in-a-Box Web 管理界面:
    安装完成后,访问 Mail-in-a-Box Web 管理界面。

  4. 使用 Web 界面创建邮箱账户:
    使用管理员账户登录 Mail-in-a-Box Web 管理界面,然后你可以创建新的邮箱账户。

方案 3:手动配置 Roundcube Webmail 或 Rainloop (更复杂)

如果你不想使用完整的邮件服务器解决方案,你可以手动安装和配置 Roundcube Webmail 或 Rainloop Webmail,并将其与你的 Postfix 和 Dovecot 邮件服务器集成。

  1. 安装 Web 服务器:
    首先,你需要安装一个 Web 服务器(例如,Apache 或 Nginx)。

  2. 安装 PHP:
    你需要安装 PHP 和一些必要的 PHP 扩展。

  3. 下载和安装 Roundcube Webmail 或 Rainloop:
    从官方网站下载 Roundcube Webmail 或 Rainloop 的最新版本,并将其解压到你的 Web 服务器的文档根目录中。

  4. 配置 Roundcube Webmail 或 Rainloop:
    按照 Roundcube Webmail 或 Rainloop 的安装说明进行配置。 你需要设置数据库连接信息、IMAP 和 SMTP 服务器地址、身份验证方法等。

  5. 创建 Web 界面用于注册用户:
    开发自己的Web界面,用于添加用户到数据库中。

方案对比

特性 iRedMail Mail-in-a-Box 手动配置 Webmail
易用性 简单 简单 复杂
Web 管理界面 需要手动添加
自动配置
灵活性 较低 较低
社区支持 活跃 活跃 取决于选择的 Webmail
适用场景 快速搭建邮件服务器 快速搭建邮件服务器 自定义程度高的场景

选择哪个方案?

  • iRedMail 或 Mail-in-a-Box: 如果你希望快速搭建一个功能完善的邮件服务器,并且不需要太多的自定义,那么 iRedMail 或 Mail-in-a-Box 是不错的选择。

  • 手动配置Webmail: 如果你需要高度自定义, 那么选择这个方式。

总结:

要实现“图形化注册邮箱”的功能,你需要安装额外的软件,并提供一个 Web 界面供用户注册和管理他们的邮箱。 iRedMail 和 Mail-in-a-Box 是两种流行的选择,它们提供了易于使用的 Web 管理界面,可以简化邮件服务器的管理。 你也可以选择手动安装和配置 Roundcube Webmail 或 Rainloop Webmail,但这种方法更复杂。 请务必仔细阅读所选方案的文档,并按照说明进行操作。

日志诊断

  • nginx
1
2
sudo less /var/log/nginx/error.log
sudo less /var/log/nginx/access.log
  • mail
1
sudo tail -n 50 /var/log/mail.err

about me 个人微信

img

wechat offical 微信公众号

img

Next:
搭建 Git 或 SVN 服务器并通过 Samba 共享