Re: Spamassassin -- Postfix sunucusunda kurulum

Deniz Akkus Kanca <[email protected]> Mon, 24 Feb 2003 08:44:14 +0200
Newsgroups gmane.mail.spam.anti-spam.turkish
Message-ID <[email protected]>
Pazartesi 24 Şubat 2003 08:15 tarihinde şunları yazmıştınız:

Sayın Funda,

Problem Türkçe karakterden çok eklemiş olduğum HTML sayfasının Ecartis 
tarafından metine çevrilmesinden kaynaklanıyor. 

Önerinizi uyguladım. Yazı altta. Gözden geçirilirse sevinirim. 

Esen kalın,
Deniz

-----------------------------------------------------------------------
Postfix, RAVAntivirus ve SpamAssassin ile Virus ve Spam Filtrelemesi: 
24 Subat 2003 
Deniz Akkus Kanca <[email protected]> 
 
Onemli not: Bu NASIL belgesi, hazirladigim daha detayli bir Postfix NASIL 
belgesinden 
cikarilmistir.  Bu belge sadece calisan bir Postfix duzenine virus ve spam 
filtrelemesinin nasil 
eklenecegini ele almaktadir. 
 
Sifirdan bir Postfix/Cyrus sistemi kurmak, ic ve dis kullanicilariniza cesitli 
kisitlamalar 
getirmek, SMTP-AUTH veya sifreli (TLS/SSL) SMTP/IMAP/POP3 iletisimlerini 
devreye almak icin diger 
belgeye bakiniz. Tepeden tirnaga sifirdan bir posta sisteminin kurulusunu ele 
alacak olan belge, 
http://www.belgeler.org ve http://www.arayan.com/da/linux_tr.html adreslerinde 
yayinlanacaktir. 
 
Mekanizma: 
1. Her yone posta sunucusundan gecen butun postalar hem virus, hem de spam 
filtrelemesinden 
gecirilir. 
2. Virus tasiyan postalar durdurulur, Turkce olarak aliciya, gonderene ve 
sistem yoneticisine 
haber verilir. 
3. Spam niteligi tasiyan postalarin basliklari yeniden yazilir ve ozel bir 
posta kutusuna atilir. 
 
Kullanilan Linux Dagitimi: 
Redhat 8.0. Bu kurulum RPM paket sisteminden mumkun oldugunca 
faydalanmaktadir. 
 
Gereken Yazilimlar: 
 
1. Postfix 
2. Bir POP veya IMAP sunucusu. Bu sistem Cyrus uzerinde calismaktadir, fakat 
herhangi bir POP veya 
IMAP sunucusu isinizi gorur. 
3. Procmail 
4. Oldukca kapsamli bir Perl kurulumu. Bu sistemde Redhat ile gelen perl 
paketlerinin cogu kurulu 
durumdadir.  Ek bazi paketler de asagida listelenmektedir. 
5. SpamAssassin 
6. Pyzor 
7. RAVAntivirus 
8. Eger sistemde python yok ise pyzor calismaz. Dolayisiyla pyzor'un ihtiyac 
duydugu paketler 
(RedHat dagitiminda hazir mevcut). 
9. NTP. Zamanini dogru bilmeyen bir posta sunucusu bas agritir. RedHat 
dagitiminda mevcut. Bizim 
sistemimizde saatler NTP marifeti ile es zamanlanmaktadir. 
 
On Gereklilikler: 
 
Calisan bir Postfix posta sistemi. Sistemde kullanici posta kutusu 
olusturabiliyor ve bu posta 
kutularini kontrol edebiliyor olmalisiniz. Bizim sistemimizde LDAP/Kerberos 
uzerinde olusturulan 
gercek kullanicilar kullanilmaktadir. 
 
Calisan bir NTP duzeni. Bunsuz calisabilse bile, saatini dogru takip etmeyen 
bir posta sistemi bas 
agritacak ve spam filtrelerinin onemli saat farklarini da kontrol etmeleri 
yuzunden etkinligi 
azalacaktir. 
 
postfixfilter adinda bir gercek kullanici.  Bu ornekte ev dizininin 
/home/postfixfilter oldugu 
varsayiliyor. 
 
[email protected] adresine gonderilen postalari kabul eden bir posta 
kutusu. Gercek veya 
sanal, sizin tercihiniz, fakat buraya gonderilen postalari kontrol 
edebilmelisiniz. 
 
 
Paketler ve Hazirlik Sureci: 
 
1. Postfix:  Guncel surum olan postfix-2.0.3-1.src.rpm 
http://postfix.wl0.org/en/ adresinden 
alindi. Bunun nasil kurulacagi bu belge kapsaminda degil. 
2. IMAP/POP sunucusu: Guncel surum olan cyrus-imapd-2.1.12-3.src.rpm 
http://home.teleport.ch/simix/ adresinden alindi. Bunun nasil kurulacagi bu 
belge kapsaminda 
degil. 
3. Procmail:  Redhat ile gelen procmail-3.22-7.i386.rpm sisteme kuruldu. 
    rpm -Uvh procmail-3.22-7.i386.rpm 
4. Perl: 
     Redhat: Asagidaki paketlerin hepsi gerekmemektedir. Fakat spamassassin 
calisirken bazi perl 
siniflarini bulamadi. Dolayisiyla hemen hemen (veritabani     gerektirenler 
haricindekileri) 
hepsini sisteme kurduk: 
perl-5.8.0-55 
perl-Archive-Tar-0.22-26 
perl-BSD-Resource-1.15-4 
perl-Bit-Vector-6.1-28 
perl-CGI-2.81-55 
perl-CPAN-1.61-55 
perl-Compress-Zlib-1.16-8 
perl-Crypt-SSLeay-0.45-2 
perl-DBI-1.30-1 
perl-DB_File-1.804-55 
perl-Date-Calc-5.0-25 
perl-DateManip-5.40-27 
perl-Devel-Symdump-2.03-9 
perl-Digest-HMAC-1.01-8 
perl-Digest-SHA1-2.01-6 
perl-File-MMagic-1.15-2 
perl-Filter-1.28-9 
perl-Filter-Simple-0.78-8 
perl-Frontier-RPC-0.06-33 
perl-HTML-Parser-3.26-14 
perl-HTML-Tagset-3.03-25 
perl-Inline-0.43-7 
perl-NKF-1.71-7 
perl-Net-DNS-0.26-2 
perl-Parse-RecDescent-1.80-8 
perl-Parse-Yapp-1.05-26 
perl-RPM2-0.45-1 
perl-SGMLSpm-1.03ii-6 
perl-TermReadKey-2.20-2 
perl-Time-HiRes-1.20-23 
perl-TimeDate-1.1301-2 
perl-URI-1.21-3 
perl-XML-Dumper-0.4-22 
perl-XML-Encoding-1.01-20 
perl-XML-Grove-0.46alpha-21 
perl-XML-Parser-2.31-12 
perl-XML-Twig-3.05-3 
perl-libwww-perl-5.65-2 
perl-libxml-enno-1.02-25 
perl-libxml-perl-0.07-25 
perl-suidperl-5.8.0-55 
 
Ek Perl Paketleri:   Bunlari ftp://ftp.rpmfind.net/linux/contrib/noarch/noarch 
adresinden elde 
edebilirsiniz: 
perl-MIME-tools-5.411-2.noarch.rpm 
perl-MIME-Base64-2.12-2.noarch.rpm 
perl-IO-stringy-2.108-2.noarch.rpm 
perl-MailTools-1.50-1.noarch.rpm 
perl-libnet-1.11-2.noarch.rpm 
 
Kurulus Komutlari: 
rpm -Uvh --force perl-MIME-Base64* 
rpm -Uvh perl-IO-stringy* 
rpm -Uvh --force perl-libnet* 
rpm -Uvh perl-MailTools* 
rpm -Uvh perl-MIME-tools* 

5. SpamAssassin: Guncel surum olan spamassassin-2.50-1.src.rpm 
http://spamassassin.kluge.net/ 
    alindi. 
 
Redhat 8.0 uzerinde bu RPM sorun cikariyor. Asagidaki sekilde kurun: 
 
        a.   rpm -ivh spamassassin-2.50-1.src.rpm 
        b.  cd /usr/src/redhat/SPECS 
        c.  spamassassin.spec dosyasini bir metin editorunde acin. 
                %prep -q satirini %prep haline getirin. 
        d.  rpmbuild -ba spamassassin.spec 
        e.  cd /usr/src/redhat/RPMS/i386 
        f.   rpm -Uvh --nodeps perl-Mail-SpamAssassin* 
        g.  rpm -Uvh spam* 
 
6. Pyzor: http://pyzor.sourceforge.net adresinden pyzor-0.4.0.tar.bz2 paketi 
alindi.  RPM olmayan 
paketleri /usr/local/src altinda tutmak tertipli oluyor: 
 
        a.  cd /usr/local/src 
        b.  bunzip2 pyzor-0.4.0.tar.bz2 
        c.  tar -xvf pyzor-0.4.0.tar 
        d.  cd pyzor-0.4.0 
        e.  python setup.py build 
        f.   python setup.py install 
 
7. RAV Antivirus:   
 
Bu bir ticari paket. 30 gun deneme kullanim suresinden sonra satin almak 
durumundasiniz. 
 
http://www.ravantivirus.com/ adresinden ravpostfixlnx.i386.rpm.tar.gz alindi. 
 
        a.  cd /usr/local/src 
        b.  tar -xzvf ravpostfixlnx.i386.rpm.tar.gz 
        c.  cd RAV_for_Postfix 
        d.  rpm -Uvh ravcore* 
        e.  rpm -Uvh ravmd* 
        f.  rpm -Uvh ravpostfix* 
 
Ayarlar: 
 
RAV Antivirus - POSTFIX: 
 
RAV'in calisma mantiginda, postfix'in kuyruk surecine mudahale etmek var.  
Postfix ayar 
dosyalarinda cesitli degerleri degistirerek, sistemin kullanicidan postayi 
alip ilk bazi ufak 
tefek (gonderen, alan vb) kontrolleri yaptiktan sonra RAV'a gondermesi ve daha 
sonra RAV'in tekrar 
Postfix kuyruguna postayi enjekte etmesi usulune gore calisiyor. 
 
cd /etc/postfix 
 
master.cf sonunda: 
 
#rav-begin: RAV AntiVirus Configuration 
127.0.0.1:10026 inet n - n - 100 smtpd 
                        -o content_filter= -o myhostname=dummy.domain.name 
#rav-end 
 
satirlarini goreceksiniz. 
 
Burasi, RAV'in postfix kuyrugundan cekip kontrol ettikten sonra postfix 
kuyruguna postayi enjekte 
ettigi komut.   
 
-o content_filter=  secenegi, postanin surekli olarak RAV'a gonderilmesini 
engelliyor. Bir kez 
gectikten sonra, artik filtre uygulama, direkt isle demek.  Bu degismeyecek. 
 
Burada su anda mevcut olan kendi Postfix ayarlarinizi tasimak onem kazaniyor.   
Bizim main.cf dosyamizdan ayarlar: 
        
        alias_maps= hash:/etc/postfix/aliases, ldap:ldapAlias 
        Alias_maps ayarimizi tasimak zorundayiz. Yoksa bir takma isme 
gonderilmis olan postayi 
postfix reddeder. 
        
        -o alias_maps= hash:/etc/postfix/aliases, ldap:ldapAlias 
       
        myhostname  duzenlenmemis, dolayisiyla sistemin kendi adini  
(istasyon.bizimfirma.com.tr) 
verecegiz . 
        -o myhostname=istasyon.bizimfirma.com.tr       
 
        smtpd_recipient_restrictions kullaniliyor. 
        Degeri: check_sender_access ldap:ldapInternalUser, check_sender_access 
ldap:ldapExternalMail, reject_unauth_destination 
        Yani gonderene gore bazi izinlendirme yaptiktan (ve bu izni 
olmayanlari hemen 
reddettikten) kalanlari yerine gonderiyoruz. 
 
        Bu secenegi tekrar olusturacagiz. Bu noktada artik gonderenlerin 
izinleri kontrol edilmis 
ve reddedilecekse reddedilmis. Burayi permit_mynetworks,             
reject_unauth_destination 
yapiyoruz.  Yani benim guvendigim aglardan gelenleri istedigi yere 
gonderiyoruz, geri kalanini 
ancak bizim sunucumuza             yoneltilmisse kabul ediyoruz. Normal 
isleyiste buraya tek gelen 
RAV'in yonlendirdigi postalar olacak. Sonuncu komut, disaridan bir sekilde bu 
porta         
ulasirlar ise diye. 
        -o smtpd_recipient_restrictions=permit_mynetworks, 
reject_unauth_destination 
 
        smtpd_sender_login_maps kullaniliyor. Degeri ldap:ldapAlias . Bu salt 
SMTP-AUTH ile 
sisteme girenlerin bu kimlik sinamasinda verdikleri 
        kimlik ile gonderdikleri postadaki gonderen kimliginin ayni oldugunu 
kontrol ediyor.   
 
        Bu noktada artik gecerligi kalmis degil. Kuyruga enjeksiyon yapan 
surec SMTP-AUTH ile 
gelmemis. Bunu bosaltacagiz. 
        -o smtpd_sender_login_maps= 

Yeni master.cf RAV komutu: 
 
#rav-begin: RAV AntiVirus Configuration 
127.0.0.1:10026 inet n - n - 100 smtpd 
                        -o content_filter= 
                        -o myhostname=istasyon.bizimfirma.com.tr 
                        -o alias_maps=hash:/etc/postfix/aliases,ldap:ldapAlias 
                        -o 
smtpd_recipient_restrictions=permit_mynetworks,reject_unauth_destination 
                        -o smtpd_sender_login_maps= 
#rav-end 
 
RAV Antivirus - Kendi Ayarlari: 
 
/etc/opt/rav/ravmd.conf dosyasinda: 
Virus uyarilarini Turkce yapmasini istiyoruz. 
_include /etc/opt/rav/languages/turkish-iso-8859-9 
satirinin basindaki # isaretini kaldirin. (Az yukaridaki english satirini 
oldugu gibi birakmak 
zorundasiniz. Yoksa hata olusuyor.) 
 
/etc/opt/rav/groups/global dosyasinda: 
RAV'in her virusu bir de RAV'a haber verme ozelligini kaldiralim: 
#admin_addr = [email protected] 
 
ve Turkce destegi icin asagidaki satirin basindaki # isaretini kaldiralim. 
_include /etc/opt/rav/languages/turkish-iso-8859-9.equiv 
Bu satirin yukarisinda yer alan Ingilizce satirinin (english.equiv) basina bir 
# koyalim. 
 
Virus uyarilarini sistem yoneticisi de alsin istiyoruz: 
admin_addr = [email protected] 
 
Postfix'in always_bcc secenegi ile sistemden gecen butun postalarin bir 
kopyasini aliyoruz. 
Viruslu dosyalarda bu adrese de posta gonderilmesini veya bu adrese gittiginin 
gonderene haber 
verilmesini istemiyoruz. 
# E-mail address that will not be notified. 
do_not_warn = [email protected] 
# E-mail address that will be hidden in all e-mail notifications. 
do_not_show = [email protected] 
       
Butun spam kontrollerimizi spamassassin ile yapacagiz. RAV kendi icinde de 
bazi spam filtreleri 
tasiyor. Bunlari devre disi birakiyoruz (antispam_configuration ile baslayan 
satirlarin basina # 
koyun): 
#antispam_configuration = bulk_high_precision, bulk_very_high_precision 

SpamAssassin/Procmail ve POSTFIX: 
 
/etc/postfix icerisindeki main.cf ve master.cf POSTFIX ayar dosyalarinda bazi 
degisiklikler 
yaparak Postfix'in kuyruga attigi postalari procmail'e yonlendirmesini, 
procmail'de 
spamassassin'den gecirilen postalarin RAV virus kontrolunden gecerek Postfix 
kuyruguna geri 
donmesini saglayacagiz. 
 
/etc/postfix/master.cf: 
Baslarinda yer alan smtp satirini asagidaki sekilde degistirin. Ortadaki y 
harfi onemli, bunu 
unutmayin! 
 
smtp    inet    n       -       y       -       -       smtpd -o 
content_filter=procmail 
 
Dosyanin sonuna su satiri ilave edin (tek satir): 
procmail unix - n n - - pipe flags=R user=postfixfilter argv=/usr/bin/procmail 
-t -m USER=${user} 
EXT=${extension} /home/postfixfilter/procmailrc ${sender} 
 
SpamAssassin'i Cagiran PROCMAIL ayarlari: 
 
/home/postfixfilter/procmailrc dosyasini su icerikle olusturun (postfixfilter 
kullanicisi dosyayi 
okuyabilmeli): 
Eger spamassassin filtrelemesi sonucu olusan hareketleri degistirmek 
isterseniz mudahale 
edeceginiz yer burasi. Ornegin icinde X-Spam-Flag: YES yazan paragrafi 
cikararak filtreden 
gecirilen postalarin islendikten sonra herhangi bir ayiklamaya tabi tutulmadan 
son kullanicilara 
aynen gonderilmesini saglayabilirsiniz. Biz, eger bir posta spam olarak 
isaretlenmis ise, 
gonderilenleri baska bir basliga kaydedip postayi [email protected] 
adresine yonlendiriyoruz. 
 
/home/postfixfilter/procmailrc: 
SENDER = "<$1>" 
SHIFT = 1 
 
:0 fw 
| /usr/bin/spamassassin 
 
:0 
* ^X-Spam-Flag: YES 
| (formail -R "To:" "X-Originally-To:") | (formail -R "Cc:" 
"X-Originally-Cc:") \ 
| (formail -i "To: [email protected]") | $SENDMAIL -f "$SENDER" -i "$@" 
 
:0 
| $SENDMAIL -f "$SENDER"  -i "$@" 

SpamAssassin'in Kendi Ayarlari: 
 
/etc/mail/spamassassin/local.cf: 
required_hits 5 
rewrite_subject 0 
whitelist_from *.bizimfirma.com.tr 
pyzor_path /usr/bin/pyzor 
pyzor_max 2 
pyzor_add_header 1 
dns_available yes 
report_header 1 
use_terse_report 1 
score PYZOR_CHECK 5.00 
 
Bitirme Islemleri: 
/etc/rc.d/init.d/ravmail restart 
/etc/rc.d/init.d/postfix reload 
 
Lutfen duzeltmeleri [email protected] adresine yollayin.