在 CentOS 上搭建 带有 DKIM 签名的 满分邮件服务器 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
typcn
V2EX    Linux

在 CentOS 上搭建 带有 DKIM 签名的 满分邮件服务器

  •  
  •   typcn
    typcn 2015 年 1 月 13 日 13444 次点击
    这是一个创建于 4015 天前的主题,其中的信息可能已经有所发展或是发生改变。

    blogpic

    你可以到 http://www.mail-tester.com/ 检测你的邮件分数

    blogpic

    SPF 记录的设置

    向你的邮件域名添加一条 TXT 记录

    v=spf1 ip4:发信服务器的IP ~all

    当然您也可以添加多个 IP 地址,网上有很多教程,这里就不在赘述了。

    反向解析

    请联系你的机房,或 云服务商,国内目前仅阿里云可以联系客服进行免费设置,国外一般 VPS 的控制面板就可以。

    DKIM 签名

    本文使用的是 CentOS + Postfix 其他软件自行变通

    首先,向你的 CentOS 添加 EPEL 库 , http://fedoraproject.org/wiki/EPEL 可以在这里寻找适合你操作系统的库。

    blogpic

    我的服务器使用的是 CentOS 6.5 所以下载 EPEL 6 ( 由于 EPEL 所提供的镜像是 IPV6 地址,请确保你的服务器已经开启 IPV6 )

    wget http://ftp6.sjtu.edu.cn/fedora/epel/6/i386/epel-release-6-8.noarch.rpm rpm -Uvh epel-release-6-8.noarch.rpm rm -f epel-release-6-8.noarch.rpm 

    添加成功后,安装 opendkim

    yum install opendkim 

    创建 opendkim 配置文件

    vi /etc/opendkim.conf 

    填入以下内容

    Canonicalization relaxed/relaxed ExternalIgnoreList refile:/etc/opendkim/TrustedHosts InternalHosts refile:/etc/opendkim/TrustedHosts KeyTable refile:/etc/opendkim/KeyTable LogWhy Yes MinimumKeyBits 1024 Mode sv PidFile /var/run/opendkim/opendkim.pid SigningTable refile:/etc/opendkim/SigningTable Socket inet:[email protected] Syslog Yes SyslogSuccess Yes TemporaryDirectory /var/tmp UMask 022 UserID opendkim:opendkim 

    创建密钥

    mkdir /etc/opendkim/keys/YourDomain.com opendkim-genkey -D /etc/opendkim/keys/YourDomain.com/ -d YourDomain.com -s default 

    创建完毕后,将其添加到 /etc/opendkim/KeyTable 中

    default._domainkey.YourDomain.com YourDomain.com:default:/etc/opendkim/keys/YourDomain.com/default.private 

    然后添加 /etc/opendkim/SigningTable

    *@YourDomain.com default._domainkey.YourDomain.com 

    设置允许进行签名的主机 到 /etc/opendkim/TrustedHosts 中,一般情况下都是本机发信,我们将 127.0.0.1 加入即可。

    设置 DNS 记录

    到 /etc/opendkim/keys/YourDomain.com/default.txt 可以找到你的 key 。

    blogpic

    记录类型 TXT 子域名 default._domainkey ,记录内容就是 default.txt 里面从 v=DKIM1 开始的内容。

    blogpic

    此时 DKIM 签名软件已经可以正常工作了,接下来就要让 Postfix 所发的邮件经过其处理

    编辑 Postfix 配置

    打开 Postfix 的 main.cf 配置文件,到达底部,添加如下内容

    smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = inet:127.0.0.1:8891 milter_protocol = 2 milter_default_action = accept 

    启动邮件服务器

    service opendkim start #正常返回应为 Starting OpenDKIM Milter: [ OK ] postfix reload 

    如果没有错误的话,现在应该可以开始发送了

    来一发

    blogpic

    我们通过 telnet 进行测试发送

    blogpic

    可以看出无论是腾讯企业邮还是 QQ 邮箱都到达了收件箱

    blogpic

    原地址(欢迎常来): http://blog.eqoe.cn/posts/build-perfect-mail-server.html

    如果有错误欢迎指正

    26 条回复    2015-01-15 11:13:53 +08:00
    ilancelot
        1
    ilancelot  
       2015 年 1 月 13 日
    简洁明了,这就去试试。
    iLiberty
        2
    iLiberty  
       2015 年 1 月 13 日
    Mark 过会儿看
    miyuki
        3
    miyuki  
       2015 年 1 月 13 日 via Android
    mark 感谢 PO 主的教程
    TrustyWolf
        4
    TrustyWolf  
       2015 年 1 月 13 日   2
    EPEL源安装只需要一个命令:
    yum -y install epel-release
    zjgood
        5
    zjgood  
       2015 年 1 月 13 日 via Android
    感谢
    wtchalloo
        6
    wtchalloo  
       2015 年 1 月 13 日
    f(m)uck→_→
    Devin
        7
    Devin  
       2015 年 1 月 13 日
    SPF记录的作用究竟大不大?
    orzfly
        8
    orzfly  
       2015 年 1 月 13 日   1
    其实就算满分了,短时间之内还是会被 Gmail SPAM 的很麻烦吧……
    顺带一提如果不想折腾可以用这个: https://mailinabox.email
    lightryanking
        9
    lightryanking  
       2015 年 1 月 13 日
    感谢楼主分享。最近对mail 非常感兴趣 :)
    mengzhuo
        10
    mengzhuo  
       2015 年 1 月 13 日   1
    @Devin
    SPF是检验发件服务器是不是允许的范围内
    自然重要了

    也可以参考我写的一篇:
    https://mengzhuo.org/blog/?p=2142
    extreme
        11
    extreme  
       2015 年 1 月 13 日
    这些只是告诉收件方你是经过验证的发件人。
    你还需要告诉收件方,当收到无法通过这些验证的邮件时,如何处理。
    不然,收件方仍然会收取无法通过验证的邮件。
    这个东西就是:
    DMARC
    typcn
        12
    typcn  
    OP
       2015 年 1 月 14 日   1
    @extreme 谢谢,明天了解一下
    ysz1996
        13
    ysz1996  
       2015 年 1 月 14 日 via Android
    诺 不是要铜币么
    typcn
        14
    typcn  
    OP
       2015 年 1 月 14 日
    @orzfly 我试过的啊, Gmail 163 QQ 全部可以到收件箱
    scys
        15
    scys  
       2015 年 1 月 14 日
    很不错,近来正想搭建一个独立的邮件服务器
    Delbert
        16
    Delbert  
       2015 年 1 月 14 日
    满分不满分和邮件内容相关的吧?
    纯文本和富媒体分数就不一样,有没有图片 链接,邮件长度都影响得分,得分是针对邮件而不是仅仅针对服务器的吧?
    之前测试过,服务器不变,更改内容就可以改变得分。
    typcn
        17
    typcn  
    OP
       2015 年 1 月 14 日
    @Delbert 只是在那个测试中可以得到10分,我现在发的带 css+图片+链接 的注册确认信就没问题
    Akiyori
        18
    Akiyori  
       2015 1 月 14 日 via iPhone
    Mailtester满分,SpamAssassin 垃圾邮件可能性负分但是 Gmail 首次发送一定是进 spam 的默默路过...
    liuchen9586
        19
    liuchen9586  
       2015 年 1 月 14 日
    不错,收藏了
    感谢楼主分享。

    不过第一封进垃圾箱是怎么回事…
    typcn
        20
    typcn  
    OP
       2015 年 1 月 14 日
    @liuchen9586 我第一封直接收件箱诶,可能跟内容有关?我是注册确认信
    ibudao
        21
    ibudao  
       2015 年 1 月 14 日
    人生苦短,我用zimbra
    viesong
        22
    viesong  
       2015 年 1 月 14 日
    服务器只能解决基本的问题,后期的,发送、频率、预热、分析、太耗时耗力,推荐使用 SUBMAIL http://submail.cn/chs 比自建服务器 性价比更高。
    typcn
        23
    typcn  
    OP
       2015 年 1 月 14 日
    @viesong 每次发出去邮件都显示 xxx 代发,点了链接还是 xxx 域名,不觉得很掉档次吗。
    分析,说白了也就是个一个带统计的短网址跳转系统,邮件里面 <img src> 计算打开量,链接经过跳转计算点击量
    tititake
        24
    tititake  
       2015 年 1 月 14 日
    header_check做了吗?
    过滤 Received/X-Originating-IP/X-Mailer

    否则用邮件客户端发信测试,如Outlook,还是不会给满分。
    viesong
        25
    viesong  
       2015 年 1 月 14 日
    @typcn SUBMAIL 不显示任何代发信息。。。。
    windyboy
        26
    windyboy  
       2015 年 1 月 15 日
    配dkim的时候应该还要指定一下key
    一般是本域名的话,就把private指定为key就可以
    此外keys的目录需要指定所有者为opendkim
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2593 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 04:34 PVG 12:34 LAX 20:34 JFK 23:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86