Blog AWS Indonesia

Mengotomasi Deployment Mail Server Open-Source di AWS

Banyak pengguna AWS memiliki kebutuhan untuk hosting email server mereka sendiri dan ada yang memilih untuk mengoperasikan mail server menggunakan managed solution (contohnya Amazon WorkMail). Tentu ada kelebihan masing-masing untuk kedua pendekatan tersebut, motivasi untuk mengelola mail server sendiri diantaranya:

  • kontrol dan kepemilikan penuh
  • butuh konfigurasi khusus
  • membatasi akses ke network internal atau ketika terhubung via VPN

Untuk mendapatkan itu semua, pengguna biasanya bergantung pada mail server open-source karena fleksibilitas dan lisensi yang bebas dibandingkan dengan solusi seperti Microsoft Exchange. Tetapi, menjalankan dan mengelola mail server open-source terbilang rumit karena beberapa komponen perlu dikonfigurasi dan diintegrasikan agar dapat berjalan sesuai harapan. Sebagai contoh, untuk membuat sistem email yang fungsional, Anda perlu mengkombinasikan beberapa paket software untuk mengirim dan menerima email, mengakses dan mengelola inbox, memfilter spam, mengelola user dll. Karena itu, ini cukup kompleks dan rawan error untuk dikonfigurasi dan dikelola. Troubleshooting masalah biasanya memerlukan orang yang expert untuk masalah tersebut. Karena itu, beberapa proyek open-source hadir untuk memudahkan instalasi dari mail server open-source, contohnya seperti Mail-in-a-Box, Docker Mailserver, Mailu, Modoboa, iRedMail, dan beberapa lainnya.

Pada artikel ini, kita akan mengambil satu langkah kedepan dengan menambahkan otomasi untuk infrastruktur dan integrasi dengan layanan AWS sehingga kita bisa melakukan otomasi penuh untuk deployment mail server open-source di AWS. Kita akan membuat sebuah instance mail server, dengan kompleksitas dan biaya yang minimal, tetapi tetap memiliki ketahanan yang baik dengan menerapkan incremental backup dan otomasi. Karena itu, solusi ini cocok diterapkan untuk organisasi skala kecil ke menengah yang perlu menjalankan mail server open-source tetapi tidak ingin terlalu berurusan dengan kompleksitas operasional.

Solusi pada artikel ini menggunakan AWS CloudFormation template untuk secara otomatis membuat dan mengkonfigurasi Amazon Elastic Compute Cloud (Amazon EC2) instance yang menjalankan Mail-in-a-Box, yang memiliki fitur seperti email, webmail, kalender, kontak, dan file sharing, ini memberikan fungsionalitas yang serupa yang ditemukan pada layanan SaaS atau layanan berbayar populer. Semua sumber daya untuk mereproduksi solusi ini dapat dilihat pada GitHub repositori dibawah lisensi open-source (MIT).

Amazon Simple Storage Service (Amazon S3) digunakan untuk menyimpan user data dan untuk menyimpan incremental backup dari aplikasi. Disamping memiliki ketahanan tinggi (high resiliency), strategi backup ini memiliki pendekatan immutable pada infrastruktur, dimana deployment baru dapat dilakukan untuk meng-update dan melakukan recover dari kegagalan sistem yang secara drastis menyederhanakan operasional dan meningkatkan keamanan.

Kita juga memiliki pilihan integrasi dengan Amazon Simple Email Service (Amazon SES) sehingga pengguna dapat me-relay email mereka melalui server AWS yang reputasinya bagus sehingga email yang dikirim dapat diterima oleh server pihak ketiga. Semua ini menjadikan pengguna dapat men-deploy mail server open-source dalam hitungan menit dari AWS Management Console, atau me-restore server yang sudah ada dari sebuah backup Amazon S3 untuk proses immutable upgrade, migrasi, dan recovery.

Gambaran Umum

Diagram berikut ini menunjukkan gambaran umum dari arsitektur dan interaksi antara pengguna dan layanan AWS lainnya.

Diagram implementasi mail server open-source di AWS

Setelah menyiapkan akun AWS dan lingkungannya, administrator men-deploy menggunakan AWS CloudFormation template (1.). Secara opsional, backup dari Amazon S3 dan dimasukkan ketika deployment untuk melakukan restore dari instalasi sebelumnya (1a.). Admin kemudian melanjutkan konfigurasi dengan mengakses web UI (2.) seperti, membuat sertifikat TLS dan membuat pengguna baru. Setelah Admin selesai membuat akun pengguna, pengguna dapat mengakses layanan lewat web (3.) untuk mengirim email, mengelola inbox, mengakses kalender dan kontak dan file sharing. Sebagai pilihan, email keluar dapat di-relay melalui Amazon SES (3a.) dan data pengguna disimpan pada bucket Amazon S3 terpisah (3b.). Lebih jauh lagi, solusi ini dikonfigurasi secara otomatis dan secara periodik untuk membuat incremental backup dan menyimpannya di S3 bucket.

Selain paket popular pada mail server open-source seperti Postfix untuk SMTP dan Dovecot untuk IMAP, Mail-in-a-box juga mengintegrasikan Nextcloud untuk kalender, kontak, dan file sharing. Perlu dicatat, kapabilitas Nextcloud pada konteks ini terbatas. Ia ditujukan untuk digunakan secara berdampingan dengan fungsionalitas mail server untuk mengelola kalender dan kontak dan juga file sharing ringan (seperti berbagi file via link yang mana file tersebut terlalu besar untuk attachment email). Jika Anda mencari solusi Nextcloud di AWS yang lebih lengkap, dapat dikustomisasi dan scalable, coba lihat AWS Sample berikut.

Deploy Layanan

Kebutuhan

Untuk langkah-langkah ini, Anda memerlukan hal-hal berikut ini:

  • Akun AWS
  • Email address eksternal yang akan digunakan untuk melakukan tes mail server. Dalam contoh ini, kami menggunakan aws.opensource.mailserver@gmail.com sebagai alamat email.
  • Sebuah domain yang akan digunakan oleh mail server pada contoh ini. Dalam hal ini, kami menggunakan aws-opensource-mailserver.org sebagai domain contoh. Jika Anda belum memiliki domain, Anda dapat mendaftarkan domain baru di Amazon Route 53. Jika Anda melakukan hal tersebut, maka Anda dapat langsung menghapus hosted zone yang dibuat secara otomatis melalui Amazon Route 53 Console. Kita tidak memerlukan hosted zone ini karena mail server yang kita deploy juga bertindak sebagai Domain Name System (DNS) untuk domain tersebut.
  • SSH key pair untuk mengakses instance. Akses command line opsional pada tutorial ini, tapi sebuah key pair tetap dibutuhkan pada setup ini. Jika Anda belum memiliki key pair, Anda dapat membuatnya di EC2 Management Console:SSH Kay Pair EC2
  • (Opsional) pada artikel ini, karena Amazon SES yang digunakan masih menggunakan mode sandbox maka kita perlu memverifikasi alamat email yang menerima (aws.opensource.mailserver@gmail.com). Jika Anda ingin mengadopsi tutorial ini tapi ingin mengirim ke alamat email manapun, maka Anda perlu request untuk menghapus limitasi pengiriman email pada EC2 atau jika Anda tetap ingin me-relay lewat Amazon SES maka Anda perlu request agar keluar dari mode sandbox pada Amazon SES.

Langkah pendahuluan: Setting DNS dan membuat S3 Bucket

Sebelum melakukan deployment, kita perlu untuk mengkonfigurasi DNS dan membuat Amazon S3 bucket untuk backup dan user data.

  1. Alokasikan sebuah Elastic IP: Kami menggunakan 52.6.x.y pada contoh ini.
  2. Konfigurasi DNS: Jika Anda memiliki domain yang telah diregistrasikan di Amazon Route 53, Anda dapat menggunakan Amazon Management Console untuk mengubah name server dan glue records pada domain Anda. Edit DNS RecordJika Anda menggunakan layanan DNS pihak ketiga, maka cek dokumentasi yang sesuai dengan layanan tersebut. Mungkin membutuhkan waktu beberapa saat agar DNS record terpropagasi ke sistem DNS global. Sebagai pilihan, sebelum memulai deployment, Anda dapat melakukan verifikasi DNS record apakah sudah mengarah dengan benar dengan menggunakan utilitas command line dig:
    # Get a list of root servers for your top level domain
    dig +short org. NS
    # Query one of the root servers for an NS record of your domain
    dig c0.org.afilias-nst.info. aws-opensource-mailserver.org. NS

    Perintah diatas akan memberikan output seperti berikut:

    ;; ADDITIONAL SECTION:
    ns1.box.aws-opensource-mailserver.org. 3600 IN A 52.6.x.y
    ns2.box.aws-opensource-mailserver.org. 3600 IN A 52.6.x.y
  3. Buat S3 bucket untuk backup dan user data: pada Amazon S3 Console, buat sebuah bucket untuk menyimpan data Nextcloud dan satu lagi untuk backup, namakan bucket tersebut agar unik secara global. Dalam contoh ini, kami menggunakan dua bucket (aws-opensource-mailserver-backup dan aws-opensource-mailserver-nextcloud) seperti yang ditunjukkan berikut:

Deploy dan Konfigurasi Mail-in-a-Box

Klik Launch Stack Open Source Mail Server untuk deploy dan mengkonfigurasi beberapa parameter seperti yang ditunjukkan pada screenshot untuk membuat sumber daya yang dicontohkan pada bagian sebelumnya, biarkan parameter sesuai nilai default, kemudian klik Next dan Submit.

Deploy dan Konfigurasi Mail-in-a-Box

Ini akan men-deploy mail server Anda dalam public subnet pada default VPC yang memakan waktu kurang lebih 10 menit. Anda dapat memonitor progresnya pada AWS CloudFormation Console. Sementara itu, Anda dapat melihat admin password dari web UI dari AWS Systems Manager Parameter Store pada parameter MailInABoxAdminPassword.

Mail-in-a-Box Password

Kurang lebih satu menit setelah mail server Anda selesai di-deploy, Anda dapat login lewat admin web UI yang beralamat di https://52.6.x.y/admin dengan username admin@{domain-anda}, seperti yang ditunjukkan pada gambar berikut (Anda perlu melakukan konfirmasi certificate exception pada browser).

Mail Server Admin UI

Terakhir, pada admin UI masuk ke System > TLS(SSL) Certificates dan klik Provision untuk mendapatkan sertifikat SSL dan mengakhiri konfigurasi (Anda mungkin perlu mengklik Provision dua kali untuk mendapat sertifikat pada semua domain, seperti gambar berikut).

Sertifikat SSL untuk domain

Pada titik ini, Anda dapat melakukan kustomasi pada konfigurasi mail server Anda (seperti, membuat inbox untuk pengguna). Tetapi, kita akan tetap menggunakan admin user pada contoh ini untuk melanjutkan proses testing yang ada pada bagian berikutnya.

Catatan: Jika akun AWS Anda terdapat limitasi untuk mengirimkan email pada EC2, Anda akan melihat error pada admin dashboard di bawah System > System Status Checks yang mengatakan “Incoming Email (SMTP/Postfix) is running but not publicy accessible”. Anda dapat membiarkan itu dan tetap dapat menerima email.

Melakukan Tes

Menerima Email

Gunakan email eksternal yang sudah Anda miliki untuk mengirimkan email ke admin@{domain-anda}. Kemudian login sebagai admin@{domain-anda} ke webmail UI dari mail server AWS Anda di https://box.{domain-anda}/mail dan pastikan bahwa email telah Anda terima.

Tes menerima email

Tes file sharing, kalender dan kontak pada Nextcloud

Instalasi Nextcloud Anda dapat diakses melalui https://box.{domain-anda}/cloud, seperti yang ditunjukkan pada gambar berikut. Di sini Anda dapat mengelola kalender, kontak, dan file sharing. Kontak yang dibuat dan dikelola di sini juga dapat diakses lewat webmail UI ketika Anda mengirim email. Silahkan merujuk pada dokumentasi Nextcloud untuk lebih detil. Agar instalasi Nextcloud tetap konsisten dan secara otomatis dapat dikelola oleh Mail-in-a-Box script, admin disarankan untuk tidak mengubah konfigurasi dari Nextcloud.

Nextcloud web UI

Mengirim email

Untuk contoh ini, kami menggunakan Amazon SES untuk mem-forward email keluar, karena ini adalah cara sederhana agar email yang Anda kirim dapat diterima oleh mail server lain di web. Penerapan ini kadang tidak mudah, karena beberapa layanan email populer cenderung memblok IP publik dari provider cloud.

Sebagai alternatif, jika akun AWS Anda tidak memiliki limitasi untuk mengirim email dari EC2 maka Anda dapat mengirim email langsung dari mail server Anda. Pada hal ini, Anda dapat melewati bagian berikut ini dan langsung ke bagian mengirim tes email, tetapi pastikan ketika melakukan deployment mail server gunakan konfigurasi SesRelay ke false. Dalam hal ini, Anda juga dapat menggunakan IP Anda sendiri di AWS dan menggunakan alamat IP yang sudah memiliki reputasi bagus tersebut atau membangun reputasi untuk alamat IP tersebut sendiri.

Verifikasi domain dan alamat email pada Amazon SES

Agar Amazon SES menerima dan mem-forward email untuk domain Anda, maka Anda perlu membuktikan bahwa Anda memilikinya. Navigasi ke Verified Identities pada Amazon SES Console dan klik Create identity, pilih domain dan masukkan domain Anda. Kemudian Anda akan mendapat tampilan seperti berikut:

Verifikasi DKIM DNS Record Amazon SES

Sekarang Anda perlu menyalin tiga DNS record CNAME yang ditunjukkan pada halaman tersebut ke admin dashboard pada mail server Anda. Buka admin web UI pada mail server Anda, pilih System > Custom DNS dan tambahkan recod seperti yang ditunjukkan pada screenshot berikut.

Custom DNS CNAME untuk Amazon SES pada web admin dashboard

Amazon SES akan mendeteksi record tersebut, dengan demikian mengenali Anda sebagai pemilik dari domain dan memverifikasi domain untuk pengiriman email. Ketika Anda masih berada pada mode sandbox, Anda juga perlu memvalidasi kepemilikan dari alamat email penerima. Masuk ke Verified Identities pada Amazon SES Console, klik Create identity, pilih Email Address, dan masukkan alamat email eksternal yang sudah Anda miliki.

Amazon SES akan mengirim link verifikasi ke alamat email ini, dan ketika Anda sudah mengkonfirmasi melalui link tersebut bahwa Anda pemilik alamat email ini, Anda dapat mulai mengirim ke alamat email tersebut.

Secara keseluruhan, bagian verified identities Anda harusnya mirip seperti yang ada gambar berikut sebelum mencoba untuk mengirim email.

Verified Identitis pada Amazon SES

Kemudian, jika Anda ingin untuk mengirim email ke alamat email manapun dengan Amazon SES, silahkan merujuk pada dokumentasi bagaimana request akses untuk production.

Mengirim email tes

Sekarang coba kembali lagi ke webmail UI dan reply email yang telah Anda terima sebelumnya:

Reply email di webmail UI

Kemudian cek pada inbox email Anda yang lain, Anda harusnya dapat melihat email yang dikirim dari server AWS.

Selamat! Anda telah berhasil memverifikasi fungsionalitas dari mail server open-source di AWS.

Restore dari backup

Sebagai langkah terakhir, kami akan mendemonstrasikan bagaimana melakukan immutable deployment dan restore dari backup untuk pemulihan sederhana, migrasi dan upgrade. Pada konteks ini, kita akan tes membuat ulang mail server dari awal dengan mengambil backup yang disimpan dari Amazon S3.

Untuk itu, kita akan menggunakan fitur restore yang terdapat pada CloudFormation template yang kita deploy sebelumnya untuk melakukan migrasi dari t2.micro ke instance AWS Graviton berbasis-arm t4g.micro. Ini mencontohkan keunggulan dari pendekatan infrastruktur immutable yang dimungkinkan dengan adanya otomatis backup pada level aplikasi, memudahkan migrasi tipe instance dengan tipe arsitektur CPU yang berbeda.

Verifikasi Backup

Secara default, server Anda dikonfigurasi untuk melakukan backup awal saat instalasi dan incremental backup setiap malam. Dengan menggunakan ssh, Anda dapat masuk ke instance dan men-trigger secara manual proses backup untuk memastikan email yang baru saja Anda kirim dan terima ketika proses testing dimasukkan dalam backup:

ssh -i aws-opensource-mailserver.pem ubuntu@52.6.x.y sudo /opt/mailinabox/management/backup.py

Kemudian Anda bisa masuk ke admin dashboard mail server di https://box.{domain-anda}/admin dan memverifikasi status backup pada System > Backup Status:

Status backup pada admin email dashboard

Membuat ulang mail server dan restore dari backup

Pertama, pastikan Anda telah menyimpan password admin, karena Anda tidak akan bisa mengambilnya dari Parameter Store ketika instalasi mail server telah dihapus. Lanjutkan dengan menghapus aws-opensource-mailserver stack dari CloudFormation Console dan deploy ulang dengan mengklik tombol ini . Namun kali ini, pastikan beberapa parameter diisi seperti yang ditunjukkan di bawah, ganti tipe instance dan image (AMI) yang sesuai dan juga masukkan prefix yang telah disimpan pada S3 bucket untuk melakukan restore.

Membuat ulang mail server dari backup

Dalam beberapa menit, mail server Anda akan siap dan berjalan, dengan kondisi yang sama sebelum dihapus, namun mail server baru ini berjalan pada instance baru yang ditenagai oleh AWS Graviton. Anda dapat memverifikasi ini dengan mengunjungi webmail UI pada https://box.{domain-admin}/mail dan masuk dengan kredensial admin lama Anda.

Pembersihan

Pandangan

Solusi yang dihadirkan ini fokus pada meminimalkan kompleksitas operasional dan biaya, karena itu hanya terdiri dari satu Amazon EC2 instance yang mencakup semua fungsi mail server open source, termasuk manajemen UI, database user, Nextcloud dan DNS. Dengan ukuran instance yang sesuai, konfigurasi ini cukup untuk memenuhi kebutuhan organisasi kecil sampai menengah. Tambahan lainnya, incremental backup ke Amazon S3 menyediakan ketahanan (resiliency) dan dapat digunakan bersama dengan otomasi CloudFormation untuk dapat melakukan recover dengan cepat ketika ada masalah pada satu instance atau Availability Zone (AZ) tersebut.

Tergantung dari kebutuhan Anda, memperluas solusi ini dan mendistribusikan komponen lintas AZ memungkinkan untuk memenuhi kebutuhan yang lebih ketat terkait high availability dan scalability pada konteks deployment yang lebih besar. Karena berbasis software open-source, ketika Anda menginginkan setup yang lebih besar dari ini maka proses migrasi ke arsitektur distributed yang lebih kompleks akan menjadi lebih mudah.

Kesimpulan

Pada artikel ini, kami menunjukkan bagaimana mudah dan cepatnya melakukan otomasi deployment dari mail server open-source di AWS dan secara mudah melakukan restore dari backup untuk melakukan immutable update dan menyediakan ketahanan tinggi. Dengan menggunakan otomasi infrastruktur dari AWS CloudFormation dan integrasi dengan managed service AWS seperti Amazon S3 dan Amazon SES, manajemen dan operasional dari mail server open-source dapat disederhanakan dengan signifikan. Ketika sudah di-deploy, solusi ini memberikan pengalaman yang serupa dengan layanan SaaS populer dan layanan komersial sejenis.

Anda dapat langsung menggunakan otomasi yang disediakan pada blog ini dan gunakan repositori GitHub ini untuk memulai menjalankan mail server open-source Anda sendiri di AWS!

Artikel ini diterjemahkan dari artikel asli yang berjudul “Fully Automated Deployment of an Open Source Mail Server on AWS” yang ditulis oleh Michael Meidlinger, AWS dan David Schwendemann, AWS.

Rio Astamal

Rio Astamal

Rio Astamal is a Developer Advocate at AWS and a passionate web developer since 2003. In his spare time he loves writing small open source projects to solve problem in his daily activity.