SASL2 mod-LDAP

Kamas Muhammad <kamas@lc.vlsm.org>


Tidak ada copyright apapun dalam dukumen ini, anda bebas menyalin, mencetak, maupun memodifikasi. Saran, koreksi, kritik, kesalahan ketik, maupun ucapan silakan dikirimkan ke email tersebut diatas. Terima Kasih.


Latar Belakang

Selama ini saya menggunakan librari Cyrus-SASL2 pada postfix untuk menyediakan layanan SMTP Authentication. Ya, memang biasa saja, tapi biasanya saya harus melakukan kompilasi terlebih dahulu walau toh pada akhirnya hasil yang saya dapat adalah file deb-installer. Tidak ada hal khusus yang saya lakukan terhadap source code, hanya mengubah opsi pada proses configure agar menyertakan mekanisme authdaemon.

Saya menggunakan cara kompilasi karena by default paket pustaka sasl yang dibuat oleh Debian tidak mendukung penggunaan courier-authdaemon sebagai authentication backend. Data username dan password biasanya saya simpan menggunakan MySQL. Apakah sasl tidak bisa membaca data pada database? Bisa. Hanya saja menurut apa yang telah saya coba, pustaka itu (menggunakan modul auxprop) tidak dapat melakukan validasi bila passwordnya tersimpan dalam bentuk hashed. Kebetulan data password yang saya punya biasanya berbentuk Crypt-MD5. Mungkin saja saya yang tidak tahu bagaimana caranya, tapi untuk singkatnya: Saya tidak bisa.

Kebetulan data akun email pada server terakhir yang saya bangun disimpan menggunakan OpenLDAP. Sekilas lihat ternyata ada paket libsasl2-modules-ldap. Saya sempat berprasangka bahwa dengan modul itu sasl tidak melakukan pencocokan data sendiri. Proses pemeriksaan diserahkan pada pustaka OpenLDAP. Kalau memang benar begitu, seharusnya apa pun bentuk hash-nya asal jenis hash itu bisa ditangani oleh OpenLDAP, proses otentikasi tetap bisa dilakukan.

Kalau ternyata memang benar-benar bisa, manfaat yang saya dapat adalah pengurangan proses kompilasi ketika melakukan upgrade. Apa prosesnya sulit? Tidak juga. Keseluruhan proses bisa dijalankan dalam waktu kurang dari 5 menit :-) Lalu kenapa coba diubah? Namanya juga iseng. Boleh kan? He..he..he..

Gambaran Sistem

Saya menggunakan postfix 2.5 di mana data user disimpan pada direktori LDAP. Pengiriman email menggunakan mail client dapat dilakukan setelah melalui proses otentikasi. Atribut yang menyimpan username adalah uid, sedangkan password disimpan pada atribut userPassword dalam bentuk Crypt-MD5 hashed.

dn: uid=kamas,o=users,dc=sokam,dc=or,dc=id
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: qmailUser
uid: kamas
o: users
sn: kamas
accountStatus: active
mail: kamas@sokam.or.id
mailMessageStore: sokam.or.id/k/kamas/Maildir/
cn: Kamas Muhammad
mailQuotaSize: 0
userPassword: {crypt}$1$B8RKHiNI$XPXIhmMReW6PpfpWOw2Y3.

Sebelumnya, inilah isi file /etc/postfix/sasl/smtpd.conf:

pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path: /var/run/courier/authdaemon/socket

Instalasi & Konfigurasi

Saya menggunakan Debian Lenny. Proses instalasi dilakukan seperti biasa yaitu dengan menggunakan apt-get.

[root@host]# apt-get install libsasl2-modules-ldap
...
...
Setting up sasl2-bin (2.1.22.dfsg1-23) ...
To enable saslauthd, edit /etc/default/saslauthd and set START=yes (warning).
Setting up libsasl2-modules-ldap (2.1.22.dfsg1-23) ...

Setelah instalasi selesai ubah beberapa bagian file /etc/default/saslauthd mengikuti panduan dari Debian[1]. Beberapa parameter yang diubah adalah:

  1. START=yes
  2. MECHANISMS="ldap"
  3. OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

Penjelasan tentang mengapa direktori soket saslauthd ditempatkan pada direktori seperti yang disebutkan pada konfigurasi OPTIONS dapat ditemukan di README sasl2-bin yang disertakan oleh Debian[1].

Setelah itu buat file /etc/saslauthd.conf dengan isi seperti berikut, mengacu sebagian info dari halaman mail archive[2] yang penjelasan lengkapnya dapat dilihat pada daftar konfigurasi saslauthd[3].

ldap_servers: ldaps://ldap.sokam.or.id
ldap_password_attr: userPassword
ldap_filter: uid=%U
ldap_search_base: o=users,dc=sokam,dc=or,dc=id

Ubah pula file /etc/postfix/sasl/smtpd.conf seperti berikut:

pwcheck_method: saslauthd
mech_list: LOGIN

Dicoba

Jalankan dulu saslauthd, kemudian cobalah melakukan otentikasi menggunakan testsaslauthd.

[root@host]# /etc/init.d/saslauthd start
Starting SASL Authentication Daemon: saslauthd.
[root@host]# testsaslauthd -u kamas -p iniPassWordNyah
0: OK "Success."

Kalau sudah keluar 0: OK "Success" seperti di atas berarti proses otentikasi berjalan lancar. Kalau keluar teks 0: NO "authentication failed" tampaknya anda belum beruntung. Kalau keluar tulisan connect() : No such file or directory coba tambahkan parameter -f diikuti dengan lokasi soket saslauthd.

[root@host]# testsaslauthd -f /var/spool/postfix/var/run/saslauthd/mux -u kamas -p iniPassWordNyah

Setelah itu cobalah melakukan otentikasi pada postfix. Saya menggunakan proses telnet sehingga tidak perlu mencoba menggunakan program mail client apa pun. Contohnya ditunjukkan pada bagian berikut:

[root@host]#  telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.sokam.or.id ESMTP Postfix (Debian/GNU)
HELO imutlucu
250 mail.sokam.or.id
AUTH LOGIN
334 VXNlcm5hbWU6
a2FtYXM=
334 UGFzc3dvcmQ6
aW5pUGFzc1dvcmROeWFo
235 2.7.0 Authentication successful
QUIT
221 2.0.0 Bye
Connection closed by foreign host.

Bagian yang dicetak tebal adalah username dan password dalam bentuk base64-encoded. Tulisan "Autentication successful" menunjukkan bahwa username dan password yang dimasukkan benar.

Referensi

  1. file:///usr/share/doc/sasl2-bin/README.Debian.gz
  2. http://www.imc.org/ietf-sasl/mail-archive/msg01862.html
  3. http://www.irbs.net/internet/info-cyrus/0207/att-0599/LDAP_SASLAUTHD