如何使用dkim设置Postfix邮件服务器

时间:2020-03-05 15:29:34  来源:igfitidea点击:

邮件服务器的安装和配置(邮件传输代理,MTA)是任何系统管理员面临的典型任务之一。
其中我们将介绍任务,并在文章的末尾将拥有CentOS 7与PostFix邮件服务器侦听25端口(SMTP),并将所选域的消息传递给用户邮件框。

首先,我们需要正确配置域的DNS记录。
这是在2个地方完成的:

A,TXT和MX记录存储在域名的Registrar,Godaddy中。

使用带记录名和域名作为参数使用"dig"命令检查记录。
在我们的示例中,我的domain andreybondarenko.com配置如下:

┌[root@andreybondarenko]─[~]
  └─10/09 08:37:08-# dig mx andreybondarenko.com
  [...]
  ;; ANSWER SECTION:
  andreybondarenko.com. 1800 IN MX 1 andreybondarenko.com.
  [...]

这表明整个AndreyBondArenko.com域的邮件由名为'AndreyBondarenko.com'的主机服务,因为我只有一个主机。
如果我们有更多,我们可以创建mx1.andreybondarenko.com和mx2.andreybondarenko.com,他们将通过客户随机选择邮件。
这对于稳定性,冗余和负载平衡非常有用。

PTR记录位于托管提供商端。
我们可以在控制面板中找到记录,或者作为技术支持服务将为我们执行此操作。
如果托管提供程序将拒绝更改它,则邮件将由大多数大型邮件服务器(包括Google)拒绝。
此记录称为"反向",允许任何人检查用于启动连接的IP地址是否具有有效的域名。
它是一种快速简便的方法来检测垃圾邮件机器人:它使用它不控制的IP地址,因此它无法正确设置PTR录制。

其次,应安装Postifix本身。
我建议使用它作为邮件服务器,因为它具有高度灵活性,安全,可扩展,并且可以为我们提供高性能的高性能。
在CentOS上运行:

yum install postfix

并且数据包管理器将使用所需的所有依赖项安装。
目前版本2.10.1是CentOS存储库中的最新可用,所以我将使用它。
Postfix有2个配置文件。
/etc/postfix/master.cf控件计算计数,它们的行为应该使用Chrooted环境,而不是用于大多数情况下的默认值。
/etc/postfix/main.cf控制其他所有内容,我们需要更改以下内容:

myhostname = andreybondrenko.com
  mydomain = andreybondarenko.com

这两个变量应设置为主机本身的有效主机名以及他为邮件提供邮件的域。
在我的情况下,他们是一样的。

myorigin = $myhostname

Myorigin参数指定本地发布的邮件似乎来自的域名。
默认值是追加$myhostname,对于小站点可以确定。
如果使用多个邮件服务器运行域,则应将此更改为$MyDomain并设置域互联网数据库的域范围的别名数据库。
为了维持发件人和收件人地址之间的一致性,Myorigin还指定将默认的域名添加到没有@domain部分的收件人地址。
我们将使用默认设置。

inet_interfaces = all
  inet_protocols = all

这两个设置将告诉SMTPD在所有接口上侦听IPv4和IPv6.

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, myotherdomainihave.com

此变量设置我们接受邮件的所有域。
在这种情况下,那是AndreyBondarenko.com,myotherdeainihave.com和localhost。

Relay_Domains = $MyDestination此变量将所有域设置为在收件人不在我们的主机上时,我们将在中继邮件中继邮件。
这基本上是我们所需要的所有初始配置:它告诉SMTPD在所有接口上收听25个端口,接受邮件到AndreyBondarenko.com,localhost和myotherdomainihave.com。
默认情况下,它将将邮件传递给/var/mail中的用户邮箱,我们将来可以将Dovecot设置为IMAP服务器并提供SASL身份验证,然后我们可以将Postfix硬化,设置GreyListing和DKIM。
我们需要做的最后一件事是告诉systemd在启动时启动Postfix并立即运行它:

systemctl enable postfix
  systemctl start postfix

我们现在可以看到它在流程列表中运行:

┌[root@andreybondarenko]─[~]
   └─10/09 09:16:44-# ps ax|grep postfix
   1764 ? Ss 0:02 /usr/libexec/postfix/master -w

我们可以连接到25端口并使用Telnet发送消息:

┌[root@andreybondarenko]─[~]
  └─10/09 09:19:13-# telnet localhost 25
  Trying ::1...
  Connected to localhost.
  Escape character is '^]'.
  220 andreybondrenko.com ESMTP Postfix
  helo andreybondarenko.com
  250 andreybondrenko.com
  mail from:
  250 2.1.0 Ok
  rcpt to:
  250 2.1.5 Ok
  data
  354 End data with .
  test
  .
  250 2.0.0 Ok: queued as EBA0881589
  quit
  221 2.0.0 Bye
  Connection closed by foreign host.

并在/var/log/maillog中看到它

Sep 10 09:19:18 andreybondarenko postfix/smtpd[10889]: connect from localhost[::1]
  Sep 10 09:19:47 andreybondarenko postfix/smtpd[10889]: EBA0881589: client=localhost[::1]
  Sep 10 09:19:54 andreybondarenko postfix/cleanup[10895]: EBA0881589: message-id=
  Sep 10 09:19:54 andreybondarenko postfix/qmgr[1770]: EBA0881589: from=, size=352, nrcpt=1

现在是时候设置了DKIM(见https://en.wikipedia.org/wiki/domainkeys_identified_mail)。
事实上,域名技术提供的唯一方法是控制DNS的人也控制邮件服务器的信息。
这意味着我们应该同时设置两个地方:DNS TXT记录和服务器端的特殊守护程序。

首先,安装opendkim包:

yum install opendkim

二,运行步

┌[root@andreybondarenko]─[~]
└─10/09 18:46:11-# opendkim-default-keygen
Generating default DKIM keys:
Default DKIM keys for freshdaymall.com created in /etc/opendkim/keys.

在/etc/opendkim /键中,将有2个包含公共和私钥的文件。
检查这些权限是否关注私钥(仅opendkim用户可以读取):

┌[root@andreybondarenko]─[/etc/opendkim/keys]
  └─10/09 18:50:52-# ll default.private
  -r--------. 1 opendkim opendkim 887 Oct 2 2015 default.private

现在我们需要纠正设置。

  • /etc/opendkim.conf - opendkim的配置文件
    -/etc/opendkim/keytable - 定义域私钥的路径
    -/etc/opendkim/signingtable - 告诉opendkim如何应用键。
    -/etc/opendkim/trustedhosts - 定义允许哪个主机使用键。

我已将公共和私钥复制到/etc/opendkim

┌[root@andreybondarenko]─[/etc/opendkim]
  └─10/09 18:53:40-# ls -la
  total 48K
  drwxr-xr-x. 3 root opendkim 4.0K Jan 9 2016 .
  drwxr-xr-x. 96 root root 12K Sep 8 07:28 ..
  -r--------. 1 opendkim opendkim 887 Oct 2 2015 andreybondarenko.com.private
  -rw-r-----. 1 root opendkim 333 Oct 2 2015 andreybondarenko.com.txt
  drwxr-x---. 2 opendkim opendkim 4.0K Dec 21 2015 keys
  -rw-r--r--. 1 root root 106 Oct 3 2015 keytable
  -rw-r--r--. 1 root root 60 Oct 3 2015 signingtable
  -rw-r-----. 1 opendkim opendkim 378 Dec 21 2015 TrustedHosts

在/etc/opendkim.conf中,我们需要以下参数:

  • 模式SV - 签名并验证传出消息
  • 套接字INET:8891 @ localhost - 在localhost的使用端口8891以进行通信
  • eposeaddress"AndreyBondarenko.com Postmaster" - Postmaster的地址。
  • Domain AndreyBondarenko.com - 我的域名
  • 选择器邮件 - 要查看键的TXT记录的部分。

默认情况下,其他参数可能会被居住。

然后设置/etc/opendkim/keytable,如下所示:

mail._domainkey.andreybondarenko.com andreybondarenko.com:mail:/etc/opendkim/andreybondarenko.com.private

和/etc/opendkim/signingtable

*@andreybondarenko.com mail._domainkey.andreybondarenko.com

第一个文件定义了寻找域的私钥的位置(请记住,真实的生活服务器可以拥有其中许多),而第二个定义了所有邮件应该用此键签名。
trustedhosts是微不足道的且默认值:

127.0.0.1
  ::1

现在我们可以运行opendkim:

systemctl enable opendkim
  systemctl start opendkim

主机的最后一部分是通过添加本地MILTER来告诉Postfix将所有邮件转发给Opendkim:

smtpd_milters = inet:127.0.0.1:8891
  non_smtpd_milters = inet:127.0.0.1:8891

就是这样!重新启动PostFix以获取新配置:

systemctl restart postfix

现在,最后一个和非常重要的部分:我们需要公开与DNS TXT记录的关键字的开放部分。
我们需要创建记录,如下所示:

  • 姓名 - mail._domainkey.
  • 类型:TXT.
  • TTL:1小时
  • 值:v = dkim1; k = RSA; P = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvGRWfWPPZVIg0fy7Pr0 + rsBsoL6Imt1GBE/QRd3X5Izv1iAJFUsOteaf9TI9EO/YFwoLLahzuoZM1aUU4ED3fHlItEnqXCKQhX8Zripi7cfIO + DRFEhGuQtG6OIuA6 + c3ivao7DTPk/IFqY7MG5M3wMvAfV + eIBf1VjmajSwe3wIDAQABLast一部分,"值"是棘手的,并可能导致错误。
    我们需要读取/etc/opendkim/your_domain.txt或者/etc/opendkim/keys/default.txt并复制删除所有报价符号(即全部")的值。