Ana Sayfa » *nix » Rblsmtpd – Custom Whitelist ve Blacklist Tanımlamaları

Rblsmtpd – Custom Whitelist ve Blacklist Tanımlamaları


BerbatKötüİdare EderGüzelHarika (Henüz Puan Verilmedi. Oy kullanarak siz de katkı yapabilirsiniz.)
Loading...

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYUKdXl3' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349

Qmail sistemlerde rblsmtpd ile block list kontrolü yapmak mailleri engellemek adına tek başına bile olukça yeterli bir yöntem olsa da bazen false positive durumlar oluşabilmekte ve aslında gönderim yapmayan yerlerden gelen maillerin de engellenmesine neden olabilmektedir. Örnek olarak son zamanlarda Google App Engine kullanılarak gönderilen mailler nedeni ile google ipleri bazen spamcop, sorbs ya da spamhaus gibi major block listlerine girebiliyorlar ve bunun sonucu olarak da gmail'den gönderilen mailler rblsmtpd'ye takılarak reddedilebiliyor.

İşte bu gibi konuların önüne geçmek için bir whitelist oluşturup bu listeye örneğin google'a ait tüm ip adreslerini eklemek ve bu iplerden gelen bağlantılarını rblsmtpd kontrolünden muaf tutmak yerinde bir tutumdur. Daha önce Rblsmtpd Yapılandırması isimli bir yazı yayınlamıştım; bu yazıda ise rblsmtpd için whitelist ve custom blacklist yapılandırma işlemlerinden bahsetmek istiyorum.

 

rblsmtpd

rblsmtpd'nin ne olduğuna uzun uzun değinmeyeceğim ancak kısaca, rblsmtpd tcpserver kullanan qmail gibi sunucularda kullanılabilen ve RBL listelerine girmiş ip'lerden gelen mailleri blocklamaya yarayan küçük  ve kullanışlı bir uygulamadır.  Ben rblsmtpd'yi qmail kullanan her email sunucusunda ya da smtp gateway‘de kullanıyorum.

rblsmtpd'nin nasıl yapılandırılabileceği ile ilgili detaylı bilgi için http://www.syslogs.org/rblsmtpd-yapilandirmasi/ adresine bakabilirsiniz.

Whitelisting ve Blacklisting

Rblsmtpd ile spamcop, sorbs ve spamhaus gibi major RBL servislerinde sorgulama yapabileceğiniz gibi kendi custom block listinizi de oluşturabilir ya da yazının girişinde örnek verdiğim gibi rbl sorgularından muaf tutmak isteyeceğiniz ipleri içeren bir whitelist oluşturabilirsiniz.

rblsmtpd bir ip'den kurulan bağlantının sonlandırılıp sonlandırılmayacağına karar vermek için öncelikle tcpserver'ın kurallarının tanımlandığı (genelde /etc/tcp. isimli) tcprules dosyasına, ilgili ip adresi için  bir “$RBLSMTPD”  değişkeni tanımlanmış mı diye bakar, eğer herhangi bir kayıt bulamazsa rblsmtpd yapılandırmasında belirtilen RBL servisine (ya da servislerine) bu ipnin block listesinde olup olmadığını öğrenmek üzere bir dns query gönderir; query'e dönen cevap IP'nin block listte olduğu yönündeyse smtp oturumu ip'nin rbl listesinde olduğunu bildiren bir mesaj ile sonlandırılır.

Aynı mantık whitelist uygulaması için de geçerlidir. Eğer RBL listelerinde bulunan bir IP'den gelecek bağlantının sonlandırılmamasını isterseniz tcprules dosyasına ilgili ip için “$RBLSMTPD” değişkenini içeren bir satır girebilir ya da dns tabanlı kendi whitelistinizi oluşturarak bu ip'yi girebilir ve rblsmtpd'ye bu whitelist'te sorgulama yapmasını söyleyebilirsiniz.

Blacklisting ya da whitelisting uygulamalarında tcprules içerinde  $rblsmtpd değişkenini kullanabileceğiniz gibi, dns tabanlı custom black ve white list oluşturma yönetimi de tercih edebilirsiniz. Her iki yöntemin de kendine göre avantaj ve dezavantajları olduğundan ikisine de ayrı ayrı değineceğim.

Hangisini tercih ederseniz ya da hangisi size uygunsa onu kullanabilirsiniz.

$RBLSMTPD Değişkeni

Yukarıda da bahsettiğim gibi rblsmtpd, herhangi bir external rbl servisine dns query göndermeden önce tcprules dosyasında ilgili IP için tanımlanmış bir kayıt olup olmadığa bakar. Bu tip kayıtlar tcprules dosyasında $RBLSMTPD değişkeni ile belirtilir.

rblsmtpd bu değişkenle ilgili üç farklı koşula göre hareket eder:

1 – $RBLSMTPD değişkeni tanımlanmış ama değer bölümü boş bırakılmışsa, bağlantıya izin verilir. (whitelist)
2 – $RBLSMTPD değişkeni tanımlanmışsa ve değer bölümü doluysa bağlantı sonlandırılır ve istemciye hata olarak değer bölümünde yazan ifadeleri içeren bir mesaj döndürülür. (blacklist)
3 – $RBLSMTPD değişkeni tanımlanmamışsa remote ip için dns queryler ile external rbl servislerinde sorgulama yapılır.

Bu davranış şekillerinden hareketle $RBLSMTPD değişkeni kullanarak whitelisting ya da blacklisting yapmak için sunucunuzu aşağıdaki şekilde yapılandırabilirsiniz:

Whitelisting

Default qmail kurulumlarında tcprules dosyası /etc/tcp.smtp isimli ile bulunmaktadır, aynı dosyanın compile edilerek cdb dosyasına dönüştürülmüş hali ise tcp.smtp.cdb ‘dir.

Örnek olarak 1.1.1.1 ip adresinden gelen maillerin rbl kontrolü yapılmaksızın kabul edilmesi için /etc/tcp.smtp dosyasına aşağıdaki şekilde bir satır ekleyebilirsiniz::

1.1.1.1:allow,RBLSMTPD=""

Böylece 1.1.1.1 ip adresi block listler de bulunsa bile kabul edilecektir.

Tek bir ip yerine bir ip range'den kurulacak bağlantılara toptan izin vermek için ise şu şekilde bir tanımlama mümkündür:

1.1.1.1-254:allow,RBLSMTPD=""

Bu şekilde 1.1.1.0/24 c class'ı yani toplamda 254 adet ip whitelist'e alınmış olur.

Bu işlem sonrası, tcprules dosyasını recompile etmeyi unutmayın:


Blacklisting

Kullandığınız major block listlerde bulunmayan ama spam yaptığını bildiğiniz IP adreslerinden gelen mailleri reject etmek için de gene $RBLSMTPD variable'ını kullanabilirsiniz.

Örnek olarak 2.2.2.2 ip adresinden gelen bağlantı isteklerinin reddedilmesi için /etc/tcp.smtp dosyasında şu şekilde bir tanımlama yapılabilir:

2.2.2.2:allow,RBLSMTPD="Bu IP spam gönderim nedeni ile gecici olarak blocklanmistir!"

Bu şekilde 2.2.2.2 ip adresinden kurulan bağlantılar 451 hata kodu ve “Bu IP spam gönderim nedeni ile gecici olarak blocklanmistir!” mesajı ile reject edilecektir. Döndürülen hata kodu “451”, bu hatanın geçici (temporary) olduğuna işaret etmektedir. Bu nedenle bağlantı kurmaya çalışan remote client, queue life time'ı boyunca belirli interval'lerle yeniden bağlantı kurmaya çalışacaktır.

Rejection'ın kalıcı olmasını ve uzak istemcinin sürekli deneme yapmasını istemiyorsanız, hata mesajının başına aşağıda gördüğünüz gibi “-” işareti eklemeniz yeterlidir:

2.2.2.2:allow,RBLSMTPD="-Bu IP spam gönderim nedeni ile kalici olarak blocklanmistir!"

Böylece reddedilen 2.2.2.2 IP'sine 553 hata kodu ve “Bu IP spam gönderim nedeni ile kalici olarak blocklanmistir!” mesajı döndürülecektir. 553 hata kodu, durumun kalıcı (permanent) olduğuna işaret eder ve remote client bir daha gönderim denemesinde bulunmaksızın maili göndermeye çalışan adrese bir bounce mesajı döndürür.

Aynı şekilde tek bir ip yerine bir ip aralığını black liste almak için tanaımlama şu şekilde olmalıdır:

2.2.2.1-254:allow,RBLSMTPD="-Bu IP spam gönderim nedeni ile kalici olarak blocklanmistir!"

Böylece 2.2.2.0/24 c class'ı toptan blackliste alınmış olur.

Değişiklikleri yaptıktan sonra, tcprules dosyasınızı recompile etmeyi untumayın:


tcprules yönetimini kullanmanın avantajı hızla uygulanabilmesi ve ip aralıkları için tanımlama yapmaya olanak sağlamasıdır. Bu nedenle tercih edilebilir bir yöntemdir.

DNS Based White/Black Listing

İzin verme ya da engelleme işlemlerinde tcprules yerine kendi custom listlerinizi de oluşturmanız ve rblsmtpd'yi oluşturduğunuz bu listlerde sorgulama yapmak üzere yapılandırmanız da mümkündür

#!/bin/sh

QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`


RBLLIST=""
RBLLIST=$RBLLIST" -a whitelist.syslogs.org"
RBLLIST=$RBLLIST" -r blacklist.syslogs.org"
RBLLIST=$RBLLIST" -r bl.spamcop.net" 
RBLLIST=$RBLLIST" -r dnsbl.sorbs.net" 
RBLLIST=$RBLLIST" -r zen.spamhaus.org" 

if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
    echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
    echo /var/qmail/supervise/qmail-smtpd/run
    exit 1
fi

if [ ! -f /var/qmail/control/rcpthosts ]; then
    echo "No /var/qmail/control/rcpthosts!"
    echo "Refusing to start SMTP listener because it'll create an open relay"
    exit 1
fi

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 \
/usr/local/bin/rblsmtpd -C $RBLLIST

Örnekte de görüldüğü üzere

Yukarıda görüldüğü şekilde yapılandırılmış bir rblsmtpd gelen smtp connection'ları için remote ip adresini öncelikle whitelist.syslogs.org adresinde sorgulayacaktır. Eğer herhangi bir sonuç alamazsa sırası ile blocklist'lere bakacaktır. Blocklist'lerde bulunması halinde bağlantı reject edilecek, bulunmaması halinde ise accept edilecektir.

rblsmtpd'nin, sorgulama işlemlerinde çalışma mantığı aşağıdaki gibidir:

Whitelisting

Dns sunucumuzda whitelist.syslogs.org isimli bir subdomain oluşturduğumuzu ve whitelist'e alacağımız ip'nin örneğin 1.2.3.4 olduğunu düşünelim.

Bu ip adresi için DNS'de 4.3.2.1.whitelist.syslogs.org şeklinde bir A tipi kayıt açmak ve değer olarak 127.0.0.2 vermek whitelisting için yeterli olacaktır.

-a whitelist.syslogs.org parametresi verilmiş olan rblsmtpd, 1.2.3.4 ip adresinden gelen bir bağlantı isteği için whitelist.syslogs.org ‘a ait name server'a standart bir dns query ile 4.3.2.1.whitelist.syslogs.org adresine ait bir A kaydı olup olmadığını soracak ve 127.0.0.2 cevabını alacaktır.

Bu cevap, ilgili IP adresinin whitelist'te bulunduğunu ifade ettiğinden dolayı rblsmtpd ilgili bağlantıyı kabul edecektir.

Önce whitelist'e bakılmasını söylemek üzere rbl tanımlamanızda -a ile belirteceğiniz RBL whitelist'inizi yukarıdaki örnekte görüldüğü şekilde listenin en tepesine yazmanız gerektiğini unutmayın.

Blacklisting

DNS based blacklisting uygulaması da whitelist yapılandırmasına benzemektedir. Örnek olarak, DNS sunucumuzda blacklist.syslogs.org isimli bir subdomain oluşturduğumuzu düşünelim ve major RBL listelerinde olmasa bile 5.6.7.8 IP adresinin engellenmesi için blacklistimize ekleyelim.

Bu işlem için DNS sunucunuzda 8.7.6.5.blacklist.syslogs.org şeklinde TXT tipi bir kayıt açıp value olarak örneğin: “Bu IP adresi spam gerekcesi ile blocklanmistir!” şeklinde bir ibare girmek yeterlidir.

Bu şekilde -r blacklist.syslogs.org parametresi verilmiş olan rblsmtpd, 5.6.7.8 ip adresinden gelen smtp bağlantı isteği için öncelikle blacklist.syslogs.org alan adına ait name server'da standart bir query ile 5.6.7.8 ip adresi için girilmiş bir TXT kaydı olup olmadığına bakacaktır. Bizim örneğimizde bu kayıt oluşturulduğu ve “Bu IP adresi spam gerekcesi ile blocklanmistir!” mesajı girildiği için bağlantı rblsmtpd tarafından sonlandırılacak ve bu hata mesajı döndürülecektir.

Burada dikkat edilmesi gereken nokta, whitelist uygulamasından farklı olarak dns kayıt tipinin TXT olmasıdır.

DNS based white/black list uygulamasının avantajı global listeler oluşturup birden çok sunucuda bu listeleri kullanmanıza olanak vermesidir; ancak izin verilecek ya da yasaklanacak her bir ip için ayrı ayrı birer kayıt girmeniz gerekmektedir yani ip range tanımlanamamaktadır.

Evet, blacklist tanımlama işlemi de bu kadar.

Konuyla ilgili detaylı bilgi almak isteseniz, aşağıdaki adrese göz atabilirsiniz:
http://cr.yp.to/ucspi-tcp/rblsmtpd.html

Visited 1.002 times, 1 visit(s) today
Kategoriler: *nix,Qmail |

Bu yazılar da ilginizi çekebilir:


- Rblsmtpd
- Spamdyke – Spam filter for qmail
- qmail smtpd – Disable Reverse DNS Lookups
- Backscatter Spam Nedir, Nasıl Önlenir ?
- Greylisting

Yorumlar


Henuz yorum yapilmamis.

Yorumda bulunun.