iRedMail
是一个Linux下的全栈邮件服务器套件,包括了Postfix、Dovecot、Amavisd、Policyd (iRedAPD)、网页服务器、数据库后端等开源程序。你也可以把它理解为邮件服务器的LNMP.org
。它不仅简化了安装程序(无需手动编辑配置文件,只需要回答几个简单的问题即可),还提供了一些简便的工具来管理邮件服务器,比如iRedAdmin
面板。更多关于这个邮件服务器套件的介绍可以看一下百度百科或官网(官网在大陆需要使用正确姿势才能访问)。这篇文章讲述了如何在一台已经安装了网页服务器(Nginx/Apache)和MySQL(或MariaDB)数据库的服务器上安装、配置iRedMail,包括DKIM/SPF等(这个以后慢慢更新)。
11月5日更新:增加步骤四-安装Roundcube Webmail
官方的文档要求安装在一个干净的系统内,就是说系统不应该安装有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
权限)下执行这些代码
01 02 03 04 05 06 07 08 09 10 11 | 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= '%' \ bash iRedMail.sh |
- 接下来会显示一个窗口,第一个欢迎信息选Yes就行。第二个问题询问邮件储存位置,如果没什么特殊需求保留缺省(
/var/vmail
)即可。第三个问题问是用什么网页服务器,选择No Web Server
,因为我们已经安装了网页服务器。第四个问题问什么后端,如果你是MySQL就选MySQL,MariaDB就选MariaDB。接下来第五个问题问邮件域名,比如如果你想为ixnet.work
搭建一个邮件服务器,用abc@ixnet.work
这样的地址接收/发送邮件的话,直接填ixnet.work
即可。第六个问题,你需要设置一个管理员密码,这个很重要因为管理面板也需要这个密码登录。然后可选部件保留默认(安装iRedAdmin和fail2ban)。确认一下信息输入y回车就可以开始安装。 - 等待脚本跑完,脚本执行完毕之后就已经初步安装/配置好了该套件,但是还有一些别的东西需要手动弄。
- 把上面第(1)点创建的那个MySQL账户删掉,因为已经用不上了。每个会用到数据库的套件都有各自独立的账户和密码,脚本自动帮你创建了。
步骤二:启动iRedAPD
1 2 | 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
)。
1 | lnmp vhost add |
- 创建一个软链接。
1 2 | rm -r /home/wwwroot/iredadmin .example.com ln -s /opt/www/iredadmin /home/wwwroot/iredadmin .example.com |
- 检查Apache是否安装了
mod_wsgi
,如果提示文件不存在请编译安装一个。
1 2 | # 检查是否安装了mod_wsgi ls /usr/local/apache/modules/mod_wsgi .so |
1 2 3 4 5 6 7 | # 编译安装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应该也是类似的修改(注意中文的注释)。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # 在VirtualHost之前增加下面的两行 LoadModule wsgi_module modules/mod_wsgi.so WSGISocketPrefix /var/run/wsgi <VirtualHost *:88> ServerAdmin howard@ixnet.work 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
的登录界面。
1 | 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服务。
1 2 3 4 5 6 7 | service auth { ... unix_listener /var/spool/postfix/private/dovecot-auth { mode = 0666 } ... } |
- 检查并确认以下服务正在运行:
clamav-daemon
、amavis
、dovecot
、postfix
。 - 创建一个新的vhost,我用lnmp创建指令为
lnmp vhost add
。假设你的域名为roundcubemail.example.com
。 - 去Roundcube Webmail的Github发布页面下载最新版本(Complete版本的tar包)。以下代码为示范。
1 2 3 4 5 6 | 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。 - 清理安装目录
1 2 3 | cd /home/wwwroot/roundcubemail .example.com rm -rf installer vim config /config .inc.php #在任意地方加上 $config['enable_installer'] = false; |
接下来的步骤包括配置SPF/DKIM/SMTP/IMAP等以后有空继续更新。