Menggunakan SMTP Auth (qmail-smtpd-auth) di vpopmail dan vmailmgr

Asfihani ([email protected])

21 Maret 2003

1. Pendahuluan

Salah satu tujuan dari penggunaan smtp auth adalah untuk mencatat (mengelog) penggunaan SMTP dari user-user yang anda perbolehkan untuk me-relay SMTP. Hal ini diharapkan akan mengurangi penyalahgunaan SMTP, seperti misalnya mengirim SPAM, email bombing, ataupun mass mailing lainnya. Tujuan lainnya adalah sebagai seletif relay, misalnya jika kantor anda mempunyai sebuah dedicated server pada ISP A, namun anda juga berlangganan dialup ISP B dirumah, dan brengseknya ISP B ini SMTP nya menolak untuk meneruskan email jika From : nya tidak dari ISP B tersebut (misalnya ISP Telkomnet dan dengar-dengar sebentar lagi Indosat), maka selama ISP B masih bisa memforward port SMTP (25), anda bisa menggunakan server dedicated di ISP A sebagai SMTP sever untuk mengirim email walaupun anda dialup menggunakan ISP B. Tentu hal ini tidak efektif jika ISP anda masih bisa digunakan sebagai relay dan pasti bandwidthnya lebih besar dari server dedicated anda :)

Pada prinsipnya setiap seorang user akan mengirimkan email melalui sebuah server qmail dengan smtp auth, maka user yang bersangkutan akan diminta memasukkan username dan password terlebih dahulu, adapun database dari username dan password bisa menggunakan standar /etc/passwdatau menggunakan database virtual misalnya vpopmail/vmailmgr. Jadi selain server smtpnya (qmail) harus bisa mendukung authentikasi, maka client (MUA)nya juga harus support untuk mengirimkan proses authentikasi tersebut. Jika proses authentikasinya berhasil, maka MUA akan segera melakukan komunikasi SMTP seperti biasa, jika gagal maka proses pengiriman ditolak. Sederhana bukan?

Disini tidak akan saya jelaskan bagaimana menginstall cara qmail, vpopmail atau vmailmgr secara step by step, jadi akan saya gambarkan secara garis besarnya saja dan diasumsikan anda telah bisa menginstall qmail, vpopmail atau vmailmgr dengan benar.

2. Mengepatch qmail dengan qmail-smtpd-auth

Jika diserver anda sekarang sudah terdapat qmail yang berjalan dengan baik, jangan takut, karena waktu menginstall qmail dengan patch qmail-smtpd-auth ini hanya akan mengupdate binary file pada direktori /var/qmail/bin . Tapi, tentu saja tidak ada salahnya anda membackup direktori /var/qmail anda terlebih dahulu jika nantinya ada sesuatu yang tidak beres. Jangan lupa untuk mematikan servis qmail yang sedang aktif sebelum melakukan pengepatchan/penginstallan/pengupdatean (qmailctl stop). Misalnya anda sudah download file qmail-1.03.tar.gz(serta telah membuat direktori dan user ataupun group yang dibutuhkan oleh qmail) dan file qmail-smtpd-auth-0.31.tar.gz yang bisa anda dapatkan dari http://members.elysium.pl/brush/qmail-smtpd-auth/dist/qmail-smtpd-auth-0.31.tar.gz, maka :

[root@wedus src]# tar -xzvf qmail-1.03.tar.gz 
[root@wedus src]# tar -xzvf qmail-smtpd-auth-0.31.tar.gz 
[root@wedus src]# cp qmail-smtpd-auth-0.31/{auth.patch,base64.c,base64.h,README.auth} qmail-1.03 
[root@wedus src]# cd qmail-1.03

Jika anda ingin menambahkan patch yang lain, misalnya qmailqueue-patchdan/atau qmail-quotas-patch, maka lakukan sekarang. Namun, jika anda tidak ingin melakukannya anda bisa melalui 2 step berikut ini (file qmailqueue-patch dan qmail-1.03-quotas-1.1.patch misalnya sudah berada didirektori src/) :

[root@wedus qmail-1.03]# patch -p1 < ../qmailqueue-patch 
[root@wedus qmail-1.03]# patch -p1 < ../qmail-1.03-quotas-1.1.patch

Patch qmail dengan qmail-smtpd-auth :

[root@wedus qmail-1.03]# patch -p0 < auth.patch

Install qmail seperti biasanya :

[root@wedus qmail-1.03]# make setup check

Jika sukses, seperti biasa file-file tersebut akan disalin kedirektori /var/qmail/bin . Kemudian edit file /etc/tcp.smtp anda untuk mengijinkan relay hanya dari localhost saja, karena nanti setelah qmail anda menggunakan smtp auth, user yang sukses authentikasi, akan langsung diberi hak untuk menggunakannya sebagai relay.

3. Jika anda menggunakan vpopmail

Install vpopmail seperti biasa, atau jika diserver anda sudah terdapat vpopmail maka anda harus mengganti kepemilikan file vchkpw menjadi user root dan membuatnya menjadi SUID, misalnya jika home direktori dari user vpopmail adalah /home/vpopmail, maka :

[root@wedus asfik]# chmod 4755 /home/vpopmail/bin/vchkpw 
[root@wedus asfik]# chown root.root /home/vpopmail/bin/vchkpw

Ubah file script supervise untuk qmail-smtpd (/service/qmail-smtpd/run) menjadi seperti ini :

#!/bin/sh 
PATH=$PATH:/usr/local/bin:/var/qmail/bin 
export PATH 
VPOPMAILUID=`id -u vpopmail` 
VPOPMAILGID=`id -g vpopmail` 
MAXSMTPD=30 
exec /usr/local/bin/softlimit -m 4000000 \
tcpserver -H -R -v -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" -u "$VPOPMAILUID" -g "$VPOPMAILGID" \
0 25 qmail-smtpd digimon.cs.perbanas.edu /home/vpopmail/bin/vchkpw /bin/true 2>&1

Ganti digimon.cs.perbanas.edu dengan host yang FQDN sesuai dengan host yang menjalankan qmail tersebut, kemudian perhatikan juga letak PATH dari file /home/vpopmail/bin/vchkpw dan file /bin/true, apakah berbeda dengan konfigurasi server anda. Kemudian perhatikan juga penulisan script anda, jika anda salah atau kurang teliti yang menyebabkan error, kemungkinan authentikasi akan ditolak atau yang lebih parah server anda bisa menjadi open relay dan ini sesuatu yang sangat tidak kita harapkan. Kemudian restart qmail anda (qmailctl restart).

Untuk mengetestnya, anda bisa mencoba dari internal network anda dahulu. Anda harus meng-encode user dan password, caranya bikin suatu file script dengan menggunakan perl misalnya file base64.pl yang isinya seperti ini (Thanks to Bramsi Prenata) :

use MIME::Base64; 
print ('Username => '); 
print encode_base64('[email protected]'); 
print ('Password => '); 
print encode_base64('motauajadeh'); 

Ganti [email protected] dan motauajadeh dengan username dan password yang sesuai, kemudian kita encode username dan password tersebut :

Username => YXNmaWtAdHJ1YmFncm91cC5jb20= 
Password => YQ== 

Test telnet ke server tapi tanpa authentikasi :

[asfik@wedus asfik]$ telnet 10.126.10.13 25 
Trying 10.126.10.13... 
Connected to 10.126.10.13. 
Escape character is '^]'. 
220 digimon.cs.perbanas.edu ESMTP 
mail from : [email protected] 
250 
ok 
rcpt to : [email protected] 
553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1) 
quit 
221 digimon.cs.perbanas.edu 
Connection closed by foreign host. 

Anda harus mendapatkan pesan error, jika tidak berarti ada sesuatu yang tidak berese, kecualu anda memang merelay domain its-sby.edu :), sekarang kita coba dengan menggunakan authentikasi, ingat masukkan username dan password seperti diatas :

[asfik@wedus asfik]$ telnet 10.126.10.13 25 
Trying 10.126.10.13... 
Connected to 10.126.10.13. 
Escape character is '^]'. 
220 digimon.cs.perbanas.edu ESMTP 
auth login 
334 VXNlcm5hbWU6 
YXNmaWtAdHJ1YmFncm91cC5jb20= 
334 UGFzc3dvcmQ6 
YQ== 
235 ok, go ahead (#2.0.0)
mail from : [email protected] 
250 ok 
rcpt to : [email protected] 
250 ok 
data 
354 go ahead 
Subject : testing qmail-smtpd-auth 
. 
250 ok 1048235800 qp 21936 
quit 
221 digimon.cs.perbanas.edu 
Connection closed by foreign host. 

Jika sukses, langkah selanjutnya adalah mengkonfigurasi email client anda (MUA), lihat seksi 5.

4. Jika anda menggunakan vmailmgr

Install vmailmgr seperti biasa, atau jika diserver anda sudah terdapat vmailmgr maka anda harus mengganti mode file checkvpw menjadi SUID root, misalnya jika file tersebut terdapat pada direktori /usr/local/bin, maka :

[root@wedus src]# chmod 4755 /usr/local/bin/checkvpw 

Ubah file script supervise untuk qmail-smtpd (/service/qmail-smtpd/run) menjadi seperti ini :

#!/bin/sh 
PATH=$PATH:/usr/local/bin:/var/qmail/bin 
export PATH 
QMAILDUID=`id -u qmaild` 
NOFILESGID=`id -g qmaild` 
MAXSMTPD=30 
exec /usr/local/bin/softlimit -m 4000000 \
tcpserver -H -R -v -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" -u "$QMAILDUID" -g "$NOFILESGID" \
0 25 qmail-smtpd digimon.cs.perbanas.edu /usr/local/bin/checkvpw /bin/true maildir 2>&1 

Ganti digimon.cs.perbanas.edu dengan host yang FQDN sesuai dengan host yang menjalankan qmail tersebut, kemudian perhatikan juga letak dari file /usr/local/bin/checkvpw dan file /bin/true, apakah berbeda dengan konfigurasi server anda. Kemudian perhatikan juga penulisan script anda, jika anda salah atau kurang teliti yang menyebabkan error, kemungkinan authentikasi akan ditolak atau yang lebih parah server anda bisa menjadi open relay dan ini sesuatu yang sangat tidak kita harapkan. Kemudian restart qmail anda (qmailctl restart).

Untuk mengetestnya, anda bisa mencoba dari internal network anda dahulu. Anda harus meng-encode user dan password, caranya bikin suatu file script dengan menggunakan perl misalnya file base64.pl yang isinya seperti ini (Thanks to Bramsi Prenata) :

use MIME::Base64; 
print ('Username => '); 
print encode_base64('[email protected]'); 
print ('Password => '); 
print encode_base64('motauajadeh'); 

Ganti [email protected] dan motauajadeh dengan username dan password yang sesuai, kemudian kita encode username dan password tersebut :

Username => YXNmaWtAdHJ1YmFncm91cC5jb20= 
Password => YQ== 

Test telnet ke server tapi tanpa authentikasi :

[asfik@wedus asfik]$ telnet 10.126.10.13 25 
Trying 10.126.10.13... 
Connected to 10.126.10.13. 
Escape character is '^]'. 
220 digimon.cs.perbanas.edu ESMTP 
mail from : [email protected] 
250 
ok 
rcpt to : [email protected] 
553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1) 
quit 
221 digimon.cs.perbanas.edu 
Connection closed by foreign host. 

Anda harus mendapatkan pesan error, jika tidak berarti ada sesuatu yang tidak berese, kecualu anda memang merelay domain its-sby.edu :), sekarang kita coba dengan menggunakan authentikasi, ingat masukkan username dan password seperti diatas :

[asfik@wedus asfik]$ telnet 10.126.10.13 25 
Trying 10.126.10.13... 
Connected to 10.126.10.13. 
Escape character is '^]'. 
220 digimon.cs.perbanas.edu ESMTP 
auth login 
334 VXNlcm5hbWU6 
YXNmaWtAdHJ1YmFncm91cC5jb20= 
334 UGFzc3dvcmQ6 
YQ== 
235 ok, go ahead (#2.0.0)
mail from : [email protected] 
250 ok 
rcpt to : [email protected] 
250 ok 
data 
354 go ahead 
Subject : testing qmail-smtpd-auth 
. 
250 ok 1048235800 qp 21936 
quit 
221 digimon.cs.perbanas.edu 
Connection closed by foreign host. 

Jika sukses, langkah selanjutnya adalah mengkonfigurasi email client anda (MUA)

5. Mengkonfigurasi MUA (Mail User Agent)

Karena disini saya tidak pakai Microsoft Outlook�, The Bat� ataupun Eudora�, jangan tanyakan kepada saya bagaimana cara mengkonfigurasinya :) Yang akan saya uraikan disini adalah dengan menggunakan mutt, KMail, Ximian Evolution, dan Netscape� Communicator untuk Linux.

mutt (1.4i)

Jika anda pengguna mutt seperti saya (viva mutt!), anda harus menginstall libesmtp dan mengepatch mutt anda dengan patch libesmtp agar bisa melakukan authentikasi dengan server.

Download libesmtp, mutt dan patch untuk mutt :

[root@wedus source]# wget http://www.stafford.uklinux.net/libesmtp/libesmtp-1.0rc1.tar.bz2
[root@wedus source]# wget ftp://ftp.mutt.org/mutt/mutt-1.4i.tar.gz 
[root@wedus source]# wget \
http://www.deez.info/sengelha/projects/mutt/libesmtp/patch-1.4.sde.libesmtp.3 

Ekstrak :

[root@wedus source]# tar -jxvf libesmtp-1.0rc1.tar.bz2 
[root@wedus source]# tar -xzvf mutt-1.4i.tar.gz 

Install libemstp :

[root@wedus source]# cd libesmtp-1.0rc1 
[root@wedus libesmtp-1.0rc1]# ./configure 
[root@wedus libesmtp-1.0rc1]# make 
[root@wedus libesmtp-1.0rc1]# make install 

Install dan patch mutt :

[root@wedus libesmtp-1.0rc1]# cd ../mutt-1.4 
[root@wedus mutt-1.4]# patch -p1 < ../patch-1.4.sde.libesmtp.3 
[root@wedus mutt-1.4]# ./configure --with-libesmtp 
[root@wedus mutt-1.4]# make 
[root@wedus mutt-1.4]# make install

Kemudian pada file konfigurasi mutt anda (.muttrc) anda bisa tambahkan misalnya seperti ini (ganti dengan konfigurasi yang sesuai ):

set smtp_host = digimon.cs.perbanas.edu
set smtp_auth_username = [email protected]
set smtp_auth_password = motauajadeh

KMail (1.4.1)

Dari menu Setting -> Configure KMail -> Network -> Sending, kemudian anda bisa memodifikasi atau menambah baru, misalnya klik Add -> SMTP. Kemudian pada tab General -> Name, Host, dan Port isikan sesuai dengan konfigurasi anda. Kemudian beri tanda cek pada "Server requires authentication". Isikan Login dan Password yang sesuai, jika ingin menyimpannya berikan tanda cek pada "Store SMTP password in configuration file". Kemudian yang terakhir dan paling penting pada tab Security , pilih None pada Encryption dan pilih LOGIN pada Authentication Method

Ximian Evolution (1.0.3)

Dari menu Tools -> Mail Settings, pilih pada account anda untuk diedit atau klik Add untuk menambah, misalnya klik Edit, pilih pada tab Sending Mail. Kemdian pada Server Typte pilih SMTP, isikan host yang sesuai pada field Host. Beri tanda cek pada "Server requires authentication", kemudian pilih Password pada Authentication Type. Terakhir, masukkan username anda pada field Username

Netscape� Communicator (4.79)

Dari menu Edit -> Preferences -> Mail and Newsgroup, pilih pada item Mail Servers. Pada kolom Outgoing mail server, isikan smtp host dan username yang sesuai pada Outgoing mail ( SMTP ) server dan pada Outgoing mail server username. Kemudian pilih "If possible" pada Use Secure Socket Layer (SSL) or TLS for outgoing message.

6. Referensi