如何设置ubuntu 18.04 sendmail + DKIM + SPF + DMARC或我如何设法进入Gmail堡垒

前言


在我的服务器上,两个单独的域正在旋转。 在Roskomnadzor被阻止之前,我们每天收集的访问量约为2000次,邮件服务器每天向所有流行的邮件服务发送约200封信,包括 Google和Yandex。 一切都很棒。 但是,正如著名的录像带所说:“一切都很好,直到Navalny Roskomnadzor来了!

既然我们已经设法找到一个主机名,其IP地址没有受到状态检查阻止,则出现了另一个问题。 Google Good Corporation已停止让我们的邮递员超过门槛。

google MX服务器向我发送的邮件中大约带有以下消息:“您的消息似乎是不请自来的,让我们再见...”

Google SMTP连接日志
050 <legale.legale@gmail.com>... Connecting to gmail-smtp-in.l.google.com. via esmtp... 050 220 mx.google.com ESMTP v6-v6si38552789wrc.432 - gsmtp 050 >>> EHLO sevenlight.ru 050 250-mx.google.com at your service, [2a02:c207:2018:3546::1] 050 250-SIZE 157286400 050 250-8BITMIME 050 250-STARTTLS 050 250-ENHANCEDSTATUSCODES 050 250-PIPELINING 050 250-CHUNKING 050 250 SMTPUTF8 050 >>> STARTTLS 050 220 2.0.0 Ready to start TLS 050 >>> EHLO sevenlight.ru 050 250-mx.google.com at your service, [2a02:c207:2018:3546::1] 050 250-SIZE 157286400 050 250-8BITMIME 050 250-ENHANCEDSTATUSCODES 050 250-PIPELINING 050 250-CHUNKING 050 250 SMTPUTF8 050 >>> MAIL From:<root@sevenlight.ru> SIZE=297 050 250 2.1.0 OK v6-v6si38552789wrc.432 - gsmtp 050 >>> RCPT To:<legale.legale@gmail.com> 050 >>> DATA 050 250 2.1.5 OK v6-v6si38552789wrc.432 - gsmtp 050 354 Go ahead v6-v6si38552789wrc.432 - gsmtp 050 >>> . 050 550-5.7.1 [2a02:c207:2018:3546::1 7] Our system has detected that this 050 550-5.7.1 message is likely unsolicited mail. To reduce the amount of spam sent 050 550-5.7.1 to Gmail, this message has been blocked. Please visit 050 550-5.7.1 https://support.google.com/mail/?p=UnsolicitedMessageError 050 550 5.7.1 for more information. v6-v6si38552789wrc.432 - gsmtp 


使用此命令,我发送了一条测试消息:

 echo "Subject: Hello baby!" | sendmail -v legale.legale@gmail.com 

为了突破垃圾邮件过滤器,我不会写关于手鼓的舞蹈。 我只能说我整晚都被运送了,但只有第二天才能成功。 这就是为什么我决定写这本手册的原因。

UBUNTU 18.04上的SPF + DKIM设置说明


与许多其他指令不同,此指令的陡峭之处在于它有效。 我保证您可以在1台服务器上配置至少2个域而没有太多困难。

1.安装必要的软件包


 apt-get install sendmail opendkim -y 

2.配置opendkim


配置在这里:/etc/opendkim.conf

/etc/opendkim.conf
自动重启是
UMask 002
Syslog是
AutoRestartRate 10/1小时
规范化轻松/简单
ExternalIgnoreList重新归档:/ etc / opendkim / TrustedHosts

InternalHosts重新归档:/ etc / opendkim / TrustedHosts
键表重新归档:/ etc / opendkim /键表
SigningTable重新归档:/ etc / opendkim / SigningTable

LogWhy是
模式sv
PidFile /var/run/opendkim/opendkim.pid
签名算法rsa-sha256
套接字inet:8891 @ localhost
SyslogSuccess是
临时目录/ var / tmp
用户ID opendkim:opendkim

3.设置密钥和签名规则


我将描述为想要完全自治的用户创建自己的密钥的过程。 就个人而言,我将Yandex.Direct Mail服务用于域pdd.yandex.ru,因此我具有Yandex生成的密钥。

 #   mkdir -p /etc/opendkim/keys/*****.ru #  cd /etc/opendkim/keys/******.ru #  #-s   -d      opendkim-genkey -s mail -d ******.ru #  2  mail.txt     mail.private   #    opendkim:opendkim chown opendkim:opendkim mail.* #     chmod 600 mail.private 

接下来,我们连接从Yandex创建或下载的DKIM密钥。

我们对opendkim配置中的以下三行感兴趣:

 InternalHosts refile:/etc/opendkim/TrustedHosts KeyTable refile:/etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable 

第一个/etc/opendkim/TrustedHosts包含将有权访问opendkim服务器以对电子邮件签名的主机。

/ etc / opendkim / TrustedHosts
127.0.0.1
本地主机
######。ru
******。ru

第二个文件/etc/opendkim/KeyTable包含一个私钥和相关的DKIM条目的表,这些私钥和DKIM条目如下: [selector]._domainkey.[domain_name]

/ etc / opendkim / KeyTable
mail._domainkey.sevenlight.ru sevenlight.ru:mail:/etc/opendkim/keys/sevenlight.ru/mail.private
mail._domainkey.st-goods.ru st-goods.ru:mail:/etc/opendkim/keys/st-goods.ru/mail.private

第三个文件/etc/opendkim/SigningTable包含一个用于签署字母的规则表。 它指示谁的字母和用哪个键签名。

/ etc / opendkim / SigningTable
*@sevenlight.ru mail._domainkey.sevenlight.ru
*@st-goods.ru mail._domainkey.st-goods.ru

我们创建这些文件,以指示域和密钥文件的路径。 这样就完成了opendkim的设置。

4.配置sendmail


配置sendmail尽可能简单。 我们只需要在原型配置文件/etc/mail/sendmail.mc的末尾添加以下行:

 #    starttls include(`/etc/mail/tls/starttls.m4')dnl # sendmail    opendkim INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@localhost')dnl 

要在默认情况下从正确的域发送邮件,您需要在/etc/mail/sendmail.mc文件中进行另一处更改

我们正在寻找类似于以下内容的行: MASQUERADE_AS(`st-goods.ru')dnl用所需的域替换。 该域将用作默认返回地址。 请注意,引号不同,严格来说,第一个符号`被称为gravis。 因此,由于某种原因,它包含在sendmail配置中。

现在我们将条目添加到/ etc / hosts文件中,这是必需的,以便sendmail通过过滤器传递消息。 实验确定,如果不添加条目,则所有日志都保持原始状态,不会显示单个错误,但不会对字母进行签名。

 #ipv4 echo -e "127.0.0.1 st-goods.ru" >> /etc/hosts #ipv6 echo -e "::1 st-goods.ru" >> /etc/hosts 

现在,我们需要使用新设置来重建sendmail。

 #  #    "" sendmailconfig #  opendkim  sendmail service opendkim restart && service sendmail restart 

现在,我们的sendmail服务器能够通过opendkim服务器传递传出消息,该服务器添加数字签名并加密已发送信件的标题。 仍然需要为主机发布公共密钥,以便可以解密标头并确保标头没有更改。

5. DKIM TXT记录DNS服务器上的设置


密钥必须以以下内容在TXT类型的字符串中挂在DNS服务器上:
主机: mail._domainkey
值: v=DKIM1; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2wtGTw/5KPjtlIEh282JY7ovxZ/8eqveFn9ivhzpYJldl3fBEOKw v=DKIM1; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2wtGTw/5KPjtlIEh282JY7ovxZ/8eqveFn9ivhzpYJldl3fBEOKw

说明:
p=这是我们的公钥
v=定义DKIM的版本号
t=设置标志;默认情况下未设置标志。 有两个标志“ y”和“ s”。
y表示DKIM处于测试模式。
s表示当@之后的邮件地址的右侧部分必须与字母签名的参数d = DKIM中指定的域完全匹配时的模式。

必须按以下方式指定主机: [selector]._domainkey
我们有一个邮件选择器,因此主机将如下所示: mail._domainkey

必须从文件/etc/opendkim/keys/st-goods.ru/mail.txt公钥。

/etc/opendkim/keys/st-goods.ru
mail._domainkey IN TXT(“ v = DKIM1; h = sha256; k = rsa;„
“P = MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsLFjSAqvfSrjvF0JfMkiSzqWRhXwwVPzW5OEtRFSoDVBwDxR6hMna1iESnUQ1OzbUQQPnDPbrFXkalDCAXigZqltTSAV + JQSyOwhi0b88WS3djb1IkA / qioCobjlhMFSatvcmz5kMkG8oeoHhVFQ / BE84PwDPTXRmcObDvg7meUmkYpdxeyr + tcG5ezuC + s15I00 + 6NSAaj0Tj»
«Y / Bl2e2TE / WG45wVShlQ85E8IpYixscd0qDJ9 / NbZrbWIfy8shujWVk5izNU4PqcWwW7 / H9uTkhAbMu0fgqT8W9Jv / GRVAireOCzMl13E9PVANt4o + ywqyGk38vSY8QdgJsZPDUQIDAQAB»); -st-goods.ru的DKIM密钥邮件

键从p =到最后一个引号。 引号本身必须被删除。

6. SPF设置


SPF(发件人政策框架)是另一种垃圾邮件防护技术,我不再赘述。 仅需两个字就可以了解这项技术的本质。 在域的DNS记录中,有权从该域发送邮件的服务器地址的记录方式与DKIM公钥相​​同。 我们需要在此条目中注册服务器的IP地址。 就我而言,Yandex服务器也已添加到列表中。

这是我的帖子的一个示例:
主持人: @
值: v=spf1 a mx include:_spf.yandex.net ip4:173.249.51.13 ip6:2a02:c207:2018:3546::1 ~all

语法很简单。 首先,显示spf版本,然后在空格前后加上或不带有加号的情况下,指示有权从该域发送邮件的服务器的地址。 我有记录a和mx,这意味着来自DNS记录A和MX的服务器也包括在允许列表中。 通过include:指定Yandex服务器地址,然后指定我服务器的ipv4和ipv6地址。 〜都表示软故障“软故障”。 即 接收服务器可以自行决定是否允许所有未列出的地址。 -全部将意味着强烈拒绝。

7. DMARC设置


穿透gmail堡垒的最后钉子是DMARC。 DMARC列出了处理SPF或DKIM失败的电子邮件的方法。

我们通过TXT DNS记录进行的所有操作都完全相同。
主持人: _dmarc
值: v=DMARC1; p=none v=DMARC1; p=none

在这里,我们确定如果字母未通过SPF或DKIM,则无需执行任何操作。 您可以将p =拒绝。 然后,这些信件将被拒绝。

检查一下


给自己发一封信。 echo "Subject: Hello baby!" | sendmail -v legale.legale@gmail.com

我们查看邮件日志中的最新条目。 tail -f /var/log/mail.log | grep dkim
将会出现类似以下内容的行:

 Jun 11 22:07:55 sevenlight opendkim[6473]: w5BK7sl9008069: DKIM-Signature field added (s=mail, d=st-goods.ru) 

如果有一行,则说明sendmail服务器和opendkim一起工作并签署了您的信。 如果没有这样的行,请参阅“可能的问题”部分。

现在,让我们看看邮箱中发生了什么。 打开字母,然后按字母右上角的向下箭头按钮。 在下拉菜单中,选择“显示原件”。

这是我得到的:

 Message ID <201806112007.w5BK7sUS008068@******.ru> Created on: 11 June 2018 at 22:07 (Delivered after 2 seconds) From: info@*****.ru To: legale.legale@gmail.com Subject:  №2221 -   ******.ru SPF: PASS with IP 2a02:c207:2018:3546:0:0:0:1 Learn more DKIM: 'PASS' with domain *****.ru Learn more DMARC: 'PASS' Learn more 

利润$$

可能的问题


我衷心希望没有必要阅读本节,但是该技术是一件复杂的事情……有时不清楚谁为谁工作。

首先,检查是否按照说明中指定的顺序进行了所有操作。
首先,检查文件/ etc / hosts中更改的正确性。 我那里的问题最多。 接下来,检查系统日志中是否有dkim错误。 当我四处走动时,尽管我将用户opendkim分配给了文件所有者,但碰巧遇到了无法读取opendkim密钥的情况。 接下来,您应该仔细研究sendmailconfig命令的执行日志,我遇到的情况是,我使用通常的单引号而不是设置的砾石,并且sendmailconfig对此发誓。 如果其他所有方法都失败,请写信给我,然后继续尝试。

Source: https://habr.com/ru/post/zh-CN415569/


All Articles