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 Üzerinde SpamAssassin ve RAVAntivirüs Postfix, RAVAntivirüs ve SpamAssassin ile Virüs ve Spam Filtrelemesi: 24 Şubat 2003 Deniz Akkuş Kanca <[email protected]> Önemli not: Bu NASIL belgesi, hazırladığım daha detaylı bir Postfix NASIL belgesinden çıkarılmıştır. Bu belge sadece çalı#351şan bir Postfix düzenine virüs ve spam filtrelemesinin nasıl ekleneceğini ele almaktadır. Sıfırdan bir Postfix/Cyrus sistemi kurmak, iç ve dış kullanıcılarınıza çeşitli kısıtlamalar getirmek, SMTP-AUTH veya şifreli (TLS/SSL) SMTP/IMAP/POP3 iletişimlerini devreye almak için diğer belgeye bakınız. Tepeden tırnağa sıfırdan bir posta sisteminin kuruluşunu ele alacak olan belge, http://www.belgeler.org[1] ve http://www.arayan.com/da/linux_tr.html[2] adreslerinde yayınlanacaktır. Mekanizma: 1. Her yöne posta sunucusundan geçen bütün postalar hemvirüs, hem de spam filtrelemesinden geçirilir. 2. Virüs taşıyan postalar durdurulur, Türkçe olarak alıcıya, gönderene ve sistem yöneticisine haber verilir. 3. Spam niteliği taşıyan postaların başlıkları yeniden yazılır ve özel bir posta kutusuna atılır. Kullanılan Linux Dağıtımı: Redhat 8.0. Bu kurulum RPM paket sisteminden mümkün olduğunca faydalanmaktadır. Gereken Yazılımlar: 1. Postfix 2. Bir POP veya IMAP sunucusu. Bu sistem Cyrus üzerinde çalışmaktadır, fakat herhangi bir POP veya IMAP sunucusu işinizi görür. 3. Procmail 4. Oldukça kapsamlı bir Perl kurulumu. Bu sistemde Redhat ile gelen perl paketlerinin çoğu kurulu durumdadır. Ek bazı paketler de aşağıda listelenmektedir. 5. SpamAssassin 6. Pyzor 7. RAVAntivirüs 8. Eğer sistemde python yok ise pyzor çalışmaz. Dolayısıyla pyzor'un ihtiyaç duyduğu paketler (RedHat dağıtımında hazır mevcut). 9. NTP. Zamanını doğru bilmeyen bir posta sunucusu baş ağrıtır. RedHat dağıtımında mevcut. Bizim sistemimizde saatler NTP marifeti ile eş zamanlanmaktadır. Ön Gereklilikler: Çalışan bir Postfix posta sistemi. Sistemde kullanıcı posta kutusu oluşturabiliyor ve bu posta kutularını kontrol edebiliyor olmalısınız. Bizim sistemimizde LDAP/Kerberos üzerinde oluşturulan gerçek kullanıcılar kullanılmaktadır. Çalışan bir NTP düzeni. Bunsuz çalışabilse bile, saatini doğru takip etmeyen bir postasistemi baş ağrıtacak ve spam filtrelerinin önemli saat farklarını da kontrol etmeleri yüzünden etkinliğiazalacaktır. postfixfilter adında bir gerçek kullanıcı. Bu örnekte ev dizininin /home/postfixfilter olduğu varsayılıyor. [email protected] adresine gönderilen postaları kabul eden birposta kutusu. Gerçek veya sanal, sizin tercihiniz, fakat buraya gönderilen postaları kontrol edebilmelisiniz. Paketler ve Hazırlık Süreci: 1. Postfix: Güncel sürüm olan postfix-2.0.3-1.src.rpm http://postfix.wl0.org/en/[3] adresinden alındı. Bunun nasıl kurulacağı bu belge kapsamında değil. 2. IMAP/POP sunucusu: Güncel sürüm olan cyrus-imapd-2.1.12-3.src.rpm http://home.teleport.ch/simix/[4] adresinden alındı. Bunun nasıl kurulacağı bu belge kapsamında değ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şağıdaki paketlerin hepsi gerekmemektedir. Fakatspamassassin çalışırken bazı perl sınıflarını bulamadı. Dolayısıyla hemen hemen (veritabanı 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ı 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ş Komutları: 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üncel sürüm olan spamassassin-2.50-1.src.rpmhttp://spamassassin.kluge.net/[6] alındı. Redhat 8.0 üzerinde bu RPM sorun çıkarıyor. Aşağ#305ıdaki şekilde kurun: a. rpm -ivh spamassassin-2.50-1.src.rpm b. cd /usr/src/redhat/SPECS c. spamassassin.spec dosyasını bir metin editöründe açın. %prep -q satırını %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ındı. RPM olmayan paketleri /usr/local/src altı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üs: Bu bir ticari paket. 30 gün deneme kullanım süresinden sonra satın almak durumundasınız. http://www.ravantivirus.com/[8] adresinden ravpostfixlnx.i386.rpm.tar.gz alındı. 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üs - POSTFIX: RAV'ın çalışma mantığında, postfix'in kuyruk sürecine müdahale etmek var. Postfix ayar dosyalarındaçeşitli değerleri değiştirerek, sistemin kullanıcıdan postayı alıp ilk bazı ufak tefek (gönderen, alan vb) kontrolleri yaptıktan sonra RAV'a göndermesi ve daha sonra RAV'ın tekrar Postfix kuyruğuna postayı enjekte etmesi usulüne göre çalışı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ırlarını göreceksiniz. Burası, RAV'ın postfix kuyruğundan çekip kontrol ettikten sonra postfix kuyruğuna postayı enjekte ettiği komut. -o content_filter= seçeneği, postanın sürekli olarak RAV'a gönderilmesini engelliyor. Bir kez geçtikten sonra, artıkfiltre uygulama, direkt işle demek. Bu değişmeyecek. Burada şu anda mevcut olan kendi Postfix ayarlarınızı ta##305ımak önem kazanıyor. Bizim main.cf dosyamızdan ayarlar: alias_maps= hash:/etc/postfix/aliases, ldap:ldapAlias Alias_maps ayarımızı taşımak zorundayız. Yoksa bir takma isme gönderilmiş olan postayı postfix reddeder. -o alias_maps= hash:/etc/postfix/aliases, ldap:ldapAlias myhostname düzenlenmemiş, dolayısıyla sistemin kendi adını (istasyon.bizimfirma.com.tr) vereceğiz . -o myhostname=istasyon.bizimfirma.com.tr smtpd_recipient_restrictions kullanılıyor. Değeri: check_sender_access ldap:ldapInternalUser, check_sender_access ldap:ldapExternalMail, reject_unauth_destination Yani gönderene göre bazı izinlendirme yaptıktan (ve bu izni olmayanları hemen reddettikten) kalanları yerine gönderiyoruz. Bu seçeneği tekrar oluşturacağız. Bu noktada artık gönderenlerin izinleri kontrol edilmiş ve reddedilecekse reddedilmiş. Burayı permit_mynetworks, reject_unauth_destination yapıyoruz. Yani benim güvendiğim ağlardan gelenleri istediği yere gönderiyoruz, geri kalanınıancak bizim sunucumuza yöneltilmişse kabul ediyoruz. Normal işleyişte buraya tek gelen RAV'ın yönlendirdiği postalar olacak. Sonuncu komut, dışarıdan bir şekilde bu porta ulaşırlar ise diye. -o smtpd_recipient_restrictions=permit_mynetworks, reject_unauth_destination smtpd_sender_login_maps kullanılıyor. Değeri ldap:ldapAlias . Bu salt SMTP-AUTH ile sisteme girenlerin bu kimlik sınamasında verdikleri kimlik ile gönderdikleri postadaki gönderen kimliğininaynı olduğunu kontrol ediyor. Bu noktada artık geçerliği kalmış değil. Kuyruğa enjeksiyon yapan süreç SMTP-AUTH ile gelmemiş. Bunu boşaltacağı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üs - Kendi Ayarları: /etc/opt/rav/ravmd.conf dosyasında: Virüs uyarılarını Türkçe yapmasını istiyoruz. _include /etc/opt/rav/languages/turkish-iso-8859-9 satırının başındaki # işaretini kaldırın. (Az yukarıdaki english satırını olduğugibi bırakmak zorundasınız. Yoksa hata oluşuyor.) /etc/opt/rav/groups/global dosyasında: RAV'ın her virüsü bir de RAV'a haber verme özelliğini kaldıralım: #admin_addr = [email protected] ve Türkçe desteği için aşağıdaki satırın başındaki # işaretini kaldıralım. _include /etc/opt/rav/languages/turkish-iso-8859-9.equiv Bu satırın yukarısında yer alan İngilizce satırının (english.equiv) başına bir # koyalım. Virüs uyarılarını sistem yöneticisi de alsın istiyoruz: admin_addr = [email protected] Postfix'in always_bcc seçeneği ile sistemden geçen bütün postaların bir kopyasını alıyoruz. Virüslü dosyalarda bu adrese de posta gönderilmesini veya bu adrese gittiğinin gö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ütün spam kontrollerimizi spamassassin ile yapacağız. RAV kendi içinde de bazı spam filtreleri taşıyor. Bunları devre dışı bırakıyoruz (antispam_configuration ile başlayan satırların başına # koyun): #antispam_configuration = bulk_high_precision, bulk_very_high_precision SpamAssassin/Procmail ve POSTFIX: /etc/postfix içerisindeki main.cf ve master.cf POSTFIX ayar dosyalarında bazı değişiklikler yaparak Postfix'in kuyruğaattığı postaları procmail'e yönlendirmesini, procmail'de spamassassin'den geçirilen postalarınRAV virüs kontrolünden geçerek Postfix kuyruğuna geri dönmesini sağlayacağız. /etc/postfix/master.cf: Başlarında yer alan smtp satırını aşağıdaki şekilde değiştirin. Ortadaki y harfi önemli, bunu unutmayın! smtp inet n - y - - smtpd -o content_filter=procmail Dosyanın sonuna şu satırı ilave edin (tek satı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 Çağıran PROCMAIL ayarları: /home/postfixfilter/procmailrc dosyasını şu içerikle oluşturun (postfixfilter kullanıcısı dosyayı okuyabilmeli): Eğer spamassassin filtrelemesi sonucu oluşan hareketleri değiştirmek isterseniz müdahale edeceğiniz yer burası.Örneğin içinde X-Spam-Flag: YES yazan paragrafı çıkararak filtreden geçirilen postaların işlendikten sonra herhangi bir ayıklamaya tabi tutulmadan son kullanıcılara aynen gönderilmesini sağlayabilirsiniz. Biz, eğer bir posta spam olarak işaretlenmiş ise, gönderilenleri başka bir başlığa kaydedip postayı [email protected] adresine yö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ı: /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 İşlemleri: /etc/rc.d/init.d/ravmail restart /etc/rc.d/init.d/postfix reload ---------------------------------------------------------------------------- Lütfen düzeltmeleri [email protected][9] adresine yollayı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]