Karena aku sekarang ditempatkan di bagian on premise products, jadi aku perlu ngulik lebih, terutama tentang Zimbra Mail Server yang lokasinya ada di klien (namanya juga on premise). Salah satu skill yang perlu dikuasai adalah migrasi mail server. Misalnya dari server dengan OS lama ke server dengan hardware dan OS yang lebih baru, atau skenario lainnya.

Aku baca salah satu artikel di internet dan aku coba tulis di sini sebagai catatanku juga.

Persiapan Migrasi

Ada beberapa hal yang perlu dipersiapkan, baik di server lama maupun di server baru. Di server lama, kita perlu akses root (bisa via SSH), info login akun admin Zimbra, dan storage yang cukup untuk file backup.
image host
Di server baru juga gak jauh beda. Kita perlu siapkan server dengan OS dan Zimbra yang fresh, konfigurasi (seperti hostname) yang sama dengan server lama, akses root via SSH, dan juga ruang penyimpanan untuk hasil migrasi.

Lanjut ke langkah selanjutnya:

  • Atur SSH Key. Konfigurasikan SSH Key dari akun root server baru agar bisa masuk ke akun root server lama tanpa kata sandi.
  • Turunkan TTL MX. Ubah nilai TTL pada MX record domain menjadi 500 detik agar proses perpindahan IP domain nanti berjalan cepat.
  • Agendakan di luar jam kerja.
  • Buat folder cadangan. Jalankan perintah ini di server lama dan server baru menggunakan user root untuk menyiapkan folder khusus:
      mkdir /backups/zmigrate
      chown zimbra.zimbra /backups/zmigrate
      su - zimbra
    

    Catatan: Untuk perintah yang berkaitan dengan Zimbra, gunakan user: zimbra untuk menghindari kendala hak akses.

Proses Backup di Server Lama

Dari server lama, masuk ke direktori /backups/zmigrate dan kumpulkan data-data seperti:

  • Daftar domain: zmprov gad > domains.txt. Bersihkan nama domain utama milik hostname dari file ini karena server baru sudah otomatis membuatnya saat instalasi awal.
  • Daftar akun admin: zmprov gaaa > admins.txt.
  • Daftar akun (semua): zmprov -l gaa > emails.txt. Akun sistem seperti spam_xxx, virus_xxx, ham_xxx, galsync_xxx dapat dikecualikan dari daftar.
  • Distribution lists (DL): zmprov gadl > /backups/zmigrate/distlist.txt
  • Mailing lists:
      mkdir /backups/zmigrate/distributinlist_members
      for i in `cat /backups/zmigrate/distributinlist.txt`; do zmprov gdlm $i > /backups/zmigrate/distributinlist_members/$i.txt ; echo "$i"; done
    
  • Password:
      mkdir userpass
      for i in `cat emails.txt`; do zmprov -l ga $i userPassword | grep userPassword: | awk '{ print $2}' > userpass/$i.shadow; done
    
  • Info akun: Seperti display & given name:
      mkdir userdata
      for i in `cat emails.txt`; do zmprov ga $i | grep -i Name: > userdata/$i.txt ; done
    
  • Isi inbox (data email): for email incat /backups/zmigrate/emails.txt; do zmmailbox -z -m $email getRestURL '/?fmt=tgz' > $email.tgz ; echo $email ; done
  • Alias:
      mkdir -p alias/
      for i in `cat emails.txt`; do zmprov ga $i | grep zimbraMailAlias | awk '{print $2}' > alias/$i.txt ; echo $i ; done
      find alias/ -type f -empty | xargs -n1 rm -v
      zimbra@zimbra:/backups/zmigrate$ find alias/ -type f -empty | xargs -n1 rm -v // untuk hapus file kosong tanpa alias
    
  • Signatures:
      #!/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
    
  • Filter:
      #!/bin/bash
      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
    

Kirim Data ke Server Baru

Proses ini perlu menggunakan screen agar bisa berjalan di latar belakang dan mengurangi risiko proses transfer data berhenti/gagal saat komputer kehilangan koneksi ke server. Proses migrasi/kirim data ini menggunakan rsync.

rsync -avp -e 'ssh -p 22' root@ip-server-lama:/backups/zmigrate /backups/

Restore di Server Baru

Masuk sebagai user: zimbra dan masuk ke direktori /backups/zmigrate.

  • Restore domain: for i incat /backups/zmigrate/domains.txt ; do zmprov cd $i zimbraAuthMech zimbra ; echo $i ; done
  • Pembuatan akun & pass:
      # Buat skrip bernama createacct.sh dan jalankan
      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)
    zmprov ca $i CHANGEme cn "$givenName" displayName "$displayName" givenName "$givenName" 
    zmprov ma $i userPassword "$shadowpass"
      done
    
  • Restore isi email: for i incat /backups/zmigrate/emails.txt; do zmmailbox -z -m $i postRestURL "/?fmt=tgz&resolve=skip" /backups/zmigrate/$i.tgz ; echo "$i -- finished "; done .
  • Restore DL:
      [zimbra@zimbra zmigrate]$ cat restoredist.sh 
      #!/bin/bash
      # add all memebers to each of these distribution lists
      for i in `cat distributinlist.txt`
      do
      for j in `grep -v '#' distributinlist_members/$i.txt |grep '@'` 
      do
      zmprov adlm $i $j
      echo " $j member has been added to list $i"
      done
    
      done
    
  • Restore Alias:
          #!/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
    
  • Restore Signatures:
          #!/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
    
  • Restore Fiters:
      #!/bin/bash
      for i in `cat emails.txt`; do
          zmprov ma  $i zimbraMailSieveScript "`cat filter/$i.filter`";
          echo "Filter Restore for account ... $i"; 
    
      done
    

Finalisasi

image host

  • Matikan service Zimbra di server lama.
  • Arahkan IP publik di DNS (A & MX record) ke IP server baru.
  • Testing kirim beberapa email untuk memastikan proses kirim-terima email bekerja dengan normal.
  • Amankan server baru dengan memasang Sertifikat SSL dan mengonfigurasi firewall.

Tulisan kali ini sampai di sini ya. Sampai jumpa. Bye.

By Zaidan

Leave a Reply

Your email address will not be published. Required fields are marked *