V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
typcn
V2EX  ›  Linux

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

  •  
  •   typcn ·
    typcn · 2015-01-13 22:51:35 +08:00 · 12798 次点击
    这是一个创建于 3603 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    否则用邮件客户端发信测试,如Outlook,还是不会给满分。
    viesong
        25
    viesong  
       2015-01-14 22:42:10 +08:00
    @typcn SUBMAIL 不显示任何代发信息。。。。
    windyboy
        26
    windyboy  
       2015-01-15 11:13:53 +08:00
    配dkim的时候应该还要指定一下key
    一般是本域名的话,就把private指定为key就可以
    此外keys的目录需要指定所有者为opendkim
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4988 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 09:57 · PVG 17:57 · LAX 01:57 · JFK 04:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.