如何安装和使用Postfix的Debian的Wheezy配置DKIM

本教程将专注于安装和配置OpenDKIM:在DKIM发送者认证系统的开源实现。

介绍

对于大多数邮件服务器管理员来说,将其错误地标记为垃圾邮件发送者的挫折感并不奇怪。 通过排除受损服务器的可能性,伪标志通常由以下之一引起:

  • 服务器是一个开放邮件转发
  • 发件人或服务器的IP地址被列入黑名单
  • 服务器不具有完全限定域名( FQDN )和PTR记录
  • 发件人策略框架( SPF )DNS记录丢失或配置错误
  • 该域名密钥识别邮件( DKIM )的实施缺少或没有正确设置

这些是由大多数专有和开源垃圾邮件过滤器(包括SpamAssassin)检查的一些基本属性。 传递这些测试对于配置良好的邮件服务器极为重要。

本教程将专注于安装和配置OpenDKIM ]:将DKIM发送者认证系统的开源实现。

假定读者知道如何通过SSH,Postfix和Dovecot的访问服务器已安装并配置( 教程 ),主机名和FQDN进行设置( 教程教程 )和SPF记录已到位( 教程 )。

关于DKIM

DKIM是一种互联网标准,允许个人或组织将域名与电子邮件关联。 这实际上是作为声明消息责任的方法。 在其核心,DKIM由非对称加密技术提供支持。 发件人的邮件传输代理(MTA)使用私钥对每个发出的邮件进行签名。 收件人从发件人的DNS记录中检索公钥,并验证邮件签名发生后,邮件正文和某些头字段是否未更改。

安装OpenDKIM

在开始安装之前,建议进行系统更新:

sudo apt-get update
sudo apt-get dist-upgrade

安装OpenDKIM及其依赖关系:

sudo apt-get install opendkim opendkim-tools

附加软件包将被列为依赖关系,键入yes ,然后按Enter键继续。

配置OpenDKIM

必须创建和编辑几个文件才能配置OpenDKIM。

因为它是默认安装上DigitalOceanDroplet,它的操作简单nano将被用来作为一个编辑器:

  • 使用箭头键导航
  • 不保存更改退出:按CTRL + X ,然后N
  • 退出并保存更改:按CTRL + X ,然后Y ,最后按下Enter

重要:在所有命令和配置文件中,将example.com的每个实例替换为您自己的域。 不要忘记在编辑后保存文件。

让我们从主配置文件开始:

sudo nano /etc/opendkim.conf

将以下行附加到conf文件的末尾(每个参数将在下面说明)。 或者,你可以选择为自定义端口号Socket 确保它不是由不同的应用程序使用。

AutoRestart             Yes
AutoRestartRate         10/1h
UMask                   002
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes

Canonicalization        relaxed/simple

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

Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256

UserID                  opendkim:opendkim

Socket                  inet:12301@localhost
  • 自动重启 :自动重启的故障过滤器

  • AutoRestartRate:指定过滤器最大重启率,如果重新开始发生比这个速度更快,过滤器将终止; 10/1h - 10重启/小时至多允许

  • UMASK:给出了所有访问权限由定义的用户组UserID ,并允许其他用户阅读和执行文件,在这种情况下,将允许PID文件的创建和修改。

  • 系统日志 ,SyslogSuccess,* LogWhy:这些参数可通过调用系统日志详细记录

  • 规范化 :定义邮件签名使用的规范化方法,在simple方法可以让几乎没有任何改变,而relaxed 1容忍细微的变化,如
    空白更换; relaxed/simple -消息头将与被处理relaxed算法和身体的simple 1

  • ExternalIgnoreList:指定外部主机可通过该服务器作为签约的领域之一发送邮件,而凭据

  • InternalHosts:定义了其邮件也不能进行验证,而是签订内部主机列表

  • KEYTABLE:映射键名签名密钥

  • SigningTable:列出签名根据找到的地址应用于邮件From:头字段

  • 模式 :声明的操作模式; 在这种情况下,雄鱼充当签名者( s )和检验( v

  • PIDFILE:路径PID文件包含进程标识号

  • SignatureAlgorithm:选择签名算法创建签名时使用

  • 用户名 :在opendkim过程中该用户和组下运行

  • 插座 :将雄鱼会听这里指定的插槽上,Posfix将消息发送到opendkim用于签名和验证通过此插座; 12301@localhost定义侦听TCP套接字localhost ,端口12301

这个简单的配置是为了让消息签署一个或多个域,了解其他选项,请访问这里

将milter连接到Postfix:

sudo nano /etc/default/opendkim

添加以下行,仅在使用自定义端口号时编辑端口号:

SOCKET="inet:12301@localhost"

配置Stapling以使用此milter:

sudo nano /etc/postfix/main.cf

确保这两行存在于Postfix配置文件中,并且未注释掉:

milter_protocol = 2
milter_default_action = accept

这很可能是一个过滤器(SpamAssasin,Clamav等)已经使用的Postfix; 如果下列参数都存在,只是opendkim雄鱼追加到它们(milters用逗号分隔),端口号应该是相同opendkim.conf

smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301
non_smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301

如果缺少参数,请按如下所示进行定义:

smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301

创建一个目录结构,保存受信任的主机,密钥表,签名表和加密密钥:

sudo mkdir /etc/opendkim
sudo mkdir /etc/opendkim/keys

指定受信任的主机:

sudo nano /etc/opendkim/TrustedHosts

我们将使用这个文件来定义ExternalIgnoreListInternalHosts ,这些主机,域名和IP地址的邮件将被信任和签名。

因为我们的主配置文件声明TrustedHosts为正则表达式文件( refile ),我们可以使用通配符patters, *.example.com意味着从example.com的子域来的邮件也将被信任的,不只是从根域发送的那些。

自定义并将以下行添加到新创建的文件。 可以指定多个域,不要编辑前三行:

127.0.0.1
localhost
192.168.0.1/24

*.example.com

#*.example.net
#*.example.org

创建键表:

sudo nano /etc/opendkim/KeyTable

密钥表包含每个选择器/域对以及其私钥的路径。 任何字母数字串可以被用作选择器,在本实施例mail被使用,这是没有必要去改变它。

mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private

#mail._domainkey.example.net example.net:mail:/etc/opendkim/keys/example.net/mail.private
#mail._domainkey.example.org example.org:mail:/etc/opendkim/keys/example.org/mail.private

创建签名表:

sudo nano /etc/opendkim/SigningTable

此文件用于声明域/电子邮件地址及其选择器。

*@example.com mail._domainkey.example.com

#*@example.net mail._domainkey.example.net
#*@example.org mail._domainkey.example.org

生成公钥和私钥

切换到keys目录:

cd /etc/opendkim/keys

为域保存密钥创建单独的文件夹:

sudo mkdir example.com
cd example.com

生成密钥:

sudo opendkim-genkey -s mail -d example.com

-s指定选择器和-d域,这个命令将创建两个文件, mail.private是我们的专用密钥和mail.txt包含公钥。

更改私钥的所有者opendkim

sudo chown opendkim:opendkim mail.private

将公钥添加到域的DNS记录

打开mail.txt

sudo nano -$ mail.txt

公钥下定义p参数。 不要使用下面的示例键,它只是一个例证,将不能在您的服务器上工作。

mail._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB" ; ----- DKIM key mail for example.com

复制该键并将TXT记录添加到您域的DNS条目中:

Name: mail._domainkey.example.com.

Text: "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB"

请注意,DNS更改可能需要几个小时才能传播。

重新启动Postfix和OpenDKIM:

sudo service postfix restart
sudo service opendkim restart

恭喜! 您已成功为邮件服务器配置DKIM!

该配置可以通过发送一个空的电子邮件进行测试,以check-auth@verifier.port25.com和一个答复将接收。 如果一切正常,你应该看到DKIM check: passSummary of Results

==========================================================
Summary of Results
==========================================================
SPF check:          pass
DomainKeys check:   neutral
DKIM check:         pass
Sender-ID check:    pass
SpamAssassin check: ham

另外,您也可以发送邮件到您控制,查看收到的邮件的标题在你的Gmail收件箱Gmail地址, dkim=pass应该是存在于Authentication-Results报头字段。

Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com;
       dkim=pass header.i=@example.com;
提交者:P. Sebastian