介绍
被错误地标记为垃圾邮件发送者的沮丧对大多数邮件服务器管理员来说并不奇怪. 通过排除受损服务器的可能性,一个错误的旗帜通常是由下列因素之一引起的:
- 服务器是一个开放的邮件传递
- 发件人或服务器的 IP 地址是黑名单
- 服务器没有完全合格的域名(FQDN)和一个 PTR 记录
- 发件人政策框架(SPF) DNS 记录缺失或错误配置
- 域密钥识别邮件(DKIM)的实现缺失或不正确设置
这些是大多数专有和开源垃圾邮件过滤器(包括SpamAssassin)正在检查的基本特性。
本教程将专注于安装和配置 OpenDKIM:开源实现 DKIM 发件人身份验证系统。
假设读者知道如何通过SSH访问服务器,Postfix和Dovecot已经安装和配置(教程(教程)(教程)(教程)(教程)(教程)(教程)(教程)(教程)(教程)(教程)(教程)(教程)(教程)(教程)(教程)(教程)(教程)(教程)(教程)(教程)(教程)(教程))。
关于 DKIM
DKIM是一种互联网标准,允许个人或组织将域名与电子邮件消息相关联,这实际上是一种对消息负责的方法,在其核心上,DKIM是由不对称的加密技术驱动的。发件人的邮件传输代理(MTA)用私钥签名每个发送的邮件。收件人从发件人的DNS记录中获取公共密钥,并验证邮件体和部分标题字段是否自发送邮件签名以来没有更改。
安装OpenDKIM
在启动安装之前,建议进行系统更新:
1sudo apt-get update
2sudo apt-get dist-upgrade
安装OpenDKIM和它的依赖性:
1sudo apt-get install opendkim opendkim-tools
额外的包将列为依赖,键入是
并按进入
继续。
配置 OpenDKIM
需要创建和编辑几个文件才能配置 OpenDKIM。
Nano将被用作编辑器,因为它默认安装在DigitalOcean滴上,操作简单:
使用箭头键
*输出而不保存更改:按CTRL + X
然后按N
*输出并保存更改:按CTRL + X
然后按Y
,最后按Enter
**重要:在所有命令和配置文件中,用自己的域代替 example.com 的每个实例。
让我们从主要配置文件开始:
1sudo nano /etc/opendkim.conf
将下列行附加到 conf 文件的末尾(每个参数在下面解释)。 可选地,您可以选择Socket
的自定义端口号。
1AutoRestart Yes
2AutoRestartRate 10/1h
3UMask 002
4Syslog yes
5SyslogSuccess Yes
6LogWhy Yes
7
8Canonicalization relaxed/simple
9
10ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
11InternalHosts refile:/etc/opendkim/TrustedHosts
12KeyTable refile:/etc/opendkim/KeyTable
13SigningTable refile:/etc/opendkim/SigningTable
14
15Mode sv
16PidFile /var/run/opendkim/opendkim.pid
17SignatureAlgorithm rsa-sha256
18
19UserID opendkim:opendkim
20
21Socket inet:12301@localhost
- AutoRestart:自动在故障时重新启动过滤器
- AutoRestartRate:指定过滤器的最大重新启动率,如果重新启动开始发生比这个速度更快,过滤器将终止;
10/1h
- 10次重启/小时最多允许 - UMask:给定义为
用户ID
的用户群体所有访问权限,并允许其他用户阅读和执行文件,在这种情况下,它将允许创建和修改Pid文件 - Syslog, SyslogSuccess, *LogWhy:这些参数允许通过呼叫到syslog 的详细登录
白空间替换;放松/简单
- 消息标题将使用放松
算法处理,身体将使用简单
算法处理
- ExternalIgnoreList:指定可以通过服务器发送邮件的外部主机作为没有凭证的签名域
- InternalHosts:定义了内部主机的列表,其邮件不应该被验证,而是签名
- KeyTable:将签名钥匙
- SigningTable:列出要应用于邮件的签名,基于在
From:
标题字段 中发现的地址 模式:声明操作模式;在这种情况下,米勒作为签名符(s
)和验证符(v
) **Pid
这个简单的配置旨在允许一个或多个域的邮件签名,了解其他选项,请到这里(http://www.opendkim.org/opendkim.conf.5.html)。
将Milter连接到Postfix:
1sudo nano /etc/default/opendkim
添加以下行,仅在使用自定义号码时才能编辑端口号码:
1SOCKET="inet:12301@localhost"
配置 postfix 以使用此 milter:
1sudo nano /etc/postfix/main.cf
请确保这两个行在Postfix config文件中存在,并且没有被评论:
1milter_protocol = 2
2milter_default_action = accept
很可能,一个过滤器(SpamAssasin,Clamav等)已经被Postfix使用;如果存在以下参数,只需将opendkim milter附加到它们中(混合器由一个分开),端口号应该与在opendkim.conf
相同:
1smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301
2non_smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301
如果缺少参数,请将其定义如下:
1smtpd_milters = inet:localhost:12301
2non_smtpd_milters = inet:localhost:12301
创建一个目录结构,其中将包含可信的主机、密钥表、签名表和加密密钥:
1sudo mkdir /etc/opendkim
2sudo mkdir /etc/opendkim/keys
值得信赖的宿主:
1sudo nano /etc/opendkim/TrustedHosts
我们将使用此文件来定义ExternalIgnoreList
和InternalHosts
,来自这些主机,域名和IP地址的消息将被信任和签名。
由于我们的主要配置文件声明TrustedHosts
为常规表达文件(refile
),我们可以使用wildcard patter
,*.example.com
意味着来自 example.com 的子域的消息也将被信任,而不仅仅是从根域发送的消息。
定制并将下列行添加到新创建的文件中. 可以指定多个域,不要编辑前三行:
1127.0.0.1
2localhost
3192.168.0.1/24
4
5*.example.com
6
7#*.example.net
8#*.example.org
创建一个关键表:
1sudo nano /etc/opendkim/KeyTable
一个键表包含每个选择器/域对和其私钥的路径. 任何字符串可以用作选择器,在这个示例中使用邮件
,不需要更改它。
1mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private
2
3#mail._domainkey.example.net example.net:mail:/etc/opendkim/keys/example.net/mail.private
4#mail._domainkey.example.org example.org:mail:/etc/opendkim/keys/example.org/mail.private
创建一个签名表:
1sudo nano /etc/opendkim/SigningTable
此文件用于声明域名/电子邮件地址及其选择者。
1*@example.com mail._domainkey.example.com
2
3#*@example.net mail._domainkey.example.net
4#*@example.org mail._domainkey.example.org
生成公共和私钥
更改密钥目录:
1cd /etc/opendkim/keys
创建一个单独的文件夹,以便域存储密钥:
1sudo mkdir example.com
2cd example.com
创建钥匙:
1sudo opendkim-genkey -s mail -d example.com
「-s」指定了选择器和「-d」域,此命令将创建两个文件,「mail.private」是我们的私钥,而「mail.txt」包含了公共密钥。
将私钥的所有者更改为opendkim
:
1sudo chown opendkim:opendkim mail.private
将公共密钥添加到域名的 DNS 记录中
打开mail.txt
:
1sudo nano -$ mail.txt
公共密钥在p
参数下定义,请不要使用下面的示例密钥,它只是一个示例,并且不会在您的服务器上工作。
1mail._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB" ; ----- DKIM key mail for example.com
复制该密钥并将 TXT 记录添加到您的域名的 DNS 条目中:
1Name: mail._domainkey.example.com.
2
3Text: "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB"
请注意,DNS的变化可能需要几个小时来传播。
重启 Postfix 和 OpenDKIM:
1sudo service postfix restart
2sudo service opendkim restart
恭喜您!您已成功为您的邮件服务器配置了 DKIM!
可以通过发送一个空的电子邮件来[email protected]
来测试配置,并收到回复。
1==========================================================
2Summary of Results
3==========================================================
4SPF check: pass
5DomainKeys check: neutral
6DKIM check: pass
7Sender-ID check: pass
8SpamAssassin check: ham
或者,您可以将消息发送到您所控制的 Gmail 地址,查看收到的电子邮件的标题在您的 Gmail 收件箱中,‘dkim=pass’ 应该存在于身份验证结果
标题框中。
1Authentication-Results: mx.google.com;
2 spf=pass (google.com: domain of [email protected] designates --- as permitted sender) [email protected];
3 dkim=pass [email protected];