在Ubuntu上构建自己的电子邮件服务器:基本Postfix设置

  • 技术文档
  • 2022.03.23
  • 浏览:88

为什么要运行自己的电子邮件服务器?也许你有一个需要向用户发送电子邮件的网站,或者你想将电子邮件存储在自己的服务器上以保护隐私。然而,构建自己的电子邮件服务器可能会让人头疼,因为有太多软件组件需要正确安装和配置。为了让你的旅程更轻松,我正在创建一个关于如何在Ubuntu上构建自己的电子邮件服务器的教程系列。

Build Your Own Email Server on Ubuntu Basic Postfix Setup

我有信心地说,这是关于在互联网上从头开始构建电子邮件服务器的最好、最全面的教程系列。你不仅会有一个工作的电子邮件服务器,而且你会更好地了解电子邮件的工作原理。本系列教程分为13个部分。

  1. 设置基本的Postfix SMTP服务器
  2. 设置Dovecot IMAP服务器和TLS加密
  3. 使用PostfixAdmin创建虚拟邮箱(Ubuntu 18.04、Ubuntu 20.04)
  4. 创建SPF和DKIM记录以通过垃圾邮件过滤器
  5. 设置DMARC以保护您的域声誉
  6. 7个有效的建议,防止你的电子邮件被标记为垃圾邮件
  7. 在Ubuntu上安装Roundcube Webmail(Ubuntu 18.04、Ubuntu 20.04)
  8. 如何在PostfixAdmin中托管多个邮件域
  9. 用后缀阻止垃圾邮件
  10. 用SpamAssassin阻止垃圾邮件
  11. 在Ubuntu邮件服务器上设置Amavis和ClamAV
  12. 如何使用自托管VPN服务器保护电子邮件服务器免受黑客攻击
  13. (可选)在Postfix中启用并配置Postscreen以阻止垃圾邮件

我知道这似乎是一项非常艰巨的任务。然而,基于你想要实现的目标,你可能不需要遵循所有这些目标。我的文章很容易阅读,所以如果你花些时间来阅读,你就会有一个工作的电子邮件服务器。

提示:如果你不想从头开始构建一个电子邮件服务器,这是一个漫长而乏味的过程,那么你可以使用iRedMail快速轻松地建立一个功能齐全的邮件服务器。

本文是本系列教程的第1部分。在本文中,我将向您展示如何设置一个非常基本的Postfix SMTP服务器,也称为MTA(邮件传输代理)。完成本文后,您应该能够在自己的电子邮件服务器上使用自己的电子邮件域发送和接收电子邮件。本教程在Ubuntu20.04和Ubuntu18.04服务器上进行测试。

关于后缀

Postfix是最先进的邮件传输代理(MTA),又名SMTP服务器,它有两个用途。

  • 它负责将电子邮件从邮件客户端/邮件用户代理(MUA)传输到远程SMTP服务器。
  • 它还用于接收来自其他SMTP服务器的电子邮件。

Postfix由Unix和安全专家Wietse Venema构建。它易于使用,设计时考虑了安全性和模块化,每个模块都以完成任务所需的最低权限级别运行。Postfix与Unix/Linux紧密集成,不提供Unix/Linux已经提供的功能。它在简单和压力条件下都是可靠的。

Postfix最初是作为Sendmail的替代品设计的,Sendmail是Unix上的传统SMTP服务器。相比之下,Postfix更安全,更容易配置。它与Sendmail兼容,因此如果卸载Sendmail并用Postfix替换它,现有脚本和程序将继续无缝工作。

在本教程中,您将学习如何为单个域配置后缀。

选择合适的主机提供商

要找到一个适合电子邮件托管的VPS(虚拟专用服务器)提供商并非易事。许多托管公司,如DigitalOcean blocks port 25。DigitalOcean不会解锁端口25,因此您需要设置SMTP中继以绕过阻止,这可能会增加您的费用。如果您使用Vultr VPS,则默认情况下端口25被阻止。如果您打开支持票证,他们可以解除阻止,但如果他们决定不允许您的电子邮件发送活动,他们可能会在任何时候再次阻止。如果你使用他们的服务器发送时事通讯,Vultr实际上可能会重新阻止它。

另一个问题是,像DigitalOcean或Vultr这样的大型知名主机提供商被垃圾邮件发送者滥用。通常,服务器IP地址在几个黑名单上。Vultr有一些完整的IP范围被列入黑名单。

Kamatera VPS是运行邮件服务器的一个非常好的选择,因为

  • 他们不封锁25号端口。
  • IP地址不在任何电子邮件黑名单上。(至少对我来说是这样。我选择了达拉斯数据中心。)你肯定不想被列入可怕的微软Outlook IP黑名单或SpamRats黑名单。有些黑名单会屏蔽整个IP范围,你无法从此类黑名单中删除你的IP地址。
  • 您可以编辑PTR记录以提高电子邮件的可交付性。
  • 它们允许你向你的电子邮件订阅者发送时事通讯,而不受每小时或每天的限制。请注意,您不允许发送垃圾邮件,也称为未经请求的批量电子邮件。如果收件人没有明确允许你发送电子邮件,而你向他们发送电子邮件,那就是未经请求的电子邮件。
  • 您可以为一台服务器订购多个IP地址。这对需要发送大量电子邮件的人非常有用。您可以在多个IP地址上传播电子邮件流量,以实现更好的电子邮件交付。

我建议遵循下面链接的教程,在Kamatera上正确设置Linux VPS服务器。

  • 如何在Kamatera上创建Linux VPS服务器

你还需要一个域名。我从NameCheap注册了我的域名,因为价格很低,他们给你一辈子免费的隐私保护。

安装Postfix之前要做的事情

为了让Postfix更好地运行并充分利用Postfix,你需要正确设置你的Ubuntu服务器。

为Ubuntu服务器设置正确的主机名

默认情况下,Postfix在与其他MTA通信时使用服务器的主机名来标识自身。主机名可以有两种形式:单个单词和FQDN。

单字形式主要用于个人电脑。您的Linux家用计算机可能被命名为Linux、debianubuntu等。FQDN(完全限定域名)通常用于面向Internet的服务器,我们应该在邮件服务器上使用FQDN。它由两部分组成:节点名和域名。例如:

mail.linuxbabe.com

是一个FQDN。邮件是最重要的,linuxbabe。com是域名。FQDN将出现在smtpd横幅中。如果您的Postfix未在smtpd横幅中提供FQDN,则某些MTA会拒绝邮件。一些MTA甚至会查询DNS,查看smtpd横幅中的FQDN是否解析为邮件服务器的IP。

输入以下命令以查看主机名的FQDN格式。

hostname -f

如果你的Ubuntu服务器还没有FQDN,你可以使用hostnamectl设置一个。

sudo hostnamectl set-hostname your-fqdn

邮件服务器的常见FQDN是mail。你的地盘。通用域名格式。您需要注销并重新登录,才能在命令提示下看到此更改。

为邮件服务器设置DNS记录

你需要去你的DNS托管服务(通常是你的域名注册商,比如NameCheap)设置DNS记录

邮件交换记录

MX记录告诉其他MTA您的邮件服务器正在发送邮件。你的地盘。com负责为您的域名发送电子邮件。

MX record    @           mail.linuxbabe.com

MX主机的通用名称是mail。你的地盘。通用域名格式。您可以指定多个MX记录,并为邮件服务器设置优先级。数字越小,优先级越高。这里我们只使用一条MX记录,并将0设置为优先级值。(0 – 65535)

请注意,当您创建MX记录时,您应该在名称字段中输入@或您的apex域名,如下所示。apex域名是没有任何子域的域名。

email server MX record

记录

A记录将FQDN映射到IP地址。

mail.linuxbabe.com        <IP-address>

AAAA记录

如果您的服务器使用IPv6地址,那么最好为邮件添加AAAA记录。你的地盘。通用域名格式。

mail.linuxbabe.com        <IPv6-address>

提示:如果使用Cloudflare DNS服务,则在为邮件创建和AAAA记录时不应启用CDN(代理)功能。你的领域。通用域名格式。Cloudflare不支持SMTP或IMAP代理。

PTR记录

指针记录或PTR记录将IP地址映射到FQDN。它是A记录的对应项,用于反向DNS(RDN)查找。

使用PTR记录反向解析IP地址有助于阻止垃圾邮件发送者。许多MTA只有在服务器真正负责某个域时才接受电子邮件。你绝对应该为你的邮件服务器设置一个PTR记录,这样你的邮件就有更好的机会进入收件人的收件箱而不是垃圾邮件文件夹。

要检查PTR记录中的IP地址,可以使用以下命令。

dig -x <IP> +short

host <IP>

PTR记录不由您的域注册器管理。它由提供IP地址的组织管理。你的IP地址是从你的主机提供商那里获得的,而不是从你的域名注册商那里获得的,所以你必须在主机提供商的控制面板中为你的IP地址设置PTR记录。它的值应该是邮件服务器的主机名:mail。你的领域。通用域名格式。如果您的服务器使用IPv6地址,那么也为您的IPv6地址添加一个PTR记录。

要编辑Kamatera VP的反向DNS记录,请登录Kamatera客户端区域,然后打开支持票证,告诉他们为服务器IP地址添加PTR记录,以将IP地址指向邮件。你的领域。通用域名格式。你可能会想,这并不方便,但这是为了让垃圾邮件发送者远离平台,因此像我们这样的合法电子邮件发送者将拥有良好的IP声誉。

注意:Gmail实际上会检查PTR记录中指定的主机名的A记录。如果主机名解析为相同的IP地址,Gmail将接受您的电子邮件。否则,它将拒绝您的电子邮件。

完成以上所有操作后,让我们玩Postfix。

安装后缀

ubuntu服务器上,运行以下两个命令。

sudo apt-get update  sudo apt-get install postfix -y

系统将要求您为邮件配置选择一种类型。通常,您需要选择第二种类型:Internet站点。

build your own email server with postfix

  • 无配置意味着安装过程不会配置任何参数。
  • 互联网站点意味着使用Postfix向其他MTA发送电子邮件,并从其他MTA接收电子邮件。
  • 使用智能主机上网意味着使用postfix接收来自其他MTA的电子邮件,但使用另一个智能主机将电子邮件转发给收件人。
  • 卫星系统意味着使用智能主机发送和接收电子邮件。
  • 仅本地意味着电子邮件仅在本地用户帐户之间传输。

接下来,输入系统邮件名称的域名,即@symbol后面的域名。例如,我的电子邮件地址是,所以我输入了linuxbabe。com的系统邮件名称。此域名将附加到未指定域名的地址。请注意,如果您输入一个子域,如mail。你的领域。com,您将能够接收发送给@mail的电子邮件。你的领域。com地址,但无法接收发往@your domain的电子邮件。com地址。

build your own email server with postfix

安装后,Postfix将自动启动,并显示/etc/Postfix/main。将生成cf文件。现在我们可以使用以下命令检查后缀版本:

postconf mail_version 

在Ubuntu18.04上,后缀版本是3.3.0,Ubuntu20.04附带3.4.10版本。

mail_version = 3.4.10

ss(Socket Statistics)实用程序告诉我们Postfix主进程正在侦听TCP端口25。

sudo ss -lnpt | grep master

ubuntu postfix TCP port 25

Postfix在/usr/sbin/目录下附带许多二进制文件,如下命令所示。

dpkg -L postfix | grep /usr/sbin/

输出:

/usr/sbin/postalias /usr/sbin/postcat /usr/sbin/postconf /usr/sbin/postdrop /usr/sbin/postfix /usr/sbin/postfix-add-filter /usr/sbin/postfix-add-policy /usr/sbin/postkick /usr/sbin/postlock /usr/sbin/postlog /usr/sbin/postmap /usr/sbin/postmulti /usr/sbin/postqueue /usr/sbin/postsuper /usr/sbin/posttls-finger /usr/sbin/qmqp-sink /usr/sbin/qmqp-source /usr/sbin/qshape /usr/sbin/rmail /usr/sbin/sendmail /usr/sbin/smtp-sink /usr/sbin/smtp-source

在防火墙中打开TCP端口25(入站)

入站TCP端口25需要打开,以便Postfix可以接收来自其他SMTP服务器的电子邮件。Ubuntu默认情况下不启用防火墙。如果已启用UFW防火墙,则需要使用以下命令打开端口25(入站)。

sudo ufw allow 25/tcp

然后我们可以用在线端口扫描仪扫描邮件服务器上打开的端口。输入邮件服务器的公共IP地址,然后选择扫描所有公共端口。

build your own email server redhat

从上面的屏幕截图可以看到,TCP端口25在我的邮件服务器上是打开的。

检查TCP端口25(出站)是否被阻止

出站TCP端口25需要打开,以便Postfix可以向其他SMTP服务器发送电子邮件。出站TCP端口25由主机提供商控制,我们可以安装telnet实用程序来检查它是否打开或被阻止。

sudo apt install telnet

在邮件服务器上运行以下命令。

telnet gmail-smtp-in.l.google.com 25

如果未被阻止,您将看到如下消息,这表明已成功建立连接。(提示:输入quit并按Enter键关闭连接。)

Trying 74.125.68.26... Connected to gmail-smtp-in.l.google.com. Escape character is '^]'. 220 mx.google.com ESMTP y22si1641751pll.208 - gsmtp

如果端口25(出站)被阻止,您将看到如下情况:

Trying 2607:f8b0:400e:c06::1a... Trying 74.125.195.27... telnet: Unable to connect to remote host: Connection timed out

在这种情况下,您的Postfix无法向其他SMTP服务器发送电子邮件。请您的ISP/主机提供商为您打开出站端口25。如果他们拒绝您的请求,您需要设置SMTP中继以绕过端口25阻塞,或者使用像Kamatera这样不阻塞端口25的VPS。

有些人可能会问,“我能把端口25换成另一个端口来绕过阻塞吗?”?答案是否定的。只有在同时控制服务器端和客户端时,更改端口才有效。当Postfix发送电子邮件时,它充当SMTP客户端。收件人的邮件服务器充当SMTP服务器。您无法控制接收SMTP服务器。SMTP服务器正在监听端口25以接收电子邮件。他们预计SMTP客户端将到达端口25。没有其他接收电子邮件的端口。如果您的后缀未连接到接收SMTP服务器的端口25,您将无法发送电子邮件。

发送测试电子邮件

事实上,我们现在可以通过命令行发送和接收电子邮件。如果你的Ubuntu服务器有一个名为user1的用户帐户,那么这个用户的电子邮件地址是。您可以向root用户发送电子邮件。你也可以向Gmail、yahoo mail或任何其他电子邮件服务发送电子邮件。

安装Postfix时,sendmail二进制文件被放置在/usr/sbin/sendmail,它与传统的sendmail SMTP服务器兼容。您可以使用Postfix的sendmail二进制文件向您的Gmail帐户发送测试电子邮件,如下所示:

echo "test email" | sendmail 

在这个简单的命令中,sendmail从标准输入读取一条消息,并将“test email”作为消息正文,然后将此消息发送到您的Gmail帐户。你应该能够在你的Gmail收件箱(或垃圾邮件文件夹)中收到这封测试邮件。您可以看到,虽然我们没有指定发件人地址,但Postfix会自动为发件人地址附加一个域名。这是因为我们在安装Postfix时在系统邮件名中添加了我们的域名。

注意:From:域名由Postfix中的myorigin参数决定,而不是myhostname参数。

你可以试着回复这封测试邮件,看看Postfix是否能收到邮件。从您的域发送的电子邮件很可能被标记为垃圾邮件。现在别担心。我们将在本系列教程的后面部分解决这个问题。

每个用户的收件箱位于/var/spool/mail/<;用户名>;或/var/mail/<;用户名>;文件如果不确定在哪里查找收件箱,请使用此命令。

postconf mail_spool_directory

后缀邮件日志存储在/var/log/mail中。日志

还是不能发邮件?

如果端口25(出站)未被阻止,但您仍然无法从自己的邮件服务器向Gmail等其他电子邮件地址发送电子邮件,那么您应该使用命令行文本编辑器(如Nano)打开邮件日志(/var/log/mail.log)。

sudo nano /var/log/mail.log

例如,有些人可能会在文件中看到以下几行。

host gmail-smtp-in.l.google.com[2404:6800:4003:c03::1b] said: 550-5.7.1 [2a0d:7c40:3000:b8b::2] Our system has detected that 550-5.7.1 this message does not meet IPv6 sending guidelines regarding PTR 550-5.7.1 records and authentication. Please review 550-5.7.1  for more information

这意味着您的邮件服务器正在使用IPv6发送电子邮件,但您没有设置IPv6记录。你应该去你的DNS管理员那里,为邮件设置AAAA记录。你的领域。com,那么您还应该为IPv6地址设置PTR记录。(PTR记录由提供IP地址的组织管理。)

要在Nano文本编辑器中保存文件,请按Ctrl+O,然后按Enter确认。要退出,请按Ctrl+X。

使用邮件程序发送和阅读电子邮件

现在,让我们安装一个命令行MUA(邮件用户代理)。

sudo apt-get install mailutils

要发送电子邮件,请键入

mail -a FROM:your-account@yourdomain.com 
:~$ mail -a FROM:  Cc: Subject: 2nd test email I'm sending this email using the mail program.

输入主题行和正文。要告诉mail您已经写完,请按Ctrl+D,mail将为您发送此电子邮件。

要阅读收到的电子邮件,只需键入mail。

mail

下面是如何使用邮件程序来管理邮箱。

  • 要阅读第一封电子邮件,请键入1。如果只显示消息的一部分,请按Enter键以显示消息的其余部分。
  • 要显示从消息1开始的消息标题,请键入h。
  • 要显示最后一屏消息,请键入h$或z。
  • 要阅读下一封电子邮件,请键入n。
  • 要删除邮件1,请键入d 1。
  • 要删除消息1、2和3,请键入d 1 2 3。
  • 要删除从1到10的邮件,请键入d 1-10。
  • 要重播消息1,请键入reply 1。
  • 要退出邮件,请键入q。

已打开的邮件将从/var/mail/<;用户名>;to/home/<;用户名>/mbox文件。这意味着其他邮件客户端无法读取这些邮件。为了防止这种情况发生,请键入x而不是q退出邮件。

如何增加附件大小限制

默认情况下,附件的大小不能超过10MB,这由message_size_limit参数指示。

postconf | grep message_size_limit

输出:

message_size_limit = 10240000

此参数定义了来自您自己的邮件服务器的电子邮件和到达您的邮件服务器的电子邮件的大小限制。

要允许连接50MB大小,请运行以下命令。

sudo postconf -e message_size_limit=52428800

当使用-e(编辑)选项调用postconf命令时,它将尝试在Postfix主配置文件(/etc/Postfix/main.cf)中查找参数(message_size_limit)并更改值。如果找不到该参数,则会在文件末尾添加该参数。

请注意,邮件大小限制不应大于邮箱大小限制,否则Postfix可能无法接收电子邮件。在上游后缀包中,邮箱大小限制的默认值为51200000字节(约48MB)。在Ubuntu上,默认值设置为0,这一点可以从

postconf | grep mailbox_size_limit

输出:

mailbox_size_limit = 0

这意味着邮箱没有大小限制,这很好。

重新启动Postfix以使更改生效。

sudo systemctl restart postfix

从邮件服务器发送带有大附件的电子邮件时,还应注意接收服务器的附件大小限制。例如,您不能向Gmail地址发送大于25MB的附件。

设置后缀主机名

默认情况下,Postfix SMTP服务器使用操作系统的主机名。但是,操作系统的主机名可能会发生变化,因此直接在Postfix配置文件中设置主机名是一种好的做法。使用命令行文本编辑器(如Nano)打开Postfix主配置文件。

sudo nano /etc/postfix/main.cf

找到myhostname参数并设置邮件。你的地盘。com作为价值。不建议使用apex域yourdomain。com作为我的主机名。从技术上讲,您可以使用apex域,但在本教程系列的后续部分中,它会产生问题。

myhostname = mail.yourdomain.com

保存并关闭文件。(要在Nano文本编辑器中保存文件,请按Ctrl+O,然后按Enter确认。要退出,请按Ctrl+X。)重新启动Postfix以使更改生效。

sudo systemctl restart postfix

创建电子邮件别名

在生产环境中操作邮件服务器时,需要配置某些别名。您可以在/etc/alias文件中添加电子邮件别名,该文件是一个特殊的后缀查找表文件,使用Sendmail兼容的格式。

sudo nano /etc/aliases

默认情况下,该文件中只有两行。

# See man 5 aliases for format postmaster: root

第一行是评论。第二行是该文件中别名的唯一定义。左边是别名。右侧是电子邮件的最终目的地。因此,的电子邮件将被发送到。RFC 2142要求提供邮政局长的电子邮件地址。

通常我们不使用根电子邮件地址。相反,邮政局长可以使用普通的登录名来访问电子邮件。因此,您可以添加以下行。用真实用户名替换用户名。

root:   username

Ubuntu Postfix email alias

这样,的电子邮件将被发送到。现在您可以保存并关闭该文件。然后使用newalias命令重建别名数据库

sudo newaliases

仅使用IPv4

默认情况下,Postfix同时使用IPv4和IPv6协议,如下所示:

postconf inet_protocols

输出:

inet_protocols = all

如果邮件服务器没有公共IPv6地址,最好在Postfix中禁用IPv6,以防止不必要的IPv6连接。只需运行以下命令即可在Postfix中禁用IPv6。

sudo postconf -e "inet_protocols = ipv4"

然后重新启动Postfix。

sudo systemctl restart postfix

升级后缀

如果运行sudo-apt-update,然后运行sudo-apt-upgrade,系统将升级Postfix,可能会提示您再次选择Postfix的配置类型。这一次,您应该选择“无配置”以保持当前配置文件不变。

postfix no configuration

下一步

恭喜!现在你有了一个基本的Postfix电子邮件服务器并开始运行。您可以使用命令行发送纯文本电子邮件和阅读收到的电子邮件。在本系列教程的下一部分中,我们将学习如何安装Dovecot IMAP服务器并启用TLS加密,这将允许我们使用Mozilla Thunderbird等桌面邮件客户端发送和接收电子邮件。

  • 第2部分:在Ubuntu上安装Dovecot IMAP服务器;启用TLS加密

和往常一样,如果你觉得这篇文章有用,订阅我们的时事通讯,获取更多提示和窍门。当心?