Spamassassin -- Postfix sunucusunda kurulum

Deniz Akkus Kanca <[email protected]> Mon, 24 Feb 2003 01:02:38 +0200
Newsgroups gmane.mail.spam.anti-spam.turkish
Message-ID <[email protected]>
Selam,

Söz verdiðim yazýyý bu kadar geciktirdiðim için özür dilerim. Ýliþikteki yazý 
bir postfix sunucusuna spamassassin ve RAVAntivirüs'ün nasýl entegre 
edileceðini anlatýyor. 

Bir göz atar ve bariz bir hata yok ise web sitenize koyarsanýz sevinirim. 

Esen kalýn,
Deniz


-- HTML Attachment decoded to text by Ecartis --
-- File: Postfix_SpamAssassin.html

 Postfix &Uuml;zerinde SpamAssassin ve RAVAntivir&uuml;s

Postfix, RAVAntivir&uuml;s ve SpamAssassin ile Vir&uuml;s ve Spam
Filtrelemesi: 24 &#350;ubat 2003
Deniz Akku&#351; Kanca <[email protected]>

&Ouml;nemli not: Bu NASIL belgesi, haz&#305;rlad&#305;&#287;&#305;m daha
detayl&#305; bir Postfix NASIL belgesinden
&ccedil;&#305;kar&#305;lm&#305;&#351;t&#305;r.  Bu belge sadece
&ccedil;al&#305;#351&#351;an bir Postfix d&uuml;zenine vir&uuml;s ve spam
filtrelemesinin nas&#305;l eklenece&#287;ini ele almaktad&#305;r.

S&#305;f&#305;rdan bir Postfix/Cyrus sistemi kurmak, i&ccedil; ve d&#305;&#351;
kullan&#305;c&#305;lar&#305;n&#305;za &ccedil;e&#351;itli
k&#305;s&#305;tlamalar getirmek, SMTP-AUTH veya &#351;ifreli (TLS/SSL)
SMTP/IMAP/POP3 ileti&#351;imlerini devreye almak i&ccedil;in di&#287;er
belgeye bak&#305;n&#305;z. Tepeden t&#305;rna&#287;a s&#305;f&#305;rdan bir
posta sisteminin kurulu&#351;unu ele alacak olan belge,
http://www.belgeler.org[1] ve http://www.arayan.com/da/linux_tr.html[2]
adreslerinde yay&#305;nlanacakt&#305;r. 

Mekanizma: 
1. Her y&ouml;ne posta sunucusundan ge&ccedil;en b&uuml;t&uuml;n postalar
hemvir&uuml;s, hem de spam filtrelemesinden ge&ccedil;irilir. 
2. Vir&uuml;s ta&#351;&#305;yan postalar durdurulur, T&uuml;rk&ccedil;e
olarak al&#305;c&#305;ya, g&ouml;nderene ve sistem y&ouml;neticisine haber
verilir. 
3. Spam niteli&#287;i ta&#351;&#305;yan postalar&#305;n ba&#351;l&#305;klar&#305;
yeniden yaz&#305;l&#305;r ve &ouml;zel bir posta kutusuna at&#305;l&#305;r. 

Kullan&#305;lan Linux Da&#287;&#305;t&#305;m&#305;: 
Redhat 8.0. Bu kurulum RPM paket sisteminden m&uuml;mk&uuml;n oldu&#287;unca
faydalanmaktad&#305;r. 

Gereken Yaz&#305;l&#305;mlar: 

1. Postfix
2. Bir POP veya IMAP sunucusu. Bu sistem Cyrus &uuml;zerinde
&ccedil;al&#305;&#351;maktad&#305;r, fakat herhangi bir POP veya IMAP
sunucusu i&#351;inizi g&ouml;r&uuml;r. 
3. Procmail 
4. Olduk&ccedil;a kapsaml&#305; bir Perl kurulumu. Bu sistemde Redhat ile
gelen perl paketlerinin &ccedil;o&#287;u kurulu durumdad&#305;r.  Ek baz&#305;
paketler de a&#351;a&#287;&#305;da listelenmektedir.
5. SpamAssassin
6. Pyzor 
7. RAVAntivir&uuml;s
8. E&#287;er sistemde python yok ise pyzor &ccedil;al&#305;&#351;maz.
Dolay&#305;s&#305;yla pyzor'un ihtiya&ccedil; duydu&#287;u paketler (RedHat
da&#287;&#305;t&#305;m&#305;nda haz&#305;r mevcut).
9. NTP. Zaman&#305;n&#305; do&#287;ru bilmeyen bir posta sunucusu ba&#351;
a&#287;r&#305;t&#305;r. RedHat da&#287;&#305;t&#305;m&#305;nda mevcut. Bizim
sistemimizde saatler NTP marifeti ile e&#351; zamanlanmaktad&#305;r. 

&Ouml;n Gereklilikler: 

&Ccedil;al&#305;&#351;an bir Postfix posta sistemi. Sistemde kullan&#305;c&#305;
posta kutusu olu&#351;turabiliyor ve bu posta kutular&#305;n&#305; kontrol
edebiliyor olmal&#305;s&#305;n&#305;z. Bizim sistemimizde LDAP/Kerberos
&uuml;zerinde olu&#351;turulan ger&ccedil;ek kullan&#305;c&#305;lar
kullan&#305;lmaktad&#305;r. 

&Ccedil;al&#305;&#351;an bir NTP d&uuml;zeni. Bunsuz
&ccedil;al&#305;&#351;abilse bile, saatini do&#287;ru takip etmeyen bir
postasistemi ba&#351; a&#287;r&#305;tacak ve spam filtrelerinin &ouml;nemli
saat farklar&#305;n&#305; da kontrol etmeleri y&uuml;z&uuml;nden
etkinli&#287;iazalacakt&#305;r. 

postfixfilter ad&#305;nda bir ger&ccedil;ek kullan&#305;c&#305;.  Bu
&ouml;rnekte ev dizininin /home/postfixfilter oldu&#287;u
varsay&#305;l&#305;yor.

[email protected] adresine g&ouml;nderilen postalar&#305; kabul eden
birposta kutusu. Ger&ccedil;ek veya sanal, sizin tercihiniz, fakat buraya
g&ouml;nderilen postalar&#305; kontrol edebilmelisiniz. 

Paketler ve Haz&#305;rl&#305;k S&uuml;reci: 

1. Postfix:  G&uuml;ncel s&uuml;r&uuml;m olan postfix-2.0.3-1.src.rpm
http://postfix.wl0.org/en/[3] adresinden al&#305;nd&#305;. Bunun nas&#305;l
kurulaca&#287;&#305; bu belge kapsam&#305;nda de&#287;il.
2. IMAP/POP sunucusu: G&uuml;ncel s&uuml;r&uuml;m olan
cyrus-imapd-2.1.12-3.src.rpm http://home.teleport.ch/simix/[4] adresinden
al&#305;nd&#305;. Bunun nas&#305;l kurulaca&#287;&#305; bu belge
kapsam&#305;nda de&#287;il.
3. Procmail:  Redhat ile gelen procmail-3.22-7.i386.rpm sisteme kuruldu. 
    rpm -Uvh procmail-3.22-7.i386.rpm
4. Perl: 
     Redhat: A&#351;a&#287;&#305;daki paketlerin hepsi gerekmemektedir.
Fakatspamassassin &ccedil;al&#305;&#351;&#305;rken baz&#305; perl
s&#305;n&#305;flar&#305;n&#305; bulamad&#305;. Dolay&#305;s&#305;yla hemen
hemen (veritaban&#305;     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:   Bunlar&#305;
ftp://ftp.rpmfind.net/linux/contrib/noarch/noarch[5] 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

Kurulu&#351; Komutlar&#305;:
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: G&uuml;ncel s&uuml;r&uuml;m olan
spamassassin-2.50-1.src.rpmhttp://spamassassin.kluge.net/[6]
    al&#305;nd&#305;. 

Redhat 8.0 &uuml;zerinde bu RPM sorun &ccedil;&#305;kar&#305;yor.
A&#351;a&#287;#305&#305;daki &#351;ekilde kurun: 

        a.   rpm -ivh spamassassin-2.50-1.src.rpm
        b.  cd /usr/src/redhat/SPECS
        c.  spamassassin.spec dosyas&#305;n&#305; bir metin
edit&ouml;r&uuml;nde a&ccedil;&#305;n. 
                %prep -q sat&#305;r&#305;n&#305; %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[7] adresinden pyzor-0.4.0.tar.bz2
paketi al&#305;nd&#305;.  RPM olmayan paketleri /usr/local/src alt&#305;nda
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 Antivir&uuml;s:  

Bu bir ticari paket. 30 g&uuml;n deneme kullan&#305;m s&uuml;resinden sonra
sat&#305;n almak durumundas&#305;n&#305;z. 

http://www.ravantivirus.com/[8] adresinden ravpostfixlnx.i386.rpm.tar.gz
al&#305;nd&#305;. 

        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 Antivir&uuml;s - POSTFIX:

RAV'&#305;n &ccedil;al&#305;&#351;ma mant&#305;&#287;&#305;nda, postfix'in
kuyruk s&uuml;recine m&uuml;dahale etmek var.  Postfix ayar
dosyalar&#305;nda&ccedil;e&#351;itli de&#287;erleri de&#287;i&#351;tirerek,
sistemin kullan&#305;c&#305;dan postay&#305; al&#305;p ilk baz&#305; ufak
tefek (g&ouml;nderen, alan vb) kontrolleri yapt&#305;ktan sonra RAV'a
g&ouml;ndermesi ve daha sonra RAV'&#305;n tekrar Postfix kuyru&#287;una
postay&#305; enjekte etmesi usul&uuml;ne g&ouml;re
&ccedil;al&#305;&#351;&#305;yor. 

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

sat&#305;rlar&#305;n&#305; g&ouml;receksiniz. 

Buras&#305;, RAV'&#305;n postfix kuyru&#287;undan &ccedil;ekip kontrol
ettikten sonra postfix kuyru&#287;una postay&#305; enjekte etti&#287;i
komut. 

-o content_filter=  se&ccedil;ene&#287;i, postan&#305;n s&uuml;rekli olarak
RAV'a g&ouml;nderilmesini engelliyor. Bir kez ge&ccedil;tikten sonra,
art&#305;kfiltre uygulama, direkt i&#351;le demek.  Bu
de&#287;i&#351;meyecek.

Burada &#351;u anda mevcut olan kendi Postfix ayarlar&#305;n&#305;z&#305;
ta&#35#305&#305;mak &ouml;nem kazan&#305;yor.  
Bizim main.cf dosyam&#305;zdan ayarlar: 
        
        alias_maps= hash:/etc/postfix/aliases, ldap:ldapAlias 
        Alias_maps ayar&#305;m&#305;z&#305; ta&#351;&#305;mak
zorunday&#305;z. Yoksa bir takma isme g&ouml;nderilmi&#351; olan postay&#305;
postfix reddeder. 
        
        -o alias_maps= hash:/etc/postfix/aliases, ldap:ldapAlias 
       
        myhostname  d&uuml;zenlenmemi&#351;, dolay&#305;s&#305;yla sistemin
kendi ad&#305;n&#305;  (istasyon.bizimfirma.com.tr) verece&#287;iz .
        -o myhostname=istasyon.bizimfirma.com.tr       

        smtpd_recipient_restrictions kullan&#305;l&#305;yor. 
        De&#287;eri: check_sender_access ldap:ldapInternalUser,
check_sender_access ldap:ldapExternalMail, reject_unauth_destination
        Yani g&ouml;nderene g&ouml;re baz&#305; izinlendirme yapt&#305;ktan
(ve bu izni olmayanlar&#305; hemen reddettikten) kalanlar&#305; yerine
g&ouml;nderiyoruz. 

        Bu se&ccedil;ene&#287;i tekrar olu&#351;turaca&#287;&#305;z. Bu
noktada art&#305;k g&ouml;nderenlerin izinleri kontrol edilmi&#351; ve
reddedilecekse reddedilmi&#351;. Buray&#305; permit_mynetworks,            
reject_unauth_destination yap&#305;yoruz.  Yani benim g&uuml;vendi&#287;im
a&#287;lardan gelenleri istedi&#287;i yere g&ouml;nderiyoruz, geri
kalan&#305;n&#305;ancak bizim sunucumuza             y&ouml;neltilmi&#351;se
kabul ediyoruz. Normal i&#351;leyi&#351;te buraya tek gelen RAV'&#305;n
y&ouml;nlendirdi&#287;i postalar olacak. Sonuncu komut,
d&#305;&#351;ar&#305;dan bir &#351;ekilde bu porta        
ula&#351;&#305;rlar ise diye.
        -o smtpd_recipient_restrictions=permit_mynetworks,
reject_unauth_destination

        smtpd_sender_login_maps kullan&#305;l&#305;yor. De&#287;eri
ldap:ldapAlias . Bu salt SMTP-AUTH ile sisteme girenlerin bu kimlik
s&#305;namas&#305;nda verdikleri 
        kimlik ile g&ouml;nderdikleri postadaki g&ouml;nderen
kimli&#287;ininayn&#305; oldu&#287;unu kontrol ediyor.  

        Bu noktada art&#305;k ge&ccedil;erli&#287;i kalm&#305;&#351;
de&#287;il. Kuyru&#287;a enjeksiyon yapan s&uuml;re&ccedil; SMTP-AUTH ile
gelmemi&#351;. Bunu bo&#351;altaca&#287;&#305;z. 
        -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 Antivir&uuml;s - Kendi Ayarlar&#305;: 

/etc/opt/rav/ravmd.conf dosyas&#305;nda: 
Vir&uuml;s uyar&#305;lar&#305;n&#305; T&uuml;rk&ccedil;e yapmas&#305;n&#305;
istiyoruz. 
_include /etc/opt/rav/languages/turkish-iso-8859-9 
sat&#305;r&#305;n&#305;n ba&#351;&#305;ndaki # i&#351;aretini
kald&#305;r&#305;n. (Az yukar&#305;daki english sat&#305;r&#305;n&#305;
oldu&#287;ugibi b&#305;rakmak zorundas&#305;n&#305;z. Yoksa hata
olu&#351;uyor.)

/etc/opt/rav/groups/global dosyas&#305;nda: 
RAV'&#305;n her vir&uuml;s&uuml; bir de RAV'a haber verme
&ouml;zelli&#287;ini kald&#305;ral&#305;m: 
#admin_addr = [email protected]

ve T&uuml;rk&ccedil;e deste&#287;i i&ccedil;in a&#351;a&#287;&#305;daki
sat&#305;r&#305;n ba&#351;&#305;ndaki # i&#351;aretini kald&#305;ral&#305;m.

_include /etc/opt/rav/languages/turkish-iso-8859-9.equiv
Bu sat&#305;r&#305;n yukar&#305;s&#305;nda yer alan &#304;ngilizce
sat&#305;r&#305;n&#305;n (english.equiv) ba&#351;&#305;na bir #
koyal&#305;m.

Vir&uuml;s uyar&#305;lar&#305;n&#305; sistem y&ouml;neticisi de als&#305;n
istiyoruz: 
admin_addr = [email protected]

Postfix'in always_bcc se&ccedil;ene&#287;i ile sistemden ge&ccedil;en
b&uuml;t&uuml;n postalar&#305;n bir kopyas&#305;n&#305; al&#305;yoruz.
Vir&uuml;sl&uuml; dosyalarda bu adrese de posta g&ouml;nderilmesini veya bu
adrese gitti&#287;inin g&ouml;nderene 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]
       
B&uuml;t&uuml;n spam kontrollerimizi spamassassin ile yapaca&#287;&#305;z.
RAV kendi i&ccedil;inde de baz&#305; spam filtreleri ta&#351;&#305;yor.
Bunlar&#305; devre d&#305;&#351;&#305; b&#305;rak&#305;yoruz
(antispam_configuration ile ba&#351;layan sat&#305;rlar&#305;n
ba&#351;&#305;na # koyun): 
#antispam_configuration = bulk_high_precision, bulk_very_high_precision

SpamAssassin/Procmail ve POSTFIX:

/etc/postfix i&ccedil;erisindeki main.cf ve master.cf POSTFIX ayar
dosyalar&#305;nda baz&#305; de&#287;i&#351;iklikler yaparak Postfix'in
kuyru&#287;aatt&#305;&#287;&#305; postalar&#305; procmail'e
y&ouml;nlendirmesini, procmail'de spamassassin'den ge&ccedil;irilen
postalar&#305;nRAV vir&uuml;s kontrol&uuml;nden ge&ccedil;erek Postfix
kuyru&#287;una geri d&ouml;nmesini sa&#287;layaca&#287;&#305;z.

/etc/postfix/master.cf:
Ba&#351;lar&#305;nda yer alan smtp sat&#305;r&#305;n&#305;
a&#351;a&#287;&#305;daki &#351;ekilde de&#287;i&#351;tirin. Ortadaki y harfi
&ouml;nemli, bunu unutmay&#305;n!

smtp    inet    n       -       y       -       -       smtpd -o
content_filter=procmail

Dosyan&#305;n sonuna &#351;u sat&#305;r&#305; ilave edin (tek sat&#305;r):
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 &Ccedil;a&#287;&#305;ran PROCMAIL ayarlar&#305;:

/home/postfixfilter/procmailrc dosyas&#305;n&#305; &#351;u i&ccedil;erikle
olu&#351;turun (postfixfilter kullan&#305;c&#305;s&#305; dosyay&#305;
okuyabilmeli):
E&#287;er spamassassin filtrelemesi sonucu olu&#351;an hareketleri
de&#287;i&#351;tirmek isterseniz m&uuml;dahale edece&#287;iniz yer
buras&#305;.&Ouml;rne&#287;in i&ccedil;inde X-Spam-Flag: YES yazan paragraf&#305;
&ccedil;&#305;kararak filtreden ge&ccedil;irilen postalar&#305;n
i&#351;lendikten sonra herhangi bir ay&#305;klamaya tabi tutulmadan son
kullan&#305;c&#305;lara aynen g&ouml;nderilmesini sa&#287;layabilirsiniz.
Biz, e&#287;er bir posta spam olarak i&#351;aretlenmi&#351; ise,
g&ouml;nderilenleri ba&#351;ka bir ba&#351;l&#305;&#287;a kaydedip postay&#305;
[email protected] adresine y&ouml;nlendiriyoruz.

/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 Ayarlar&#305;: 

/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 &#304;&#351;lemleri: 
/etc/rc.d/init.d/ravmail restart
/etc/rc.d/init.d/postfix reload


----------------------------------------------------------------------------
L&uuml;tfen d&uuml;zeltmeleri [email protected][9] adresine yollay&#305;n.


        

        




    


--- Links ---
   1 http://www.belgeler.org
   2 http://www.arayan.com/da/linux_tr.html
   3 http://postfix.wl0.org/en/
   4 http://home.teleport.ch/simix/
   5 ftp://ftp.rpmfind.net/linux/contrib/noarch/noarch/
   6 http://spamassassin.kluge.net/
   7 http://pyzor.sourceforge.net
   8 http://www.ravantivirus.com/
   9 mailto:[email protected]