Linux, Postfix

Postfix’te kuyruğa müdahale etmek

Postfix'te kuyruğa müdahale etmek

Bilindiği gibi postfix mail kuyruğundan mesaj silmek için ilk önce mesajın id numarası bulunur (postqueue -p) ardından da postsuper -d id_number (postsuper -d 6889D8780FB) diyerekten kuyruktaki mesaj silinir. Zahmetli olduğu gibi uzun bir yoldur.

Peki çok yoğun çalışan bir mail sunucunuz var ve devamlı kuyrukta inboxı olmayan epostalarda kuyruk lifetime süresince bekliyor veya yanlış yazılmış adresler.. Bu durumda tek tek id bulup silmek biraz zahmetli.

Şimdi aşağıdaki perl script ile bu işlemleri daha kolay bir hale getiriyoruz, mesela kuyrukta bekleyen “mailbox unavailable” mesajları dönmüş maillerin hepsini sileceksiniz işte bu script sayesinde kolay bir şekilde yapabiliyorsunuz.

#!/usr/bin/perl $REGEXP = shift || die “no email-adress given (regexp-style, e.g. bl.*\@yahoo.com)!”; @data = qx; for (@data) { if (/^(\w+)(\*|\!)?\s/) { $queue_id = $1; } if($queue_id) { if (/$REGEXP/i) { $Q{$queue_id} = 1; $queue_id = “”; } } } open(POSTSUPER,”|postsuper -d -”) || die “couldn’t open postsuper” ; foreach (keys %Q) { print POSTSUPER “$_\n”; }; close(POSTSUPER);

Yukarıdaki kod parçacıklarını bir editör aracılığıyla kuyruk-sil adıyla kaydedelim ve chmox +x kuyruk-sil olarak çalıştırma hakkı verelim.

Kullanım şekli;

. herhangi bir alan adından gelen mesajları silmek

/home/murat/kuyrul-sil “murat.ws”

. herhangi bir eposta adresinden gelen mesajları silmek

/home/murat/kuyruk-sil “test@murat.ws

. içeriğe göre kuyruktaki mesajları silmek (örneğin içinde no mailbox,said: 550,This account has been disabled or discontinued kelimeleri geçen kuyruk mesajları )

kendi kullandığım kelimeler

/home/murat/kuyruksil "mailbox unavailable" /home/murat/kuyruksil " said: 550" /home/murat/kuyruksil "This account has been disabled or discontinued" /home/murat/kuyruksil "exceeded" /home/murat/kuyruksil "no mailbox" /home/murat/kuyruksil "501 Invalid Address" Murat Uğur Eminoğlu
Genel, Juniper, Linux

Google Talk (Gtalk) Engelleme (Juniper SSG ve Linux)

Merhaba, Bu yazıda google talk (GTALK) Juniper SSG-140 firewall ve iptables üstünde nasıl engellenir ve belirli kullanıcılara nasıl açarız onu anlatacağım. Umarım yararlı bir kaynak olur. İlk olarak google talk 5222. port üstünden çalışır eğer bu porttan çıkış sağlayamazsa 443. üstünden gider. Yani port kapatmayla tam olarak engelleme sağlanmıyor. Onun için 5222. portu kapatmış varsayıp 443. port üstünden işlem yapacağımızı unutmayınız. Nasıl bir yol izledim? Bir linux gateway kurup test makinamı bu gw üstünden çıkardım ve tcpdump ile trafiği sniff ettim. Asağıda bulunan adreslerden ilkinin trafiğini drop ettim, bu ilk denemeydi uzun süre auth olamadı fakat daha sonra ikinci adres üstünden auth oldu. (sadece biraz geç auth oldu) Aynı işlemi 3. adres için yaptım fakat yine aynısı oldu. mg-in-f125.google.com yo-in-f125.google.com tx-in-f125.google.com Bu işlemi belki 10'larca kez tekrarlayacaktım, onun için tekrardan trafigi sniff ettim ve talk.google.com ve talkx.l.google.com adreslerini yakaladım. Bu iki adresi engellediğim zaman gtalk'in auth olmadığını gördüm. (Yapilan işlemleri ve surecleri anlattim ki bu tip durumlarda nasıl süreç izleyeceğinizi bilin. :)) İlk olarak Juniper SSG-140 üstünde bu engelleyi nasıl yapabiliriz? telnet juniper_ip dedikten sonra kullanıcı adımızla ve şifremizle login olalım. 1. İlk olarak Untrust adres olarak talk.google.com ve talkx.l.google.com adreslerini GTALK-DENY-1 ve GTALK-DENY-2 olarak ekleyelim. set address "Untrust" "GTALK-DENY-1" talk.google.com "GTALK ENGELLEME" set address "Untrust" "GTALK-DENY-2" talkx.l.google.com "GTALK ENGELLEME" 2. GTALK-DENY-GROUPS grubunu ekleyip GTALK-DENY-1 ve GTALK-DENY-2 adreslerini uye yapalim. (kolaylık sağlaması açısından her zaman grub kullanmak tercihimdir) set group address "Untrust" "GTALK-DENY-GROUPS" comment "GTALK ENGELLEME" set group address "Untrust" "GTALK-DENY-GROUPS" add "GTALK-DENY-1" set group address "Untrust" "GTALK-DENY-GROUPS" add "GTALK-DENY-2" 2. İzinli listesinin kullanım kolaylığı için bir adet grup ekleyip bu gruba kullanıcıları dahil edeceğiz. set group address "Trust" "GTALK_USERS" Şimdi kullanıcıları ekleyelim set address "Trust" "MURAT" 172.16.254.2 255.255.255.255 set address "Trust" "UGUR" 172.16.254.3 255.255.255.255 3. Kullanıcıları GTALK_USERS grubuna dahil edelim set group address "Trust" "GTALK_USERS" add "MURAT" set group address "Trust" "GTALK_USERS" add "UGUR" NOT : 5222 portunu kapattığımızı varsayıp 443. port üstünden işlem yaptığımızı unutmayın. 4. Şimdi işin karışık kısmı olan policy ekleme sürecine geldik, Mantık, GTALK 'a girecekleri policy sırasının en üstüne gir, yasaklı olanları bir alt satırına gir ve yasaklılarin 443. port üstünden SSL 'li siteleri bağlanması için 443. port izni ver. GTALK_ALLOW isminde Trust bölgeden Untrust bölgeye GTALK_USERS 'larinin 443. Port (HTTPS) isteklerine nereye giderse gitsin loglayıp izin ver. Bu sayede herhangi bir engellemeye takılmayacaktır. set policy id 1 name "GTALK_ALLOW" from "Trust" to "Untrust" "GTALK_USERS" "Any" "HTTPS" permit log 5. 172.16.254.0/24 networku için GTALK-DENY-GROUPS grubu içinde bulunan adresleri engelle denmistir. (talk.google.com ve talk.l.google.com adreslerine erişim kapatılmıştır.) set policy id 2 from "Trust" to "Untrust" "172.16.254.0/24" "GTALK-DENY-GROUPS" "ANY" deny log 6. Son olarak 443. portun (HTTPS) diğer sitelere açılması için aşağıdaki policy'i yazdık. set policy id 63 from "Trust" to "Untrust" "MMO_LOCAL" "Any" "HTTPS" permit log count Juniper üstündeki yapılandırma burada sona erdi. Şimdi linux üstünde nasıl yapılıyormuş ona bakalım. Linux Gateway üstünde nasıl engelleriz ? 1. iptables ile 172.16.254.0 networkunun talk.google.com 'a giden tcp 443 portunu engelle iptables -A FORWARD -s 172.16.254.0/24 -d talk.google.com -p tcp --dport 443 -j DROP 2. iptables ile 172.16.254.0 networkunun talkx.l.google.com 'a giden tcp 443 portunu engelle iptables -A FORWARD -s 172.16.254.0/24 -d talkx.l.google.com -p tcp --dport 443 -j DROP Bu iki kuraldan sonra google talk ile giriş yapılamıyacaktır. NOT : Birçok kişinin arkanızdan söveceğini unutmayınız :) Murat Uğur Eminoğlu