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

2023-11-15

介绍

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

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

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

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

假设读者知道如何通过 SSH 访问服务器,Postfix 和 Dovecot 已经安装和配置(tutorial),设置主机名和 FQDN(tutorial, tutorial)并且 SPF 记录已到位(tutorial).

关于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。

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

  • 使用箭头键导航
  • 退出而不保存更改:按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
  • 自动重启:失败时自动重新启动过滤器

  • 自动重启率:指定过滤器的最大重启速率,如果重启开始发生的速度快于该速率,过滤器将终止;10/1h- 每小时最多允许 10 次重启

  • UMask:将所有访问权限授予定义的用户组UserID并允许其他用户读取和执行文件,在这种情况下,它将允许创建和修改 Pid 文件。

  • Syslog, 系统日志成功, *LogWhy:这些参数通过调用 syslog 启用详细日志记录

  • 规范化:定义消息签名时使用的规范化方法,simple方法几乎不允许修改,而relaxed人们可以容忍微小的变化,例如 空白替换;relaxed/simple- 消息头将被处理relaxed算法和主体simple one

  • 外部忽略列表:指定可以通过服务器发送邮件的外部主机作为无需凭据的签名域之一

  • 内部主机:定义内部主机列表,其邮件不应被验证而应被签名

  • KeyTable:将密钥名称映射到签名密钥

  • 签名表:根据在邮件中找到的地址列出要应用于邮件的签名From:标头字段

  • Mode:声明操作模式;在这种情况下,米尔特充当签名者(s)和验证者(v)

  • PidFile:包含进程标识号的Pid文件的路径

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

  • UserID:opendkim进程在此用户和组下运行

  • Socket:milter 将监听此处指定的套接字,Posfix 将通过此套接字向 opendkim 发送消息进行签名和验证;12301@localhost定义一个监听的 TCP 套接字localhost, port 12301

这一简单的配置旨在允许对一个或多个域进行消息签名,要了解其他选项,请访问here.

将 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 and 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 记录中

Open 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: pass under Summary 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Debian Wheezy 上使用 Postfix 安装和配置 DKIM 的相关文章

随机推荐

  • 如何在 Debian 9 上安装 Skype

    Skype是世界上最受欢迎的通信应用程序之一 可让您免费进行在线音频和视频通话 并以经济实惠的价格拨打全球手机和固定电话 Skype 不是开源应用程序 也不包含在 Debian 存储库中 在本教程中 我们将解释如何在 Debian 9 上安
  • Bash 序列表达式(范围)

    在本文中 我们将介绍 Bash 中序列表达式的基础知识 Bash 序列表达式通过定义范围的起点和终点来生成整数或字符范围 一般与以下组合使用for loops Bash 序列表达式 序列表达式采用以下形式 START END INCREME
  • 如何使用 psql 列出 PostgreSQL 数据库和表

    给药时PostgreSQL在数据库服务器中 您可能执行的最常见任务之一是列出数据库及其表 PostgreSQL 附带了一个交互式工具 称为psql 它允许您连接到服务器并对其运行查询 使用时psql您还可以利用它的元命令 这些命令对于脚本编
  • Linux 中的 Gunzip 命令

    Gunzip 是一个用于解压缩 Gzip 文件的命令行工具 Gzip 是最流行的压缩算法之一 它可以减小文件大小并保留原始文件模式 所有权和时间戳 按照惯例 使用 Gzip 压缩的文件要么是 gz or z扩大 在本教程中 我们将解释如何使
  • 如何在 CentOS 7 上安装和配置 Squid 代理

    Squid 是一个功能齐全的缓存代理 支持流行的网络协议 如 HTTP HTTPS FTP 等 将 Squid 放置在 Web 服务器前面可以通过缓存重复请求 过滤 Web 流量和访问地理限制内容来极大地提高服务器性能 本教程介绍如何在 C
  • 如何在 Ubuntu 18.04 上安装 Gitea

    Gitea 是一个用 Go 编写的自托管开源 git 服务器 它是一个叉子Gogs Gitea 包括存储库文件编辑器 项目问题跟踪 用户管理 通知 内置 wiki 等等 Gitea是一个轻量级应用程序 可以安装在低功耗系统上 如果您正在寻找
  • 如何在 Ubuntu 20.04 上添加和删除用户

    配置新 Ubuntu 系统时的首要任务之一是添加和删除用户 每个用户可以对各种命令行和 GUI 应用程序拥有不同的权限级别和特定设置 本文介绍如何在 Ubuntu 18 04 上添加和删除用户帐户 在你开始之前 仅 root 或具有 sud
  • 如何在 Raspberry Pi 上安装 Plex 媒体服务器

    Raspberry Pi 可用于许多不同的项目 Raspberry Pi 最受欢迎的用例之一是将 Raspberry Pi 变成家庭媒体中心 Plex 是一款流行的流媒体服务器 可让您组织视频 音乐和照片收藏 并将它们随时随地流式传输到您的
  • 如何在 Ubuntu 18.04 上安装 Node.js 和 npm

    Node js 是一个开源跨平台 JavaScript 运行时环境 允许服务器端执行 JavaScript 代码 这意味着您可以在计算机上将 JavaScript 代码作为独立应用程序运行 无需使用任何 Web 浏览器 Node js 主要
  • 如何在 CentOS 7 上部署 Mattermost

    Mattermost 是一个开源即时通讯平台 是一个自托管的 Slack 替代品 它是用 Golang 和 React 编写的 可以使用 MySQL 或 PostgreSQL 作为数据库后端 Mattermost 将您的所有团队沟通集中到一
  • 如何在 CentOS 7 上安装 Plex 媒体服务器

    Plex 是一款流媒体服务器 可将您所有的视频 音乐和照片收藏集中在一起 并随时随地将它们流式传输到您的设备 在本教程中 我们将向您展示如何安装和配置Plex 媒体服务器在 CentOS 7 上 先决条件 在继续本教程之前 请确保您以以下身
  • Linux 中的 df 命令(检查磁盘空间)

    我的硬盘还剩多少空间 是否有足够的可用磁盘空间来下载大文件或安装新应用程序 在 Linux 和 Unix 操作系统上 您可以使用df命令获取有关系统磁盘空间使用情况的详细报告 使用 df 命令 的一般语法为df命令如下 df OPTIONS
  • 如何在 CentOS 8 上安装 Node.js 和 npm

    Node js 是一个基于 Chrome JavaScript 构建的跨平台 JavaScript 运行时环境 旨在在服务器端执行 JavaScript 代码 使用 Node js 您可以构建可扩展的网络应用程序 npm 是 Node Pa
  • 如何在 Debian 9 上安装 Webmin

    Webmin是一个用于管理 Linux 服务器的开源 Web 控制面板 使用 Webmin 您可以管理系统用户 组 磁盘配额以及配置最流行的服务 包括 Web ssh ftp 电子邮件和数据库服务器 本教程介绍如何在 Debian Linu
  • 如何在 Debian 11 上为专用连接设置 Squid 代理

    介绍 代理服务器是一种服务器应用程序 充当最终用户和互联网资源之间的网关 通过代理服务器 最终用户能够出于多种目的控制和监视其 Web 流量 包括隐私 安全和缓存 例如 您可以使用代理服务器从与您自己的 IP 地址不同的 IP 地址发出 W
  • 如何在 Ubuntu 16.04 上安装 MySQL

    介绍 MySQL是一个开源数据库管理系统 通常作为流行的一部分安装LAMP Linux Apache MySQL PHP Python Perl 堆栈 它使用关系数据库和 SQL 结构化查询语言 来管理其数据 简短版本的安装很简单 更新您的
  • Java IO 教程

    Java提供了几个类java io用于处理文本 流数据和文件系统的包 我最近提供了几个有关 Java 文件和 Java IO 的示例 这篇文章是所有 Java IO 文章的索引 Java IO 如何在 Java 中创建新文件在这篇文章中 您
  • Java Stream Collect() 方法示例

    Java Streamcollect 对流的元素执行可变归约操作 这是终端操作 什么是可变约简操作 可变归约操作处理流元素 然后将其累积到可变结果容器中 处理元素后 组合函数将合并所有结果容器以创建结果 Java Stream Collec
  • 快速初始化()

    在本 Swift 教程中 我们将讨论一个重要的概念 即 Swift init 或 Swift 初始化 初始化是当我们创建某种类型的实例时发生的事情 快速初始化 初始化是准备类 结构或枚举的实例以供使用的过程 此过程涉及为该实例上的每个存储属
  • 如何在 Debian Wheezy 上使用 Postfix 安装和配置 DKIM

    介绍 对于大多数邮件服务器管理员来说 被错误地标记为垃圾邮件发送者所带来的挫败感并不奇怪 通过排除服务器受损的可能性 错误标记通常是由以下原因之一引起的 该服务器是一个开放的邮件中继 发件人或服务器的 IP 地址已列入黑名单 服务器没有完全