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设置,例如:
1 2 3 4 |
hostname -f mail.example.com # Part of file:/etc/hosts 127.0.0.1 mx.example.com mx localhost localhost.localdomain |
下载最新的iRedMail包,当前iRedMail的版本是0.90。
1 2 3 4 |
wget https://bitbucket.org/zhb/iredmail/downloads/iRedMail-0.9.0.tar.bz2 tar xjvf iRedMail-0.9.0.tar.bz2 cd iRedMail-0.9.0/ sh iRedMail.sh |
下面脚本开始自动需要检查系统环境,下载资源,并使用源安装一些依赖。等待一段时间后进入图形配置界面。
在图形配置界面我们需要设置:
Web服务器类型。当我们选择nginx时,要保证它的对等服务apache2不要运行。
邮件存储路径,默认为/var/vmail
存储邮件帐号的方式(MySQL、LDAP和PostgreSQL中选择一个),并设置对应的管理员密码。
设定邮件所在域,以及域的管理员postmaster@example.com。
接下来,iRedMail脚本会完成剩下的工作。最后会提醒你把一些服务、工具和帐号信息放在/root/iRedMail-0.9.0/iRedMail.tips这个目录下面。
其中,邮件存储和MySQL的备份脚本分别在:
/var/vmail/backup
/var/vmail/backup/backup_mysql.sh
并设置了相应的crontab任务
1 2 3 4 5 6 7 8 9 |
30 3 * * * /bin/bash /var/vmail/backup/backup_mysql.sh # iRedMail: Cleanup Cluebringer database 1 3 * * * /usr/sbin/cbpadmin --config=/etc/cluebringer/cluebringer.conf --cleanup >/dev/null # iRedMail: Cleanup Amavisd database 1 2 * * * python /usr/share/apache2/iredadmin/tools/cleanup_amavisd_db.py >/dev/null # iRedMail: update Awstats statistics for web 1 */1 * * * perl /usr/lib/cgi-bin/awstats.pl -config=web -update >/dev/null # iRedMail: update Awstats statistics for smtp 1 */1 * * * perl /usr/lib/cgi-bin/awstats.pl -config=smtp -update >/dev/null |
使用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
然后验证一下:
1 2 3 4 5 |
dig mx example.com ;; QUESTION SECTION: ;example.com. IN MX ;; ANSWER SECTION: example.com. 0 IN MX 50 mail.example.com. |
设置本机的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
1 |
/etc/init.d/uwsgi restart |
使用postmaster@example.com登录iRedAdmin,在Add User中新增两个用户:Leo和Debugo
然后登录webmail(Roundcube),https://mail.example.com/mail
如果这里依然出现502 bad gateway的错误,可以尝试重启一下php5-fpm,并查看一下/var/log/php5-fpm.log日志信息。
service php5-fpm restart
使用刚才设置的postmaster@example.com/debugo来登录,就可以看到当前域管理员用户的邮件列表。接下来我们新建一个邮件并发送。
如果出现“添加收件人失败 “leo@example.com” (4.3.5 Server configuration problem)。”,打开/var/log/mail.log中报错:
1 2 3 |
Apr 13 23:33:41 test01 postfix/smtpd[28870]: connect from localhost[127.0.0.1] Apr 13 23:33:41 test01 postfix/smtpd[28870]: warning: connect to 127.0.0.1:7777: Connection refused Apr 13 23:33:41 test01 postfix/smtpd[28870]: warning: problem talking to server 127.0.0.1:7777: Connection refused |
Postfix需要使用iRedApd,它是一个 Python写的Postfix Policy Server,监听的 7777 端口用于 socket 通讯。下面重启一下iRedApd。
同样,Postfix需要依赖clue bringer这个,它监听的是10031端口。需要确保这个服务也正常运行。
1 2 3 |
/etc/init.d/iredapd start Starting iredapd /etc/init.d/postfix-cluebringer start |
也难怪有人相信民科了,
131oo无叉叉