Monday, October 17, 2011

Panduan Menggunakan Qmail

Sebuah sistem UNIX biasanya langsung dibundel oleh MTA (Mail Transfer
Agent) bernama Sendmail, karena sebenarnya Sendmail adalah mail server paling
popular dan paling tua di Internet. Sendmail mempunyai konfigurasi default yang
diletakkan pada /etc/sendmail.cf yang dengan konfigurasi tersebut email sudah
dapat keluar masuk. Namun dari beberapa pengalaman ternyata Sendmail memiliki
banyak kelemahan, antara lain file sendmail.cf yang berupa teks berukuran besar
dan terdiri atas banyak baris dengan kode-kode yang sulit dipelajari. Oleh
karenanya sendmail banyak memiliki bug.
Kemudian muncullah MTA bernama Qmail yang dibuat oleh seseorang yang
tidak puas atas kinerja dan buggy Sendmail. Qmail dikembangkan sekitar tahun 96
oleh seorang profesor matematika bernama Dan Bernstein. Qmail dikembangkan
karena terdapat banyak bugs yang terdapat di dalam Sendmail. Seperti yang
dituliskan dalam home page resmi Qmail di http://cr.yp.to/~djb/qmail.html , Qmail
merupakan pengganti dari Sendmail dan memang dalam instalasi default Qmail ada
beberapa hal yang tidak kompatibel dengan Sendmail. Sampai saat ini pemakai
Qmail terus berkembang.
Qmail tidak merepotkan sewaktu instalasi dan juga mempunyai file konfigurasi
yang sederhana yang terdiri atas beberapa file yang diletakkan pada direktori
/var/qmail/control. Keunggulan utama Qmail dibandingkan dengan Sendmail adalah
masalah keamanan. Berikut alasan bahwa Qmail memiliki keamanan yang lebih
baik:

Tidak memperlakukan program dan files sebagai alamat
Sendmail melihat program dan files sebagai sebuah alamat. Kelemahan dari
hal ini yaitu bila beberapa user tidak diizinkan untuk memakai program atau
menulis file (tidak mempunyai hak ) mengakibatkan Sendmail terus menerus
mencobanya. Berbeda dengan Qmail yang memperlakukan program sebagai
program dan file sebagai file. Qmail bisa disuruh untuk menjalankan program
tapi atas nama user tersebut.

Sesedikit mungkin menggunakan setuid dan login root
Sendmail ditulis sebagai setuid sehingga menyebabkan banyak eksploit dan
bug, sedangkan Qmail mempunyai satu program yang memakai setuid, yaitu
qmail-queue. Sendmail dijalankan di bawah user root, hal ini mengakibatkan
proteksi sistem terhadap sesuatu kesalahan menjadi tidak berlaku karena
root dapat melakukan semuanya. Hal ini bisa berakibat buruk. Qmail berjalan
atas namanya sendiri yang terdiri atas enam user. Sedangkan program Qmail
yan berjalan atas nama root adalah qmail-start dan qmail-lspawn.

Memisahkan beberapa fungsi menjadi beberapa program independent
Seperti yang telah disebutkan, Qmail terdiri atas enam user yang masig-
masing user tersebut menjalankan program yang berbeda. Berbeda dengan
Sendmail yang hanya mempunyai sebuah file eksekusi, Qmail memisahkan
masing-masing fungsi seperti untuk menangani antrian, menangani deliveri
ke host remote, deliveri ke hostloakl dan sebagainya menjadi beberapa
program independent. Dan masing-masing program ini berjalan dengan nama
yang berbeda, misalnya qmail-send oleh qmaill dan qmail-queue oleh qmailq.

Sederhana dan kecil
Qmail dikatakan sederhana dan kecil karena Qmail memisahkan mekanisasi
untuk forwarding, aliasing dan mailing-list. Selain itu Qmail hanya mempunyai
satu mode pengiriman, yaitu fast+queued. Qmail-send yaitu program untuk
mengirimkan mail dipicu oleh adanya antrian baru. Sedangkan Sendmail
mempunyai beberapa mode, yaitu slow+queued dan fast+unsafe.
Cara kerja Qmail :
Secara grafis inilah cara kerja Qmail :
qmail-smtpd --- qmail-queue --- qmail-send --- qmail-rspawn --- qmail-remote
qmail-inject
qmail-clean qmail-lspawn --- qmail-local
Setiap email akan masuk ke qmail-queue direktori yang dikerjakan oleh
qmail-queue. Qmail-queue mempunyai direktori untuk mengerjakan antrain, yaitu
/var/qmail/queue. Qmail-queue akan ada bila ada permintaan yang biasanya
digenerate oleh qmail-inject untuk email-lokal, qmail-smtpd untuk message yang
diterima lewat SMTP, qmail-local untuk email yang diforward dan qmail-send untuk
message yang bouncing.
Setiap email diantarkan ke tempat tujuan oleh qmail-send dan bekerja sama
dengan qmail-rspawn untuk message remote dan qmail-lspawn untuk email lokal.
Qmail-clean juga ikut bekerja dalam proses pengantaran di atas. Keempat program
tadi adalah daemon yang terus-menerus idle dalam sistem yang memakai qmail.
Antrian didesain untuk bisa tahan crash dengan syarat file sistem yang dipakainya
juga harus tahan crash.
Setiap email dalam antrian diberikan nomor identifikasi, misalnya 23. Antrian
yang diatur qmail-queue dipecah lagi menjadi beberapa direktori yang setiap
direktori ada file yang berhubungan dengan email 23.
mess/23 : email itu sendiri
todo/23 : amplop yang menyatakan dari mana email datang dan ke mana akan
diantarkan
intd/23 : amplop juga namun dalam proses pembuatan oleh qmail-queue
info/23 : amplop yang menerangkan alamat pengirim, setelah preprocessing
local/23 : amplop lokal yang menerangkan alamat penerima, setelah
preprocessing
remote/23
: amplop remote yang menerangkan alamat penerima, setelah
preprocessing
bounce/23
: hasil antrian yang gagal
Berikut ini adalah level-level yang terjadi dalam sebuah email. Positif (+) berarti ada,
negatif (-) tidak ada dan (?) berarti mungkin ada mungkin tidak.
S1. –mess –intd –todo –info –local –remote –bounce
S2. +mess –intd –todo –info –local –remote -bounce
S3. +mess +intd –todo –info –local –remote -bounce
S4. +mess ?intd +todo ?info ?local ?remote –bounce (queued)
S5. +mess –intd –todo +info ?local ?remote ?bounce (preprocessed)
Untuk memasukkan email ke dalam antrian, qmail-queue menciptakan file
dalam direktori terpisah, yaitu pid/ dengan nama yang unik. Lalu file sistem
memberikan nomor inode. Qmail-queue mencari nomor tersebut, misalnya 23. Pada
level ini message 23 mencapai keadaan S1.
Lalu qmail-queue mengubah nama pid/apa_saja menjadi mess/23 dan naik
ke keadaan S2 dan menulis pesan ke mess/23. Lalu qmail-queue membuat intd/23
dan keadaan berubah ke S3 dan menulis informasi amplop ke intd/23.
Pada tahap akhir qmail-queue membuat link baru, yaitu dari intd/23 ke todo/23 dan
keadaan naik ke S4. Pada saat ini email sudah sukses memasuki antrian dan untuk
selanjutnya qmail menyerahkan pekerjaan ke qmail-send.
Setelah
email
sukses
memasuki
antrian,
maka
qmail-send
harus
memutuskan apakah penerima email ini berada di lokal atau remote. Ketika qmail-
send memberitahu adanya file todo/23, maka qmail-send telah mengetahui email 23
telah mencapai level S4. Lalu info/23, local/23 dan remote/23 akan dihapus bila ada.
Lalu qmail –send akan membuat ulang info/23 dan mungkin local/23 dan remote/23.
Setelah selesai qmail-send akan membuang todo/23 dan leadaan naik ke S5. Pada
saat ini email telah selesai pada tahap preprocessed (sebelum diproses).
Email pada keadaan S5 diperlakukan dengan menandai setiap alamat di
local/23 dan remote/23 sebagai DONE dan NOT DONE.
DONE : email sukses diantarkan, atau antaran sebelumya menemui kegagalan
permanen. Atau dengan kata lain qmail-send tidak akan mecoba lagi mengantarkan
ke alamat tersebut.
NOT DONE : email yang diantarkan belum sampai ke tujuan
dengan kegagaln
sementara. Hal ini menyebabkan qmail-send terus mencoba untuk beberapa saat.
Qmail-send akan mencoba mengantarkan email yang NOT DONE pada saat
proses tidak terlalu banyak. Bila email telah diantarkan dengan sukses, qmail-send
akan memberi tanda DONE. Sedangkan bila antaran menemui kegagalan permanen
maka qmail-send akan mengirimkan catatan ke biunce/23 dan email akan diberi
tanda DONE.
Qmail-send menangani email bnounce setiap saat dengan membuat pesan bounce
ke bounce/23 dan mess/23 dan meneruskan ke qmail-inject. Setelah selesai maka
bounce/23 akan dihapus.
Ketika semua alamat di local/23 ditandai DONE, maka qmail-send akan
menghapusnya, begitu pula untuk remote/23. Ketika local/23 dan remote dihapus,
maka qmail-send akan menghapus email dari antrian dengan menghapus
bounce/23 , info/23 dan secara berangsur-angsur keadaan untuk message 23 akan
berubah ke S2 dan S1.
Bila komputer crash sewaktu qmail-queue mencoba membuat antrian untuk
sebuah email, maka email akan ditingallkan dalam keadaan S atau S3. Lalu ketika
sistem memulai lagi, qmail-send akan melihat sebuah email dalam keadaan S2dan
S3 yang lebih dari 36 jam, maka mess/23 akan dihapus. Sama halnya seperti qmail-
send melihat file dalam pid/ yang lebih dari 36 jam, maka akan dihapus.
Pembersihan tidak perlu dilakukan apabila qmail-send sedang dalam tahap
pengantaran. Kemungkinan terburuk email akan terkirimkan dua kali.
Sama halnya dengan bila komputer crash hanya beberapa saat sebelum qmail-
send memberikan tanda DONE kepada sebuah email, maka pada tahap berikutnya
setelah selesai dari crash, qmail-send akan mengatasi email yang NOT DONE.
Padahal email sudah terkirim, hanya tandanya saja yang NOT DONE.

0 comments:

Post a Comment