Artikel ini akan membahas mengenai prosedur migrasi akun dan mailbox dari satu server zimbra ke server zimbra lainnya. Yang dibahas pada artikel ini adalah perpindahan server yang terpisah secara fisik ataupun VM namun masih dalam domain yang sama.
Perpindahan server ini dapat disebabkan oleh beberapa hal, seperti : Storage hampir penuh, server email dipindahkan secara fisik ke hosting yang baru, pemisahan server antara domain dan subdomain, atau upgrade Zimbra Version (Zimbra 8.8.15 LTS akan mengalami EOL pada 31 Desember 2023).
Secara umum, step yang dijalankan adalah :
- Instalasi Zimbra di server yang baru
- Backup seluruh data dalam zimbra server (domain, akun, mailbox)
- Copy data backup ke server baru
- Restore backup di server baru
Step 1: Install Zimbra 8.8.15 pada Ubuntu 20.04
Instalasi Zimbra dapat dilakukan dengan mengikuti artikel saya pada laman Instalasi Zimbra 8.8.15 pada Ubuntu 20.04 – BayuSky’s Virtual Labs (bayuskylabs.com)
Step 2: Backup data pada server lama
Step 2 dikerjakan pada server lama (server berjalan) dan sebelum memulai, pastikan dahulu kapasitas server agar bisa memuat seluruh data backup. Dalam step 2 dan 4 (nantinya) ada beberapa langkah yang bisa di-skip sesuai dengan kondisi server instalasi, perhatikan quote dalam setiap langkahnya
1. Buat directory untuk menyimpan backup
sudo mkdir /backups/zmigrate
sudo chown zimbra:zimbra /backups/zmigrate
sudo su - zimbra
Semua perintah akan dijalankan melalui user zimbra, jadi pastikan directory ownership memang sudah zimbra.
2. Backup semua domain
Cari semua domain yang terdaftar lalu buat file domains.txt yang berisi domain tersebut
zimbra@zimbra:~$ cd /backups/zmigrate
zimbra@zimbra:/backups/zmigrate$ zmprov gad > domains.txt
zimbra@zimbra:/backups/zmigrate$ cat domains.txt
example.com
student.example.com
zimbra@zimbra:/backups/zmigrate$
Jika dalam instalasi Zimbra baru sudah ada domain, dan sama dengan server lama, langkah ini bisa di-skip
3. Backup akun admin
Umumnya hanya ada satu akun admin, namun bisa saja dalam satu server terdapat beberapa akun admin. Daftar akun admin ini disimpan pada file admins.txt
zimbra@zimbra:/backups/zmigrate$ zmprov gaaa > admins.txt
zimbra@zimbra:/backups/zmigrate$ cat admins.txt
admin@example.com
pengelola.akun@example.com
zimbra@zimbra:/backups/zmigrate$
Jika memang hanya ada satu akun admin, langkah ini bisa di-skip
4. Backup semua akun email
Backup semua akun email pada file emails.txt
zimbra@zimbra:/backups/zmigrate$ zmprov -l gaa >emails.txt
zimbra@zimbra:/backups/zmigrate$ cat emails.txt
bambang.pamungkas@example.com
galsync@example.com
ham.4kgsqpcw@example.com
robby.darwis@example.com
spam.qcp0zf30@example.com
virus-quarantine.vei2fqkwtk@example.com
kurnia.meiga@student.example.com
andik.vermansyah@student.example.com
zimbra@zimbra:/backups/zmigrate$
hapus akun galsync, virus-quarantine, spam dan ham training dari emails.txt. Karena akun-akun tersebut telah otomatis dibuat di Zimbra yang baru.
5. Backup semua distribution list
Backup dalam file distributionlist.txt
zimbra@zimbra:~$ zmprov gadl > /backups/zmigrate/distributionlist.txt
zimbra@zimbra:~$ cat /backups/zmigrate/distributionlist.txt
it.team@example.com
zimbra@zimbra:~$
dan semua member di dalam distribution list
zimbra@zimbra:~$ mkdir /backups/zmigrate/distributionlist_members
zimbra@zimbra:~$ for i in `cat /backups/zmigrate/distributionlist.txt`; do zmprov gdlm $i > /backups/zmigrate/distributionlist_members/$i.txt ;echo "$i"; done
zimbra@zimbra:~$
6. Backup user password
Backup semua password user yang ada pada file emails.txt
zimbra@zimbra:/backups/zmigrate$ mkdir userpass
zimbra@zimbra:/backups/zmigrate$ for i in `cat emails.txt`; do zmprov -l ga $i userPassword | grep userPassword: | awk '{ print $2}' > userpass/$i.shadow; done
zimbra@zimbra:/backups/zmigrate$
Jika menggunakan external AD/LDAP, langkah ini dan restore-nya bisa di-skip
7. Backup semua email forwarding
Backup dalam directory forwarding berdasarkan list dalam emails.txt
zimbra@zimbra:/backups/zmigrate$ mkdir forwarding
zimbra@zimbra:/backups/zmigrate$ for i in `cat emails.txt`; do zmprov -l ga $i zimbraPrefMailForwardingAddress | grep zimbraPrefMailForwardingAddress: | awk '{ print $2}' > forwarding/$i.forward; done
zimbra@zimbra:/backups/zmigrate$
Mungkin hanya beberapa email yang memiliki alamat forwarding, oleh karena itu, hapus yang kosong.
zimbra@zimbra:/backups/zmigrate$ find forwarding/ -type f -empty | xargs -n1 rm -v
8. Backup user data (username, first name, last name, cn)
Backup dalam directory userdata berdasarkan list pada emails.txt
zimbra@zimbra:/backups/zmigrate$ mkdir userdata
zimbra@zimbra:/backups/zmigrate$ for i in `cat emails.txt`; do zmprov ga $i | grep -i Name: > userdata/$i.txt ; done
9. Backup mailbox
Backup semua isi mailbox milik user dalam list emails.txt. Setiap akun akan ada file backup berekstensi .tgz
.
zimbra@zimbra:/backups/zmigrate$ for email in `cat /backups/zmigrate/emails.txt`; do zmmailbox -z -m $email getRestURL '/?fmt=tgz' > $email.tgz ; echo $email ; done
bambang.pamungkas@example.com
robby.darwis@example.com
kurnia.meiga@student.example.com
andik.vermansyah@student.example.com
zimbra@zimbra:/backups/zmigrate$
File .tgz
ini berisi :
- Contacts
- Calendars
- Briefcase
- Tasks
- Searches
- Tags
- Folders dan termasuk subfolders, kecuali Junk dan Trash.
Eksekusi perintah ini memakan waktu, jadi bisa dibiarkan saja sambil menunggu selesai. Pengalaman pribadi untuk 600-an akun butuh waktu +-7 jam.
10. Backup alias
Backup semua alias berdasarkan daftar pada emails.txt
zimbra@zimbra:/backups/zmigrate$ mkdir -p alias/
zimbra@zimbra:/backups/zmigrate$ for i in `cat emails.txt`; do zmprov ga $i | grep zimbraMailAlias |awk '{print $2}' > alias/$i.txt ;echo $i ;done
bambang@example.com
robby@example.com
zimbra@zimbra:/backups/zmigrate$
Mungkin hanya beberapa email yang ada aliasnya, oleh karena itu, hapus yang kosong.
zimbra@zimbra:/backups/zmigrate$ find alias/ -type f -empty | xargs -n1 rm -v
11. Backup Signature (Optional)
Gunakan scripts di bawah ini untuk mem-backup signature
#!/bin/bash
mkdir signature
for i in `cat emails.txt`; do
zmprov ga $i zimbraPrefMailSignatureHTML > /tmp/signature;
sed -i -e "1d" /tmp/signature ;
sed 's/zimbraPrefMailSignatureHTML: //g' /tmp/signature > signatures/$i.signature ;
rm -rf /tmp/signature;
`zmprov ga $i zimbraSignatureName > /tmp/name` ;
sed -i -e "1d" /tmp/name ;
sed 's/zimbraSignatureName: //g' /tmp/name > signatures/$i.name ;
rm -rf /tmp/name ;
done
12. Backup email filter (optional)
Untuk mem-backup email filter, gunakan script ini
#!/bin/bash
# Backup filters of all email accounts
mkdir filter/
for i in `cat emails.txt`; do
zmprov ga $i zimbraMailSieveScript > /tmp/filter
sed -i -e "1d" /tmp/filter
sed 's/zimbraMailSieveScript: //g' /tmp/filter > filter/$i.filter
rm -f /tmp/filter
echo "Filter downloaded for .... $i"
done
Step 3 : Copy backup ke server baru
Setelah semua data selesai di backup, copy semua backup data ke server baru dengan menggunakan rsync. Data yang akan dipindahkan adalah :
- /backups/zmigrate – directory backup utama
- /backups/zmigrate/domains.txt – berisi nama domain
- /backups/zmigrate/emails.txt – berisi daftar akun email
- /backups/zmigrate/distributionlist.txt – berisi daftar distribution list
- /backups/zmigrate/distributionlist_members – berisi member dari ditribution list
- /backups/zmigrate/userpass – berisi password yang terenkripsi untuk semua akun email
- /backups/zmigrate/userdata – berisi informasi user setiap akun email
- /backups/zmigrate/forwarding – berisi alamat forwarding untuk akun email
- /backups/zmigrate/alias – berisi alias untuk akun email
Langkah yang dilakukan adalah
1. Enable root SSH pada server lama
sudo nano /etc/ssh/sshd_config
edit pada line ini
PermitRootLogin yes
restart sshd service
service sshd restart
atau
systemctl restart sshd
2. Buat directory backups pada server baru
sudo mkdir /backups
3. Rsync dari server lama
copy seluruh backup data menggunakan rsync
root@newserver# rsync -avp -e 'ssh -p 22' root@old-server-ip:/backups/zmigrate /backups/
Step 4: Restore data di server baru
Setelah proses rsync selesai, saatnya melakukan restore data di server baru. Semua proses restore dijalankan oleh user zimbra.
sudo su - zimbra
cd /backups/zmigrate
Langkah yang dijalankan adalah langkah yang harus dikerjakan berurutan, jadi ikuti urutan yang ditulis di sini. Jika ingin melakukan verifikasi hasil setiap langkah, bisa dilakukan melalui Zimbra Admin Panel melalui https://ip_zimbra_or_fqdn:7071
1. Restore semua domain
Restore seluruh domain yang telah ada dalam file domains.txt
[zimbra@zimbra zmigrate]$ for i in `cat /backups/zmigrate/domains.txt `; do zmprov cd $i zimbraAuthMech zimbra ;echo $i ;done
2c86f244-de9d-4b7c-8e22-2246a8256219
example.com
dbf75058-d85e-4d60-8b69-1f148a456eb6
student.example.com
ee90ffa2-505d-449f-82fd-129acb21cb5e
2. Buat akun dan restore seluruh password
Langkah ini ada 2 opsi yaitu jika otentikasi akun menggunakan Zimbra LDAP atau otentikasi via external LDAP. Proses restore diawali dengan membuat script createaccount.sh
sudo nano /backups/zmigrate/createaccount.sh
Opsi 1 : Isi script jika otentikasi via internal LDAP Zimbra
#!/bin/bash
#Script for creating the email accounts with internal LDAP auth
USERPASS="/backups/zmigrate/userpass"
USERDDATA="/backups/zmigrate/userdata"
USERS="/backups/zmigrate/emails.txt"
for i in `cat $USERS`
do
givenName=$(grep givenName: $USERDDATA/$i.txt | cut -d ":" -f2)
displayName=$(grep displayName: $USERDDATA/$i.txt | cut -d ":" -f2)
shadowpass=$(cat $USERPASS/$i.shadow)
tmpPass="CHANGEme"
zmprov ca $i CHANGEme cn "$givenName" displayName "$displayName" givenName "$givenName"
zmprov ma $i userPassword "$shadowpass"
done
Opsi 2 : Isi script jika menggunakan external LDAP
#!/bin/bash
#Script for creating the email accounts using external LDAP
USERDDATA="/backups/zmigrate/userdata"
USERS="/backups/zmigrate/emails.txt"
for i in `cat $USERS`
do
givenName=$(grep givenName: $USERDDATA/$i.txt | cut -d ":" -f2)
displayName=$(grep displayName: $USERDDATA/$i.txt | cut -d ":" -f2)
zmprov ca $i '' cn "$givenName" displayName "$displayName" givenName "$givenName"
done
atur agar script dapat di-eksekusi
sudo chmod +x /backups/zmigrate/createaccount.sh
eksekusi sebagai zimbra user
sudo su zimbra
./backups/zmigrate/createaccount.sh
Langkah selanjutnya banyak yang menggunakan script, jadikan proses pembuatan dan eksekusi script pada langkah ini sebagai contoh. Jalankan seluruh script ketika berada pada directory
/backups/zmigrate
karena menggunakan emails.txt sebagai sumber data.
3. Restore mailbox data
Langkah ini untuk me-restore mailbox data untuk setiap account pada emails.txt. Proses ini cukup memakan waktu, untuk 600-an akun membutuhkan waktu +-6 jam.
[zimbra@zimbra zmigrate]$ for i in `cat /backups/zmigrate/emails.txt`; do zmmailbox -z -m $i postRestURL "/?fmt=tgz&resolve=skip" /backups/zmigrate/$i.tgz ; echo "$i -- finished "; done
bambang.pamungkas@example.com -- finished
robby.darwis@example.com -- finished
Jika ada error Read Time out, tambahkan parameter
-t 0
pada perintah bagian ini :do zmmailbox -z -m $i -t 0
4. Restore distribution list
Selanjutnya restore distribution list
[zimbra@zimbra zmigrate]$ for i in `cat distributionlist.txt`; do zmprov cdl $i ; echo "$i -- done " ; done
2a852fd8-6e66-426e-a76d-15192536042a
it.team@example.com -- done
add member distribution list melalui script ini addmember.sh
#!/bin/bash
# add all memebers to each of these distribution lists
for i in `cat distributionlist.txt`
do
for j in `grep -v '#' distributionlist_members/$i.txt |grep '@'`
do
zmprov adlm $i $j
echo " $j member has been added to list $i"
done
done
5. Restore Alias
Restore alias menggunakan script restorealias.sh
#!/bin/bash
for i in `cat /backups/zmigrate/emails.txt`
do
if [ -f "alias/$i.txt" ]; then
for j in `grep '@' /backups/zmigrate/alias/$i.txt`
do
zmprov aaa $i $j
echo "$i HAS ALIAS $j --- Restored"
done
fi
done
6. Restore Signatures
Restore semua signature menggunakan script restoresign.sh
#!/bin/bash
for i in `cat emails.txt`; do
zmprov ma $i zimbraSignatureName "`cat signatures/$i.name`";
zmprov ma $i zimbraPrefMailSignatureHTML "`cat signatures/$i.signature`";
zmprov ga $i zimbraSignatureId > /tmp/firmaid; sed -i -e "1d" /tmp/firmaid;
firmaid=`sed 's/zimbraSignatureId: //g' /tmp/firmaid`;
zmprov ma $i zimbraPrefDefaultSignatureId "$firmaid";
zmprov ma $i zimbraPrefForwardReplySignatureId "$firmaid";
rm -rf /tmp/firmaid;
echo $i "done!";
done
7. Restore email filter
Restore email filter menggunakan script ini restorefilter.sh
#!/bin/bash
for i in `cat emails.txt`; do
zmprov ma $i zimbraMailSieveScript "`cat filter/$i.filter`";
echo "Filter Restore for account ... $i";
done
8. Restore mail forwarding
Restore mail forwarding menggunakan script restorefwd.sh
#!/bin/bash
for i in `cat emails.txt`; do
zmprov ma $i zimbraPrefMailForwardingAddress "`cat forwarding/$i.forward`";
echo "Forward Restore for account ... $i";
done
Kesimpulan
Sekarang seluruh akun telah berhasil dipindahkan ke server baru. Segera lakukan penyesuaian agar server baru bisa beroperasi secepat mungkin, terutama untuk DNS records, DKIM, SPF, DMARC, dan SSL. Bisa menggunakan artikel berikut sebagai referensi.
Impelementasi DKIM, SPF, dan DMARC pada Zimbra – BayuSky’s Virtual Labs (bayuskylabs.com)
Implementasi SSL pada Zimbra – BayuSky’s Virtual Labs (bayuskylabs.com)
Keseluruhan proses migrasi, termasuk instalasi Zimbra baru, membutuhkan waktu 17 jam 41 menit seperti screenshot recording saya di bawah ini. Server yang saya migrasi memiliki 600++ akun aktif, sehingga memakan waktu saat proses backup dan restore mailbox.
Sumber
Backing up and restoring Zimbra (Open Source Version) – Zimbra :: Tech Center
Zimbra Open Source Server Migration and Account Transfer (habibza.in)
It’s great you improved Habibza.in’s tutorial.
5. cat /backups/zmigrate/distributinloist.txt
should read
cat /backups/zmigrate/distributionlist.txt
Yes, his tutorial is a life saver, I just add a little something according to my experience and my configuration. Oh and thanks for the correction.