Last active
October 14, 2021 06:38
-
-
Save bouroo/ab6b11d4a857a7c453e121d8b29a4d68 to your computer and use it in GitHub Desktop.
Install Zimbra Collaboration on ubuntu LTS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
MAIL_DOMAIN="your.mail.domain" | |
# Run once | |
# Download Java Cryptography Extension (JCE) from http://www.oracle.com/technetwork/java/javase/downloads/index.html | |
# and extract .jar replace in /opt/zimbra/common/lib/jvm/java/jre/lib/security | |
# Use strong cipher for nginx | |
#su - zimbra -c "zmprov mcf zimbraReverseProxySSLCiphers 'ECDHE+CHACHA20:ECDHE+AESGCM:DHE+AESGCM:ECDHE+AES:DHE+AES:RSA+AESGCM:RSA+AES:!DES-CBC3-SHA:!DSS'" | |
#su - zimbra -c 'zmprov mcf +zimbraResponseHeader "Strict-Transport-Security: max-age=31536000"' | |
#su - zimbra -c "zmdhparam set -new 4096" | |
# Disable weak ciphers | |
#su - zimbra -c "zmprov mcf zimbraSSLExcludeCipherSuites .*_RC4_.*" | |
#su - zimbra -c "zmprov mcf +zimbraSSLExcludeCipherSuites SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA" | |
#su - zimbra -c "zmprov mcf +zimbraSSLExcludeCipherSuites SSL_DHE_DSS_WITH_DES_CBC_SHA" | |
#su - zimbra -c "zmprov mcf +zimbraSSLExcludeCipherSuites SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA" | |
#su - zimbra -c "zmprov mcf +zimbraSSLExcludeCipherSuites SSL_DHE_RSA_WITH_DES_CBC_SHA" | |
#su - zimbra -c "zmprov mcf +zimbraSSLExcludeCipherSuites SSL_RSA_EXPORT_WITH_DES40_CBC_SHA" | |
#su - zimbra -c "zmprov mcf +zimbraSSLExcludeCipherSuites SSL_RSA_EXPORT_WITH_RC4_40_MD5" | |
#su - zimbra -c "zmprov mcf +zimbraSSLExcludeCipherSuites SSL_RSA_WITH_DES_CBC_SHA" | |
# Stop the jetty or nginx service | |
su - zimbra -c "zmproxyctl stop" | |
su - zimbra -c "zmmailboxdctl stop" | |
# Get certificate | |
/usr/bin/letsencrypt certonly --standalone --agree-tos --email [email protected] -d ${MAIL_DOMAIN} | |
# Renew certificate | |
# /usr/bin/letsencrypt renew --agree-tos --email [email protected] | |
# Build the proper Intermediate CA plus Root CA | |
#wget -q https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem.txt -O /etc/letsencrypt/live/${MAIL_DOMAIN}/chain.pem | |
cat <<EOF >>/etc/letsencrypt/live/${MAIL_DOMAIN}/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 your commercial certificate | |
mkdir -p /opt/zimbra/ssl/letsencrypt | |
cat /etc/letsencrypt/live/${MAIL_DOMAIN}/cert.pem > /opt/zimbra/ssl/letsencrypt/cert.pem | |
cat /etc/letsencrypt/live/${MAIL_DOMAIN}/chain.pem > /opt/zimbra/ssl/letsencrypt/chain.pem | |
cat /etc/letsencrypt/live/${MAIL_DOMAIN}/fullchain.pem > /opt/zimbra/ssl/letsencrypt/fullchain.pem | |
cat /etc/letsencrypt/live/${MAIL_DOMAIN}/privkey.pem > /opt/zimbra/ssl/letsencrypt/privkey.pem | |
chown -R zimbra:zimbra /opt/zimbra/ssl/letsencrypt/ | |
#cd /opt/zimbra/ssl/letsencrypt/ | |
su - zimbra -c "/opt/zimbra/bin/zmcertmgr verifycrt comm /opt/zimbra/ssl/letsencrypt/privkey.pem /opt/zimbra/ssl/letsencrypt/cert.pem /opt/zimbra/ssl/letsencrypt/chain.pem" | |
# Backup Zimbra SSL directory | |
su - zimbra -c 'cp -a /opt/zimbra/ssl/zimbra /opt/zimbra/ssl/zimbra.$(date "+%Y%m%d")' | |
# Copy the private key under Zimbra SSL path | |
su - zimbra -c "cp /opt/zimbra/ssl/letsencrypt/privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.key" | |
# Final SSL deployment | |
su - zimbra -c "/opt/zimbra/bin/zmcertmgr deploycrt comm /opt/zimbra/ssl/letsencrypt/cert.pem /opt/zimbra/ssl/letsencrypt/chain.pem" | |
su - zimbra -c "zmcontrol restart" | |
exit 0 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
## Preparing all the variables like IP, Hostname, etc, all of them from the container | |
HOSTNAME=$(hostname -s) | |
DOMAIN=$(hostname -d) | |
RANDOMHAM=$(date +%s|sha256sum|base64|head -c 10) | |
RANDOMSPAM=$(date +%s|sha256sum|base64|head -c 10) | |
RANDOMVIRUS=$(date +%s|sha256sum|base64|head -c 10) | |
TZ=$(cat /etc/timezone) | |
PUBLICIP4=$(curl http://v4.ipv6-test.com/api/myip.php) | |
PUBLICIP6=$(curl http://v6.ipv6-test.com/api/myip.php) | |
CONTAINERIP4=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/') | |
CONTAINERIP6=$(ip addr | grep 'state UP' -A4 | tail -n1 | awk '{print $2}' | cut -f1 -d'/') | |
CIDR4=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f2 -d'/') | |
CIDR6=$(ip addr | grep 'state UP' -A4 | tail -n1 | awk '{print $2}' | cut -f2 -d'/') | |
if [ "${PUBLICIP6}" == "" ]; then | |
PUBLICIP6="::1" | |
fi | |
if [ "${PUBLICIP4}" == "${CONTAINERIP4}" ]; then | |
MTA="127.0.0.0/8 [::1]/128 $PUBLICIP4/32 [$PUBLICIP6]/128" | |
else | |
MTA="127.0.0.0/8 [::1]/128 $CONTAINERIP4/$CIDR4 [$CONTAINERIP6]/$CIDR6 $PUBLICIP4/32 [$PUBLICIP6]/128" | |
fi | |
if [ "$1" == "" ]; then | |
PASSWORD=$(date +%s|sha256sum|base64|head -c 10) | |
else | |
PASSWORD="$1" | |
fi | |
# Require packages | |
sudo apt-get update && sudo apt-get -y dist-upgrade | |
sudo apt-get install -y build-essential wget dnsutils netcat-openbsd sudo libidn11 libpcre3 libgmp10 libexpat1 libstdc++6 libperl5.26 libaio1 resolvconf unzip pax sysstat sqlite libreoffice-core "libreoffice-l10n-*" fonts-vlgothic | |
#Install a DNS Server | |
if [ "$2" == "bind" ]; then | |
sudo apt-get install -y bind9 bind9utils bind9-doc | |
echo "Installing Bind DNS Server" | |
sed "s/-u/-4 -u/g" /etc/default/bind9 > /etc/default/bind9.new | |
mv /etc/default/bind9.new /etc/default/bind9 | |
rm /etc/bind/named.conf.options | |
cat <<EOF >>/etc/bind/named.conf.options | |
options { | |
directory "/var/cache/bind"; | |
listen-on { $CONTAINERIP4; }; # ns1 private IP address - listen on private network only | |
allow-transfer { none; }; # disable zone transfers by default | |
forwarders { | |
1.1.1.2; | |
8.8.8.8; | |
}; | |
auth-nxdomain no; # conform to RFC1035 | |
#listen-on-v6 { any; }; | |
}; | |
EOF | |
cat <<EOF >>/etc/bind/named.conf.local | |
zone "$DOMAIN" { | |
type master; | |
file "/etc/bind/db.$DOMAIN"; | |
}; | |
EOF | |
touch "/etc/bind/db.${DOMAIN}" | |
cat <<EOF >"/etc/bind/db.${DOMAIN}" | |
\$TTL 604800 | |
@ IN SOA ns1.$DOMAIN. root.localhost. ( | |
2 ; Serial | |
604800 ; Refresh | |
86400 ; Retry | |
2419200 ; Expire | |
604800 ) ; Negative Cache TTL | |
; | |
@ IN NS ns1.$DOMAIN. | |
@ IN A $CONTAINERIP4 | |
@ IN MX 10 $HOSTNAME.$DOMAIN. | |
$HOSTNAME IN A $CONTAINERIP4 | |
ns1 IN A $CONTAINERIP4 | |
mail IN A $CONTAINERIP4 | |
pop3 IN A $CONTAINERIP4 | |
imap IN A $CONTAINERIP4 | |
imap4 IN A $CONTAINERIP4 | |
smtp IN A $CONTAINERIP4 | |
EOF | |
sudo service bind9 restart | |
fi | |
if [ "$2" == "dnsmasq" ]; then | |
echo "Installing dnsmasq DNS Server" | |
sudo apt-get install -y dnsmasq | |
echo "Configuring DNS Server" | |
mv /etc/dnsmasq.conf /etc/dnsmasq.conf.old | |
cat <<EOF >>/etc/dnsmasq.conf | |
server=1.1.1.2 | |
server=8.8.8.8 | |
listen-address=127.0.0.1 | |
domain=$DOMAIN | |
mx-host=$DOMAIN,$HOSTNAME.$DOMAIN,0 | |
address=/$HOSTNAME.$DOMAIN/$CONTAINERIP4 | |
EOF | |
sudo service dnsmasq restart | |
else | |
echo "Installing dnsmasq DNS Server" | |
sudo apt-get install -y dnsmasq | |
echo "Configuring DNS Server" | |
mv /etc/dnsmasq.conf /etc/dnsmasq.conf.old | |
cat <<EOF >>/etc/dnsmasq.conf | |
server=1.1.1.2 | |
server=8.8.8.8 | |
listen-address=127.0.0.1 | |
domain=$DOMAIN | |
mx-host=$DOMAIN,$HOSTNAME.$DOMAIN,0 | |
address=/$HOSTNAME.$DOMAIN/$CONTAINERIP4 | |
EOF | |
sudo service dnsmasq restart | |
fi | |
##Preparing the config files to inject | |
echo "Creating the Scripts files" | |
mkdir -p /tmp/zcs | |
cd /tmp/zcs || exit 1 | |
touch /tmp/zcs/installZimbraScript | |
cat <<EOF >/tmp/zcs/installZimbraScript | |
AVDOMAIN="$DOMAIN" | |
AVUSER="admin@$DOMAIN" | |
CREATEADMIN="admin@$DOMAIN" | |
CREATEDOMAIN="$DOMAIN" | |
DOCREATEADMIN="yes" | |
DOCREATEDOMAIN="yes" | |
DOTRAINSA="yes" | |
EXPANDMENU="no" | |
HOSTNAME="$HOSTNAME.$DOMAIN" | |
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" | |
LDAPBESSEARCHSET="set" | |
LDAPHOST="$HOSTNAME.$DOMAIN" | |
LDAPPORT="389" | |
LDAPREPLICATIONTYPE="master" | |
LDAPSERVERID="2" | |
MAILBOXDMEMORYPERCENT="20" | |
MAILPROXY="TRUE" | |
MODE="https" | |
MYSQLMEMORYPERCENT="20" | |
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@$DOMAIN" | |
SMTPHOST="$HOSTNAME.$DOMAIN" | |
SMTPNOTIFY="yes" | |
SMTPSOURCE="admin@$DOMAIN" | |
SNMPNOTIFY="yes" | |
SNMPTRAPHOST="$HOSTNAME.$DOMAIN" | |
SPELLURL="http://$HOSTNAME.$DOMAIN:7780/aspell.php" | |
STARTSERVERS="yes" | |
SYSTEMMEMORY="1.0" | |
TRAINSAHAM="ham.$RANDOMHAM@$DOMAIN" | |
TRAINSASPAM="spam.$RANDOMSPAM@$DOMAIN" | |
UIWEBAPPS="yes" | |
UPGRADE="yes" | |
USEEPHEMERALSTORE="no" | |
USESPELL="yes" | |
VERSIONUPDATECHECKS="TRUE" | |
VIRUSQUARANTINE="virus-quarantine.$RANDOMVIRUS@$DOMAIN" | |
ZIMBRA_REQ_SECURITY="yes" | |
ldap_bes_searcher_password="$PASSWORD" | |
ldap_dit_base_dn_config="cn=zimbra" | |
ldap_nginx_password="$PASSWORD" | |
mailboxd_directory="/opt/zimbra/mailboxd" | |
mailboxd_keystore="/opt/zimbra/mailboxd/etc/keystore" | |
mailboxd_keystore_password="$PASSWORD" | |
mailboxd_server="jetty" | |
mailboxd_truststore="/opt/zimbra/common/lib/jvm/java/jre/lib/security/cacerts" | |
mailboxd_truststore_password="changeit" | |
postfix_mail_owner="postfix" | |
postfix_setgid_group="postdrop" | |
ssl_default_digest="sha256" | |
zimbraFeatureBriefcasesEnabled="Enabled" | |
zimbraFeatureTasksEnabled="Enabled" | |
zimbraIPMode="both" | |
zimbraMailProxy="TRUE" | |
zimbraMtaMyNetworks="$MTA" | |
zimbraPrefTimeZoneId="$TZ" | |
zimbraReverseProxyLookupTarget="TRUE" | |
zimbraVersionCheckNotificationEmail="admin@$DOMAIN" | |
zimbraVersionCheckNotificationEmailFrom="admin@$DOMAIN" | |
zimbraVersionCheckSendNotifications="TRUE" | |
zimbraWebProxy="TRUE" | |
zimbra_ldap_userdn="uid=zimbra,cn=admins,cn=zimbra" | |
zimbra_require_interprocess_security="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 | |
n | |
n | |
n | |
y | |
EOF | |
# Download from https://www.zimbra.com/downloads/zimbra-collaboration-open-source/ | |
if [[ $(lsb_release -rs) == "18.04" ]]; then | |
echo "Downloading Zimbra Collaboration 8.8 for Ubuntu 18.04" | |
wget https://files.zimbra.com/downloads/8.8.15_GA/zcs-8.8.15_GA_3869.UBUNTU18_64.20190918004220.tgz -O zcs-8.8_GA.tgz | |
tar xzvf zcs-* | |
echo "Installing Zimbra Collaboration just the Software" | |
cd /tmp/zcs/zcs-* && ./install.sh -s < /tmp/zcs/installZimbra-keystrokes | |
echo "Installing Zimbra Collaboration injecting the configuration" | |
/opt/zimbra/libexec/zmsetup.pl -c /tmp/zcs/installZimbraScript | |
fi | |
rm -rf /tmp/zcs | |
su - zimbra -c 'zmupdateauthkeys' | |
su - zimbra -c 'zmcontrol restart' | |
echo "You can access now to your Zimbra Collaboration Server" | |
echo "Admin Console: https://${CONTAINERIP4}:7071" | |
echo "Web Client: https://${CONTAINERIP4}" | |
echo "Password: ${PASSWORD}" | |
su - zimbra -c "/opt/zimbra/libexec/zmdkimkeyutil -a -d $DOMAIN" | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment