Creation date: 10/08/2003

Procmail-id-BasicLevel

Tutorial ini terbagi atas dua bagian, ini yang pertama, hanya membahas masalah utilitas di procmail.
Dan yang kedua membahas pengunaan regular expresi di procmail.

Pra-syarat

Untuk menjalankan semua tutorial ini, anda harus menyiapkan procmail yang sudah terinstall, sebuah mailserver (smtp server bukan pop atau imap) yang sudah berjalan normal, dan user untuk percobaan.

Pendahuluan

Procmail adalah suatu program yang dibuat untuk memproses mail yang datang pada tingkat local delivery. Cara kerja program ini yang utama untuk meneruskan email sesuai dengan tingkat filter dan tujuan akhir mail.

Atau bila ternyata oleh admin, MTA (mail transfer agent) tidak menggunakan procmail sebagai MDA (mail delivery agent), dapat juga di letakkan pada file .forward pada home direktori user. Dengan syntax sebagai berikut pada file .forward:

	"|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #username"
ganti username dengan login anda, dan tanda petik dua (") pada awal dan akhir juga harus di tulis.
Pastikan juga letak binary procmail sudah pada direktori yang benar.

Format .procmailrc

Format satu buah file procmailrc (lazimnya):
  1. variable
  2. awal proses/pemisah proses atau colon line
  3. fungsi regular expresi(regex)/ kondisi
  4. aksi yang diambil
misal

SHELL=/bin/bash		<-- variable

:0 			<-- awal proses
* ^Subject: .*linux 	<-- regex
$DEFAULT 		<-- aksi yang diambil

colon line (aka ":" )

Colon line menandakan suatu blok proses filtering dimulai.
Atribut yang ada pada colon line adalah: H B b h f c w i dan file-lock
Format penulisan :
:0 atau
:0 atribut atau
:0: file-lock atau
:0 atribut : file-lock atau
H
dilakukan regex pada header email (default pada procmail)
B
dilakukan regex pada body/pesan email
h
mengambil header email untuk diproses
b
mengambil body email untuk diproses
c
copi email pada proses ini untuk dikirim ke proses berikutnya
f
forward proses email ke external program
w
tunggu hingga proses external selesai
i
forward proses email ke external program dan abaikan error yang terjadi
file-lock
digunakan untuk menandai bahwa proses sedang berlangsung, agar mailbox tidak corup. Penting dipasang pada mbox format

variable procmail

Beberapa parameter dapat digunakan di file procmailrc untuk mengatur kerja dari procmail.
Untuk yang baru memulai memakai procmail ada bagusnya bila memakai fasilitas verbose untuk meng-trace proses filtering

SHELL=/bin/bash
untuk menentukan jenis shell yang digunakan
MAILDIR=$HOME
direktory acuan untuk semua relative path/file
DEFAULT=$HOME/Maildir/
default spool email yang akan dipakai, bila tujuan akhir tidak didefinisikan
LOGFILE=$MAILDIR/procmail.log
tempat menyimpan semua logging procmail
LOG="---LOGGING-->"
header logging
VERBOSE=yes
menghidupkan fasilitas verboses proses
LOGABSTRACT=all
tangkap semua aktifitas proses
Apabila proses filter yang anda buat sudah sesuai dengan keinginan, maka proses logging dapat dimatikan dengan memberikan tanda # didepan VERBOSE dan LOGABSTRACT
Untuk informasi yang lebih lengkap dapat dibaca pada manual procmail atau bisa ke procmail quick references guide.

memulai Procmail

Untuk memulai menggunakan procmail anda harus meletakkan semua filter yang anda buat di file /etc/procmailrc atau pada home direktori anda dengan nama .procmailrc. Perbedaan mendasar dua file itu hanya jangkauan user yang dipengaruhi, pada /etc berarti untuk semua user, pada home direktori hanya untuk user tersebut.

Sebuah filter procmail selalu di awali dengan :0 . Awalan ini nantinya juga akan digunakan untuk mendefinisikan file locking.
Baris kedua mendefinisikan jenis filter yang dipakai. Tanda * (bintang/shift + 8) menandakan dimulainya regular expression atau proses filter.

filter email-address
Dalam latihan ini, dibuat seorang user untuk percobaan procmail, misal user tono, dan dibuatkan file .procmailrc untuk user tono di home direktorinya

	root@uler root# useradd tono
	root@uler root# su - tono
	tono@uler tono$ vi .procmailrc
contoh isi file procmailrc
	SHELL=/bin/bash
	MAILDIR=$HOME
	LOGFILE=$MAILDIR/procmail.log
	LOG="---LOGGING--> "
	VERBOSE=yes
	LOGABSTRACT=all
	COMSAT=no

	:0
	* ^From.*root
	$MAILDIR/test
Isi procmailrc diatas dapat dibaca, filter semua email (yang mempunyai header) berasal dari root dan bila benar maka simpan email tersebut ke file (mailbox format) test.
Seperti tertulis diatas apabila kita hanya membuat :0 tanpa memberikan atribut apapun, maka akan dianggap sama dengan :0H, atau dibaca lakukan regex pada header email.

Kemudian test kirim email dari root ke user tono yang telah diedit procmailrc-nya.

	root@uler root# mail tono < /dev/null
	No message, no subject; hope that's ok
perintah diatas berarti, kirim email ke tono dengan pesan "null" alias kosong.
Sekarang kita lihat isi dari file lognya
	tono@uler tono$ cat procmail.log
	---LOGGING--> procmail: [1836] Mon Oct 13 11:11:32 2003
	procmail: Assigning "LOGABSTRACT=all"
	procmail: Assigning "COMSAT=no"
	procmail: Assigning "COMSAT=no"
	procmail: Match on "^From.*root"
	procmail: Assigning "LASTFOLDER=/home/users/tono/test"
	procmail: Opening "/home/users/tono/root"
	procmail: Acquiring kernel-lock
	From [email protected]  Mon Oct 13 11:11:32 2003
	  Folder: /home/users/toni/root
Hasilnya pada baris procmail: Match on "^From.*root" menunjukkan kriteria cocok pada email yang dikirim user root. Dan procmail: Assigning "LASTFOLDER=/home/users/tono/test" meneruskan proses tersebut ke file bernama test

filter subject email
Sekarang kita edit procmail menjadi

	:0
	* ^Subject:.*gunung
	$MAILDIR/root
ini akan memfilter semua email yang mempunyai (header) subject (yang ada kata) gunung.
	root@uler root# mail tono -s "naik gunung" < /dev/null
hasilnya
	procmail: Match on "^Subject:.*gunung"
filter pada body message
Filter ini akan mencari seluruh bagian dari body email, apabila ada yang sesuai dengan kriteria maka dilakukan proses selanjutnya, untuk melaksanakan filter pada body, maka atribut B harus dipakai.
Bila atribut B dipakai maka, secara otomatis atribut H akan di-disable. Misal:
	:0B
	* ular
	$MAILDIR/test
kita buatkan file messagenya
	root@uler tono# cat > pesan
	pada hari minggu
	diajak ayah ke kebun binatang
	disana ada ular
	^d
lalu dimasukkan ke email
	root@uler toni# mail tono < pesan
dan hasilnya di procmail.log
	procmail: Match on "ular"
proses pada isi header/body-mail
Proses pada email diperlukan, bila suatu ketika dibutuhkan data-data tertentu yang dari email yang datang. misal mengumpulkan semua header dari email.
	:0h
	$MAILDIR/testheader
Misal dikirim email, maka akan muncul file baru testheader yang berisi header email, silakan buka file tersebut.
Penggunaan atribut h/b dapat juga digunakan bersama-sama atribut H/B untuk proses filteringnya. Misal :
	:0h atau :0Hh
	* ^Subject:.*spam
	$MAILDIR/spam
Bila ingin mengambil isi message(body) mail saja diperlukan atribut b. misal
	:0b atau :0Hb
	* ^TO_milis-linux
	$MAILDIR/milis-linux

memforward email
Selain menyimpan tujuan akhir email ke dalam file, procmail juga memungkinkan email yang datang untuk diforward ke email address yang lain. Dengan memakai tanda "!" (aphostrope) pada tujuan akhir.

	:0
	* Subject:.*bounce
	! postmaster
contoh diatas akan memforward email dengan subject bounce ke postmaster smtplocal.
	:0
	* Subject:.*virus
	! [email protected], [email protected]
contoh di atas akan memforward email ke external mail server, untuk memforward kebanyak tujuan dapat di pakai tanda koma sebagai pemisah

trigger aplikasi
Procmail juga dapat digunakan untuk mentrigger suatu aplikasi bila suatu kriteria dipenuhi. Karena difungsikan sebagai trigger, maka ada baiknya bila tujuan akhir dari procmail diset /dev/null

	DEFAULT=/dev/null
	
	:0
	* From .*root
	| touch "test-trigger"
Perintah diatas membuat file test-trigger bila ada email yang berasal dari root

Filter dengan Logika "and" dan "or"
Logika and dapat dibuat dengan membuat filter yang bertingkat. Atau setelah cocok filter 1 harus cocok filter berikutnya.

	:0
	* ^Toadilinux
	* ^Subject .*Test
	! [email protected]
Perintah diatas dapat dibaca, email dengan header to adilinux dengan subject mengandung kata Test akan di forward ke email.

Logika or didapat dengan memberi tanda | (pipe) pada 1 baris filter

	:0
	* ^Subject:.*test | ^Subject:.*coba
	/dev/null
	
	atau
	
	:0
	* ^Subject:(.*test|.*coba)
	/dev/null
	
Baris di atas dapat dibaca email dengan subyek mengandung kata test atau kata coba akan di teruskan ke /dev/null

lain-lain

procmail dengan postfix

Bila ingin mengaktifkan procmail pada postfix anda bisa menambahkan option pada file main.cf
	mailbox_command = /<where ever u put the file>/procmail
Satu hal yang harus diperhatikan adalah bila anda telah memutuskan untuk memakai procmail, maka harus ada yang user yang menangani semua email yang dikirimkan untuk root. Dalam hal ini anda harus memberikan alias untuk root. Edit file alias di /etc/postfix atau
	root@uler root# echo "root : someone" >> /etc/postfix/alias
	root@uler root# newaliases

procmail dengan fetchmail

Secara default fecthmail akan meneruskan email yang di ambil dari mail server, menuju ke local smtp(local mail server).
Agar dari fecthmail dapat langung menuju ke procmail tanpa melalui smtp, maka pada fie fetchmailrc harus ditambahkan opsi "wants mda".
misal :
	poll 202.203.204.205 with protocol POP3, with options
	user "adilinux" there with password "2000rupiah" is adi here
	with options rewrite mimedecode fetchall pass8bits
	and wants mda "/usr/bin/procmail"

procmail dengan antivirus

Bila anda ada disisi user, dan smtp server anda tidak menyediakan antivirus, maka anda dapat memasang antivirus pada procmail. Dibutuhkan satu aplikasi tambahan trashscan yang sudah tersedia pada file source clamav 0.60 pada direktory support. pada procmailrc ditambahkan
	# 1. Run TrashScan
	:0
	* multipart
	* !^X-Virus-Scan:
	| /usr/local/bin/trashscan

	# 2. Filter tagged virus mails
	:0:
	* ^X-Virus-Scan: Suspicious
	mail.virus
Panduan selengkapnya ada pada antivirus clamav

pustaka

Hosted by www.Geocities.ws

1