Zimbra Csoportmunka

A nyílt forrású Zimbra Collaboration Server egy Exchange-kompatibilis e-mail és kollaborációs platform fejlett webes klienssel és mobiltelefonos szinkronizáció lehetőségével. A bejegyzésben lépésről-lépésre megtanítalak hogyan alakítsd ki a saját környezetedet. A rendszer alapját Ubuntu 18.04 szerver adja.

Előkészületek

Ennek a cikknek az írásához a forrás anyag innen származik, némi módosítással. A legfontosabb teendőnk, hogy a Domain szolgáltatónál állítsuk be a Domainünk „A” rekordját, ami a szerverünk – vagy routerünk – publikus IP címére mutat. Illetve hozzunk még egy „A” rekordot létre, mail.domain.pelda néven az előző IP címre. Még egy bejegyzés szükséges, mégpedig „MX” rekordkét állítsuk be a korábbi mail.domain.pelda nevünket. Nálam így néz ki.

DOMAIN SZOLGÁLTATÓ:

zsoltina.eu A 37.191.57.95
zsoltina.eu MX mail.zsoltina.eu
mail.zsoltina.eu A 37.191.57.95

 

ROUTER MÖGÜL:

zsoltina.eu A 37.191.57.95
zsoltina.eu MX mail.zsoltina.eu
mail.zsoltina.eu A 172.16.5.100

A router mögül azért látszik a belső címe a szervernek, mert nálam ez az eszköz adja a DNS szolgáltatást is, és itt statikusan a mail.zsoltina.eu névhez hozzárendeltem a 172.16.5.100 címet. Így a belső hálüzaton a resolver ezt a címet adja vissza. Továbbá a szerveren be kell még állítanunk a /etc/hosts és /etc/hostname konfigurációs állományokat. Az alábbi példa szerint:

zimbra@mail:/home/berti$ cat /etc/hosts
127.0.0.1 localhost.localadmin localhost
172.16.5.100 mail.zsoltina.eu mail
zimbra@mail:/home/berti$ cat /etc/hostname
mail

Ezek a lépések azért kellenek, mert a Zimbra telepítéskor megnézi, hogy a megadott domain névhez milyen MX rekord tartozik. Ha a telepítendő szerver neve és IP címe nem egyezik meg a lekérdezés folyamán, akkor az hibát okoz a telepítés alatt. Ha nem olyan a routerünk, amin ezt a trükköt tudnánk alkalmazni, a szerverünkön telepíteni kell például a DNSMasq szolgáltatást és ott átkonfigurálni a mail.damain.pelda beállítást. Itt egy script, ami ezt megoldja:

cd /tmp && nano dnsmasq.sh

Illeszd be az alábbi tartalmat:

#!/bin/bash -x
# DNSMasq server installation in Ubuntu 18.04
# Author: Ványi Albert
# Check if running as root
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi

##Install a DNS Server with DNSMasq
sudo apt-get update && sudo apt-get install -y dnsmasq
echo "Installing Bind DNSMasq Server"
sudo systemctl stop dnsmasq && systemctl disable systemd-resolved && systemctl stop systemd-resolved
mv /etc/dnsmasq.conf /etc/dnsmasq.conf.BKP && rm /etc/resolv.conf
cat <<EOF >>/etc/dnsmasq.conf
port=53
server=$2
domain=$1
mx-host=$1, mail.$1, 5
mx-host=mail.$1, mail.$1, 5
listen-address=127.0.0.1
EOF
cat <<EOF >>/etc/resolv.conf
nameserver 127.0.0.1
nameserver 8.8.8.8
nameserver 8.8.4.4
EOF
sudo systemctl start dnsmasq
echo "DNSMasq installed your system"

Tegyük futtathatóvá:

chmod +x dnsmasq.sh

A script futtatása esetén a domain nevet és ip címet parancssori argomentumként adjuk meg:

./dnsmasq.sh zsoltina.eu 172.16.5.100

Időzóna és rendszeridő beállítása:

dpkg-reconfigure tzdata

Mielőtt az ntp daemont telepítenénk ellenőrizzük le, hogy az időszinkronizálás – System clock synchronized – ki van-e kapcsolva. Nálam mint látható ki volt kapcsova:

root@mail:/opt/zimbra/backup# timedatectl
                      Local time: h 2019-12-30 08:05:36 CET
                  Universal time: h 2019-12-30 07:05:36 UTC
                        RTC time: h 2019-12-30 07:05:36
                       Time zone: Europe/Budapest (CET, +0100)
       System clock synchronized: no
systemd-timesyncd.service active: yes
                 RTC in local TZ: no

Ha be van kapcsolva, akkor az alábbi paranccsal tudjuk kikapcsolni:

timedatectl set-ntp no

Majd telepítsük az ntp-t:

apt install ntp

Időszinkron ellenőrzése az ntpq -p paranccsal:

root@mail:/opt/zimbra/backup# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 0.ubuntu.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
 1.ubuntu.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
 2.ubuntu.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
 3.ubuntu.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
 ntp.ubuntu.com  .POOL.          16 p    -   64    0    0.000    0.000   0.000
 bakacsin1.ki.ii 195.111.107.122  2 u    1   64    1   18.406    0.320   0.000
 golem.canonical 17.253.34.125    2 u    1   64    1   39.541   -0.057   0.000

Zimbra telepítése

Elérkeztünk a telepítéshez, amit két módon tehetünk meg.

Első módszer:

Letöltjük a Zimbra aktuális verzióját és manuálisan telepítjük:

cd /tmp
wget https://files.zimbra.com/downloads/8.8.15_GA/zcs-8.8.15_GA_3869.UBUNTU18_64.20190918004220.tgz
tar xzvf zcs-*
cd /tmp/zcs/zcs-8.8.15_GA_3869.UBUNTU18_64.20190918004220 && ./install.sh

Második módszer:

Automatizált telepítést hajtunk végre, ez esetben lépjünk a „/tmp” könyvtárba és hozzuk létre a következő scriptet:

cd /tmp && nano zimbra.sh

Illesszük be az alábbi tartlmat:

#!/bin/bash -x
# Zimbra mail server installation in Ubuntu 18.04
# Author: Ványi Albert

# Check if running as root
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi

## Preparing all the variables like IP, Hostname, etc, all of them from the server
RANDOMHAM=$(date +%s|sha256sum|base64|head -c 10)
RANDOMSPAM=$(date +%s|sha256sum|base64|head -c 10)
RANDOMVIRUS=$(date +%s|sha256sum|base64|head -c 10)
HOSTNAME=$(hostname -s)

##Preparing the config files to inject
echo "Creating the Scripts files"
mkdir /tmp/zcs && cd /tmp/zcs
touch /tmp/zcs/installZimbraScript
cat <<EOF >/tmp/zcs/installZimbraScript
AVDOMAIN="$1"
AVUSER="admin@$1"
CREATEADMIN="admin@$1"
CREATEADMINPASS="$3"
CREATEDOMAIN="$1"
DOCREATEADMIN="yes"
DOCREATEDOMAIN="yes"
DOTRAINSA="yes"
EXPANDMENU="no"
HOSTNAME="$HOSTNAME.$1"
HTTPPORT="8080"
HTTPPROXY="TRUE"
HTTPPROXYPORT="80"
HTTPSPORT="8443"
HTTPSPROXYPORT="443"
IMAPPORT="7143"
IMAPPROXYPORT="143"
IMAPSSLPORT="7993"
IMAPSSLPROXYPORT="993"
INSTALL_WEBAPPS="service zimlet zimbra zimbraAdmin"
JAVAHOME="/opt/zimbra/common/lib/jvm/java"
LDAPAMAVISPASS="$3"
LDAPPOSTPASS="$3"
LDAPROOTPASS="$3"
LDAPADMINPASS="$3"
LDAPREPPASS="$3"
LDAPBESSEARCHSET="set"
LDAPDEFAULTSLOADED="1"
LDAPHOST="$HOSTNAME.$1"
LDAPPORT="389"
LDAPREPLICATIONTYPE="master"
LDAPSERVERID="2"
MAILBOXDMEMORY="512"
MAILPROXY="TRUE"
MODE="https"
MYSQLMEMORYPERCENT="30"
POPPORT="7110"
POPPROXYPORT="110"
POPSSLPORT="7995"
POPSSLPROXYPORT="995"
PROXYMODE="https"
REMOVE="no"
RUNARCHIVING="no"
RUNAV="yes"
RUNCBPOLICYD="no"
RUNDKIM="yes"
RUNSA="yes"
RUNVMHA="no"
SERVICEWEBAPP="yes"
SMTPDEST="admin@$1"
SMTPHOST="$HOSTNAME.$1"
SMTPNOTIFY="yes"
SMTPSOURCE="admin@$1"
SNMPNOTIFY="yes"
SNMPTRAPHOST="$HOSTNAME.$1"
SPELLURL="http://$HOSTNAME.$1:7780/aspell.php"
STARTSERVERS="yes"
SYSTEMMEMORY="3.8"
TRAINSAHAM="ham.$RANDOMHAM@$1"
TRAINSASPAM="spam.$RANDOMSPAM@$1"
UIWEBAPPS="yes"
UPGRADE="yes"
USEKBSHORTCUTS="TRUE"
USESPELL="yes"
VERSIONUPDATECHECKS="TRUE"
VIRUSQUARANTINE="virus-quarantine.$RANDOMVIRUS@$1"
ZIMBRA_REQ_SECURITY="yes"
ldap_bes_searcher_password="$3"
ldap_dit_base_dn_config="cn=zimbra"
ldap_nginx_password="$3"
ldap_url="ldap://$HOSTNAME.$1:389"
mailboxd_directory="/opt/zimbra/mailboxd"
mailboxd_keystore="/opt/zimbra/mailboxd/etc/keystore"
mailboxd_keystore_password="$3"
mailboxd_server="jetty"
mailboxd_truststore="/opt/zimbra/common/lib/jvm/openjdk-13.0.1-zimbra/lib/security/cacerts"
mailboxd_truststore_password="changeit"
postfix_mail_owner="postfix"
postfix_setgid_group="postdrop"
ssl_default_digest="sha256"
zimbraDNSMasterIP=""
zimbraDNSTCPUpstream="no"
zimbraDNSUseTCP="yes"
zimbraDNSUseUDP="yes"
zimbraDefaultDomainName="$1"
zimbraFeatureBriefcasesEnabled="Enabled"
zimbraFeatureTasksEnabled="Enabled"
zimbraIPMode="ipv4"
zimbraMailProxy="FALSE"
zimbraMtaMyNetworks="127.0.0.0/8 $2/32 [::1]/128 [fe80::]/64"
zimbraPrefTimeZoneId="Europe/Budapest"
zimbraReverseProxyLookupTarget="TRUE"
zimbraVersionCheckInterval="1d"
zimbraVersionCheckNotificationEmail="admin@$1"
zimbraVersionCheckNotificationEmailFrom="admin@$1"
zimbraVersionCheckSendNotifications="TRUE"
zimbraWebProxy="FALSE"
zimbra_ldap_userdn="uid=zimbra,cn=admins,cn=zimbra"
zimbra_require_interprocess_security="1"
zimbra_server_hostname="$HOSTNAME.$1"
INSTALL_PACKAGES="zimbra-core zimbra-ldap zimbra-logger zimbra-mta zimbra-snmp zimbra-store zimbra-apache zimbra-spell zimbra-memcached zimbra-proxy"
EOF
touch /tmp/zcs/installZimbra-keystrokes
cat <<EOF >/tmp/zcs/installZimbra-keystrokes
y
y
y
y
y
n
y
y
y
y
y
y
y
n
y
y
EOF

## Install Zimbra Mail Server
if [[ `lsb_release -rs` == "18.04" ]]; then
echo "Downloading Zimbra Collaboration 8.8.15 for Ubuntu 18.04"
wget https://files.zimbra.com/downloads/8.8.15_GA/zcs-8.8.15_GA_3869.UBUNTU18_64.20190918004220.tgz
tar xzvf zcs-*
echo "Installing Zimbra Collaboration just the Software"
cd /tmp/zcs/zcs-8.8.15_GA_3869.UBUNTU18_64.20190918004220 && ./install.sh -s < /tmp/zcs/installZimbra-keystrokes
echo "Installing Zimbra Collaboration injecting the configuration"
/opt/zimbra/libexec/zmsetup.pl -c /tmp/zcs/installZimbraScript
fi
## Restart Zimbra
su - zimbra -c 'zmcontrol restart'
## Add Crontab for server autostart at startup or reboot
cat <(crontab -l) <(echo "@reboot su - zimbra -c 'zmcontrol start'") | crontab -
echo "You can access now to your Zimbra Collaboration Server"
echo "Admin Console: https://"$2":7071"
echo "Web Client: https://"$2

Kapjon futtatási jogot és futtassuk:

sudo chmod +x zimbra.sh && /bin/bash /tmp/zimbra.sh zsoltina.eu 172.16.5.100 Passw@rd

Parancssori argomentumok:

  • Domain név: zsoltina.eu
  • Locális IP: 172.16.5.100
  • Admin jelszó: Passw@rd

A telepítés befejezése után a következő felületek állnak rendelkezésre:

  • Web Kliens: https://mail.zsoltina.eu
  • Adminisztráció: https://mail.zsoltina.eu:7071

Külső hozzáférés esetén, a következő TCP portokat kell elérhetővé tenni a szerveren:

SMTP 25
HTTP 80
POP3 110
IMAP 143
HTTPS 443
SMTPS 465
SUBMISSION 587
IMAPS 993
POP3S 995

Let’s Encrypt tanúsítvány

Célszerű a szerverünket az ingyenes Let’s Encrypt tanúsítvány hatóság által biztosított tanúsítvánnyal használni. Ennek a beállítására szintén készítettem egy scriptet. Lépjünk a „/tmp” könyvtárba és váltsunk root felhasználóra. Hozzuk létre a következő scriptet:

touch /tmp/zimbra-ssl.sh && chmod +x /tmp/zimbra-ssl.sh

Illesszük be az alábbi tartalmat, azonban arra vigyázzunk, hogy a `zmhostname` részt néha hibásan generálja a script és utasításként próbál lefutni. Érdemes lehet ezt a részt leválasztani és külön script-ként futtatni:

#!/bin/bash

# SSL certificate installation in Zimbra
# with SSL certificate provided by Let's Encrypt (letsencrypt.org)
# Author: Ványi Albert

# Check if running as root
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi

read -p 'letsencrypt_email [xx@xx.xx]: ' letsencrypt_email
read -p 'mail_server_url [xx.xx.xx]: ' mail_server_url

# Check All variable have a value
if [ -z $mail_server_url ] || [ -z $letsencrypt_email ]
then
echo run script again please insert all value. do not miss any value
else

# Installation start
# Stop the jetty or nginx service at Zimbra level
su - zimbra -c 'zmproxyctl stop'
su - zimbra -c 'zmmailboxdctl stop'

# Install git and letsencrypt
cd /opt/
apt-get install git -y
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

# Get SSL certificate
./letsencrypt-auto certonly --standalone --non-interactive --agree-tos --email $letsencrypt_email -d $mail_server_url --hsts
cd /etc/letsencrypt/live/$mail_server_url
cat <<EOF >>chain.pem
-----BEGIN CERTIFICATE-----
MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
-----END CERTIFICATE-----
EOF

# Verify commercial certificate
mkdir /opt/zimbra/ssl/letsencrypt
cp /etc/letsencrypt/live/$mail_server_url/* /opt/zimbra/ssl/letsencrypt/
chown zimbra:zimbra /opt/zimbra/ssl/letsencrypt/*
ls -la /opt/zimbra/ssl/letsencrypt/
su - zimbra -c 'cd /opt/zimbra/ssl/letsencrypt/ && /opt/zimbra/bin/zmcertmgr verifycrt comm privkey.pem cert.pem chain.pem'

# Deploy the new Let's Encrypt SSL certificate
cp -a /opt/zimbra/ssl/zimbra /opt/zimbra/ssl/zimbra.$(date "+%Y%m%d")
cp /opt/zimbra/ssl/letsencrypt/privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.key
sudo chown zimbra:zimbra /opt/zimbra/ssl/zimbra/commercial/commercial.key
su - zimbra -c 'cd /opt/zimbra/ssl/letsencrypt/ && /opt/zimbra/bin/zmcertmgr deploycrt comm cert.pem chain.pem'

# setting auto https redirect
cd /opt && touch https-redirect.sh && chown zimbra:zimbra https-redirect.sh && chmod +x https-redirect.sh
cat <<EOF >>/opt/https-redirect.sh
zmlocalconfig -e ldap_starttls_supported=1
zmlocalconfig -e zimbra_require_interprocess_security=1
zmlocalconfig -e ldap_starttls_required=true
zmprov ms `zmhostname` zimbraReverseProxyMailMode redirect
zmprov ms `zmhostname` zimbraMailMode https
zmprov ms `zmhostname` zimbraReverseProxySSLToUpstreamEnabled TRUE
zmprov ms `zmhostname` zimbraMailClearTextPasswordEnabled FALSE
zmprov ms `zmhostname` zimbraImapCleartextLoginEnabled FALSE
zmprov gs `zmhostname` zimbraReverseProxyImapStartTlsMode only
zmprov ms `zmhostname` zimbraPop3CleartextLoginEnabled FALSE
zmprov gs `zmhostname` zimbraReverseProxyPop3StartTlsMode only
zmprov ms `zmhostname` zimbraMtaTlsAuthOnly TRUE
zmlocalconfig -e postfix_smtp_tls_security_level=may
zmprov ms `zmhostname` zimbraMtaTlsSecurityLevel may
zmprov gs `zmhostname` zimbraAuthLdapStartTlsEnabled TRUE
EOF
su - zimbra -c '/opt/https-redirect.sh'
rm /opt/https-redirect.sh

# Restart Zimbra
su - zimbra -c 'zmcontrol restart'
fi

Tanúsítvány megújítása

A Let’s Encrypt tanúsítványokat időről-időre meg kell újítanunk. Ehhez a következő scrptet készítettem. Lépjünk a „/tmp” könyvtárba és hozzuk létre a scriptet root felhasználóként:

cd /tmp && touch zimbra-ssl-renew.sh && chmod +x zimbra-ssl-renew.sh && nano zimbra-ssl-renew.sh

Illesszük be az alábbi tartalmat:

#!/bin/bash

# Renew SSL certificate in Zimbra
# with SSL certificate provided by Let's Encrypt (letsencrypt.org)
# Author: Ványi Albert

# Check if running as root
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi

read -p 'letsencrypt_email [xx@xx.xx]: ' letsencrypt_email
read -p 'mail_server_url [xx.xx.xx]: ' mail_server_url

# Check All variable have a value
if [ -z $mail_server_url ] || [ -z $letsencrypt_email ]
then
echo run script again please insert all value. do not miss any value
else

# Installation start
# Stop the jetty or nginx service at Zimbra level
su - zimbra -c 'zmproxyctl stop'
su - zimbra -c 'zmmailboxdctl stop'

# Renew SSL
cd /opt/letsencrypt

# Get SSL certificate
./letsencrypt-auto certonly --standalone --non-interactive --agree-tos --email $letsencrypt_email -d $mail_server_url --hsts
cd /etc/letsencrypt/live/$mail_server_url
cat <<EOF >>chain.pem
-----BEGIN CERTIFICATE-----
MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
-----END CERTIFICATE-----
EOF

# Verify commercial certificate
mkdir /opt/zimbra/ssl/letsencrypt
cp /etc/letsencrypt/live/$mail_server_url/* /opt/zimbra/ssl/letsencrypt/
chown zimbra:zimbra /opt/zimbra/ssl/letsencrypt/*
ls -la /opt/zimbra/ssl/letsencrypt/
su - zimbra -c 'cd /opt/zimbra/ssl/letsencrypt/ && /opt/zimbra/bin/zmcertmgr verifycrt comm privkey.pem cert.pem chain.pem'

# Deploy the new Let's Encrypt SSL certificate
cp -a /opt/zimbra/ssl/zimbra /opt/zimbra/ssl/zimbra.$(date "+%Y%m%d")
cp /opt/zimbra/ssl/letsencrypt/privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.key
sudo chown zimbra:zimbra /opt/zimbra/ssl/zimbra/commercial/commercial.key
su - zimbra -c 'cd /opt/zimbra/ssl/letsencrypt/ && /opt/zimbra/bin/zmcertmgr deploycrt comm cert.pem chain.pem'

# Restart Zimbra
su - zimbra -c 'zmproxyctl start'
su - zimbra -c 'zmmailboxdctl start'

fi

Backup

A rendszerünkről nem árt időről-időre biztonsági mentést készíteni. Ehhez szintén készítettem egy scriptet:

cd /tmp && touch zimbra-backup.sh && chmod +x zimbra-backup.sh && nano zimbra-backup.sh
#!/bin/bash

################################################
# Zimbra backup script for open source edition #
################################################

ZIMBRA_HOME=/opt/zimbra
ZIMBRA_BIN=$ZIMBRA_HOME/bin
ZIMBRA_BACKUP_DIR=$ZIMBRA_HOME/backup

BACKUP_DATE=`date +%G-%m-%d_%H-%M`

# set default option is 0 (unset)
VERBOSE=0

log()
{
# verbose option is turn on
if [ $VERBOSE -eq 1 ]; then
echo $1
fi
}

usage()
{

cat << EOF
zmbackup: zmbackup [-o path] -a|-u mailbox
EOF

}

backup_mailbox()
{
mbox=$1
log "start backup mailbox $mbox"

if [ ! -z $2 ]; then
$ZIMBRA_BIN/zmmailbox -z -m $mbox getRestURL "//?fmt=tgz" > $ZIMBRA_BACKUP_DIR/$2/$mbox-$BACKUP_DATE.tgz
log "backup mailbox $mbox successful"
log "backup to $ZIMBRA_BACKUP_DIR/$2"

else
$ZIMBRA_BIN/zmmailbox -z -m $mbox getRestURL "//?fmt=tgz" > $ZIMBRA_BACKUP_DIR/$mbox-$BACKUP_DATE.tgz
log "backup mailbox $mbox successful"
log "backup to $ZIMBRA_BACKUP_DIR"
fi
}

create_pack_backup()
{
log "search domain"
domains=`$ZIMBRA_BIN/zmprov gad`

for domain in $domains; do
log "start backup domain $domain"

# get all accounts from domain
mboxs=`$ZIMBRA_BIN/zmprov -l gaa $domain`

# check directory if -o is set
mkdir -p $ZIMBRA_BACKUP_DIR/$domain

# fetch account in tgz format
for mbox in $mboxs; do
# $ZIMBRA_BIN/zmmailbox -z -m $mbox getRestURL "//?fmt=tgz" > $ZIMBRA_BACKUP_DIR/$domain/$mbox-$BACKUP_DATE.tgz
backup_mailbox $mbox $domain
done

# pack mailbox in domain
cd $ZIMBRA_BACKUP_DIR/$domain
tar czf $domain-$BACKUP_DATE.tgz `ls`
mv $domain-$BACKUP_DATE.tgz $ZIMBRA_BACKUP_DIR
cd $ZIMBRA_BACKUP_DIR
rm -rf $ZIMBRA_BACKUP_DIR/$domain

log "backup domain $domain successful"

done
}

# Option
# zmbackup [-ah] [-u mailbox] [-o path]
while getopts :aho:u:v OPTION; do
case $OPTION in
a )
AFLAG=1
;;
h )
usage
;;
o )
if [ -z $OPTARG ]; then
echo "-o option must specific path"
exit 1
else
ZIMBRA_BACKUP_DIR=${OPTARG:0:${#OPTARG}-1} # substring from 0 to strlen - 1
fi
;;
u )
if [ -z $OPTARG ]; then
echo "-u option must specific mailbox"
else
UFLAG=$OPTARG
fi
;;
v )
VERBOSE=1
;;
# other option doesn't match
* )
usage
exit 1
;;
esac
done

# if not specific -a or -u it error and exit the script
if [ -z $UFLAG ] && [[ $AFLAG -ne 1 ]]; then
echo "you must specific -a or -u option"
exit 1
fi

# if UFLAG has value but AFLAG is used
if [ ! -z $UFLAG ] && [[ $AFLAG -eq 1 ]]; then
echo "use -a or -u"
exit 1
# if declare UFLAG
elif [ ! -z $UFLAG ]; then
backup_mailbox $UFLAG
fi

# if AFLAG on
if [[ $AFLAG -eq 1 ]]; then
create_pack_backup
fi

A scriptet két módon tudjuk futtatni:

  • -a: Teljes rendszermentés, pl: /bin/bash /tmp/zimbra-backup.sh -a
  • -u: Egy adott felhasználó levelezéseinek mentése pl: /bin/bash /tmp/zimbra-backup.sh -u admin@zsoltina.eu

A biztonsági mentések a „/opt/zimbra/backup” könyvtárba kerülnek.

Zimbra Drive

Amennyiben rendelkezünk Nextcloud szolgáltatással, nagyon hasznos lehetőség, ha a Zimbra számára hozzáférést biztosítunk a felhő alapú tárhelyünkhöz. A gyakorlatban ez azt jelenti, hogy a Zimbra hozzáfér a Nextcloud tárhelyünkhöz és a Zimbra felhasználóinak automatikusan létrehoz egy fiókot. Így a Zimbra felhasználóinak lehetősége van itt tárolni nagy méretű állományokat, melyeket email küldés esetén mellékelhetnek a címzett számára. A használathoz össze kell párosítani a két szolgáltatásunkat.

Zimbra szerver:

A Zimbrát futtató szerveren váltsunk zimbra felhasználóra:

sudo -s # root felhasznlóra váltás
su zimbra

Majd párosítsuk össze a nextcloud elérhetőségünket a zimbra adott tartományával, melynek hozzáférést akarunk biztosítani a nextcloud tárhelyhez:

zmprov md zsoltina.eu zimbraDriveOwnCloudURL https://zsoltina.asuscomm.com/index.php

Szükségünk lesz egy kulcsra a kapcsolat felépítéséhez:

zmprov getDomain zsoltina.eu zimbraPreAuthKey
zmprov generateDomainPreAuthKey zsoltina.eu

Ekkor legenerálódik az api kulcs, valami hasonlót fogunk látni, persze csillagok nélkül:

preAuthKey: 06**********af**********b005eaea4ab1**********4bf1e**********75

Nextcloud szerver:

A nextcloud szerveren adminisztrátori joggal rendelkező fiókkal lépjünk be, majd az alkalmazások között válasszuk ki és telepítsük a Zimbra Drive-t. Majd lépjünk a beállításokra, itt válasszuk a Zimbra Drive-ot. Töltsük ki az űrlapot:

X Enable Zimbra Authentication back end
X Allow Zimbra's users to log in
Zimbra Server: mail.zsoltina.eu
Zimbra port: 443
X Use SSL
X Enable Certification verification
Domain Preauth key: < Üresen hagyni >
X Set Zimbra Group to users

Amennyiben a Test Page gombra kattintunk, helyes működés esetén az alábbi üzenetet kell látnunk:

[OK] Zimbra Drive app installation test : Zimbra Drive app is installed.
[OK] Enabled Zimbra's users test : Zimbra's users are enabled.
[OK] Enabled Zimbra's user login : Zimbra Drive authentication is enabled.
[OK] Is server url set test : The server url is set.
[OK] Is server port set test : The server port is set.
[OK] Zimbra host connection test : Zimbra Drive app can reach the host.
[OK] Zimbra authentication page connection test : Zimbra Drive app can reach Zimbra's authentication page.
[OK] Zimbra Drive extension connection test : Zimbra Drive app can reach Zimbra Drive extension.

DKIM beállítása

DKIM Domain-hez adása:

su - zimbra -c "/opt/zimbra/libexec/zmdkimkeyutil -a -d zsoltina.eu"

A parancs hatására beállításra kerül a DKIM titkos kulcsa, illetve a rendszer kiírja a Domain szolgáltatónál beállításra ajánlott konfigurációt.

DKIM beállítás részletei:

su - zimbra -c "/opt/zimbra/libexec/zmdkimkeyutil -q -d zsoltina.eu"

DKIM eltávolítása:

su - zimbra -c "/opt/zimbra/libexec/zmdkimkeyutil -r -d zsoltina.eu"

DKIM Frissítés (Update)

su - zimbra -c "/opt/zimbra/libexec/zmdkimkeyutil -u -d zsoltina.eu"

További részletek itt.

Konklúzió

Ezzel elkészültünk a szolgáltatás konfigurálásával. Outlook-al való használathoz szükség lesz a Zimbra Connector for Outlook kiegészítőre, melyet innen tudsz letölteni.