Tutorial Lengkap Integrasi Mail Server (Postfix & Dovecot) dengan OpenLDAP di Debian
Membangun Mail Server dengan virtual users (user yang tidak punya akun login langsung ke sistem operasi Linux) adalah standar yang sering digunakan di industri dan kompetisi seperti LKS. Di tutorial ini, kita akan membahas tuntas cara mengintegrasikan Postfix (untuk mengirim/menerima email), Dovecot (untuk membaca email & otentikasi), dan OpenLDAP (sebagai database sentral untuk menyimpan username dan password).
Pada skenario ini, kita menggunakan domain utara.site. Mari kita bedah konfigurasinya satu per satu!
Pada skenario ini, kita menggunakan domain utara.site. Mari kita bedah konfigurasinya satu per satu!
Langkah 1: Konfigurasi Postfix (Jalur Komunikasi & Pengiriman)
Postfix bertugas sebagai Mail Transfer Agent (MTA). Kita perlu memberi tahu Postfix untuk mencari daftar user ke server LDAP dan menyerahkan email yang masuk ke Dovecot.
1. Edit file utama Postfix (/etc/postfix/main.cf)
Tambahkan atau sesuaikan parameter berikut di baris paling bawah:
local_recipient_maps = proxy:unix:passwd.byname $alias_maps ldap:/etc/postfix/ldap-users.cf
virtual_mailbox_domains = utara.site
virtual_mailbox_maps = ldap:/etc/postfix/ldap-users.cf
virtual_transport = dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
dovecot_destination_recipient_limit = 1
Penjelasan:
virtual_mailbox_domains: Memberi tahu Postfix bahwa server ini adalah tujuan akhir untuk email berdomain @utara.site.
local_recipient_maps = proxy:unix:passwd.byname $alias_maps ldap:/etc/postfix/ldap-users.cf : Baris ini memerintahkan Postfix untuk memvalidasi alamat penerima dari tiga sumber sekaligus: User Lokal Sistem (/etc/passwd), Daftar Alias (/etc/aliases), dan yang paling utama adalah Database LDAP.
virtual_mailbox_maps: Saat ada email masuk, Postfix akan mengecek keberadaan user tersebut ke LDAP menggunakan aturan yang ada di file ldap-users.cf.
virtual_transport: Menginstruksikan Postfix untuk menyerahkan tugas penyimpanan email (pengantaran ke folder user) kepada dovecot.
smtpd_sasl_*: Postfix tidak memverifikasi password sendiri. Blok ini berfungsi untuk menyambungkan fitur otentikasi (SASL) Postfix ke socket yang disediakan oleh Dovecot.
2. Buat konektor Postfix ke LDAP (/etc/postfix/ldap-users.cf)
Buat file baru ini untuk mengatur bagaimana Postfix "bertanya" ke LDAP:
server_host = ldap://127.0.0.1
version = 3
search_base = dc=utara,dc=site
query_filter = (uid=%u)
result_attribute = uid
bind = yes
bind_dn = cn=admin,dc=utara,dc=site
bind_pw = P@ssw0rd
Penjelasan:
File ini adalah kredensial Postfix untuk membaca database LDAP. Parameter query_filter = (uid=%u) berarti jika ada email masuk untuk windu@utara.site, Postfix akan mencari apakah ada data dengan uid=windu di LDAP.
3. Konfigurasi kurir pengantar email (/etc/postfix/master.cf)
Tambahkan konfigurasi transport Dovecot di baris paling bawah:
dovecot unix - n n - - pipe
flags=DRhu user=mail:mail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}
Penjelasan:
Ini adalah definisi dari virtual_transport = dovecot yang kita panggil di main.cf tadi.
Baris ini menjalankan perintah dovecot-lda (Local Delivery Agent) yang bertugas mengambil email dari Postfix dan meletakkannya langsung ke direktori fisik (Maildir) milik user di sistem Linux.
Postfix bertugas sebagai Mail Transfer Agent (MTA). Kita perlu memberi tahu Postfix untuk mencari daftar user ke server LDAP dan menyerahkan email yang masuk ke Dovecot.
1. Edit file utama Postfix (/etc/postfix/main.cf)
Tambahkan atau sesuaikan parameter berikut di baris paling bawah:
local_recipient_maps = proxy:unix:passwd.byname $alias_maps ldap:/etc/postfix/ldap-users.cf
virtual_mailbox_domains = utara.site
virtual_mailbox_maps = ldap:/etc/postfix/ldap-users.cf
virtual_transport = dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
dovecot_destination_recipient_limit = 1Penjelasan:
virtual_mailbox_domains: Memberi tahu Postfix bahwa server ini adalah tujuan akhir untuk email berdomain@utara.site.local_recipient_maps = proxy:unix:passwd.byname $alias_maps ldap:/etc/postfix/ldap-users.cf : Baris ini memerintahkan Postfix untuk memvalidasi alamat penerima dari tiga sumber sekaligus: User Lokal Sistem (
/etc/passwd), Daftar Alias (/etc/aliases), dan yang paling utama adalah Database LDAP.virtual_mailbox_maps: Saat ada email masuk, Postfix akan mengecek keberadaan user tersebut ke LDAP menggunakan aturan yang ada di fileldap-users.cf.virtual_transport: Menginstruksikan Postfix untuk menyerahkan tugas penyimpanan email (pengantaran ke folder user) kepadadovecot.smtpd_sasl_*: Postfix tidak memverifikasi password sendiri. Blok ini berfungsi untuk menyambungkan fitur otentikasi (SASL) Postfix ke socket yang disediakan oleh Dovecot.
2. Buat konektor Postfix ke LDAP (/etc/postfix/ldap-users.cf)
Buat file baru ini untuk mengatur bagaimana Postfix "bertanya" ke LDAP:
server_host = ldap://127.0.0.1
version = 3
search_base = dc=utara,dc=site
query_filter = (uid=%u)
result_attribute = uid
bind = yes
bind_dn = cn=admin,dc=utara,dc=site
bind_pw = P@ssw0rd
Penjelasan:
File ini adalah kredensial Postfix untuk membaca database LDAP. Parameter
query_filter = (uid=%u)berarti jika ada email masuk untukwindu@utara.site, Postfix akan mencari apakah ada data denganuid=windudi LDAP.
3. Konfigurasi kurir pengantar email (/etc/postfix/master.cf)
Tambahkan konfigurasi transport Dovecot di baris paling bawah:
dovecot unix - n n - - pipe
flags=DRhu user=mail:mail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}
Penjelasan:
Ini adalah definisi dari
virtual_transport = dovecotyang kita panggil dimain.cftadi.Baris ini menjalankan perintah
dovecot-lda(Local Delivery Agent) yang bertugas mengambil email dari Postfix dan meletakkannya langsung ke direktori fisik (Maildir) milik user di sistem Linux.
Langkah 2: Konfigurasi Dovecot (Membaca Email & Sistem Login)
Dovecot bertugas menangani IMAP/POP3 (agar user bisa membaca email lewat Roundcube/Thunderbird) dan memverifikasi password.
1. Mengaktifkan otentikasi LDAP (/etc/dovecot/conf.d/10-auth.conf)
Hapus tanda pagar (#) pada modul LDAP dan matikan modul sistem biasa:
#!include auth-system.conf.ext
!include auth-ldap.conf.ext
2. Trik User Virtual Statis (/etc/dovecot/conf.d/auth-ldap.conf.ext)
Edit bagian userdb menjadi seperti ini:
userdb {
driver = static
args = uid=mail gid=mail home=/home/%u
}
Penjelasan:
Ini adalah konfigurasi yang sangat krusial! Karena user LDAP tidak punya akun Linux sungguhan, kita memanipulasi Dovecot (driver = static) agar menganggap semua user LDAP yang berhasil login memiliki hak akses milik user mail (UID 8) dan grup mail (GID 8).
Direktori emailnya akan diarahkan ke /home/namauser (%u mewakili username).
3. Konektor Dovecot ke LDAP (/etc/dovecot/dovecot-ldap.conf.ext)
Sesuaikan file ini agar Dovecot bisa mencocokkan password:
hosts = 127.0.0.1
auth_bind = yes
ldap_version = 3
base = dc=utara,dc=site
user_attrs = homeDirectory=home, =uid=8, =gid=8
user_filter = (&(objectClass=posixAccount)(uid=%n))
pass_filter = (&(objectClass=posixAccount)(uid=%n))
Penjelasan:
Bagian user_attrs kembali menegaskan bahwa ketika Dovecot mengambil data dari LDAP, UID dan GID-nya akan ditimpa secara paksa menjadi 8. Ini mencegah error Permission Denied saat Dovecot mencoba membaca/menulis file email di server.
4. Mengizinkan UID Sistem (/etc/dovecot/conf.d/10-mail.conf)
first_valid_uid = 8
last_valid_uid = 20000
Penjelasan:
Secara default, Dovecot menolak bekerja dengan UID di bawah 1000 karena dianggap sebagai akun root/system yang berbahaya. Karena kita memaksakan penggunaan UID 8 (mail), batas keamanan ini harus kita turunkan menjadi 8.
5. Membuka soket untuk Postfix (/etc/dovecot/conf.d/10-master.conf)
Cari blok service auth dan tambahkan unix_listener ini:
service auth {
...
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
Penjelasan:
Konfigurasi ini membuat sebuah file "pipa" (socket) di sistem agar Postfix bisa mengirimkan permintaan cek password ke Dovecot saat ada user yang ingin mengirim email.
6. Pembuatan folder otomatis (/etc/dovecot/conf.d/15-mailboxes.conf)
Tambahkan parameter auto = subscribe pada setiap mailbox standar (Drafts, Junk, Trash, Sent).
Penjelasan:
Parameter ini membuat folder-folder tersebut otomatis dibuat dan langsung di-subscribe saat user pertama kali login di webmail.
Dovecot bertugas menangani IMAP/POP3 (agar user bisa membaca email lewat Roundcube/Thunderbird) dan memverifikasi password.
1. Mengaktifkan otentikasi LDAP (/etc/dovecot/conf.d/10-auth.conf)
Hapus tanda pagar (#) pada modul LDAP dan matikan modul sistem biasa:
#!include auth-system.conf.ext
!include auth-ldap.conf.ext
2. Trik User Virtual Statis (/etc/dovecot/conf.d/auth-ldap.conf.ext)
Edit bagian userdb menjadi seperti ini:
userdb {
driver = static
args = uid=mail gid=mail home=/home/%u
}
Penjelasan:
Ini adalah konfigurasi yang sangat krusial! Karena user LDAP tidak punya akun Linux sungguhan, kita memanipulasi Dovecot (driver = static) agar menganggap semua user LDAP yang berhasil login memiliki hak akses milik user
mail(UID 8) dan grupmail(GID 8).Direktori emailnya akan diarahkan ke
/home/namauser(%umewakili username).
3. Konektor Dovecot ke LDAP (/etc/dovecot/dovecot-ldap.conf.ext)
Sesuaikan file ini agar Dovecot bisa mencocokkan password:
hosts = 127.0.0.1
auth_bind = yes
ldap_version = 3
base = dc=utara,dc=site
user_attrs = homeDirectory=home, =uid=8, =gid=8
user_filter = (&(objectClass=posixAccount)(uid=%n))
pass_filter = (&(objectClass=posixAccount)(uid=%n))
Penjelasan:
Bagian
user_attrskembali menegaskan bahwa ketika Dovecot mengambil data dari LDAP, UID dan GID-nya akan ditimpa secara paksa menjadi8. Ini mencegah error Permission Denied saat Dovecot mencoba membaca/menulis file email di server.
4. Mengizinkan UID Sistem (/etc/dovecot/conf.d/10-mail.conf)
first_valid_uid = 8
last_valid_uid = 20000
Penjelasan:
Secara default, Dovecot menolak bekerja dengan UID di bawah 1000 karena dianggap sebagai akun root/system yang berbahaya. Karena kita memaksakan penggunaan UID 8 (
mail), batas keamanan ini harus kita turunkan menjadi8.
5. Membuka soket untuk Postfix (/etc/dovecot/conf.d/10-master.conf)
Cari blok service auth dan tambahkan unix_listener ini:
service auth {
...
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
Penjelasan:
Konfigurasi ini membuat sebuah file "pipa" (socket) di sistem agar Postfix bisa mengirimkan permintaan cek password ke Dovecot saat ada user yang ingin mengirim email.
6. Pembuatan folder otomatis (/etc/dovecot/conf.d/15-mailboxes.conf)
Tambahkan parameter auto = subscribe pada setiap mailbox standar (Drafts, Junk, Trash, Sent).
Penjelasan:
Parameter ini membuat folder-folder tersebut otomatis dibuat dan langsung di-subscribe saat user pertama kali login di webmail.
Langkah 3: Pembuatan Direktori Penyimpanan (Maildir)
Karena kita menggunakan virtualisasi akses (menjadikan semua user sebagai UID 8), direktori penyimpanan email di /home harus disiapkan secara manual dan kepemilikannya diserahkan sepenuhnya ke user mail.
Jalankan serangkaian perintah ini di terminal (contoh untuk user sukro dan kasro):
# mkdir -p /home/sukro/Maildir/{new,cur,tmp}
# mkdir -p /home/kasro/Maildir/{new,cur,tmp}
# chown -R mail:mail /home/kasro/
# chown -R mail:mail /home/sukro/
# chmod -R 700 /home/kasro/
# chmod -R 700 /home/sukro/
Penjelasan Perintah:
mkdir -p .../{new,cur,tmp}: Format penyimpanan Maildir wajib memiliki tiga sub-folder ini untuk memisahkan email baru masuk (new), email yang sudah dibaca (cur), dan proses sementara (tmp).chown -R mail:mail: Mengubah pemilik folder menjadi user dan group mail. Jika ini dilewatkan, Dovecot akan mengalami Permission Denied karena sistem operasi menganggap Dovecot tidak punya hak akses ke folder tersebut.chmod -R 700: Mengamankan direktori sehingga hanya pemilik asli folder (dalam hal ini sistem mail) yang berhak membaca, menulis, dan mengeksekusi isinya.
Karena kita menggunakan virtualisasi akses (menjadikan semua user sebagai UID 8), direktori penyimpanan email di /home harus disiapkan secara manual dan kepemilikannya diserahkan sepenuhnya ke user mail.
Jalankan serangkaian perintah ini di terminal (contoh untuk user sukro dan kasro):
# mkdir -p /home/sukro/Maildir/{new,cur,tmp}
# mkdir -p /home/kasro/Maildir/{new,cur,tmp}
# chown -R mail:mail /home/kasro/
# chown -R mail:mail /home/sukro/
# chmod -R 700 /home/kasro/
# chmod -R 700 /home/sukro/
Penjelasan Perintah:
mkdir -p .../{new,cur,tmp}: Format penyimpanan Maildir wajib memiliki tiga sub-folder ini untuk memisahkan email baru masuk (new), email yang sudah dibaca (cur), dan proses sementara (tmp).chown -R mail:mail: Mengubah pemilik folder menjadi user dan groupmail. Jika ini dilewatkan, Dovecot akan mengalami Permission Denied karena sistem operasi menganggap Dovecot tidak punya hak akses ke folder tersebut.chmod -R 700: Mengamankan direktori sehingga hanya pemilik asli folder (dalam hal ini sistemmail) yang berhak membaca, menulis, dan mengeksekusi isinya.
Tahap Akhir
Setelah semua file diubah dan direktori dibuat, pastikan untuk me-restart kedua layanan agar memori konfigurasi diperbarui:
# systemctl restart postfix dovecot
Setelah semua file diubah dan direktori dibuat, pastikan untuk me-restart kedua layanan agar memori konfigurasi diperbarui:
# systemctl restart postfix dovecot
Comments
Post a Comment