设置DKIM(DomainKeys识别的邮件)使用OpenDKIM在CentOS上使用Postfix
版本1.0
作者:Eladio Martinez <eladio@mafecs.com>
http://twitter.com/mafecsllc
本教程将介绍如何使用OpenDKIM在运行Postfix的CentOS盒中使用DKIM,还将介绍一些简单的故障排除技巧和建议,以便在OpenDKIM安装中进行升级。
1要求
本教程假定您具有运行以下服务的完整功能的CentOS安装:
- Postfix 2.3.3或更好的当前工作。
- Sendmail已关闭。
2初步注释
我使用root权限运行本教程中的所有步骤,我目前正在使用OpenDKIM版本2.4.2运行CentOS 6.3,我将使用example.com
作为本教程的主域。
3下载并安装OpenDKIM
您还需要安装OpenSSL和Sendmail开发包,因为它们包含一些需要让OpenDKIM工作的“库”。
yum install sendmail-devel openssl-devel
将OpenDKIM下载到/ usr / local / src
目录:
cd /usr/local/src
wget http://sourceforge.net/projects/opendkim/files/opendkim-2.4.2.tar.gz
提取,配置,编译和安装OpenDKIM:
tar zxvf opendkim-2.4.2.tar.gz
cd opendkim-2.4.2
./configure --sysconfdir=/etc --prefix=/usr/local --localstatedir=/var
make
make install
请注意,./ configure
命令包括一些非常重要的标志,它将被传递到在configure命令运行时创建的启动脚本。 第一个告诉系统OpenDKIM的conf文件将位于哪个位置,第二个为其他重要文件位置设置首选前缀,最后一个控制OpenDKIM的PID文件将被存储的目录。
4创建新用户
使用以下选项为DKIM添加名为opendkim的新用户:
useradd -r -U -s /sbin/nologin opendkim
此命令将创建一个名为opendkim的新系统帐户(-r)和组(-g),并且不为该用户(-s)指定shell访问。
5创建工作目录
为OpenDKIM创建一些新的目录,并通过以下方式为他们提供适当的所有权和权限:
mkdir -p /etc/opendkim/keys
chown -R opendkim:opendkim /etc/opendkim
chmod -R go-wrx /etc/opendkim/keys
6将启动脚本复制到/etc/init.d/
OpenDKIM的源码包包含一个contrib目录,其中包含要与所有与RedHat兼容的系统(包括Fedora和CentOS)一起使用的自定义init脚本。 您可以将其复制到/etc/init.d/
目录,以便启动,停止,重新启动并重新加载OpenDKIM:
cp /usr/local/src/opendkim-2.4.2/contrib/init/redhat/opendkim /etc/init.d/
现在为init脚本设置正确的权限:
chmod 755 /etc/init.d/opendkim
7生成签名密钥
您需要为希望签署邮件的每个域生成一个私钥和一个公钥 。 私钥存储在您的服务器上,而公钥则会在您的域的DNS记录中发布,以便接收邮件服务器可以验证您的DKIM签名的邮件。
你现在需要决定你的选择器的名字是什么。 选择器是与所有签名中包含的密钥(公共和私有密钥)关联并在DNS记录中发布的唯一关键字。 为了简单起见,我使用default作为默认选择器。 随意选择不同的东西,但是如果你这样做,你需要在整个设置中一直使用它。 此外,虽然这应该不用说,您应该在以下步骤中使用您的邮件域而不是example.com。
创建你的钥匙:
mkdir /etc/opendkim/keys/example.com
/usr/local/bin/opendkim-genkey -D /etc/opendkim/keys/example.com/ -d example.com -s default
chown -R opendkim:opendkim /etc/opendkim/keys/example.com
mv /etc/opendkim/keys/example.com/default.private /etc/opendkim/keys/example.com/default
在这个例子中,我使用了-D(目录)选项,-d(域)选项和-s(选择器)选项。 这就是你需要的一切。
8编辑配置文件
您需要创建或编辑四个文件:
- 1 /etc/opendkim.conf
- OpenDKIM的主配置文件
- 2 / etc / opendkim / KeyTable
- 可用于签名的密钥列表
- 3 / etc / opendkim / SigningTable
- 允许签名的域和帐户列表
- 4 / etc / opendkim / TrustedHosts
- 签名或验证时要“信任”的服务器列表
创建文件/etc/opendkim.conf
:
vi /etc/opendkim.conf
确保您的文件如下所示:
## ## opendkim.conf -- configuration file for OpenDKIM filter ## AutoRestart Yes AutoRestartRate 10/1h Canonicalization relaxed/simple ExternalIgnoreList refile:/etc/opendkim/TrustedHosts InternalHosts refile:/etc/opendkim/TrustedHosts KeyTable refile:/etc/opendkim/KeyTable LogWhy Yes Mode sv PidFile /var/run/opendkim/opendkim.pid SignatureAlgorithm rsa-sha256 SigningTable refile:/etc/opendkim/SigningTable Socket inet:8891@localhost Syslog Yes SyslogSuccess Yes TemporaryDirectory /var/tmp UMask 022 UserID opendkim:opendkim
创建文件/ etc / opendkim / KeyTable
:
vi /etc/opendkim/KeyTable
确保您的文件如下所示:
default._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default
KeyTable文件告诉OpenDKIM找到你的密钥。 KeyTable文件中的每个条目是每个关键位置的单行(例如,上述示例中的所有文本都应在文件中的单行中)。 如果要使用多个密钥(使用不同的密钥为虚拟域签名邮件),则需要在每个域的KeyTable文件中创建一个单独的行。
创建文件/ etc / opendkim / SigningTable
:
vi /etc/opendkim/SigningTable
确保您的文件如下所示:
*@example.com default._domainkey.example.com
SigningTable文件告诉OpenDKIM如何使用您的密钥,因为哪些发件人应该使用哪些选择器进行签名。 在上面的例子中,我说从服务器“example.com”发送邮件的所有人(*)都应该使用名为“default”的选择器。 请注意,只有SigningTable选项在文件名前使用refile:前缀,*通配符才会起作用。
创建文件/ etc / opendkim / TrustedHosts
:
vi /etc/opendkim/TrustedHosts
确保您的文件如下所示:
127.0.0.1 hostname1.example1.com example1.com hostname1.example2.com example2.com
TrustedHosts文件告诉OpenDKIM谁使用您的密钥。 因为它在您的conf文件中被ExternalIgnoreList指令引用,所以OpenDKIM在验证收到的邮件时将忽略该主机列表,并且由于InternalHosts伪指令也被引用,所以这个主机列表将被视为“内部”,OpenDKIM将会签署外发邮件。
重要信息:请确保在TrustedHosts文件中列出本地主机(127.0.0.1)的IP地址,否则OpenDKIM将不会签署从此服务器发送的邮件。 如果您在同一网络上有多台服务器通过此服务器中继邮件,并且您也希望对其邮件进行签名,那么它们必须列在TrustedHosts文件中。 将每个条目放在自己的行上。 条目可以是主机名,域名(例如“example.com”),IP地址,IPv6地址(包括IPv4映射地址)或CIDR风格的IP规范(例如“192.168.1.0/24?”)。