Postfix with dkfilter(DomainKeys Implementation)
作者:Sohail Riaz <sohail AT fastadmins DOT com>
sohailriaz DOT com>的sohail
DomainKeys是雅虎正在开发的反垃圾邮件软件应用程序,它使用公钥加密技术来验证发件人的域名。 dkfilter是为Postfix设计的SMTP代理。 它实现DomainKeys消息签名和验证。 它包含两个单独的过滤器,一个用于在端口587上签发传出电子邮件的“出站”过滤器,以及一个用于验证端口25上的传入电子邮件的签名的“入站”过滤器。本文档将逐步描述如何为postfix安装dkfilter部署域密钥签名和验证。
1安装Postfix
安装您的域的postfix发送和接收邮件。
2解决依赖关系 - 安装Perl模块
Dkfilter是用Perl编写的。 它需要CPAN存档中的以下Perl模块。
* Crypt::OpenSSL::RSA
* Mail::Address
* MIME::Base64
* Net::DNS
* Test::More
* Text::Wrap
* Mail::DomainKeys
以下命令将有所帮助。
perl -MCPAN -e'CPAN::Shell->install("Crypt::OpenSSL::RSA")'
perl -MCPAN -e'CPAN::Shell->install("Mail::Address")'
perl -MCPAN -e'CPAN::Shell->install("MIME::Base64")'
perl -MCPAN -e'CPAN::Shell->install("Net::DNS")'
perl -MCPAN -e'CPAN::Shell->install("Test::More")'
perl -MCPAN -e'CPAN::Shell->install("Text::Wrap")'
perl -MCPAN -e'CPAN::Shell->install("Email::Address")'
perl -MCPAN -e'CPAN::Shell->install("Mail::DomainKeys")'
注意:还解决安装上述Perl模块所需的任何依赖Perl模块。
3安装dkfilter
以下步骤建议安装dkfilter:
一世。 从以下URL下载dkfilter:
http://jason.long.name/dkfilter/dkfilter-0.11.tar.gz
ii。 安装dkfilter
tar xvf dkfilter-0.11.tar.gz
cd dkfilter-0.11
./configure --prefix=/usr/local/dkfilter
make install
useradd dkfilter
过滤器脚本将安装在/ usr / local / dkfilter / bin中
,Perl模块文件将位于/ usr / local / dkfilter / lib中
。
4设置入站过滤器
我们需要在Postfix配置文件中进行相关更改,以检查传入的邮件的签名。
vi /etc/postfix/master.cf
# # Before-filter SMTP server. Receive mail from the network and # pass it to the content filter on localhost port 10025. # smtp inet n - n - - smtpd -o smtpd_proxy_filter=127.0.0.1:10025 -o smtpd_client_connection_count_limit=10 # # After-filter SMTP server. Receive mail from the content filter on # localhost port 10026. # 127.0.0.1:10026 inet n - n - - smtpd -o smtpd_authorized_xforward_hosts=127.0.0.0/8 -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions= -o mynetworks=127.0.0.0/8 -o receive_override_options=no_unknown_recipient_checks
在最后一个文件中插入上面的行。 这里我们定义在smtp之后收到的邮件将在127.0.0.1和端口10026上进行验证。您可以定义自己想要收听的IP地址进行签名检查。
5设置出站过滤器
出站过滤器需要访问用于签署消息的私钥。 另外,需要知道正在使用的密钥选择器的名称,以及应该在哪个域中签署消息。 此信息通过dkfilter.out的命令行参数指定。
1.生成私钥/公钥对,并在DNS中发布公钥。
cd /usr/local/dkfilter
openssl genrsa -out private.key 1024
openssl rsa -in private.key -pubout -out public.key
这将在当前目录中创建private.key和public.key文件,其中包含私钥和公钥。 确保private.key不是世界可读的,但仍然可以由dkfilter用户读取。
2.选择一个选择器名称...例如m1
3.使用您选择的选择器名称将公钥数据放在DNS中,在您的域中。 复制public.key文件的内容并删除PEM页眉和页脚,并通过创建TXT条目将其粘贴到dns区域文件中,如下所示:
_domainkey.sohailriaz.com IN TXT “t=y; o=-;” m1._domainkey.sohailriaz.com IN TXT "g=; k=rsa; p=MHwwDQYJK ... OprwIDAQAB;"
其中m1是在最后一步中选择的选择器的名称,p =参数包含公钥作为一个长字符串。
最后,配置Postfix仅通过端口10027上的dkfilter.out服务来过滤传出的授权消息。在以下示例中,通过端口587(提交端口)发送的邮件将通过一个后续队列内容过滤器来发送消息与DomainKeys。
vi /etc/postfix/master.cf
# # modify the default submission service to specify a content filter # and restrict it to local clients and SASL authenticated clients only # submission inet n - n - - smtpd -o smtpd_etrn_restrictions=reject -o smtpd_sasl_auth_enable=yes -o content_filter=dksign:[127.0.0.1]:10027 -o receive_override_options=no_address_mappings -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject # # specify the location of the DomainKeys signing filter # dksign unix - - n - 10 smtp -o smtp_send_xforward_command=yes -o smtp_discard_ehlo_keywords=8bitmime # # service for accepting messages FROM the DomainKeys signing filter # 127.0.0.1:10028 inet n - n - 10 smtpd -o content_filter= -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks -o smtpd_helo_restrictions= -o smtpd_client_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o smtpd_authorized_xforward_hosts=127.0.0.0/8
对Postfix执行postfix reload以响应/etc/postfix/master.cf
中的更改。
postfix reload
6启动脚本
从以下站点下载启动/关闭脚本:
http://www.enterux.com/files/dkfilter
将该脚本复制到/etc/rc.d/init.d中
,并根据您的要求进行编辑。
7参考文献
http://www.postfix.org
http://antispam.yahoo.com/domainkeys
http://jason.long.name/dkfilter/