Ubuntu安装iRedMail开源邮件服务器套件

技巧 2017年10月1日

iRedMail是一个Linux下的全栈邮件服务器套件,包括了Postfix、Dovecot、Amavisd、Policyd (iRedAPD)、网页服务器、数据库后端等开源程序。你也可以把它理解为邮件服务器的LNMP.org。它不仅简化了安装程序(无需手动编辑配置文件,只需要回答几个简单的问题即可),还提供了一些简便的工具来管理邮件服务器,比如iRedAdmin面板。更多关于这个邮件服务器套件的介绍可以看一下百度百科官网(官网在大陆需要使用正确姿势才能访问)。

这篇文章讲述了如何在一台已经安装了网页服务器(Nginx/Apache)和MySQL(或MariaDB)数据库的服务器上安装、配置iRedMail,包括DKIM/SPF等(这个以后慢慢更新)。

11月5日更新:增加步骤四-安装Roundcube Webmail
11月7日更新:增加步骤五~七-配置SPF/DKIM/DMARC

官方的文档要求安装在一个干净的系统内,就是说系统不应该安装有Postfix、Dovecot、Amavisd、Policyd (iRedAPD)、网页服务器、数据库后端等程序。但是我的系统(相信很多人也是一样)因为是生产服务器已经安装有网页服务器和数据库服务器,另外找一个服务器来弄不仅麻烦而且也浪费资源,所以写这么一篇教程讲如何在一个不干净的Ubuntu系统内安装这个套件。注意一下,我这里的不干净仅指安装过数据库和网页服务器,剩余程序我的服务器也是没有安装过的(你可以使用apt purge清理)。

下面的教程中有用到http://www.iredmail.org的地方,如果你服务器在国内,请替换为http://173.254.22.21。这个是官方的镜像,至于为什么要这么弄大家都懂。

我服务器的配置:

  • OS: Ubuntu Xenial 16.04.3 LTS
  • 网页服务器: LNMP.org – Nginx + Apache + 另行安装的MariaDB集群 + PHP 7.1(PHP在iRedMail用不上因为面板是python写的)
  • 我用的是LANMP,本教程应该也适用于LAMP因为不需要碰Nginx。
  • Apache默认没带mod_wsgi,这个插件是iRedAdmin面板所必须的,过后我会讲解如何编译安装。
  • 官方建议流量不大的服务器也应至少有2G内存,并且UID 2000,2001和2002没有被占用。

步骤一:使用官方脚本完成基本安装

  • 在MySQL数据库内创建一个具有所有权限的用户,即与root权限相等的用户。在下面的步骤中,这个用户的名字会用DB_USERNAME、密码会用DB_PASSWORD代替。创建完成后请使用mysql -u DB_USERNAME -p测试是否能正常连接。
  • 执行下面代码。请注意,你需要在管理员权限(通常为root权限)下执行这些代码
wget https://bitbucket.org/zhb/iredmail/downloads/iRedMail-0.9.7.tar.bz2
tar xvf iRedMail-0.9.7.tar.bz2
cd iRedMail-0.9.7
USE_EXISTING_MYSQL='YES' \
    MYSQL_SERVER_ADDRESS='127.0.0.1' \
    MYSQL_SERVER_PORT='3306' \
    MYSQL_ROOT_USER='DB_USERNAME' \
    MYSQL_ROOT_PASSWD='DB_PASSWORD' \
    MYSQL_GRANT_HOST='%' \
    IREDMAIL_MIRROR='http://www.iredmail.org' #如果你是国内的服务器请替换这一行,看上面的说明 \
    bash iRedMail.sh
  • 接下来会显示一个窗口,第一个欢迎信息选Yes就行。第二个问题询问邮件储存位置,如果没什么特殊需求保留缺省(/var/vmail)即可。第三个问题问是用什么网页服务器,选择No Web Server,因为我们已经安装了网页服务器。第四个问题问什么后端,如果你是MySQL就选MySQL,MariaDB就选MariaDB。接下来第五个问题问邮件域名,比如如果你想为ixnet.work搭建一个邮件服务器,用[email protected]这样的地址接收/发送邮件的话,直接填ixnet.work即可。第六个问题,你需要设置一个管理员密码,这个很重要因为管理面板也需要这个密码登录。然后可选部件保留默认(安装iRedAdmin和fail2ban)。确认一下信息输入y回车就可以开始安装。
  • 等待脚本跑完,脚本执行完毕之后就已经初步安装/配置好了该套件,但是还有一些别的东西需要手动弄。
  • 把上面第(1)点创建的那个MySQL账户删掉,因为已经用不上了。每个会用到数据库的套件都有各自独立的账户和密码,脚本自动帮你创建了。

步骤二:启动iRedAPD

service iredapd start
systemctl enable /opt/iredapd/rc_scripts/iredapd.service

你可以使用lsof -i:7777检查iredapd是否已经启动,如果已经启动python进程会监听7777端口。

步骤三:配置网页服务器使其加载iRedAdmin

  • 创建一个vhost,假定我这里设置的域名为iredadmin.example.com(下面的自行替换),选择默认的根目录位置(/home/wwwroot/iredadmin.example.com)。
lnmp vhost add
  • 创建一个软链接。
rm -r /home/wwwroot/iredadmin.example.com
ln -s /opt/www/iredadmin /home/wwwroot/iredadmin.example.com
  • 检查Apache是否安装了mod_wsgi,如果提示文件不存在请编译安装一个。
# 检查是否安装了mod_wsgi
ls /usr/local/apache/modules/mod_wsgi.so
# 编译安装mod_wsgi
wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.5.19.tar.gz
tar xvzf 4.5.19.tar.gz
cd mod_wsgi-4.5.19
./configure --with-apxs=/usr/local/apache/bin/apxs --with-python=$(which python)
make
make install
  • 编辑/usr/local/apache/conf/vhost/iredadmin.example.com.conf,LANMP参考下面的配置,LAMP应该也是类似的修改(注意中文的注释)。
# 在VirtualHost之前增加下面的两行
LoadModule wsgi_module modules/mod_wsgi.so
WSGISocketPrefix /var/run/wsgi

<VirtualHost *:88>
ServerAdmin [email protected]
php_admin_value open_basedir "/home/wwwroot/iredadmin.example.com:/tmp/:/var/tmp/:/proc/"
DocumentRoot "/home/wwwroot/iredadmin.example.com"
ServerName iredadmin.example.com
ErrorLog "/home/wwwlogs/iredadmin.example.com-error_log"
CustomLog "/home/wwwlogs/iredadmin.example.com-access_log" combined

# 在VirtualHost里面增加下面的四行
WSGIDaemonProcess iredadmin user=iredadmin threads=15
WSGIProcessGroup iredadmin
WSGIScriptAlias / /home/wwwroot/iredadmin.example.com/iredadmin.py/
AddType text/html .py

<Directory "/home/wwwroot/iredadmin.example.com">
    SetOutputFilter DEFLATE
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all'
# 注释掉这一行
#    DirectoryIndex index.html index.php
</Directory>
</VirtualHost>
  • 重启Apache,修改域名的DNS记录(iredadmin.example.com)使其指向服务器。当你访问访问这个域名,你应该可以看到iRedAdmin的登录界面。
lnmp httpd restart

步骤四:安装RoundCube Webmail

  • 编辑/etc/postfix/master.cf,检查submission开头那一行是否有注释,如果有,去掉,然后重启postfix服务。
  • 编辑/etc/dovecot/conf.d/10-master.conf,检查service auth代码块内是否有没注释的unix_listener /var/spool/postfix/private/dovecot-auth代码块,如果没有,按照下面的示范加上,然后重启dovecot服务。
service auth {
...
  unix_listener /var/spool/postfix/private/dovecot-auth {
    mode = 0666
  }
...
}
  • 检查并确认以下服务正在运行:clamav-daemonamavisdovecotpostfix
  • 创建一个新的vhost,我用lnmp创建指令为lnmp vhost add。假设你的域名为roundcubemail.example.com
  • Roundcube Webmail的Github发布页面下载最新版本(Complete版本的tar包)。以下代码为示范。
cd /home/wwwroot
wget https://github.com/roundcube/roundcubemail/releases/download/1.3.2/roundcubemail-1.3.2-complete.tar.gz
tar xvzf roundcubemail-1.3.2-complete.tar.gz
rm -rf roundcubemail.example.com
mv roundcubemail-1.3.2-complete.tar.gz roundcubemail.example.com
chown www:www -R roundcubemail.example.com
  • 按照这个文件的指示,创建数据库(与对应受限用户)并导入SQL。
  • 打开http://roundcubemail.example.com/installer,按照指示进行配置。你可以参考我的配置(大图预警)。插件随意,选几个喜欢的就好。
  • 保存配置,进入下一步,自行测试一下安装是否成功。除了Test filetype detection那一块不是必须要装filetype插件以外,别的都应该是OK
  • 清理安装目录
cd /home/wwwroot/roundcubemail.example.com
rm -rf installer
vim config/config.inc.php #在任意地方加上 $config['enable_installer'] = false;

步骤五:配置SPF

  • 你可以为你发信域名(步骤一中假设为ixnet.work)添加一条TXT记录,记录内容为下面任意一行均可(仅做参考)
# 假如你服务器IP为100.0.0.1,下面这一条表示拒绝所有除了IP为100.0.0.1发的邮件
v=spf1 ip4:100.0.0.1/32 -all
# IPv6的话就像这样
v=spf1 ip6:1080::8:800:200C:417A/128 -all
# 如果你想让SPF追随mx记录(就是仅允许mx记录对应的IP),你可以用
v=spf1 mx -all
# 你甚至可以把上面几条合并,意思就是前三个条件都不符合的话就退信
v=spf1 mx ip4:100.0.0.1/32 ip6:1080::8:800:200C:417A/128 -all
  • 更多的配置与解释可以参考Renfei Song’s Blog(链接见页尾)

步骤六:配置DKIM

  • 首先执行一下amavisd showkeys(部分发行版,比如Ubuntu 16.04,需要执行amavisd-new showkeys),你会看到这种东西(步骤一中假设为ixnet.work):
# amavisd-new showkeys
dkim._domainkey.ixnet.work.   3600 TXT (
  "v=DKIM1; p="
  "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYArsr2BKbdhv9efugByf7LhaK"
  "txFUt0ec5+1dWmcDv0WH0qZLFK711sibNN5LutvnaiuH+w3Kr8Ylbw8gq2j0UBok"
  "FcMycUvOBd7nsYn/TUrOua3Nns+qKSJBy88IWSh2zHaGbjRYujyWSTjlPELJ0H+5"
  "EV711qseo/omquskkwIDAQAB")
  • 然后你应该创建一个TXT记录,主机名称为dkim._domainkey,内容为上面那个括号里面、引号里面的内容。因为程序分成几行输出了,你需要手动合并一下,就像这样:
v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYArsr2BKbdhv9efugByf7LhaKtxFUt0ec5+1dWmc...
  • TXT记录添加完成后,等两分钟等DNS刷新,然后执行amavisd testkeys来测试是否正确添加。如果正确添加的话,你会看到如下信息:
# amavisd-new testkeys
TESTING#1 ixnet.work: dkim._domainkey.ixnet.work => pass

步骤七:配置DMARC

  • DMARC是用来告诉收件人如果SPF/DKIM不符应该怎么做的。一般来说政策用none即可(不处理/遵循收件人本身的反垃圾邮件政策)。你可以添加一条TXT记录,主机名称为_dmarc,内容为v=DMARC1; p=none
  • 别的政策/更多的配置可以参考谷歌的文档(链接见页尾)

接下来的步骤包括配置SMTP/IMAP等以后有空继续更新

参考来源

Tags

Howard Liu

在读大学生,平常使用窝窝屎提高血压和听网课使自己更快入睡。

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.