Membangun Mail Server Dengan Mailu – Docker

Pre Install

Pointing Domain

Silakan buat domain record/pointing

Karena saya ingin mengakses Mailu Web dari domain mail.warscloud.net dan webmail.warscloud.net jadi saya menambahkan 2 record A, sesuaikan tergantung kebutuhan.

warscloud.net MX mail.warscloud.net

mail.warscloud.net A 103.103.103.103

webmail.warscloud.net A 103.103.103.103

Untuk reverse domain silakan set PTR seperti contoh berikut

103.103.103.103.in-addr.arpa PTR mail.warscloud.net

Untuk PTR record ini silakan request/set di penyedia VPS, ISP, atau jika IP milik sendiri silakan minta untuk delegasi Reverse Domain dimana kamu mendapatkan alokasi IP tersebut ke RIR/LIR seperti APNIC, IDNIC, RIPE, ARIN

Install Docker Engine

Untuk cara install docker engine bisa dilihat dibawah ini

Instalasi dan Konfigurasi Mailu

Kunjungi halaman berikut untuk melakukan setup file docker-compose

https://setup.mailu.io/2024.06

Setup seperti dibawah ini

Pada version, silakan pilih version yang ingin digunakan

Keterangan:

Main mail domain and server display name: ini adalah domain utama yang akan menjadi domain setelah @ contoh: [email protected]

Outgoing message rate limit (per user): ini adalah batasan pengiriman email per hari/per user

Website name: Nantinya di halaman webmail akan ada navigasi, dan nama inilah yang akan muncul

Linked Website URL: Ketika nama Website yang didefinisikan diatas di klik akan menuju link ini

Pada step 2 ini, saya memilih beberapa fitur dasar

Keterangan:

IPv4 listen address: Silakan isikan IP yang digunakan

Public hostnames: ini adalah daftar hostname yang nantinya akan digunakan dan akan dilakukan generate SSL oleh letsencrypt

Pastikan daftar domain yang di isikan di bagian Public hostnames sudah ada A record nya, karena dibutuhkan pada saat pertama kali run untuk request SSL letsencrypt

Jika sudah klik Setup Mailu

Selanjutnya akan muncul summary dan diberikan petunjuk langkah selanjutnya seperti berikut

Silakan ikuti tutorial tersebut

Atau, disini saya akan menjalakan dan menjelaskan step nya

Buat directory untuk menyimpan data-data mailu

mkdir /mailu

Pindah ke directory /mailu dan ambil file docker-compose.yml dan mailu.env

cd /mailu
wget https://setup.mailu.io/2024.06/file/xxx-xxx-xxxx/docker-compose.yml
wget https://setup.mailu.io/2024.06/file/xxx-xxx-xxxx/mailu.env

Pindah ke Directory /mailu dan jalankan service docker container

cd /mailu
docker compose -p mailu up -d

Setelah semua service/container berjalan, buat password user admin untuk login ke mailu web

docker compose -p mailu exec admin flask mailu admin admin warscloud.net PASSWORD

Lalu akses web mailu menggunakan domain yang kita definisikan di Public hostnames

Tampilan awal mailu

Post Installation

Setup SPF, DKIM, DMARC

Silakan navigasi ke menu Mail Domains, lalu klik icon Details

Silakan set domain record seperti di atas, sesuaikan.
Jika domain di simpan di Cloudflare kita bisa Download zonefile lalu import, dengan ini kita tidak perlu satu-persatu menambahkan record manual

Selanjutnya silakan klik Generate keys dibagian pojok kanan atas untuk melakukan konfigurasi DKIM

Jika muncul konfirmasi klik Confirm

Lalu akan muncul panduan record yang lebih lengkap seperti DKIM dan DMARC, lakukan langkah yang sama. tambahkan record secara manual atau download zonefile lalu import ke cloudflare

Instalasi dan konfigurasi Mailu sudah selesai, silakan lakukan test pengiriman internal antar internal domain dan ke ekternal domain seperti Gmail, Yahoo, Dll.

Troubleshoot

Mengatasi too many redirect pada saat login ke Webmail

Stop service

cd /mailu
docker compose down

Edit file /mailu/mailu.env

nano /mailu/mailu.env

Ubah baris

# Path to redirect / to
WEBROOT_REDIRECT=/webmail

Menjadi

# Path to redirect / to
WEBROOT_REDIRECT=/admin

Pengembangan Lebih Lanjut (Opsional)

Mencegah User Tertentu Mengirim Email

Pembatasan pengiriman email bagi sebagian pengguna diterapkan sebagai langkah preventif untuk meningkatkan keamanan sistem. Hal ini dilakukan karena tidak semua anggota atau karyawan memiliki pemahaman yang memadai tentang keamanan siber, khususnya terkait ancaman seperti phishing dan penyalahgunaan akun. Tanpa pembatasan, akun yang tidak diawasi dengan baik dapat dimanfaatkan untuk mengirim spam atau menjadi sumber serangan siber, yang dapat merusak reputasi domain dan membahayakan infrastruktur email perusahaan. Oleh karena itu, akun tertentu hanya diizinkan menerima email, bukan mengirim.

Secara default postfix memperbolehkan semua user bisa mengirim email.

Opsi 1: List user di definisikan berdasarkan list non regex (lmdb)

Buat file override postfix.cf

nano /mailu/overrides/postfix/postfix.cf

Masukkan baris berikut

smtpd_sender_restrictions = check_sender_access lmdb:/overrides/sender_access

Buat file sender_access

nano /mailu/overrides/postfix/sender_access

Masukkan list user yang akan dilakukan pembatasan pengiriman email dengan format seperti berikut

[email protected]        REJECT
[email protected]        REJECT

Terakahir restart, Lakukan docker-compose down & up

cd /mailu
docker compose down && docker compose -p mailu up -d

Opsi 2: List user di definisikan berdasarkan list regex

Buat file override postfix.cf

nano /mailu/overrides/postfix/postfix.cf

Masukkan baris berikut

smtpd_sender_restrictions = check_sender_access regexp:/overrides/sender_access.regex

Buat file sender_access.regex

nano /mailu/overrides/postfix/sender_access.regex

Masukkan list user yang ingin di izinkan dan di tolak dengan format regex.
Contoh dibawah ini saya ingin mengizinkan [email protected] mengirim email, dan user lainnya dengan @domain.com tidak saya izinkan mengirim email

/^usersuper@domain\.com$/    OK
/@domain\.com$/              REJECT

Urutan eksekusi list user dimulai dari atas, jika ada rule yang lebih spesifik tempatkan di awal baris

Sumber & referensi:

https://mailu.io

https://youtu.be/ScarlmgD0dU?si=cqBGw1ugkAzj1WM3