Qmail ile Anti Spam ve Antivirüs Gateway Kurulumu

Malum, spam mailler ile mücadele etmek çoğu zaman ciddi efor isteyen bir iştir. Bazı durumlarda mail trafiğinin çok büyük bir oranı spam maillerden oluştuğu göz önüne alındığında, bu sorun son kullanıcıdan, sistem yöneticisine kadar herkesi etkilemektedir.

Hal böyle olunca, özellikle bir sistem yöneticisiyseniz, SMTP altyapınızda muhakkak spam ve virüslü maillerin önünü kesmek için önlemler almanız gerekiyor. İşte bu noktada da tercih edilebilecek bir çok anti spam ve antivirüs yazılımı ve çeşitli yöntemler bulunuyor. Yöntemlerden birisi de anti spam ve antivirüs gateway kullanmak.

anti-spam

Bu yazıda, FreeBSD üzerinde, qmail ile spamassassin, clamav, dcc ve qsheff kullanarak bir anti spam ve antivirüs gateway nasıl oluşturabileceğiniz ile ilgili kurulum notları bulunmaktadır.

GENEL AÇIKLAMALAR


Direk olarak kurulum bilgilerine geçmektense, konunun daha iyi anlaşılması için gateway mantığı ve yukarıda adlarını saydığım yazılımlardan bahsetmek istiyorum.

GATEWAY MANTIĞI

Bildiğiniz gibi spam ve virüslü maillerle başetmek için izleyebileceğiniz yöntemlerden birisi, posta sunucularınızın üzerine anti spam ve antivirüs yazılımları kurmaktır. Bu şekilde ilgili sunucuya gelen (ya da giden) postaların içeriklerini tarayabilir, spam ve virüs saptaması yapabilirsiniz. Bu yöntem çok sık kullanılmasına rağmen, yazının hemen başında bahsettiğim yüksek spam ve virüslü mail oranına sahip ortamlar için pek de kullanışlı olmayabilmektedir.

Zira, bu şekilde posta sunucusuna, gelen ve giden posta trafiğini idare etmekle birlikte, spam ve virüs tarama işlerini de yüklemiş olursunuz. Bu da -spam ve virüs popülasyonunun yüksel olduğu- ortamlarda sunucuların zorlanmasına neden olabilir. Zira kontrolleri yapmak için kullanıdığınız yazılımların sistem kaynaklarından alması gereken bir pay bulunmaktadır.

İşte bu gibi ortamlarda, posta sunucularını sürekli stabil tutmak ve kaynaklarını sadece posta almak ve göndermek üzere kullanabilmesini sağlamak için gateway yönteminden yararlanabilirsiniz.

Bu yöntemde, posta sunucularınızın önüne koyduğunuz ve üzerinde herhangi bir box kulunmayan bir başka posta sunucusu spam ve virüs tarama işlerini üzerine alır ve gelen mailleri taradıktan sonra ilgili mailleri posta kutularının bulunduğu asıl posta sunucusuna iletir. Maillerin gateway’e yönlendirilmesi için yapılması gereken tek şey, domainize ait MX kayıtlarını gateway’in ipsine set etmenizdir. Böylece herhangi biri size mail atmak istediği zaman dns’den alacağı MX bilgilerinden hareketle maili, gateway’inize gönderecektir. Gateway de tarama işlemlerini yaptıktan sonra üzerindeki smart host (smtproutes) tanımlamasından hareketle maili asıl posta sunucusuna iletecektir.

Piyasada bu işi yapan bir çok appliance ürün bulunuyor. Ücreti karşılığında edinebileceğiniz bu cihazlar ile bir anti spam ve antivirüs gateway’e sahip olabileceğiniz gibi, bir bilgisayara yukarıda adlarını saydığım yazılımları kurup yapılandırma işlemlerini tamamladıktan sonra kendi gateway’inizi de oluşturabilirsiniz. Ben her zaman ikinci yöntemi tercih ediyorum. Zira, aynı işi yapan ve bazı noktalarda daha çok esneklik sağlayan bir şeyi ücretsiz olarak edinmek daha akıllıca olsa gerek. Ayrıca, piyasada bulunan appliance ürünlerin bir çoğu yukarıda adlarını sayarken belirttiğim spamassassin’i kullanıyorlar. (Bkz: http://wiki.apache.org/spamassassin/CommercialNetworkAppliances)

Şimdi anti spam ve antivirüs gateway’in bileşenlerinden bahsedelim.

DONANIM VE OS

Kendi gateway’inizi kurmak için gerekli olan donanımın belirlenmesi her ne kadar e-posta trafiğinizin yoğunluğu ile alakalı olsa da ortalama bir yoğunluğa sahip altyapılar için ortalama bir PC’ yeterli olacaktır. İşletim sistemi olarak hemen her zaman olduğu gibi FreeBSD’yi tercih ediyorum. Bundan dolayı bu yazıda anlatılacak olan kurulumlar bir FreeBSD’ye göre yazılmıştır. Elbette siz herhangi başka bir dağıtım kullanabilirsiniz ancak kurulum yöntemleriniz ve yapılandırma dosyalarının pathleriniz anlatılanlardan farklı olacaktır.

Kurulumu yapılacak yazılımlar ve kısa açıklamalarına gelince:

QMAIL

Bildiğiniz gibi qmail, uzun zamandır popülerliğini koruyan bir MTA’dır. Modüler yapısı, pluginleri ve temiz dizaynı ile tam teşekküllü bir e-posta sunucusu olarak hizmet verebilir. Ben, qmail’i gateway amaçlı olarak kullanmak için gelen mailleri karşılaması ve tarama işlemlerinden sonra asıl mail sunucusuna gönderebilmesi için minimal özellikleri ile kuruyorum. Sizin de elinizde minimal olarak kurulmuş bir qmail olması yeterlidir.

Not: Bu dökümanda qmail kurulumu anlatılmamaktadır ve çalışmakta olan bir qmail’iniz olduğu varsayılmaktadır. Eğer gateway olarak kullanılacak makinada halihazırda bir qmail yoksa, kolay kurulum için “qmail-install-script”‘isimli shell scriptini kullanabilirsiniz. (Bkz: http://www.syslogs.org/2009/03/qmail-installation-script/

SPAMASSASSIN

Kural tabanlı olarak çalışan bir posta filtreleme aracıdır. SA, bir mailin başlık ve gövde kısımlarını bünyesinde bulunan çok sayıdaki kurallara göre inceler ve yaptığı testlerin sonucunda o mailin spam olup olmadığına karar verir. Çalışma mantığı kısaca skorlama esasına dayanır. Her bir kuralın belli bir puanı bulunmaktadır ve kural süzgeçinden geçirilmiş bir maile, eşleştiği kuralların toplam puanına denk gelen bir skor verilir; daha önceden sizin tarafınızdan belirlenen eşik skoru aşan mailler ise spam olarak tanımlanır. Maile verilen skor, mailin başlığına eklenir. Örnek olarak aşağıda SA ile teste tabii tutulmuş bir mailin başlık kısmındaki ilgili satırları görebilirsiniz.

X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on
	exodus.cagriersen.net
X-Spam-Level: *
X-Spam-Status: No, score=2.0 required=4.2 tests=DCC_CHECK,RCVD_IN_PBL,RDNS_NONE

Görüldüğü gibi, SA maili çeşitli testlere tabii tutmuş ve eşleşen kurallara ait puanların toplamı olan 2.0 skoru’nu vermiş. Mailin spam olarak tanımlanması için gereken eşik değerinin ise 4.2 olduğu ve eşleşen kuralların hangileri olduğu görülebiliyor.

Bunun dışında SA modüler yapısı sayesinde bir çok e-mail sistemi ile bütünleşik olarak çalışabilmekte ve DCC, Pyzor ve Razor gibi ortak spam tanımlama database’lerini ve DNS Blocklistlerini kullanabilmektedir.(Zaten biz de Spamassassin’i DCC ile birlikte kullanacağız.) Ve son olarak, kendi kurallarınızı da yazabilmenize olanak sağlayan esnek bir yapısı bulunmaktadır.

DCC (Distributed Checksum Clearinghouses)

Biraz önce Spamassassin’den bahsederken belirttiğim, ortak spam tanılama veritabanı uygulamasıdır. Çalışma mantığı kısaca şöyledir; e-posta sunucunuza ulaşan her mail DCC veritabanlarında sorgulanır. İlgili maile ait kayıt herhangi bir DCC veritabanında bulunuyorsa, mailin spam olduğu anlaşılır. Kurulum bölümünde konuyla ilgili ayrıntılı bilgi verilecektir.

CLAMAV

Unix ve türevi işletim sistemleri için geliştirilmiş, açık kaynak kodlu bir antivirüs yazılımıdır. Özellikle e-mail scanning için mail gatewayler için geliştirilmiştir. Hemen her e-posta sunucusu ile entegre çalışabilir. Şu an için 538390 adet virüsü tespit edebilmektedir ve otomatik update özelliğine sahiptir. Bu yazılımı kullanarak gateway’imize gelen mailler de virüs taraması yapacağız. Detayları kurulum bölümünde bulabilirsiniz.

QSHEFF

Enderunix‘ten Baris Şimşek ve Atılım Boy tarafından qmail için geliştirilen oldukça kullanışlı bir içerik filtreleyicidir. Yaptığı iş kısaca, qmail-queue’nun yerine geçerek gelen mailleri karşılamak ve içerik taraması yapmaktır. Ayrıca, clamAV ya da herhangi custom bir antivirüs yazılımını çağırarak virüs taraması da yapabilmektedir. qsheff, ripemime isimli yazılım sayesinde kendisine ulaşan mailleri , header’ını, body’sini ve ekler’ini parçalar ve ayrı dosyalara böler, bu dosyalarda içerik (kelime, cümle ve regex ile düzenli ifade ) taraması yapılır ve ekler virüs kontrolünden geçirilir. Eğer mail temiz ise qmail-queue’a teslim edilir ve mail kullanıcıya ulaşır. Bunun dışında qsheff’i spamassassin gibi farklı spam önleme araçları ile birlikte kullanılabilmektedir -ki biz de spamassassin ile birlikte kullanacağız.-

C dilinde yazıldığından dolayı sistem kaynaklarını oldukça efektif kullanabilmektedir, anlaşılır konfigürasyon dosyaları ile ihtiyaçları son derece iyi karşılamaktadır.

Detayları kurulum bölümünde bulabilirsiniz.
Bileşenlerle ilgili bu kadar açıklama zannediyorum ki yeterli olur. Artık kurulum ve yapılandırma bölümlerine geçebiliriz.

BİLEŞENLERİN KURULMASI


Hatirlatma: Daha öncede söylediğim gibi düzgün olarak çalışmakta olan minimal bir qmail’iniz olduğunu varsayıyorum. Eğer qmail’iniz hazır değilse, minimal özelliklerle (herhangi bir eklenti kullanmadan) bir qmail kurmanız gerekiyor. (Yukarıda linki verilen qmail-install-script’ini kullanarak hızlı kurulum yapabilirsiniz.)

Ben paketleri porst’tan yüklüyorum; size de bunu tavsiye ederim. Eğer FreeBSD’nizde port ağacı yüklü değil ya da güncel değilse öncelikle portsnap ile yükleyin / update edin. (Bkz: http://www.syslogs.org/2008/06/using-portsnap/)

Kurulum adımlarında herhangi bir sıralama izlemek zorunda değiliz, sadece qsheff’i en son kurmamız gerekiyor. Bundan dolayı ben önce clamav, sonra spamassassin ve dcc kurduktan sonra qsheff kurma yolunu izliyorum.

CLAMAV KURULUMU


Aşağıdaki şekilde, ports’tan clamav kurulumu yapalım.

Not: Clamav’ı default seçeneklerle kurmanız yeterlidir. Ayrıca, clamav’ın çalışabilmesi için perl gibi gerekli diğer paketler de otomatik olarak kurulacaktır. İlgili paketlere ait options ekranlarında da herhangi ek bir özellik seçmenize gerek yok. Tüm paketleri default değerleri ile kurun.

# cd /usr/ports/security/clamav
# make install clean

Kurulumu sorunsuz olarak tamamladıysanız, clamav’ı konfigurasyonunu yapıp start edelim.

ClamAV’in clamd ve freshclam olmak üzere iki adet daemon’ı bulunuyor; clamd dosya tarama işlerini yaparken, freshclam ise ClamAV’ı signature db’sini update ediyor. ClamAV’ın conf dosyası, /usr/local/etc/clamd.conf ‘tur. Bu dosyada temel olarak yapmamız gereken pek değişiklik yok; clamav default ayarlarla sorunsuz olarak çalışacaktır. Fakat isterseniz göz atabilir ve ayarları kendinize göre düzenleyebilirsiniz. Aynı şekilde freshclam’ın conf dosyası da /usr/local/etc/freshclam.conf ‘tur ve bu dosyada da herhangi bir değişiklik yapmanıza gerek yoktur.

Şimdi clamad ve freshclam daemonlarını boot sırasında başlatılmaları için startup’a ekleyelim ve sonrasında da start edelim.

/etc/rc.conf dosyanızı açın ve aşağıdaki satırları ekleyin.

clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"

Şimdi de daemonları start edelim.

Önce freshclam’ı start ediyoruz:

# /usr/local/etc/rc.d/clamav-freshclam start

Sonra da clamd’yi:

# /usr/local/etc/rc.d/clamav-clamd start

Clamd’yi ilk start ettiğiniz zaman virüs database’inin 7 günden eski olduğunu ve update etmeniz gerektiğini belirtir aşağıdaki gibi bir uyarı alırsınız.

LibClamAV Warning: **************************************************
LibClamAV Warning: ***  The virus database is older than 7 days!  ***
LibClamAV Warning: ***   Please update it as soon as possible.    ***
LibClamAV Warning: **************************************************

Bu nedenle, öncelikle virüs database’ini aşağıdaki komut ile update edelim.

# freshclam

Bu şekilde virüs database’i update edilmiş olacaktır.

Not: Eğer, ClamAV kurulumunun güncel olmadğıma dair aşağıdaki gibi bir hata alıyorsanız:

WARNING: Your ClamAV installation is OUTDATED!
WARNING: Local version: 0.94.5 Recommended version: 0.95
DON'T PANIC! Read http://www.clamav.net/support/faq

Dediği gibi panik yapmayın 🙂 Bu sorunun nedenlerinden birisi, sisteminizdeki port ağacınızın güncel olmamasında olabilir. İkincisi ise ClamAV’ın son sürümü henüz FreeBSD’ye port edilmemiştir. Bunu kontrol etmek içinhttp://www.freebsd.org/cgi/ports.cgi?query=clamav&stype=all&sektion=security adresine gidip, Clamav’ın sürümü ile uyarıda aldığınız sürüm numarasını karşılaştırın. Eğer sayfadaki sürüm no’su ile uyarıda belirtilen sürüm numarası aynı ise, port ağacınızı güncellemeniz ve clamav’ı sisteme yeniden yüklemeniz gerekir. Eğer yeni versiyon henüz port edilmemişse bir iki güne kadar port edileceği için bekleyebilir; beklemek istemiyorsanız da kaynak koddan kurulum yapabilirsiniz.

Neyse konuyu daha fazla uzatmayalım.

Herşey yolunda gittiyse, sisteminizde clamav çalışıyor demektir.

Şimdi Spamassassin kurulum ve yapılandırmasına geçebiliriz.

SPAMASSASSIN KURULUMU


Spamassassin’i de portstan kuralım:

Not: Kurulum sırasında açılan options ekranında SSL desteği aktif olarak gelmektedir. Ancak biz SA’ya erişimi, sadece makinenin kendisi üzerinden yapacağımız için SSL kullanmamıza gerek bulunmuyor. Bu nedenle SSL’i devre dışı bırakın.

Not2: Bir diğer özellik ise SA’ya RAZOR desteği vermektir ki, ben DCC kullanmayı tercih ettiğimden bunu da disable ediyorum. Siz de bu şekilde yapın.

Bunun dışında SA kurulumu için gerekli olan diğer bağımlı paketler de otomatik kurulacak bu kurulumlar sırasında herhangi ek bir özellik seçmenize gerek yok. Default değerleri ile kurulum yapmanız yeterlidir.

# cd /usr/ports/mail/p5-Mail-SpamAssassin/
# make install clean

Kurulum sorunsuz olarak tamamlanıysa, yapılandırma işlemlerine geçebiliriz.

SA’nın conf dosyaları /usr/local/etc/mail/spamassassin dizini altında durmaktadır ve local.cf.sample isminde temel bir yapılandırma dosyası bulunmaktadır. Bu dosyanın ismini aşağıdaki gibi local.cf olarak değiştirelim.

# cd /usr/local/etc/mail/spamassassin
# mv local.cf.sample local.cf

Bu dosyaya göz attığınız zaman bazı tanımlamaların bulunduğunu görebilirsiniz. Ancak bu tanımlar default değerlerin kullanılabilmesi için comment out (#) edilmiş durumdadırlar. Biz ise bu defaul değerlerin yerine kendi tanımlamalarımızı yapacağız.

Bu nedenle /usr/local/etc/mail/spamassassin/local.cf dosyasının en altına, aşağıdaki satırları ekleyelim.

rewrite_header Subject _SPAMMSG_
report_safe 0
required_score 5.0
use_auto_whitelist 0
use_bayes  0
bayes_auto_learn 0
trusted_networks xxx.xxx.xxx.
dns_available yes

Bu satırların anlamları şu şekildedir:

rewrite_header Subject _SPAMMSG_ : Taranan mailin spam olarak belirlenmesi durumunda, mailin konu kısmına _SPAMMSG_ ibaresinin ekleneceğini belirtir.

report_safe 0 : Report Safe özelliği, spam olarak belirlenen maillerin, kullanıcıya hangi formatta iletileceği ile ilgilidir. Bu konuda 3 seçenek bulunmaktadır. Değeri 1 yaparsanız, mailin orjinali attach olarak gonderilir ve mailin kendisinde spam olarak belirlenmesine neden olan rapor bulunur. Eğer değer 2 olursa, mail attach yerine plain text formatında gönderilir. 0 yaparsanız da özellik devre dışı bırakılır ve mailin header kısmına kısa bir rapor eklenir.

required_score 5.0 : Mailin spam olarak kabul edilmesi için gerekli skor değeri. Biz örneğimizde 5.0 değerini kullanıyoruz. Yani bir maile uygulanan testlerin toplam puan değeri 5′e ulaşırsa o mail spam olarak kabul edilecektir.

use_bayes 0 : Bayes istatistiki bir inceleme yöntemidir ve SA ile default olarak gelmektedir. “Gelen bir mailin karakteristik özellikleri, daha önceden spam olarak işaretlenmiş ve bayes database’ine kaydedilmiş bir mail ile benzerlik gösteriyorsa, bu mail de spam’dir” gibi bir mantıkla çalışır. Kullanıcılarınız gelen maillere spam ya da spam değil şeklinde geri bildirimlerde bulunurlar ve zamanla bu şekilde bir bayes database’i oluşturulmuş olur. Böylece gelen her mail bu db’de sorgulanabilir. Ancak biz bir gateway kurduğumuzdan dolayı sistemimizde herhangi bir mailbox bulunmuyor ve dolayısı ile geri bildirimde bulunacak bir kullanıcı durumu söz konusu değil. Geri bildirim işini asıl mail sunucu da yapıp, geribildirimde bulunulan mailleri gateway’e çekerek bayes kullanabiliyor olsak da ben pek gerekli bulmuyorum. Bu nedenle use_bayes 0 diyerek bu özelliği kapatıyorum. Siz kullanmak isterseniz kısa bir google araması sonucunda konuyla ilgili çok sayıda belge bulabilirsiniz.

bayes_auto_learn 0 : Bayes’in otomatik öğrenme özelliği. Bayes kullanmadığımız için bu özelliği de kapatıyoruz.

trusted_networks : Bu bölümde güvenilir IP networklerimizi belirtiyoruz. Böylece kaynağı ilgili networkten olan herhangi bir mail spam olarak kabul edilmiş olsa bile herhangi bir şeyden etkilenmiyor. Örn: 212.17.35. gibi bir değer 212.17.35.0/25 c class ip networkünün güvenilir olduğunu belirtir.

dns_available yes : Spamassassin sorgu yapabilmek için DNS serverlara erişimi olup olmadığını default olarak kontrol eder. Bu satırda DNS kontrolünün yapılmasını söylüyoruz.

Temel olarak açıklamalar bunlar. SA’nın daha pek çok özelliği bulunmaktadır ancak ilk etapda bu yapılandırma işimizi görecektir. Sadece bir sonraki adımda DCC kurduğumuz da bu dosyaya iki satır daha ekleyeceğiz. Yapılandırma seçenekleri ile ilgili detaylı bilgiye sayfanın sonundaki kaynak linklerinden erişebilirsiniz.

Zannediyorum bu kadar açıklama yeterli. İlgili satırları local.cf dosyasına eklediyseniz kaydedip çıkın.

Son olarak spamassassin’in default user_perfs dosyasını oluşturabilmesi için /var/qmail altında .spammassassin isimli bir dizin açalım ve gerekli yetkiyi verelim.

# mkdir /var/qmail/.spamassassin
# chmod 777 /var/qmail/.spamassassin/

Not: Normalde, spamassassin bu dizini ve user_perf dosyasını kullanıcıların home dizinlerinde otomatik olarak oluşturmaktadır. Ama biz gateway kurduğumuzdan dolayı herhangi bir user’ımız bulunmadığından, genel bir .spamassassin dizini oluşturuyoruz.

Artık spamassassin çalıştırılmaya hazır durumdadır. Önce spamd’yi boot sırasında başlatmak için /etc/rc.conf dosyasına aşağıdaki satırı ekleyin.

spamd_enable="YES"

Sonra da start edelim.

# /usr/local/etc/rc.d/sa-spamd start

Şimdi de Spamassassin’i DCC ile birlikte çalıştıralım.

DCC KURULUMU


Gene port ağacını kullanarak kurulum yapıyoruz.

# cd /usr/ports/mail/dcc-dccd/
# make install clean

Açılan options ekranında DCCIFD’nin seçili olduğundan emin olun.

Kurulumu sorunsuz yaptıysanız, yapılandırma ve çalıştırma aşamasına geçebiliriz.

DCC’nin yapılandırma dosyaları, /usr/local/dcc dizini altında bulunmaktadır. Bu dizinde whitlist, greylist vs. gibi yapılandırma dosyaları bulunmaktadır. İnceleyerek ihtiyacınıza göre düzenleyebilirsiniz. Ancak temel conf dosyası /usr/local/dcc/dcc_conf dosyasında, DCCIFD’yi start edebilmemiz için şimdi bir değişiklik yapmamız gerekmektedir.

Dosyayı editleyelim ve DCCIFD_ENABLE=off değerini on yapalım.

# vi /usr/local/dcc/dcc_conf
DCCIFD_ENABLE=on

Artık DCC’yi başlatabiliriz. Önce, /etc/rc.conf dosyasına aşağıdaki satırı ekleyin.

dccifd_enable="YES"

Sonra da start edin.

# /usr/local/etc/rc.d/dccifd start

DCC daemon’u DCC sunucuları ile UDP 6277. porttan konuşmaktadır. Bu nedenle, eğer makineniz bir firewall’un arkasında bulunuyorsa, dışarıdan gelen ve kaynak portu UDP 6277 olan paketlerin geçişine izin vermeniz gerekir.

DCC’nin sorunsuz olarak çalışıp çalışmadığını cdcc info komut ile kontrol edebilirsiniz.
Çıktı aşağıdaki gibi olmalıdır.

[root@ytestbsd /]# cdcc info
# 03/30/09 14:24:09 EEST  /usr/local/dcc/map
# Re-resolve names after 15:51:01
# 1447.94 ms threshold, 1428.99 ms average    12 total, 10 working servers
IPv6 off

dcc1.dcc-servers.net,-      RTT+1000 ms  anon
# *137.208.8.26,-                                             wuwien ID 1290
#     protocol version 8
#     100% of  1 requests ok  329.00+1000 ms RTT       100 ms queue wait
#  192.135.10.194,-                                           debian ID 1169
#     protocol version 8
#     100% of  1 requests ok  430.11+1000 ms RTT       100 ms queue wait
#  207.195.195.223,-                                    SIHOPE-DCC-3 ID 1085
#     protocol version 8
#     100% of  1 requests ok  347.94+1000 ms RTT       100 ms queue wait

dcc2.dcc-servers.net,-      RTT+1000 ms  anon
#  208.201.249.232,-                                       sonic.net ID 1156
#     100% of  2 requests ok  528.81+1000 ms RTT       100 ms queue wait
#  209.34.225.42,-
#      not answering

dcc3.dcc-servers.net,-      RTT+1000 ms  anon
#  208.201.249.233,-                                       sonic.net ID 1117
#     100% of  2 requests ok  527.22+1000 ms RTT       100 ms queue wait
#  209.169.14.27,-                                     x.dcc-servers ID 104
#     100% of  1 requests ok  370.68+1000 ms RTT       100 ms queue wait

dcc4.dcc-servers.net,-      RTT+1000 ms  anon
#  209.169.14.26,-                                     x.dcc-servers ID 104
#     100% of  1 requests ok  372.52+1000 ms RTT       100 ms queue wait
#  209.169.14.30,-                                     x.dcc-servers ID 104
#     100% of  1 requests ok  374.99+1000 ms RTT       100 ms queue wait

dcc5.dcc-servers.net,-      RTT+1000 ms  anon
#  67.66.138.141,-                                                   ID 1356
#     100% of  1 requests ok  373.43+1000 ms RTT       100 ms queue wait
#  217.20.119.18,-                                  sgs_public_dcc_server ID 1199
#     protocol version 8
#     100% of  1 requests ok  397.01+1000 ms RTT       300 ms queue wait

127.0.0.1,-                 RTT-1000 ms  32768 844905732y1880
#  127.0.0.1,-
#      not answering

################
# 03/30/09 14:24:09 EEST  greylist /usr/local/dcc/map
# Re-resolve names after 16:24:09  Check RTTs after 14:39:09
# 1 total, 0 working servers
# skipping asking greylist server 64 seconds more

127.0.0.1,-                 Greylist 32768 844905732y1880
#  127.0.0.1,6276
#      not answering

Eğer dcc sunucularından yanıt alınamıyorsa, muhtemel sorun yukarıda da bahsettiğim gibi firewall’dan udp 6277′nin kapalı olmasıdır.

DCCIFD sorunsuz olarak çalışıyorsa, SA’ya mailleri tararken DCC sorgusu yapması için bir tanımlama girebiliriz.

/usr/local/etc/mail/spamassassin/local.cf dosyasını yeniden editleyin ve en sonuna aşağıdaki satırları girin.

use_dcc 1
dcc_home /usr/local/dcc
add_header all DCC _DCCB_: _DCCR_

Sonrasında da /usr/local/etc/mail/spamassassin/v310.pre isimli dosyayı editleyip aşağıdaki satırın başındaki # işaretini kaldırarak uncomment edelim.

#loadplugin Mail::SpamAssassin::Plugin::DCC

Artılk spamassassin dcc de kullanabilir duruma geldi. Değişikliklerin aktif olması için spamd’yi yeniden başlatıyoruz:

# /usr/local/etc/rc.d/sa-spamd restart

Not: Eğer /var/log/maillog dosyasında dcc ile ilgili olarak continue not asking DCC 146 seconds after failure gibi bir hata alırsanız, aşağıdaki komutu çalıştırarak sorunu giderebilirsiniz.

/usr/local/dcc/libexec/updatedcc -c --with-max-db-mem=1500

Spamassassin ve DCC ile ilgili yapılacaklar bu kadardı.

QSHEFF KURULUMU


Qsheff’in çalışabilmesi için sistminizde ripmime yazılımının yüklü olması gerekir. Ports’tan kuralım.

# cd /usr/ports/mail/ripmime/
# make install clean

Şimdi qsheff kurulumunu yapabiliriz. Normalde qsheff’de FreeBSD’nin port ağacında bulunuyor; ancak bir keresinde sorun yaşadığım için artık kaynaktan derlemeyi tercih ediyorum.

http://www.enderunix.org/qsheff/ann/20070929-1.txt adresinden qsheff’in son sürümünü (2.1-r3) /usr/local/src dizinine indirelim ve paketi açalım.

# cd /usr/local/src
# fetch http://www.enderunix.org/qsheff/qsheff-II-2.1-r3.tar.gz
# tar -xvf qsheff-II-2.1-r3.tar.gz

Şimdi ilgili dizine girip derleme işlemine başlayalım. (configure özelliklerinin açıklamaları hemen aşağıdadır.)

# cd qsheff-II-2.1-r3
# ./configure --enable-qq-patch --disable-local-users --with-clamav -with-clamd-socket=/var/run/clamav/clamd.sock

./configure –help komutunu verirseniz, konfigürasyon özelliklerinin bir listesini görebilirsiniz, ancak bizim kullanacaklarımız şunlar:

–enable-qq-patch : qmailqueue yapasını devreye alır.
Not: Bu yamanın önceden qmail’e uygulanmış olması gerekir -ki netqmail’de uygulanmıştır-. Ben netqmail kullandığım için bunu aktif ediyorum. Qmail’inizde bu yamanın uygulanıp uygulanmadığını anlamak için /var/qmail/bin dizini altında, “strings qmail-smtpd | grep QMAILQUEUE ” komutunu çalıştırın. “QMAILQUEUE” çıktısı alıyorsanız, yama uygulanmış demektir ve bu özelliği devreye alabilirsiniz.

–disable-local-users : Local kullanıcılar için filtrelemenin kapatılması.
–with-clamav : ClamAV ile birlikte kullanıyoruz.
–with-clamd-socket : clamd socket’inin path’i.

./configure işlemi bittiyse sırası ile aşağıdaki işlemleri uygulayalım ve kurulumu gerçekleştirelim.

# make && make install
# /usr/local/etc/qsheff-II/install-wrapper.sh

İşlemler tamamlandıysa qheff sisteme yüklenmiş demektir. Kurulum sonrasında /var/qmail/bin dizininde qmail-qsheff binary’sini görebilirsiniz.

qsheff’in yapılandırma dosyaları, cd /usr/local/etc/qsheff-II/ dizini altında durmaktadır. Bu dosyalar ve açıklamaları şöyle:

qsheff.conf : Temel yapılandırma dosyası.
qsheff.attach : Maillerin eklentilerindeki yasaklanmak istene dosya tipleri burada belirtilir.
qsheff.ignore : Spam filtresinden geçirilmeyecek gönderici ya da ip adresleri tanımlanır.
qsheff.rules : Kural tanımlamaları. Tanımlanan kelime ya da cümleler, postaların başlık ya da gövde içeriklerinde aranır ve eşleşenlerin geçişine izin verilmez.

qheff.conf dosyasını açtığınız zaman, içeriğinde belirli yapılandırma ayarları olduğunu görürsünüz. Bunlardan önemlileri şöyledir:

enable_spam_blackhole : Ön tanımlı olarak disable (0)’dir. Eğer 1 yaparsanız, herhangi bir mail spam gerekçesi ile blocklanırsa, maili gönderene herhangi bir hata mesajı döndürülmez.
enable_virus_blackhole : Yukarıdaki tanımın virüslü mailler için geçerli olanı.
drop_empty_from : 1 yaparsanız From: kısmı boş olan mailler reddedilir.
enable_quarantine : 1 yaparsanız, spam ya da virüs gerekçesi ile reddedilen karantinaya alınır.
enable_ignore_list : 1 yapılırsa, filtrelerden hariç tutuacak e-mail adreslerini ve ip’leri barındıran liste (qsheff.ignore) devreye alınır.
enable_header_filter = 1 : Başlığa göre filtreleme özelliği devreye alınır. (qsheff.rules dosyasında h: ile başlayan satırlardaki ifadelere sahip mailler reddedilir.)
enable_body_filter = 1 : Gövdeye göre filtreleme özelliği devreye alınır. (qsheff.rules dosyasında b: ile başlayan satırlardaki ifadelere sahip mailler reddedilir.)
enable_attach_filter = 1 : Eklenti filtresini devreye alır.
enable_clamd = 1 : ClamAV taraması devreye alınır.

Bizim ilgilendiğimiz yapılandırma ayarları bundan ibaret. Ben şahsen aşağıdaki yapılandırma şeklini kullanıyorum; siz keyfinize göre ayarlama yapabilirsiniz.

enable_spam_blackhole = 0
enable_virus_blackhole = 0
paronia_level = 0
drop_empty_from = 1
enable_quarantine = 0
enable_ignore_list = 1
enable_header_filter = 1
enable_body_filter = 1
enable_attach_filter = 1
enable_clamd = 1

Qsheff’i kendi ayarlarınız ile yapılandırdıysanız, şimdi qsheff’i spamassasin ile birlikte çalıştırma aşamasına geçebiliriz.

QSHEFF’İN SPAMASSASSIN İLE BİRLİKTE ÇALIŞTIRILMASI


/var/qmail/bin dizini altında “qmail-sa” isimli bir dosya oluşturun ve içerisine aşağıdaki satırları girin ve kaydedip çıkın.

#!/bin/sh

/usr/local/bin/spamc | /var/qmail/bin/qmail-qsheff

Sonra da dosyaya gerekli permission’ı verelim.

 # chmod 755 /var/qmail/bin/qmail-sa

qmail-sa dosyasının yapacağı iş şöyle; qmail-smtp ya da qmail-inject’ten gelen mailler önce spamc’ye gönderilecek ve alınan çıktı qsheff’e yollanacak. qsheff’de kendi denetimlerini yapıtıktan sonra maili kullanıcıya iletilmesi için qmail-queue’ya yönlendirecek. qmail-smtp ya da qmail-inject’ten gelecek mailleri qmail-sa dosyasına iletmek için tcp.smtp dosyası içerisinde qmailqueue çevre değişkenini kullanarak qmail-sa’ya yönlendirilmesini söyleyeceğiz.

İşte şöyle:

Önce qmail’i stop edin.

# qmailctl stop

Sonra, /etc/tcp.smtp dosyasını açarak içerisine aşağıdaki satırı ekleyin ve kaydedin.

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

Önemli Not: Spamassassin ve qsheff ikilisinin düzgün çalışabilmesi için qmail’in softlimit’ini arttırmak icap ediyor. Mesela benim kullandığım default değer olan 4000000 (~4MB) değeri ile pek düzgün çalışmamakta, bu nedenle bu değeri 7000000′e (~7MB) çekiyorum. Softlimit, qmail-smtpd’nin işlemlerde kullanabileceği max memory değerini göstermektedir. Bu değer çok yüklenirseniz sunucunuzun yoğunluğu ile alakalı olarak memory’nin tükenebilir ve gene sorunla karşılaşabilirsiniz. Ancak SA ve qsheff için 4MB softlimit yetmemektedir. Bu nedenle değeri 7MB yapmanızı tavsiye ederim. Eğer 7MB değeri sorun çıkarıyorsa o durumda 6MB ile deneyip herşeyin yolunda gidip gitmediğinden emin olabilir ve kendinize en uygun değeri belirleyebilirsiniz.

Şimdi bu softlimit değerini arttıralım:

/var/qmail/supervise/qmail-smtpd/run dosyasını editleyin dosyanın -genellikle- son satırlarında bulunan -aşağıda da görebileceğiniz- softlimit değerini 7000000 yapın ve kaydederek çıkın.

exec /usr/local/bin/softlimit -m 7000000 \
    /usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
        -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1

Son olarak değişikliklerin aktif olması için aşağıdaki adımları sırası ile uygulayarak qmail’i yeniden başlatın.

# qmailctl cdb
# qmailctl start

Qmail’iniz sorunsuz çalıştıysa, anti spam ve antivirüs gateway kurulumu ile ilgili temel adımlar tamamlanmış bulunuyor.

Gerieye kalan işlemler şöyle:

Öncelikle en azından testlerinizi yapabilmek için DNS üzerinde herhangi bir domaininize ait MX kayıtlarını yeni kurduğunuz gateway olarak göstermeniz gerekiyor. Lokal networkünüzde bir DNS sunucunuz varsa -ki muhtemelen vardir- deneme için farazi bir domain açabilir ve MX yonlendirmesini yapabilirsiniz. Elbette bu durumda, gateway makineniz ve test maillerini göndermeniz için gerekecek ikinci bir mail sunucusu DNS sorgularını ilgili DNS sunucusunda yapmalıdırlar.

Ayrıca, gateway üzerinde de, gateway’e gelen maillerin tarandıktan sonra asıl posta sunucusuna yönlendirilmesi için smtproutes dosyasını oluşturmalı ve içerisine yönlendirme için bir satır girmeliyiz.

Örnek olarak, MX yönlendirmesi yapılmış deneme.com domain’ine ait gateway tarafındaki yapılandırmalar şu şekildedir.

/var/qmail/control/smtproutes isimli bir dosya açalım. (ön tanımlı olarak yoktur.) ve içerisine deneme.com’a atılacak maillerin tarandıktan sonra 212.175.12.12 ip adresine sahip asıl mail sunucusuna gönderilmesini söyleyen aşağıdaki satırı girelim.

deneme.com:212.75.12.12

Son olarak, /var/qmail/control/rcpthosts dosyasını açıp deneme.com adresini ekleyelim.

deneme.com

Böylece sunucu, deneme.com’a gönderilmiş olan mailleri kabul edecek ve tarama işlemlerinden sonra posta kutusunun bulunduğu asıl sunucuya iletebilecektir.

Son olarak, değişikliklerin aktif olması için qmail’i yeniden başlatalım.

# qmailctl restart

Hepsi bu kadar. Artık deneme.com’a gönderilen mailler, spam ve virüs kontrolünden geçecek ve asıl posta sunucusuna yönlendirilecektir. Testlerinizi yaparak herşeyin normal olarak gidip gitmediğini kontrol edebilirsiniz. deneme.com örneği üzerinden gidersek testleri şu şekilde yapabiliriz.

DNS sunucunuzda deneme.com isimli bir domain açın ve MX kaydını gateway sunucunuzun ip’si olarak gösterin. Daha üzerinde pop3 vs. gibi bileşenler bulunan asıl mail sunucunuzda deneme.com isimli bir domain açıp, örneğin test isimli bir hesap oluşturun. Sonra, sorgulamaları deneme.com domanini açmış olduğunuz DNS sunucusunda yapan bir başka mail sunucusundan test@deneme.com adresine bir mail gönderin. Normal şartlarda, mail MX kaydından hareketle spam gateway’inize ulaşacak, önce spamassassin tarafından taranacak, sonra qsheff tarafından içerik kontrolü ve clamav ile virüs kontrolü yapılacak ve mail smtproutes dosyasındaki tanımdan hareketle bu e-posta adresinin açıldığı mail sunucusuna gönderilecektir.

Bu noktada bir hatırlatma yapmak istiyorum; gelen mail Spamassassin tarafından spam olarak kabul edilirse, mailin subject kısmına _SPAMMSG_ ibaresi eklenecektir. Ancak Spamassassin temiz olarak belirlenip, qsheff tarafından yapılan içerik kontrolümde qsheff.rules dosyasında tanımlanan kural kelime ya da cümlelerinden birine rastlanırsa ya da virüs içermesi durumunda mail reddedilecek ve göndericiye bir hata mesajı göndürülecektir. qsheff.rules dosyasına h:(Subject:)(_SPAMMSG_) şeklinde bir satır eklemeniz durumunda ise, Spamassassin’in spam olarak değerlendirip subjectine _SPAMMSG_ yazdığı mailler de qsheff tarafından aynı şekilde reddedilir. Böylece, gerek spamassassin kontrolleri ve gerekse içerik ve virüs kontrollerinde tespit edilen spam durumlarında kullanıcıya mail iletilmemiş olacaktır.

İşlerin yolunda gittiğini anlamak için log dosyalarını inceleyebilirsiniz:

qsheff’in log (var/log/qsheff.log) dosyasına baktığınız zaman temiz bir mail için aşağıdaki gibi bir çıktı alırsınız.

31/03/2009 00:08:50: [qSheff] QUEUE, queue=q1238447329-662975-71773, recvfrom=192.168.0.199,
from=`cagri@cagriersen.com', to=`test@deneme.com', subj=`Anti_spam_ve_antivirüs_gateway_test_maili', size=1627,,

Spamassassin’in loglarının yazıldığı /var/log/maillog’da ise aynı mail için çıktı şu şekildedir:

Mar 31 00:08:49 testbsd spamd[27357]: spamd: processing message <6DD50EBEF32D99B16AC198C95BF612DBB@domain.local> for qmaild:1003
Mar 31 00:08:50 testbsd spamd[27357]: spamd: clean message (2.8/5.0) for qmaild:1003 in 0.5 seconds, 1348 bytes.
Mar 31 00:08:50 testbsd spamd[27357]: spamd: result: . 2 - DOS_OE_TO_MX,HTML_MESSAGE scantime=0.5,size=1348,user=qmaild,uid=1003,required_score=5.0,rhost=localhost,raddr=127.0.0.1,rport=63469,mid=<6DD50EBEF32D99B16AC198C95BF612DBB@domain.local>,autolearn=disabled

Son olarak, gateway’den geçen maillerin header bölümlerinde de spamassasin’in kısa durum raporu bulunmaktadır. Kontrollerinizi o şekilde de yapabilirsiniz:

X-Mail-Scanner: Scanned by qSheff-II-2.1-r3 (http://www.enderunix.org/qsheff/)
X-Spam-DCC: wuwien: testbsd.cagriersen.net 1290; Body=1 Fuz1=1
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on
	testbsd.cagriersen.net
X-Spam-Level: **
X-Spam-Status: No, score=2.8 required=5.0 tests=DOS_OE_TO_MX,HTML_MESSAGE
	autolearn=disabled version=3.2.5

Görüldüğü gibi skor vs. gibi bilgiler burada da görünmektedir.

Unutmadan, clamav ile ilgili loglar ise /var/log/clamav dizini içerisindeki clamd.log ve freshclam.log dosyalarına yazılmaktadır.

Evet, testler sonucu herhangi bir sorunla karşılaşmıyorsanız, anti spam ve antivirüs gatewey’iniz hazır demektir.

En son olarak, gateway’iniz üzerinde rblsmtpd kullanarak smtp serviyesinde block list kontrolü yapmanızı da önreririm. Rblsmtpd qmail (ucspi-tcp paketi) ile birlikte geldiğinden herhangi bir kuruluma ihtiyaç olmadan kolayca devreye alabilirsiniz.

Kaynaklar:

http://www.qmail.org
http://spamassassin.apache.org/
http://www.enderunix.org/qsheff/
http://www.clamav.net/
http://www.rhyolite.com/dcc/

Alıntı : Cagri Ersen

http://www.syslogs.org

You may also like...

2 Responses

  1. Cem diyor ki:

    Merhaba,
    Qmail üzerine yazdığınız yazıları okudum yaşadığım bir problem hakkında mail atmak istedim fakat site üzerinde mail adresinizi göremedim. Bu nedenle yorum ile sormak istiyorum.
    Şirkette qmail kullanılıyor. Ben microsoft tarafında uzmanım fakat linux’ta iyi değilim maalesef. Qmail sunucumuzun diski 70GB oldu bunu sıkıştırmam gerekiyor. Exchange’te olduğu gibi qmail üzerindede database sıkıştırabileceğimiz bir tool/komut var mı acaba bilginiz var mı?

  2. misafir diyor ki:

    Merhaba burada belirttiğiniz şekilde kurulunm gerçekleşmiyor

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir