前言
在我的服务器上,两个单独的域正在旋转。 在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 / TrustedHosts127.0.0.1
本地主机
######。ru
******。ru
第二个文件
/etc/opendkim/KeyTable
包含一个私钥和相关的DKIM条目的表,这些私钥和DKIM条目如下:
[selector]._domainkey.[domain_name]
/ etc / opendkim / KeyTablemail._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.rumail._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对此发誓。 如果其他所有方法都失败,请写信给我,然后继续尝试。