搭建高大上的Zimbra办公与邮件服务系统

一、Ubuntu 16.04搭建方法

Zimbra是著名的开源系统,它一体化地提供了邮件收发、文件共享、协同办公、即时聊天等一系列解决方案,是开源软件中的精品。它拥有美观大气的使用界面,以及非常实用的功能。作为邮件服务器系统,Zimbra更是凭借卓越的稳定性和功能当之无愧地成为开源邮件服务器系统的首选,适合各类型/人数的用户群,尤其适合团队使用。之前我们写过一个简单的Zimbra邮件服务器安装的教程,然而那篇文章写于五年前,对于现在的版本已经不再适用。正好由于前天,Online.net服务器大幅提价,我们不得不迁移之前的服务器,于是需要在新的系统上重新搭建一次Zimbra. 因此,我们这里凭借这个机会再介绍一下如何安装与配置独立的Zimbra开源办公与邮件服务系统,希望对大家有所帮助。多台服务器协同部署的步骤这里不做太多介绍。

1.系统软硬件要求

Zimbra的体量较大,因此对于系统环境的要求较高。首先,系统必须为64位。目前,Zimbra支持的操作系统包括:CentOS 6, CentOS 7, Ubuntu 14.04 LTS, Ubuntu 16.04 LTS, Red Hat Linux 6/7, 以及Oracle Linux 6/7.

关于硬件需求,首先,内存需要8 GB或者以上,建议16 GB. 系统的硬盘占用约为8 GB左右,视自己的需要而定。CPU和其他硬件没有特别需求,但是Zimbra官方说明中有提到,强烈不建议在RAID 5 (包括50)的服务器上搭建Zimbra. 如果您有类似的服务器,建议更改RAID模式,避免RAID 5或者50.

鉴于Zimbra的体量,我们不建议在VPS上安装Zimbra, 而最好是在一台独立服务器上安装。本文的操作环境为Ubuntu 16.04 LTS 64bit.

2.配置DNS

我们简要说明一下一个最简单的zimbra邮件服务器的DNS配置需求。

如果以qing.su域名为例,我们将域名本身qing.su以A记录解析到任意IP, 然后将邮件服务器的hostname, 比如mx.qing.su以A记录解析到我们将要搭建的邮件服务器的IP上。

然后,我们分别将qing.su与mx.qing.su以MX记录解析到mx.qing.su, 优先级可以为任意值。

如果需要用web访问邮箱,可以将mail.qing.su解析到邮件服务器的IP上。

其他记录的设置,比如TXT, SRV等,可以后期根据自己的需要来自行配制。

3.系统环境的设置

毫无疑问,对于任何邮件服务器来说,最重要的前提步骤是正确设置服务器的hostname. 如何正确设置服务器的hostname我们已经强调过多次。我们以mx.example.com为例,当在SSH中执行hostname命令时,应当看到的回显为短主机名,即mx; 而在SSH中执行hostname -f命令时,应当看到的回显为长主机名(FQDN), 即mx.example.com. 若hostname没有正确设置好,请不要继续。

然后,我们用root账户登录SSH, 即可开始安装。(不要sudo, 请直接su到root, 否则会出错)

4.下载并安装软件包

Zimbra各系统软件包的下载地址如下:https://www.zimbra.com/downloads/zimbra-collaboration-open-source/

请按照自己的需求下载。我们这里以Ubuntu 16.04为例。执行:

apt-get update && apt-get upgrade
cd /tmp
wget https://files.zimbra.com/downloads/8.8.9_GA/zcs-8.8.9_GA_2055.UBUNTU16_64.20180703080917.tgz
tar xvzf *.tgz
rm -f zcs*.tgz
cd zcs*
./install.sh

5.选择安装组件

正确执行上述步骤后,首先会提示是否同意用户协议,选择Y即可。

Do you agree with the terms of the https://qing.su software license agreement? [N] Y

然后会提示选择需要安装的组件,如果您不是特别了解的话可以直接选择默认选项。

Use Zimbra's package repository [Y]
Install zimbra-ldap [Y]
Install zimbra-logger [Y]
Install zimbra-mta [Y]
Install zimbra-dnscache [Y]
Install zimbra-snmp [Y]
Install zimbra-store [Y]
Install zimbra-apache [Y]
Install https://qing.su[Y]
Install zimbra-spell [Y]
Install zimbra-memcached [Y]
Install zimbra-proxy [Y]
Install zimbra-drive [Y]
Install zimbra-imapd (BETA - for evaluation only) [N]
Install zimbra-chat [Y]

最后,系统会提示是否确认更改,我们需要选择Y。

The system will be modified.  Continue? [N] Y

至此,系统将会下载必要的安装包并自动安装。

6, 配置Zimbra

安装完毕后,系统会弹出命令行菜单,如下面这样:

Main menu
1) Common Configuration:
2) zimbra-ldap: Enabled
3) zimbra-logger: Enabled
4) zimbra-mta: Enabled
5) zimbra-dnscache: Enabled
6) zimbra-snmp: Enabled
7) zimbra-store: Enabled
+Create Admin User: yes
+Admin user to create: admin@mx.example.com
******* +Admin Password UNSET
+Anti-virus quarantine user: virus-quarantine.6zk4_0qy@mx.example.com
+Enable automated spam training: yes
+Spam training user: spam.zc3z28w0@mx.example.com
+Non-spam(Ham) training user: ham.bkojeqoiq@mx.example.com
+SMTP host: mx.example.com
+Web server HTTP port: 8080
+Web server HTTPS port: 8443
+Web server mode: https
+IMAP server port: 7143
+IMAP server SSL port: 7993
+POP server port: 7110
+POP server SSL port: 7995
+Use spell check server: yes
+Spell server URL: http://mx.example.com:7780/aspell.php
+Enable version update checks: TRUE
+Enable version update notifications: TRUE
+Version update notification email: admin@mx.example.com
+Version update source email: admin@mx.example.com
+Install mailstore (service webapp): yes
+Install UI (zimbra,zimbraAdmin webapps): yes
8) zimbra-spell: Enabled
9) zimbra-proxy: Enabled
10) Default Class of Service Configuration:
s) Save config to file
x) Expand menu
q) Quit
Address unconfigured (**) items (? - help) 7

这里我们选择7,  进入Store configuration, 并在下一步选择4, 设置管理员密码。

Store configuration
1) Status:                                  Enabled
2) Create Admin User:                       yes
3) Admin user to create:                    admin@mx.example.com
** 4) Admin Password                           UNSET
5) Anti-virus quarantine user:              virus-quarantine.6zk4_0qy@mx.example.com
6) Enable automated spam training:          yes
7) Spam training user:                      spam.zc3z28w0@mx.example.com
8) Non-spam(Ham) training user:             ham.bkojeqoiq@mx.example.com
9) SMTP host:                               mx.example.com
10) Web server HTTP port:                    8080
11) Web server HTTPS port:                   8443
12) Web server mode:                         https
13) IMAP server port:                        7143
14) IMAP server SSL port:                    7993
15) POP server port:                         7110
16) POP server SSL port:                     7995
17) Use spell check server:                  yes
18) Spell server URL:                        http://mx.example.com:7780/aspell.php
19) Enable version update checks:            TRUE
20) Enable version update notifications:     TRUE
21) Version update notification email:       admin@mx.example.com
22) Version update source email:             admin@mx.example.com
23) Install mailstore (service webapp):      yes
24) Install UI (zimbra,zimbraAdmin webapps): yes
Select, or 'r' for previous menu [r]

如果有其他选项您希望更改的,也可以一并更改(但是不建议更改端口地址)。更改完毕后,输入r返回上级菜单,然后输入a让更改生效并将配置写入至文件。

*** CONFIGURATION COMPLETE - press 'a' to apply
Select from menu, or press 'a' to apply config (? - help) a
Save configuration data to a file? [Yes]
Save config in file: [/opt/zimbra/config.11819]
Saving config in /opt/zimbra/config.11819...done.
The system will be modified - continue? [No] Yes

要忘记最后要输入Yes来保存更改。几秒钟之后,系统就配置完毕。至此,Zimbra安装完毕,我们可以登录后台添加域名、添加用户等进行一系列的管理了。

7.配置SSL

安装完毕Zimbra以后,我们就可以通过https://mx.example.com:7071登录后台,进行管理。此时,SSL证书还没有配置好,我们需要配置SSL, 否则浏览器会一直报错。点击界面下方Get Started –> Install Certificates, 选择Next然后选择Generate the CSR for the commercial certificate authorizer, 然后在弹出来的界面中生成CSR. 我们需要将主域名mx.example.com填在Common Name中,然后在Subjective Alternative Name中添加需要一并生成证书的其他域名,比如example.com, www.example.com, mail.example.com等。点击Next即可生成证书CSR.

有了CSR之后,我们即可申请证书了。Zimbra配置证书的过程比较tricky, 经常会报错,特别是如果在网页后台安装证书时报错的原因很不清晰,导致无法分析错误发生的原因。因此,我们一般选择在SSH中使用命令行的方式安装证书。下面我们以Let’s Encrypt为例安装证书,其他的商业证书的安装较为简单,这里就不再重复。

我们用SSH登录服务器,然后su切换至root. 首先,我们将刚才的CSR保存至/tmp/mx.example.com.csr文件。然后,安装certbot, 签发Let’s Encrypt证书。

apt-get install software-properties-common
add-apt-repository ppa:certbot/certbot
apt-get update
apt-get install certbot

这里有一个小技巧,通常我们签发Let’s Encrypt证书的时候是让它自己生成私钥和CSR的,但是在需要的时候,certbot可以根据已有的CSR来签发证书,只需使用–csr参数即可。因此,我们基于刚刚生成的CSR来签发证书。

certbot certonly --standalone --csr /tmp/mx.example.com.csr

签发的证书和链文件位于/tmp目录内。需要注意的是,Certbot生成的中间链会在Zimbra中校验失败,我们需要下载额外的Root CA和中间链证书。

wget https://letsencrypt.org/certs/isrgrootx1.pem.txt -O ca.crt
wget https://letsencrypt.org/certs/letsencryptauthorityx3.pem.txt -O ca_intermediary.crt

然后再整理、合并一下证书:

mv 0000_cert.pem commercial.crt
cat /tmp/ca_intermediary.crt /tmp/ca.crt > /tmp/ca_chain.crt

现在就可以开始签发安装证书了。安装证书需要使用zimbra用户,这是在安装Zimbra的时候新建的内置用户。

su zimbra

安装之前,我们先验证一下证书。执行

/opt/zimbra/bin/zmcertmgr verifycrt comm /opt/zimbra/ssl/zimbra/commercial/commercial.key /tmp/commercial.crt /tmp/ca_chain.crt

如果看到类似于下面的回显,说明合格了。如果报错,大概率是因为Root CA和中间链哪里没有弄对,请仔细检查后再试。

** Verifying '/tmp/commercial.crt' against '/opt/zimbra/ssl/zimbra/commercial/commercial.key'
**Tutorial written by https://qing.su**
Certificate '/tmp/commercial.crt' and private key '/opt/zimbra/ssl/zimbra/commercial/commercial.key' match.
** Verifying '/tmp/commercial.crt' against '/tmp/ca_chain.crt'
Valid certificate chain: /tmp/commercial.crt: OK

证书验证完毕后,执行下面的命令安装并检验:

/opt/zimbra/bin/zmcertmgr deploycrt comm /tmp/commercial.crt /tmp/ca_chain.crt
/opt/zimbra/bin/zmcertmgr viewdeployedcrt

最后,我们要重启zimbra服务器,让证书生效。

exit
service zimbra restart

再次登录https://mx.example.com:7071, 已经可以看到证书生效了。

至此,Zimbra服务器安装完毕并成功配置了SSL证书。在添加好相应的域名之后,即可使用相关用户名和密码登录https://mail.example.com来登录邮箱,界面非常美观大气。可以看到,在邮箱右下角还有聊天窗口,可以和同一个工作组内的伙伴实时通讯并传输文件。

二、CentOS 7的搭建方法

安装要求

1、64位服务器并能设置反向DNS解析(zimbra新版不支持32位操作系统)

2、磁盘空间≥5GB(zimbra默认安装位置/opt 请确保磁盘空间足够 可以挂载到新磁盘)

3、内存≥4GB(编译对内存要求较高,内存小的用户可以设置swap来缓解内存压力)

4、域名一枚

开始

域名解析

zimbra在线安装时要检查MX 安装之前配置好dns MX解析并确认已生效 未生效安装过程会终止

假如>>

邮件服务器IP:138.68.227.28

邮件服务器采用的域名:mail.example.com

对外发送和接收邮件的域名:example.com

mail.example.com.    IN    A    138.68.227.28
example.com.         IN    MX   10 mail.example.com.

反向DNS解析

反向解析由主机商提供(有些面板可以设置,不行提交工单)

主要用于发件,确认邮件来源的有效性。

命令查看反向解析是否生效:nslookup -qt=ptr 138.68.227.28 返回指向mail.example.com则成功

关闭sendmail或postfix服务,避免25端口被占用

# centos 6
/etc/init.d/sendmail stop && chkconfig sendmail off
/etc/init.d/postfix stop && chkconfig postfix off
# centos 7
systemctl stop postfix && yum erase postfix
systemctl stop sendmail && systemctl disable sendmail

关闭selinux

防火墙

根据自已需求选择要不要关闭,也可以选用设置防火墙规则

关闭防火墙功能

# centos 6
service iptables stop && chkconfig iptables off
# centos 7
systemctl stop firewalld.service && systemctl disable firewalld.service

添加防火墙规则 开放端口

A INPUT m state state NEW m tcp p tcp dport 80 j ACCEPT
A INPUT m state state NEW m tcp p tcp dport 443 j ACCEPT
A INPUT m state state NEW m tcp p tcp dport 7071 j ACCEPT
A INPUT m state state NEW m tcp p tcp dport 8087 j ACCEPT
A INPUT m state state NEW m tcp p tcp dport 8080 j ACCEPT
A INPUT m state state NEW m tcp p tcp dport 8443 j ACCEPT
A INPUT m state state NEW m tcp p tcp dport 25 j ACCEPT
A INPUT m state state NEW m tcp p tcp dport 110 j ACCEPT
A INPUT m state state NEW m tcp p tcp dport 143 j ACCEPT
A INPUT m state state NEW m tcp p tcp dport 993 j ACCEPT
A INPUT m state state NEW m tcp p tcp dport 995 j ACCEPT
# iptables -F
# iptables -P INPUT DROP
# iptables -P OUTPUT ACCEPT
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A INPUT -s IP-Address-of-your-server/32 -j ACCEPT
# iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -p tcp –dport 22 -j ACCEPT
# iptables -A INPUT -p icmp -j ACCEPT
## Zimbra rules for external access ##
# iptables -A INPUT -p tcp –dport 25  -j ACCEPT
# iptables -A INPUT -p tcp –dport 80  -j ACCEPT
# iptables -A INPUT -p tcp –dport 110  -j ACCEPT
# iptables -A INPUT -p tcp –dport 143 -j ACCEPT
# iptables -A INPUT -p tcp –dport 443  -j ACCEPT
# iptables -A INPUT -p tcp –dport 465  -j ACCEPT
# iptables -A INPUT -p tcp –dport 587  -j ACCEPT
# iptables -A INPUT -p tcp –dport 993  -j ACCEPT
# iptables -A INPUT -p tcp –dport 995  -j ACCEPT
# iptables -A INPUT -p tcp –dport 3443  -j ACCEPT
# iptables -A INPUT -p tcp –dport 9071  -j ACCEPT
# iptables -A INPUT -p tcp –dport 7071  -j ACCEPT

配置主机名HOSTNAME

修改配置文件

vi /etc/sysconfig/network 内容 HOSTNAME=mail.example.com

或 命令设置

hostnamectl sethostname mail.example.com
hostnamectl status

hostname

配置HOSTS

安装时会检查hosts文件内容要否符合要求:<ip> <FQHN> <HN>

核查hosts文件中的FQHN是否与与hostname一致,不一致安装中止

不设置<ip> <FQHN> <HN> 返回的错误信息:

ERROR: Installation can not proceeed.  Please fix your /etc/hosts file
  to contain:
  <ip> <FQHN> <HN>
  Where <IP> is the ip address of the host,
  <FQHN> is the FULLY QUALIFIED host name, and
  <HN> is the (optional) hostnameonly portion

错误信息2 出错原因也说的很详细了 注释掉有12.0.0.1的行 DO服务器注释掉#centos-512mb-ams2-01 centos-512mb-ams2-01的行

ERROR: Installation can not proceeed.  Please fix your /etc/hosts file
  to contain:
  127.0.0.1 localhost.localdomain localhost
  Zimbra install grants mysql permissions only to localhost and
  localhost.localdomain users.  But Fedora/RH installs leave lines such
  as these in /etc/hosts:
  127.0.0.1     myhost.mydomain.com myhost localhost.localdomain localhost
  This causes MySQL to reject users coming from 127.0.0.1 as users from
  myhost.mydomain.com.  You can read more details at:
  http://bugs.mysql.com/bug.php?id=11822

服务器IP 完整域名 主机名称(hostname命令显示的)

vi /etc/hosts
138.68.243.239 mail.example.com mail.example.com

NTP

Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。

安装依赖包 wiki

从Zimbra Collaboration 8.7开始,Zimbra依赖于自己的存储库打包系统,这意味着Zimbra安装脚本会自动处理操作系统的依赖关系。

安装及使用

wget https://files.zimbra.com/downloads/8.7.5_GA/zcs-8.7.5_GA_1764.RHEL7_64.20170314032533.tgz
tar zxvf zcs8.7.5_GA_1764.RHEL7_64.20170314032533.tgz
cd zcs8.7.5_GA_1764.RHEL7_64.20170314032533
# ./install.sh
./install.sh platformoverride

安装出错可行一次:/opt/zimbra/libexec/zmsetup.pl 日志分析,不行就卸载重装了./install.sh -u

安装过程就不一一列出来了,能y的设置y,跳到菜单的时候选7、选4设置管理员密码,r返回,a

查看占用空间:du -sh /opt/zimbra/

切换到zimbra用户:su - zimbra

查看运行状态:zmcontrol status

重启服务:zmcontrol restart

web管理界面:https://mail.example.com:7071/

web用户界面:https://mail.example.com:7073/

添加新域名 example.com

简单的收发邮件:example.com 设置@的MX记录到mail.example.com

SPF,DKIM,DMARC wiki spam

SPF

什么是SPF?
(Sender Policy Framework) 的缩写,一种以IP地址认证电子邮件发件人身份的技术,是非常高效的垃圾邮件解决方案。
接收邮件方会首先检查域名的SPF记录,来确定发件人的IP地址是否被包含在SPF记录里面,如果在,就认为是一封正确的邮件,否则会认为是一封伪造的邮件进行退回。

example.com 设置@的SPF和txt记录:v=spf1 mx ~all(允许当前域名的mx记录对应的IP地址)

DKIM

Bug:

ZCS 8.7.x 已知问题 BUG zmdkimkeyutil 生成非有效的2048位DKIM

解决:/opt/zimbra/libexec/zmdkimkeyutil 修改所有2048关键字为1024

》升级DKIM签名:/opt/zimbra/libexec/zmdkimkeyutil -u -d example.com

》更改DNS设置

命令生成2048位DKIM:/opt/zimbra/libexec/zmdkimkeyutil -a -b 2048 -d example.com

DKIM是利用加密签名和验证的原理,发件人在发送邮件时候,将与域名相关的加密签名插入邮件,收件人收到邮件后就可以对签名进行验证,判断发件人地址的真实性。

  • 添加DKIM /opt/zimbra/libexec/zmdkimkeyutil -a -d example.com
  • 升级DKIM /opt/zimbra/libexec/zmdkimkeyutil -u -d example.com
  • 删除DKIM /opt/zimbra/libexec/zmdkimkeyutil -r -d example.com
  • 查看DKIM /opt/zimbra/libexec/zmdkimkeyutil -q -d example.com

生成1024位的DKIM 内容为

DKIM Data added to LDAP for domain example.com with selector E298BEBE2D5A11E79E70F55E985B5BE7
Public signature to enter into DNS:
E298BEBE2D5A11E79E70F55E985B5B17._domainkey IN TXT ( “v=DKIM1; k=rsa; “
  “p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5Lkk2XnUgA9LoHWYgDb1URxyTnab0WuHA9CKUFtLWrjV6S87bcpzoVa3

DMARC

[DMARC]协议的主要目的是识别并拦截钓鱼邮件

DNS记录 名称:_dmarc  值:v=DMARC1; p=none

域名解析记录

类型:txt

DNS名称:E298BEBE-2D5A-11E7-9E70-F55E985B5B17._domainkey

值:”v=DKIM1; k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5Lkk2XnUgA9LoHWYgDb1URxyTnab0WuHA9CKUFtLWrjV6S87bcpzoVa3fGVc/jChVfu5E4ZTif/jNkBPeow7wnwajEpFo8G/yR0e8aNwDghW8DYf9B21QPAtB9NqoNjoUSD1tDsTXor2tSqf8wormbVhN3Y9aWkAxMEUP594zUwIDAQAB”

验证DKIM

验证公钥是否与私钥匹配 测试通过没有任何信息返回,否则返回record not found

/opt/zimbra/common/sbin/opendkim-testkey -d example.com -s E298BEBE-2D5A-11E7-9E70-F55E985B5B17 -x /opt/zimbra/conf/opendkim.conf

重新签发证书

zimbra的证书有效期为365天,为了避免下次的麻烦,可以重新签发一个证书,有效期20年。

/opt/zimbra/bin/zmcertmgr createca new
/opt/zimbra/bin/zmcertmgr deployca
/opt/zimbra/bin/zmcertmgr createcrt new days 7300
/opt/zimbra/bin/zmcertmgr deploycrt self
/opt/zimbra/bin/zmcertmgr viewdeployedcrt

可以学习的内容

dnsmasq

named

小工具

https://intodns.com/one.one DNS检查

http://www.mail-tester.com/ 邮件评分

https://dmarcian.com/dmarc-inspector/mgtgxp.pw dmarc测试

参考文章

https://www.renfei.org/blog/introduction-to-spf.html

http://170182.blog.51cto.com/160182/1272569

https://www.mawenbao.com/research/email-spf-and-exim4-dkim-dmarc-config.html

http://imzhen.com/note/2015/08/09/20150809/

CentOS 7 安装配置Zimbra邮件服务器

https://www.chenxie.net/archives/1476.html

http://www.bkjia.com/Linux/1112319.html

https://bbotte.com/server-config/zimbra-configuration-mail-service-full-record/

Zimbra8 安装说明

http://blog.csdn.net/zzban/article/details/8640510

https://www.kenceng-solusindo.net/read/intalasi-zimbra-mail-server-ubuntu-16-04/

http://record.blog.51cto.com/3300006/1206745

https://www.chenxie.net/archives/1476.html

http://www.linuxyw.com/linux/qitafuwu/20130605/540.html

http://m.blog.chinaunix.net/uid-31075838-id-5698408.html

发表回复