ubuntu下使用iRedMail组件搭建可投入实际生产的邮件服务器

  上文讲解了在ubuntu下用postfix+devcot配置邮件服务器,但是对于我这个新手,整个过程实在有些繁琐,而且即便配置成功,为了方便投入实际生产,依然需要解决“图形化web邮件客户端”、“邮件账户管理系统”、“DKIM认证”等等一系列问题,确实有点麻烦。
  所幸,在Howard大佬的推荐下,我找到了一个非常棒的全栈式开源邮件服务器套件——iRedMail,一键式傻瓜安装,图形化管理系统,自带网页版客户端,相当方便。当然,这个软件还是有个很大的问题的,那就是要求必须在一个“干净的”服务器上安装,这就要求你必须新开一个服务器。当然,Howard大佬研究出了一套方案,可以在已经配置过网页服务器的服务器上安装。不过,我的服务器使用的网页服务器是nginx而非apache,所以大佬的教程并不适用于我。我自己虽然尝试多次,但是依旧无法在已经配置好的服务器上成功安装iRedMail,最后只得作罢——在一台重装系统的服务器上安装iRedMail。
  即便如此,依旧遇到不少“坑”(我的锅,新手,没经验)。整理一下以便日后参考。

  首先,从iRedMail官网下载安装组件(或者这里下载),一键安装。

  • 邮箱网页客户端登录地址为https://服务器ip/mail
  • 邮箱管理系统登录地址为https://服务器ip/iredadmin
  • 服务器性能监控系统登录地址为https://服务器ip/netdata
  • 默认登录账户为postmaster@初始域

  安装完之后,第一个大坑就出现了——我的网页客户端无法登陆,每次登录界面就会一闪而过然后提示会话已超时。经过测试,这与我们学校的局域网环境有关。如果使用流量热点登录的话,则不会遇到这个错误。上网搜索后,解决方法如下(参考文章):

  • 修改/opt/www/roundcubemail/config/config.inc.php文件,将
    $config['ip_check']= true;
    改为
    $config['ip_check']= false;
  • 修改/opt/www/iredmail/libs/iredbase.py文件,将
    web.config.session_parameters['ignore_change_ip'] = False
    改为
    web.config.session_parameters['ignore_change_ip'] = True

  之后使用网页客户端进行登录,成功!使用雷鸟客户端与126邮箱进行收发信测试,全部正常!
  看起来还不错,完全可以投入实际使用,但是事实远非如此。在测试成功一个多月之后,我心血来潮,觉得可以给我们学联整个官方邮箱,看起来比较正式。于是,注册域名,添加新的邮箱域(邮箱管理系统里可以添加),添加账号,一顿操作猛如虎。测试收发信,(因为我在国外留学,很多人用谷歌邮箱)gmail收件成功!垃圾警告!自动移至垃圾箱!呃。。。。查阅大佬的教程,看来需要配置SPF与DKIM记录。

  SPF的具体原理可以参考这里,本文不再赘述,直接讲操作过程。在域名解析中,添加SPF记录,记录名称为邮箱域,记录值为v=spf1 a mx ip4:邮件服务器ip -all。由于SPF记录类型正在逐渐被淘汰,重新合并至TXT记录中,因此,保险起见,我们再添加一条TXT记录,记录名与记录值同上。

  配置DKIM验证,需要先声明,在我的系统Ubuntu 18.04.4 LTS上,有两点与一般搜索到的教程不同:(教程本身没错,这只是不同的系统发行版与软件版本造成的,这里只是记录一下,方便我自己日后查阅)

  • amavisd指令不再有效,取而代之的是amavisd-new,参数在这里
  • 配置文件不在一般教程所说的/etc/amavisd/amavisd.conf,而是/etc/amavis/conf.d/50-user,可以参考这里

  在我们安装完iredmail之后,系统已经自动为初始默认的域生成了DKIM秘钥。但是,由于我们添加了一个新的域,将两个域名托管在一个邮箱服务器,因此需要手动为新添加的域生成DKIM秘钥(参考),指令:
amavisd-new genrsa /var/lib/dkim/新的邮箱域名.pem 2048
  这里需要注意,秘钥长度强烈建议为2048比特,gmail的最低要求是1024比特规定),之后执行指令:
chown amavis:amavis /var/lib/dkim/新的邮箱域名.pem

chmod 0400 /var/lib/dkim/新的邮箱域名.pem
更改文件权限与所有者。更改配置文件/etc/amavis/conf.d/50-user,查找dkim_key('默认域名', "dkim", "/var/lib/dkim/默认域名.pem");,在下面添加一行dkim_key('新增域名', "dkim", "/var/lib/dkim/新增域名.pem");。再查找如下信息:

@dkim_signature_options_bysender_maps = ( {
    ...
    "默认域名"  => { d => "默认域名", a => 'rsa-sha256', ttl => 10*24*3600 },
    ...
});

  在其中添加新的域名信息,变为如下样式:

@dkim_signature_options_bysender_maps = ( {
    ...
    "默认域名"  => { d => "默认域名", a => 'rsa-sha256', ttl => 10*24*3600 },
    "新增域名"  => { d => "新增域名", a => 'rsa-sha256', ttl => 10*24*3600 },
    ...
});

  最后,执行指令amavisd-new showkeys,终端会显示两个DKIM秘钥,分别为默认域名与新增域名。将两串秘钥分别填入对应域名的TXT记录中,格式为:记录类型:TXT;记录名:dkim._domainkey;记录值:v=DKIM1; p=秘钥。等待DNS记录刷新,然后可以执行指令amavisd-new testkeys,不出意外的话,终端返回如下字样:

TESTING#1 mxyr.tech: dkim._domainkey.mxyr.tech => pass
TESTING#2 scssasutd.cn: dkim._domainkey.scssasutd.cn => pass

  我们还可以添加DMARC记录,参考。这里同样只讲操作步骤:为域名添加解析记录:记录类型:TXT;记录名:_dmarc;记录值:v=DMARC1; p=none。就在我以为大功告成的时候,“奇迹”再一次降临,邮件依然被谷歌判定为垃圾邮件。。。。
  呃。。。????
  在谷歌邮箱中找到邮件,更多选项中有一个“显示原始邮件”,在这里我们可以看到邮件的代码以及谷歌的判别过程。

  可是,我明明所有测试都通过了啊。。。。。SPF,DKIM,DMARC全是PASS啊!!经过一番艰难的搜索,我终于找到了解决办法——我需要到谷歌手动注册我自己的邮箱域名。地址在这里,添加自己的域名,然后按照说明将验证码添加为域名的TXT记录。

  折腾了一晚上,这下总算好使了。

发表评论

邮箱地址不会被公开。 必填项已用*标注