使用iRedMail配置邮件服务器

iRedMail(http://www.iredmail.com/) 是一个基于 Linux/BSD 系统的零成本、功能完备、成熟的邮件服务器解决方案。iRedMail 是一个开源、免费的项目,是企业级邮件服务的一个不错的选择。iRedMail提供了全套的解决方案,所以使用iRedMail时不需要提前准备任何服务。在使用iRedMail前,我们需要了解一些概念:
MUA(邮件用户代理)就是我们常用的thunderbird, outlook等应用程序,也称为电子邮件客户端程序。通过 MUA 程序,我们可以发送邮件,也可以把接收到的邮件保存在客户端的邮箱中。这两种操作属于不同的两个进程。MUA通过POP(邮局协议)和STMP(简单邮件传输协议)从电子邮件服务器发送或接收消息。
而MTA(邮件传送代理) 和MDA(邮件分发代理) 是电子邮件服务器的两个独立进程MUA向电子邮件服务器发送一个电子邮件,MTA会判断这个邮件的地址是否在本服务器上。如果是通过MDA发送到目的邮箱MUA.如果不是MTA就把这个邮件传送到包含目的邮箱列表的电子邮件服务器。常用的MTA是sendmail,postfix和qmail,而MDA为dovecot。手动搭建MTA+MDA可以参考:How To Set Up a Postfix E-Mail Server with Dovecot
除了MTA和MDA外,邮件防毒、垃圾邮件扫描等组件也是不可缺少的。更多的信息可以参考:
企业开源电子邮件系统安全保障实战精要: 第 1 部分,原理及 Sendmail、Qmail 安全防护实战
企业开源电子邮件系统安全保障实战精要: 第 2 部分,Postfix 安全防护实战及垃圾邮件防范

而iRedMail中,为了我们提供了全套整合方案。它使用的核心组件及其对应的功能包括:
Postfix: SMTP 服务器(MTA)
Dovecot: POP3/IMAP服务器(MDA)
Apache/Nignx: Web 服务器
MySQL/OpenLDAP/PostgreSQL: 用于存储其它程序的数据,也可用于存储邮件帐号。
Policyd: Postfix policy server
Amavisd: 提供 DKIM 签名及校验、SPF校验、为外发邮件添加“免责声明”内容,并调用 SpamAssassin 做基于邮件内容的发垃圾扫描,调用 ClamAV 做邮件病毒扫描。
Roundcube: Webmail
Awstats: 用于分析 Apache 和 Postfix 日志文件,并生成简单的图表。
iRedAdmin:基于 web 的邮件帐号管理程序。

安装iRedMail

安装文档:IRedMail(中文) & Install iRedMail on Debian or Ubuntu Linux
安装iRedMail需要最少1GB的内存,其中Spam和病毒扫描组件会消耗大部分系统资源。
首先要设置一个完全合格域名(Fully Qualified Domain Name,FQDN),我们需要使用hostname和/etc/hosts设置,例如:

下载最新的iRedMail包,当前iRedMail的版本是0.90。

下面脚本开始自动需要检查系统环境,下载资源,并使用源安装一些依赖。等待一段时间后进入图形配置界面。
在图形配置界面我们需要设置:
Web服务器类型。当我们选择nginx时,要保证它的对等服务apache2不要运行。
邮件存储路径,默认为/var/vmail
存储邮件帐号的方式(MySQL、LDAP和PostgreSQL中选择一个),并设置对应的管理员密码。
设定邮件所在域,以及域的管理员postmaster@example.com。
ired-setup
接下来,iRedMail脚本会完成剩下的工作。最后会提醒你把一些服务、工具和帐号信息放在/root/iRedMail-0.9.0/iRedMail.tips这个目录下面。
其中,邮件存储和MySQL的备份脚本分别在:
/var/vmail/backup
/var/vmail/backup/backup_mysql.sh
并设置了相应的crontab任务

使用iRedMail

首先添加DNS解析,在/etc/dnsmasq.conf中添加一个A记录(mail.example.com)到邮件所在的服务器(127.0.0.1),以及一个MX域记录(example.com)到这个A记录(mail.example.com)上。关于DNSMASQ的使用,可以参考:DNSmasq – 配置DNS和DHCP
mx-host=example.com,mail.example.com,50
然后验证一下:

设置本机的DNS到dnsmasq所在的主机上,
下面就可以打开下面几个链接了:
Roundcube webmail: https://mail.example.com/mail/
Web admin panel (iRedAdmin): https://mail.example.com/iredadmin/
Awstats: httpS://mail.example.com/awstats/awstats.pl?config=web
如果遇到502 Bad Gateway,需要启动uwsgi

使用postmaster@example.com登录iRedAdmin,在Add User中新增两个用户:Leo和Debugo
add-user
然后登录webmail(Roundcube),https://mail.example.com/mail
如果这里依然出现502 bad gateway的错误,可以尝试重启一下php5-fpm,并查看一下/var/log/php5-fpm.log日志信息。
service php5-fpm restart
login
使用刚才设置的postmaster@example.com/debugo来登录,就可以看到当前域管理员用户的邮件列表。接下来我们新建一个邮件并发送。
如果出现“添加收件人失败 “leo@example.com” (4.3.5 Server configuration problem)。”,打开/var/log/mail.log中报错:

Postfix需要使用iRedApd,它是一个 Python写的Postfix Policy Server,监听的 7777 端口用于 socket 通讯。下面重启一下iRedApd。
同样,Postfix需要依赖clue bringer这个,它监听的是10031端口。需要确保这个服务也正常运行。

发送邮件的界面如下:
sendmail
然后登录leo@example.com这个用户,邮件已经收到啦。
listmail
^^

Posted in Ops, Tools.