如何在 Debian Wheezy 上使用 Postfix 安装和配置 DKIM如何在 Debian Wheezy 上使用 Postfix 安装和配置 DKIM如何在 Debian Wheezy 上使用 Postfix 安装和配置 DKIM如何在 Debian Wheezy 上使用 Postfix 安装和配置 DKIM
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

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

介绍

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

  • 服务器是一个开放的邮件中继
  • 发件人或服务器的 IP 地址被列入黑名单
  • 服务器没有完全限定域名 (FQDN) 和 PTR 记录
  • 发件人策略框架 (SPF) DNS 记录丢失或配置错误
  • DomainKeys Identified Mail (DKIM) 实施缺失或未正确设置

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

本教程将重点介绍安装和配置 OpenDKIM]:DKIM 发件人身份验证系统的开源实现。

假设读者知道如何通过 SSH 访问服务器,Postfix 和 Dovecot 已经安装和配置(教程)。

关于 DKIM

DKIM 是一种 Internet 标准,使个人或组织能够将域名与电子邮件相关联。这实际上是一种声称对消息负责的方法。 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。

将使用 Nano 作为编辑器,因为它默认安装在 DigitalOcean droplets 上,并且操作简单:

  • 使用箭头键导航
  • 退出而不保存更改:按 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

    <李> AutoRestart:失败时自动重启过滤器 <李> AutoRestartRate:指定过滤器的最大重启速率,如果重启开始发生的速度快于此速率,则过滤器将终止; 10/1h - 最多允许每小时重启 10 次 <李> UMask:将所有访问权限授予UserID定义的用户组,并允许其他用户读取和执行文件,在这种情况下,它将允许创建和修改Pid文件。 <李> Syslog、SyslogSuccess、*LogWhy:这些参数通过调用 syslog 启用详细日志记录 <李> Canonicalization:定义消息签名时使用的规范化方法,simple 方法几乎不允许修改,而 relaxed 方法允许微小的更改,例如 空格替换; relaxed/simple - 消息头将使用 relaxed 算法处理,正文将使用 simple 算法处理 <李> ExternalIgnoreList:指定可以通过服务器发送邮件的外部主机作为没有凭据的签名域之一 <李> InternalHosts:定义一个内部主机列表,其邮件不应被验证而是被签名 <李> KeyTable:将密钥名称映射到签名密钥 <李> SigningTable:根据在 From: 标头字段中找到的地址列出要应用于消息的签名 <李> 模式:声明操作模式;在这种情况下,milter 充当签名者 (s) 和验证者 (v) <李> PidFile:包含进程标识号的 Pid 文件的路径 <李> SignatureAlgorithm:选择创建签名时要使用的签名算法 <李> UserID:opendkim进程运行在这个用户和组下 <李> Socket:milter会监听这里指定的socket,posfix会通过这个socket发送消息给opendkim进行签名和验证; 12301@localhost 定义了一个 TCP 套接字,它监听 localhost,端口 12301

这个简单的配置旨在允许一个或多个域的消息签名,要了解其他选项,请转到此处。

将 milter 连接到 Postfix:

sudo nano /etc/default/opendkim

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

SOCKET="inet:12301@localhost"

配置 postfix 以使用此 milter:

sudo nano /etc/postfix/main.cf

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

milter_protocol = 2
milter_default_action = accept

Postfix 可能已经使用了过滤器(SpamAssasin、Clamav 等);如果存在以下参数,只需将 opendkim milter 附加到它们(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

我们将使用此文件定义 ExternalIgnoreList 和 InternalHosts,来自这些主机、域和 IP 地址的消息将被信任和签名。

因为我们的主配置文件将TrustedHosts声明为正则表达式文件(refile),所以我们可以使用通配符,*.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

生成公钥和私钥

切换到密钥目录:

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 发送空电子邮件来测试配置,然后将收到回复。如果一切正常,您应该会在 Summary of Results 下看到 DKIM check: pass。

==========================================================
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

©2015-2025 艾丽卡 support@alaica.com