Creation date: 10/24/2003

procmail 2 regularXpresi

Telah dijelaskan pada bagian pertama, procmail dalam memilah email yang akan dituju akan menggunakan fungsi regular expresi (regex).
Fungsi regex di procmail tidak selalu sama dengan regex yang ada pada aplikasi lain semcam grep, egrep. Tetapi hampir semua yang bisa dilakukan oleh grep/egrep akan juga bisa dilakukan oleh procmail-regex.

Simbol-simbol

ada beberapa aturan penggunaan simbul dalam regex dan procmail, diantaranya
*cocok 0 (nol) kali, atau berulang-kali
?cocok 0 (nol) kali, atau hanya 1 kali
+cocok 1 kali, atau berulang-kali
.cocok semua karakter (numerik/alphabet)
[ ]cocok berdasarkan daftar karakter yang berada dalam kurung
^cocok bila dimulai dari
$cocok bila diakhir oleh
\paksa karakter sesudahnya sebagai karakter biasa bukan simbol regex
( )pengelompokkan

spam case

Pada tutorial kali ini kita akan membuat mail filter untuk membendung spam. Walapun ini tidak cukup ampuh untuk membendung spam bila dibandingkan dengan filter spam berdasarkan penilaian bobot/bayesian method semacam bogofilter/spamassasin/razor, tapi cukup akurat untuk alamat sender yang tidak berganti-ganti. Jadi bisa mengurangi load proses untuk bogofilter/spamassasin dan mengurangi positive-false atau negative-false output dari bogofilter/spamassasin.

Contoh alamat/sender spam mail yang masuk ke account saya.

#### spam log ####
Host/Domain Summary: Messages Received
 msg cnt   bytes   host/domain
 -------- -------  -----------
    174     1371k  bounce.iexpect.com
    134   339302   ofr.mb00.net
    118   509936   lists.postlite.com
     76   172911   msg.greatoffersmail.com
     42   192946   mail2.globalpmnet.com
     40   194823   mail1.globalpmnet.com
     36   173124   mail3.globalpmnet.com
     30   132530   mail4.globalpmnet.com
     26    81283   06.pn07.com
     22    86051   43.postnote.com
     22    82205   45.postnote.com
     18    77252   44.postnote.com
     18    60525   19.pn04.com
     18    55517   08.pn07.com
     18    54255   04.pn07.com
     16    57168   choiceandvalue.com
     16    48517   16.pn04.com
     16    37636   bestvaluenow.com
     16    35902   myquickdeals.com
     14    58657   17.pn04.com
     14    57133   47.postnote.com
     14    53717   46.postnote.com
     14    41381   48.postnote.com
     14    36101   eoffersdirect.com
     14    32512   valuesstat.com
     14    31676   quickieoffers.com
     14    29528   mybestvalue.com
     12    84317   bigtimedeals.net
     12    45114   21.pn04.com
     12    41245   ourvaluesnow.com
     12    38309   25.postnote.com
     12    36871   10.pn02.com
     12    34735   offersjust4you.com
     12    34088   14.pn04.com
     12    33200   49.postnote.com
     12    32848   myvaluesnow.com
     12    32654   bestdailyoffer.com
     12    32024   wehaveanofferforyou.com
     10    84476   jackpotentry.com
     10    76300   newfunandcool.com
     10    71206   13.bluerocketonline.com
     10    61909   looneydiscounts.com
     10    41181   granddiscounts.com
     10    40444   approveddeals.com
     10    35155   20.pn04.com
     10    28995   40.postnote.com
     10    27360   24.pn04.com
      8      773k  sadewa.inixindo.co.id
      8    80921   discountsdaily.net
      8    42229   05.pn07.com
      8    36340   18.bluerocketonline.com
      8    34416   03.pn07.com
      8    30994   stderr.sr982.com
      8    26975   01.pn01.com
      8    26823   41.postnote.com
      8    26678   mail02.luckydaily.com
      8    24210   30.pn05.com
      8    24131   09.pn02.com
      8    22988   e.ew01.com
      8    20281   mail06.emailpls.com
      6    56804   e.ss01.net
      6    47547   02.bluerocketonline.com
      6    39967   d.ss01.net
      6    39511   14.bluerocketonline.com
      6    36247   d.ew01.com
      6    31056   23.pn04.com
      6    30051   07.bluerocketonline.com
      6    27395   04.bluerocketonline.com
      6    27135   21.bluerocketonline.com
      6    25771   02.brightermail.com
      6    22255   15.postnote.com
      6    22145   11.pn02.com
      6    21623   12.pn02.com
      6    20772   11.bluerocketonline.com
      6    20274   mail.trexads.com
      6    18176   19.postnote.com
      6    18068   06.bluerocketonline.com
      6    17818   02.pn07.com
      6    17360   15.pn02.com
      6    14477   18.pn04.com
      6    14229   j.ew01.com
      6    13423   13.pn02.com
      6    12476   22.pn04.com
      6    12261   03.bluerocketonline.com
      4    50426   19.bluerocketonline.com
      4    49795   u.ew01.com
      4    42758   08.bluerocketonline.com
      4    40190   t.ew01.com
      4    35529   04.brightermail.com
      4    35240   22.bluerocketonline.com
      4    24629   k.ew01.com
      4    21548   cashclaim.net
      4    20696   42.postnote.com
      4    19965   17.bluerocketonline.com
      4    16872   mail02.emailpls.com
      4    14404   b.ss01.net
      4    14280   20.postnote.com
      4    12606   mail05.emailpls.com
      4    11682   24.bluerocketonline.com
      4    10992   08.postnote.com
      4    10960   mail07.emailpls.com
      4    10823   04.postnote.com
      4    10482   12.bluerocketonline.com
      4     9577   17.postnote.com
      4     9254   mail01.luckydaily.com
      4     8772   orderfreebies.com
      4     8458   irresistableoffer.com
      4     8180   26.bluerocketonline.com
      4     8149   20.bluerocketonline.com
      4     7788   tonsoffreebies.com
      4     7612   servitall.com
      4     6738   optinmegamarketers.com
      2    37459   webmail.co.za
      2    36741   msn.com
      2    18331   h.ss01.net
      2    17531   x.ew01.com
      2    17404   01.bluerocketonline.com
      2    15319   visicommedia.info
      2    15223   peqigqokiq.at133.com
      2    15102   f.ew01.com
      2    14994   10.bluerocketonline.com
      2    14867   z.ew01.com
      2    11388   09.bluerocketonline.com
      2    10521   erationalnews.com
      2    10117   07.postnote.com
      2    10029   16.bluerocketonline.com
      2    10009   a.ew01.com
      2     9873   06.postnote.com
      2     9844   a.ss01.net
      2     9577   09.postnote.com
      2     9425   05.postnote.com
      2     9165   22.postnote.com
      2     8936   mail.giantwebmedia.com
      2     7871   21.postnote.com
      2     7713   jawkpwsvkw.at133.com
      2     7571   avtolterot.at133.com
      2     7243   23.postnote.com
      2     7243   02.postnote.com
      2     7145   mail4.optinmaildomain.com
      2     6437   18.postnote.com
      2     6269   s.ew01.com
      2     6077   b.ew01.com
      2     5975   07.pn07.com
      2     5473   mail09.emailpls.com
      2     5448   24.postnote.com
      2     5185   mail.artromail.com
      2     4867   y.ew01.com
      2     4541   mail16.optinmaildomain.com
      2     4523   23.bluerocketonline.com
      2     4449   25.bluerocketonline.com
      2     4272   optmeinplease.com
      2     4071   g.ew01.com
      2     4019   05.bluerocketonline.com
      2     3913   03.brightermail.com
      2     3906   c.ew01.com
      2     3873   h.ew01.com
      2     3856   giganticmarketing.com
      2     3850   holymailpromoters.com
      2     3829   reply.yahoo.com
      2     3790   perfectproductsonthenet.com
      2     3781   americanoptinmail.com
      2     3775   v.ew01.com
      2     3691   patriotpromotions.net
      2     3671   optinoptions.com
      2     3661   playpalpromotions.com
      2     3655   bigdreammarketing.com
      2     3631   modulemarketing.net
      2     3603   dosethepeople.com
      2     3603   quickfixpromotions.com
      2     3592   maxummarketers.com
      2     3535   mail07.epp03.com
      2     3509   optindoces.com
      2     3505   goodtimedeals.com
      2     3499   viopromotions.com
      2     3476   terminatormarketing.com
      2     3467   betterlivingdeals.com
      2     3459   gigadeals.net
      2     3443   machinegunmarketing.com
      2     3417   americandreamdeals.net
      2     3415   optinpromotionz.com
      2     3399   mail05.epp02.com
      2     3363   cafinedeals.com
      2     3357   mail05.epp01.com
      2     3308   promptmailings.com
      2     3308   optinhype.com
      2     3287   optinmarketpush.com
      2     3243   sweetbutterdeals.com
      2     3224   optinpromotions.net
      2     3199   optinimpressions.com
      2     3143   wizardmarketing.net
      2     3119   americandreamdeals.com
      2     3100   givemadoce.com
      2     2648   from=<>
      2     2607   proboards13.com
      1     1426   wantsomemarketmagic.com
List diatas ini sebaiknya anda tulis ulang kedalam sebuah file text biasa di linux-box anda, misal diberi nama logspam. Ini nanti akan dipakai untuk belajar penggunaan regex.

bagian satu - dasar regex dgn simbol

Bila contoh diatas diselesaikan dengan fasilitas procmail biasa tentu anda akan membuat semacam ini.

:0
* ^From.*bounce\.iexpect\.com
/dev/null
Pada bagian akhir dari kata bounce ditambahkan \ sebelum tanda titik. Ini bermaksud agar tanda titik tidak dianggap sebagai simbol regex. Jadi secara keseluruhan bagian itu bisa dibaca "cek apakah mail berasal dari bounce.expect.com".

Cara diatas betul, tidak salah, tapi dapat dibayangkan, itu akan membutuhkan berapa puluh baris untuk membuat semua filter.

misal untuk spam dengan domain sender sebagai berikut
mail2.globalpmnet.com
mail1.globalpmnet.com
mail3.globalpmnet.com
mail4.globalpmnet.com
Tidak salah bila membuat empat buat filter procmail dengan cara diatas. Tapi load dari proses akan menjadi lama. Tentunya ini tidak diharapkan bukan ?.
mmmm
Bisa menyingkatnya menjadi
:0
* ^From.*globalpmnet\.com
/dev/null
Ini bisa digunakan, dan secara teoritis akan cocok dengan semua karakter sebelum globalpmnet.com. atau bila ingin test dengan grep/egrep bisa dibuatkan script sederhana sebagai berikut.
adi@uler adi$ cat > testgrep
egrep -i 'globalpmnet\.com' logspam
^d (tekan kontrol d bersamaan)
adi@uler adi$ ls
Maildir/  procmailrc  testgrep
adi@uler adi$ chmod +x testgrep
logspam adalah daftar spam diatas.
adi@uler adi$ ./testgrep
     42   192946   mail2.globalpmnet.com
     40   194823   mail1.globalpmnet.com
     36   173124   mail3.globalpmnet.com
     30   132530   mail4.globalpmnet.com
Yup, untuk sementara masalah terpecahkan. Tapi bagaimana bila ternyata kita mempunyai rekan kerja yang dengan email [email protected] ?. Tentunya akan hilang juga terkirim ke /dev/null.

Contoh sisipkan goodguy.globalpmnet.com kedalam logspam

adi@uler adi$ echo "goodguy.globalpmnet.com" >> logspam
adi@uler adi$ ./testgrep
     42   192946   mail2.globalpmnet.com
     40   194823   mail1.globalpmnet.com
     36   173124   mail3.globalpmnet.com
     30   132530   mail4.globalpmnet.com
goodguy.globalpmnet.com
Untuk mengatasi hal tersebut, dibutuhkan alat bantu berupa simbol regex. Edit file testgrep menjadi
egrep -i 'mail[0-9]\.globalpmnet\.com' logspam

adi@uler adi$ ./testgrep
     42   192946   mail2.globalpmnet.com
     40   194823   mail1.globalpmnet.com
     36   173124   mail3.globalpmnet.com
     30   132530   mail4.globalpmnet.com
Perintah regex diatas bisa dibaca "cek mail(cocokan dengan daftar).globalpmnet.com"
Bila dituliskan di procmail menjadi
^From.*mail[0-9]\.globalpmnet\.com
Bagaimana bila suatu hari server spam bertambah menjadi mail99.globalpmnet.com atau mail234.globalpmnet.com, apakah regex diatas dapat berfungsi ? sudah pasti jawabannya dengan mencoba dulu disisipkan kedalam spamlog dan ditest ulang.
Secara default script diatas hanya akan mencocokan 1 karakter didalam list. jadi yang cocok hanya mail0, mail1,...mail8, mail9.
Agar dapat berfungsi dengan sempurna edit kembali dengan menambahkan simbol + di testgrep dan jangan lupa untuk mengedit-nya juga di procmailrc:
egrep -i 'mail[0-9]+\.globalpmnet\.com' logspam
Terkadang juga dapat ditemui, beberapa spam mempunyai akhiran yang identik. biasanya berupa alamat email yang digunakan untuk menghapus email address dari database mereka (walau sebetulnya hanya memperburuk keadaan). misal "please send to [email protected] to remove your email address from our database" atau terkadang [email protected].
untuk melakukan regex pada remove atau removeme dapat dilakun dengan
egrep -i 'remove(me)?\@' logspam
atau pada procmailrc
:0B
* remove(me)?\@
/dev/null
ini akan cocok dengan kriteria remove@ dan removeme@

bagian dua - multiple domain

Contoh diatas dapat diterapkan pula untuk kasus dibawah, dimana spam sender mempunyai banyak nama domain.
      8    42229   05.pn07.com
      8    34416   03.pn07.com
      8    26975   01.pn01.com
      8    24210   30.pn05.com
      8    24131   09.pn02.com
      6    31056   23.pn04.com
      6    22145   11.pn02.com
Dapat dipecahkan dengan solusi sebagai berikut
egrep -i '([0-9]+\.)pn([0-9]+\.)com' logspam
dan pada procmailrc
* ^From.*([0-9]+\.)pn([0-9]+\.)com

bagian tiga - complex regex

Kompleks regex akan membantu untuk memperkecil load proses dan parsing.
Misal yang akan difilter adalah spam dengan nama domainnya ada kata "value" misal
     16    57168   choiceandvalue.com
     16    37636   bestvaluenow.com
     14    32512   valuesstat.com
     14    29528   mybestvalue.com
     12    41245   ourvaluesnow.com
     12    32848   myvaluesnow.com
Seperti sebelumnya, dapat dibuat 5 buat filter untuk domain diatas. Tetapi untuk kasus procmail hal ini akan memperlambat proses, karena harus dipaksakan mecoba satu persatu filter.

Dengan membuat filter yang lebih kompleks, dapat dibuat satu kali proses untuk memeriksa banyak nama domain. Untuk kasus diatas dapat dibuatkan solusi regex sebagai berikut:

egrep -i '((our|my|best)?|choiceand)?value(s)?(stat|now)?\.com' logspam
dan pada procmailrc dapat dituliskan
^ From.*((our|my|best)?|choiceand)?value(s)?(stat|now)?\.com
bila dibuka maka sesunguhnya regex diatas akan cocok untuk banyak kriteria.
ourvalue.com
ourvalues.com
ourbestvalue.com
ourbestvalues.com
ourchoiceandvalue.com
ourchoiceandvalues.com
... dan seterusnya


kembali ke [ daftar ] dokumentasi lainnya

Hosted by www.Geocities.ws

1