上文讲解了在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记录。
折腾了一晚上,这下总算好使了。