qSheff KLAVUZU
$Id: qSheff-Klavuzu.html,v 1.1 2006/03/03 23:37:59 afsin Exp $


qSheff; qmail-queue'nun yerine geçerek maillerin virus ve spam filtrelerinden geçirilmesini bir sağlayan araçtır. 


- Ripmime Kurulumu

qSheff, maillerin parçalanması için ripmime'ye ihtiyaç duyar. Ripmime, maili header, body, ekler şeklinde ayrı ayrı dosyalara böler.

# cd /usr/local/src
# wget http://www.pldaniels.com/ripmime/ripmime-1.4.0.6.tar.gz
# gunzip ripmime-1.4.0.6.tar.gz
# tar xvf ripmime-1.4.0.6.tar
# cd ripmime-1.4.0.6/
# make
# make install
# ripmime -V
v1.4.0.6 - December 12, 2005 (C) PLDaniels http://www.pldaniels.com/ripmime


- ClamAV Kurulumu

qSheff ile bir virus tarayıcı kullanmanız zorunlu değildir. Ancak bir virus tarayıcısı kullanmanız kesinlikle önerilir. qSheff, virus taramaları için başta ClamAV olmak üzere bir çok virus tarayıcısı ile birlikte çalışabilir. qSheff, ClamAV'a doğrudan soket bağlantısı yapabilmektedir. clamdscan veya clamscan'i çalıştıran diğer tarayıcılara göre daha az sistem kaynağı tüketmekte, daha hızlı çalışmaktır.

ClamAV'yi www.clamav.net adresinden indirebilirsiniz.

#gunzip clamav-0.88.tar.gz
#tar xvf clamav-0.88.tar
#cd clamav-0.88/
#./configure -prefix=/opt/clamav
#make
#make install

configure ile birlikte kullandığımız prefix parametresi ClamAV'ın hangi dizine kurulacağını bildirir. Eğer ClamAV'yi /usr veya /usr/local dışında bir yere qSheff'i configure ederken bu prefix'i belirtmeyi unutmayın.

#vi /opt/clamav/etc/clamd.conf

#Example //Bu satır diyezle ( # ) kapatılmalıdır.


#vi /opt/clamav/etc/freshclam.conf

#Example //Bu satırı da diyezle ( # ) kapatıyoruz.

clamd.conf dosyasında LocalSocket parametresi daha sonra qSheff kurulumunda bize lazım olacaktır.

- qSheff'in Kurulumu


#cd /usr/local/src
#wget http://www.enderunix.org/qsheff/qsheff-2.0-r1.tar.gz
#gunzip qsheff-2.0-r1.tar.gz
#tar xvpf qsheff-2.0-r1.tar
#cd qsheff-2.0-r1

Kurulum seçeneklerine göz atalım:

#./configure -help


--enable-debug

debug modunu aktif hale geçirir. Eğer qSheff hata veriyorsa bu mod aktif hale getirilir ve yanlızca make yapılarak sorun şu şekilde tespit edilmeye çalışılır:

# ./qsheff < share/sample-OK.msg
# ./qsheff < share/sample-VIRUS.msg
# ./qsheff < share/sample-SPAM.msg


Her bir komutun çıktısını inceleyerek hatayı bulmaya çalışın.


--enable-backup-all

Gelen ve giden tüm mail trafiğinin /var/qsheff/backup klasörünün altına kaydedilesini sağlar.


--enable-subject-tag

Bu özellikle birlikte spam olarak belirlenen maillerin konu kısımlarınin başına ***SPAM*** kelimesi eklenir ve mail kullanıcıya teslim edilir. Bu özellik mailin kullanıcıya iletilmesini sağladığı ve hata döndürmediği için custom-error-patch 'i kullanılmamalıdır. Kullanıcılar Outlook veya diğer mail istemcilerde filtre yazarak spam mailleri Trash'a düşürür. Böylece yanlış tanımlanan maillerin kaybı engellenmiş olur.


--enable-qmailqueue-patch

Bu yama sayesinde qmail-smtpd, qmail-queue yerine hangi programı çalıştıracağını QMAILQUEUE çevre değişkeninden bulur. Qmail'e qsheff_patch'inin ya da qmailqueue-patch uygulanmış olması gerekir. Bu yamaları contribute dizininde bulabilirsiniz.

Not: qsheff_patch'ini kullanmanız önerilir.


--enable-local-users

Yerel kullanıcılar için spam filtrelerini aktif hale getirir. Öntanımlı olarak yerel (local) kullanıcılar taranmaz, qsheff.log'da görünmez. Kendi kullanıcılarınızın tümü ve sunucunuz üzerinden ip ile relay yapan kullanıcılar yerel (local) kullanıcı olarak adlandırılır.


--enable-custom-error

qmail "permanently" hata mesajları yerine göndericiye kendi istediğiniz mesajların dönülmesini sağlar. Bu mesajlar main.h içerisinde yer alır, istenilirse değiştirilebilir. qSheff, tanımlı mesajın sonuna spam ise spam kelimesini, virus ise virus adını otomatik olarak ekler.


--enable-custom-filter


Kullanıcının tanımladığı filtre programını aktif hale getirir. Programın tam yolunu ve dönüş değerlerini qsheff.conf a yazmanız gerekir.


--with-clamd-socket

clamd'nin dinlediği soket dosyasını gösterir. qSheff bu soketi kullanarak clamd'ye bağlanır. Öntanımlı adresi /tmp/clamd'dır. Eğer clamd çalışıyorsa soket şu şekilde öğrenilebilir:

# netstat -an | grep clamd
dfdf9dc0 stream 0 0 dfe20040 0 0 0 /tmp/clamd

Buradaki /tmp/clamd clamav soket inin tutulduğu yerdir. clamd'nin dinlediği soket clamd.conf'dan ayarlanabilir.


--with-maxfiles

Her işletim sisteminin bir klasörde tutabileceği maksimum alt klasör sayısı vardır. Örneğin FreeBSD'de öntanımlı olarak 32768'dır.  backup ve quarantine dizinleri bu limite ulaştığında sistem hata verecektir. Bu sorunu çözmek için alt dizinler oluşturulmuştur. qSheff, dizinlerden biri dolduğunda diğerine geçer. backup ve quarantine dizinlerinin altında 16 alt dizin vardır. ( Örn; /var/qsheff/backup/4/ ) Eğer qSheff 'x' alt dizinine yazmaya başlamışsa backup veya quarantine dizininiz dolmak üzere demektir. Öntanımlı değeri 32000'dir. Bu değer kesinlikle işletim sisteminizin limitini geçmemelidir.


--with-qmaildir

qmail'in kurulduğu dizini seçmeye yarar. Öntanımlı ve tavsiye edilen qmail dizini /var/qmail dir.


--with-qmailgroup

qmail kullanıcısını belirtmek için kullanılır. Öntanımlı değeri qmail dir. Bu değeri de qmail kurulumu sırasında standartlara bağlı kalarak değiştirmemeniz önerilir.


--with-max-bodyline

Mail içerisindeki qSheff'in tarayacağı maksimum satır sayıdır. Öntanımlı değeri 40'dir. Bu değer sisteminizi DoS ataklarına karşı korumak içindir. Eğer bir saldırgan binlerce satırlık mailler gönderip sistem performansınızı düşürücü ataklar yaparsa qSheff yanlızca belirtilen kadar satır okuyarak performans düşüşünü engeller.


--with-clamav

ClamAV'ı aktif hale getirmek ve tam yolunu belirtmek için kullanılır.


Kuruluma başlamadan önce qmail'e kurulu olan tüm filtreleme yazılımlarını (qscanq, rav vs ...) kaldırmanız gerekir. qmail-queue'de herhangi bir sembolink link olmamalıdır:

# ls -l /var/qmail/bin/qmail-queue
-rws--x--x 1 qmailq qmail 16565 Feb 26 14:29 /var/qmail/bin/qmail-queue

configure parametrelerini kendi ihtiyaçlarınız doğrultusunda belirtmelisiniz.


# ./configure --with-clamav=/opt/clamav/ --with-clamd-socket=/tmp/clamd --enable-subject-tag --with-max-bodyline=30 --enable-local-users --enable-backup-all
# make
# make install
# /usr/local/etc/qsheff/install-wrapper.sh


Kurulum bittikten sonra aşağıdaki gibi bir görünüm olmalıdır.


#
ls -l /var/qmail/bin/qmail-queue
lrwxr-xr-x 1 root qmail 37870 Feb 28 00:22 /var/qmail/bin/qmail-queue -> /var/qmail/bin/qmail-qsheff
#
ls -l /var/qmail/bin/qmail-qsheff
-rws--x--x 1 root qmail 37870 Feb 28 00:22 /var/qmail/bin/qmail-qsheff
#
ls -l /var/qmail/bin/qmail-queue.orig
-rws--x--x 1 qmailq qmail 37870 Feb 28 00:22 /var/qmail/bin/qmail-queue.orig

Not: qmail-queue yaması enable edilmişse qmail-queue sembolink link olmayacaktır.

qSheff çalışır halde hazır demektir.


Yamaların Uygulanması:

- qsheff-patch Yaması

qmail'i qsheff-patch ile derlemenizi mutlaka öneririm. Bu yamanın içerisinde hem custom-error hem de qmailqueue yaması mevcuttur. (Kullandığınız qmail dağıtımı bu yamalardan bir kısmını içeriyor olabilir. Örneğin; netqmail, qmailqueue yamasını zaten içerir. Bu durumda bu yama uygulanamaz.)  qsheff_patch'i herhangi bir çevre değişkeni okumadığından ve doğrudan qsheff'i çalıştırdığından hem daha güvenli hem de daha hızlıdır.

Bu yamaları kullanmak için qmail'in kaynak kodlarının olduğu dizine gidilir ve yama uygulanır.

# cd /usr/local/src/qmail-1.03/
# cp /usr/local/src/qsheff-2.0/contribute/qsheff_patch.diff .
# patch < qsheff_patch.diff
patching file qmail.c
patching file qmail.h
# make setup check


Böylece qmail i qsheff yamasıyla derlemiş ve kurmuş olduk. qmail kaynak kodları bu yamaları içerse de qSheff'den aktif edilmedikçe bu özellikler pasif kalacaktır. qsheff i de enable-qmailqueue-patch ve enable-custom-error parametreleriyle derleyince işlem tamam demektir.

# cd /usr/local/src/qsheff-2.0-r1/
# ./configure --with-clamav=/opt/clamav/
--with-clamd-socket=/tmp/clamd --enable-qmailqueue-patch --enable-custom-error
# make
# make install
# /usr/local/etc/qsheff/install-wrapper.sh


qmail-queue'nun sembolink link olmayacağını göreceksiniz:

# ls -l /var/qmail/bin/qmail-q*
-r-s--x--x 1 root qmail 37838 Feb 28 01:18 /var/qmail/bin/qmail-qsheff
-rws--x--x 1 qmailq qmail 16565 Feb 26 14:29 /var/qmail/bin/qmail-queue


- qmailqueue Yaması

Eğer Bruce Guenter'in qmailqueue yamasını kullanıyorsanız (netqmail'de bu yama uygulanmıştır.) tcp.smtp aracılığıyla QMAILQUEUE çevre değişkeninin tcp.smtp dosyasında atanması gerekmektedir.

192.168.1.:allow,QMAILQUEUE="/var/qmail/bin/qmail-qsheff"

Yukarıdaki satır 192.168.1 networkunden gelen kullanıcılar için qmail-queue yerine qmail-qsheff'in çalıştırılmasını sağlar. Tüm networkler için aşağıdaki satırı eklemelisiniz:

:allow,QMAILQUEUE="/var/qmail/bin/qmail-qsheff"

NOT:
Bu yama custom-error içermez.


- custom-error Yaması

Kullanıcı tanımlı hata mesajı dönmeyi sağlar. qsheff_patch yaması bu yamayı zaten içermektedir. qmail-queue veya qsheff_patch yamalarını kullanmadan sadece bu yamayı kullanmak istiyorsanız qmail kaynak kodunu contribute dizinindeki qmail-queue-custom-error.patch ile yamalamanız gerekmektedir.

Yamaların çalıştığını görmek için qsheff.log dosyasını kontrol edebilirsiniz.


- Püf Noktası:

-- Backup özelliği aktif halde olan qSheff'de aradığım bir maili nasıl bulurum ?

İlk olarak mailin kuyruktaki ID'si bulunur. Bunun için qsheff.log, cat ve grep ile kullanılabilir.

# cat /var/log/qsheff.log | grep enderunix
28/02/06 01:19:27: QUEUE, queue=q-1141083887-164274-32338, recvfrom=, from=`afsin.taskiran@example.com', to=`baris.simsek@example.enderunix.org', subj=`ufak denemeler', size=522

qsheff, mailleri yedeklerken kuyruktaki ID'lerine göre isimlendirir. Daha sonra backup klasöründe ufak bir arama ile mailimizi bulabiliriz.

# find /var/qsheff/backup/ -name q-1141083887-164274-32338
/var/qsheff/backup/0/q-1141083887-164274-32338


-- Herhangi bir sorun anında qsheff'i geçici olarak devre dışı bırakmak için;

#mv /var/qmail/bin/qmail-qsheff /var/qmail/bin/qmail-qsheff.old
#rm -f /var/qmail/bin/qmail-queue
#mv /var/qmail/bin/qmail-queue.orig /var/qmail/bin/qmail-queue


Normalde qmail-smtpd veya qmail-inject qmail-queue'yi ararlar. Ama qmailqueue veya qsheff yaması uygulanmışsa qmail-qsheff'i arayacaklardır. Biz qSheff'i kaldırmaya çalıştığımız için yamaları uninstall etmek zor olacağı için en kolay yol olarak cp -p ile qmail-queue'yi qmail-qsheff üzerine kopyalarız. Böylece qmail-smtpd veya qmail-inject, qmail-qsheff'i çalıştırdığını zanneder ama aslında o qmail-queue'dir. Bu durumda;

#mv /var/qmail/bin/qmail-qsheff /var/qmail/bin/qmail-qsheff.old
#cp -p /var/qmail/bin/qmail-queue /var/qmail/bin/qmail-qsheff

cp komutunu -p parametresiyle kullandıysanız chmod veya chown komutlarına ihtiyacınız yoktur. Ancak gerekirse qmail-queue dosyasının izinleri aşağıdaki gibi düzenlenebilir.

#chmod 4511 /var/qmail/bin/qmail-queue
#chown qmailq:qmail /var/qmail/bin/qmail-queue

qSheff yaması uyguladıysanız qmail-qsheff'in hakları ve sahiplikleri de önem kazanmaktadır. Daha önce dediğimiz gibi cp komutunu -p parametresiyle kullanırsanız aşağıdaki komutları uygulamanıza gerek yoktur.

#chmod 4511 /var/qmail/bin/qmail-qsheff
#chown qmailq:qmail /var/qmail/bin/qmail-qsheff



-- qSheff ile birlikte düzenli ifadeler (regular expressions) kullanabilir miyim?

qSheff ile birlikte düzenli ifadeler kullanabilirsiniz.

#vi /usr/local/etc/qsheff/qsheff.rules

h:(^X-Mailler: spammer mailler v.1)
h:(^Subject: [Vv]iagra)(pharmacy)
b:(save)(rate)(per)(month)

Buradaki "h" mail'in başlık kısmı (From, To, Subject, X-Mailler, ... ), "b" ise mesajin gövde (body) kısmını ifade eder. Parantezler içindeki kelimelerin ilgili yerlerde geçme şartı aranır.

Bir kaç örnekle daha açıklarsak;

[xy]ab        Bu kullanımda tek karakter şartına bakılır. Bu kural ile birlikte xab ve yab kelimeleri eşleşir.
^[xy]ab      Bu gösterim de yine xab ve yab kelimelerini ifade eder. Ancak bu eşleşen kelimelerin satır başında olması gözetilir.


h:(^Subject: [Vv]iagra)(pharmacy)

Yukarıdaki kural (satır başında "Subject: Viagra" veya satır başında "Subject: viagra") ve (satır içerisinde pharmacy) geçen satırla eşleşir.

Kuralları qSheff'e uygulamadan önce etkilerini görmek için komut satırında echo ve grep ikilisini kullanarak kuralınızı test edebilirsiniz.

# echo icindexabvar | grep [xy]ab
icindexabvar
# echo $?
0 (buldu demektir)
# echo icindexabvar | grep [y]ab
# echo $?
1 (bulmadı demektir)


Bu örnekleri çoğaltmak mümkün.  Görüldüğü gibi qSheff çok güçlü bir spam yakalama becerisiyle daha karşımıza çıkıyor. Düzenli ifadeler hakkında daha fazla bilgiye ulaşmak için aşağıdaki dökümanı kullanabilirsiniz.

http://www.enderunix.org/qsheff/docs/regular.expressions.txt


KAYNAKLAR:

[1] http://www.enderunix.org/qsheff/manual-en/     qsheff el kitabı

[2] http://www.enderunix.org/qsheff/docs/regular.expressions.txt

Sorularıma cevap veren Barış ŞİMŞEK'e teşekkür ederim.

Bu dökümanı kaynak göstererek serbestçe kullanabilirsiniz.


03.03.2006
$Id: qSheff-Klavuzu.html,v 1.1 2006/03/03 23:37:59 afsin Exp $
 
Afşin TAŞKIRAN
afsin || enderunix.org