Postfix mail kuyruğunu filtreleyerek temizleme

Bu örnekte göndericisi a@bc.com olan tüm emailler kuyruktan silinir.

postqueue -j | jq -r ‘select(.sender == “a@bc.com”) | .queue_id’ | xargs -I {} postsuper -d {}

jq kurulu olmalıdır ( apt install jq)

başka filtreleme kriterleri için

postqueue -j | jq

yazıp json çıktısındaki alanları görebilirsiniz.

Linuxta tüm dosyalarda bul değiştir komutu

Örnek olarak tüm eposta hesaplarının spamassassin config dosyalarında puan değişikliği aşağıdaki şekilde yapılabilir.

find . -name user_prefs -exec sed -i ‘s/required_score 0.0/required_score 5.0/g’ {} \;

Apache SSL açıklarını kapatın

Son dönemde ortaya çıkan openssl ve zayıf şifreleme methodlarını kapatın.Özellikle bankalardan sanal pos talep etmeden önce sunucunuzda uygulamanızı tavsiye ederim.

Centos sunucular için

/etc/httpd/conf.d/ssl.conf dosyasının en altına aşağıdaki satırları yerleştirin.Httpd servisini yeniden başlatın.Nispeten güncellenmemiş sunucular için yum update yapmanızı öneriririm.

<IfModule mod_ssl.c>
SSLProtocol +TLSv1 +TLSv1.1 +TLSv1.2 -SSLv2 -SSLv3
</IfModule>
<IfModule mod_ssl.c>
#SSLCipherSuite HIGH:!aNULL:!MD5:!RC4-SHA:!RC4
#SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RS
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5::!RC4
</IfModule>

Spam antispam hotmail reputation junk vs..

Ömür törpüsüdür bu mevzular.Sistem yöneticisinin ömrünü kısaltır.Günlerini heba eder.Kahve sigara apranax hiçbişey kalmaz emin olun.

Eskiden şöyle düşünürdük.Eposta sunucumuz var.Hayatta spama geçit vermeyiz.Herşeyimiz tam.Ip adresimiz temiz.Çok güzel,temiz iş yapıyoruzi.Sunucumuz tıkır tıkır mail alıyor veriyor.

Bir gün de bakmışsınız bir müşteriniz hotmaile mail gönderememekten şikayet ediyor size.Hemen bakıyoruz,kontrol ediyoruz.dnsbl,mxtoolbox,senderbase…cık.Yokuz.Temiziz.E neden peki?

O andan itibaren itibar (reputation) sıfıra gider.Müşteri konuşur.Siz de merdiven altı firma muamelesi görürsünüz.Tıpkı bir müşterinin dediği gibi “müşterime mail attım.adam yanımda bilgisayarından baktı.gereksiz posta kutusuna düşmüş,yerin dibine girdim.”

Neyse biz problemimizi çözdük bir şekilde ancak günlerce debelendikten sonra bilmediğim birşeyi öğrenmiş oldum.Onu da cebime koydum ama para eder mi bilmem.

Bu microfostcu arkadaşların  X-MS-Exchange-Organization-SCL,X-MS-Exchange-Organization-PCL diye bir ölçüsü varmış.Benim gibi bilmeyenler için yazıyorum.

Uzun uzun yazarlar zaten hep.İşleri güçleri budur.Aşağıdaki sayfada anlatılmış;

https://technet.microsoft.com/en-us/library/aa996878(v=exchg.160).aspx

Bizim sunuculardan çıkan hotmaile giden e-postaların header kısmından gördüğümüz kadarıyla X-MS-Exchange-Organization-SCL değerimiz 5 idi.5 tam orta bir değer.Öneri şu;Alıcı “bu gereksiz değildir” diye işaretlediğinde sorun çözülür.Kullanıcı kontrolune bırakılmış.Peki bunun tersiniz düşünürsek;

Peki kaç kullanıcı “bu gereksizdir” diye işaretlemiştir de iş bu hale gelmiştir..

Orası bilinmez.Bilinmez çünkü snds postmaster size neden ip adreslerinizin bloklandığını söylemiyor veya söyleyemiyor.

Sonuç olaralk Hotmail damgalıyor geçiyor.Gereksiz yere uğraştıyor.Artık başa çıkamadığı gerçek spamlarla bu şekilde baş ediyor.Büyüklüğünü kullarak bundan büyük miktarlarda gelir elde etmeyi de başarmış zaten.

 

Plesk 12.x Linux sunucularda unable connect sieve server hatası

Sieve filtreleme desteği Plesk 11.5 ve eski versiyonlarda bulunmuyor.Daha yeni plesk versiyonlarında ise bu özellik sadece Dovecot imap sunucuda var.

Bu yüzden eğer Roundcube gibi webmaillerde filtreleme yapmak istiyorsanız Pleskin “Updates & Upgrades” kısmından veya sunucu e-posta ayarlarından imap sunucunuzu değiştirmelisiniz.

Postfix NDR spam backscatter engelleme

emailbackscatterBackscatter Nedir?

Her SMTP sunucusu alıcısına iletemediği epostaları (bounce ) bir başka bildirimle göndericiye iletmek zorundadır.Bu bir standarttır.Gönderici gönderdiği epostayı alıcısına ulaşmadığını bu bildirim mesajıyla farkeder.Bu bildirimin adı non delivery reports veya kısa ndr,diğer başka bir tanımı da DSN yani Delivery Status Notification ‘dur.

Bu tasarlanan,iyiye hizmet eden bilişimin eskide kalmış bir hikayesi.Gerçek dünyada ise durum şöyle;

Bu raporlama sisteminin kötü amaçla kullanılabileceğini farkeden aşırı zeki spamcı milleti çaktırmadan  milyonlarca spam gönderebilmekte.Nasıl mı?

Bilindiği gibi epostada bir envelope sender aynı zamanda authenticated sender olmak zorunda değil.Yani eski mektup gönderdiğimiz günlere dönecek olursak.Göndereceğim zarfın üzerine kendi adımı yazmak zorunluluğum yok.

Backscatter epostanın envelope sender bölümüne istenilen email adresini yazılır.Alıcı kısmında da karşı tarafta bulunmayan bir eposta adresi belirtildiğinde gönderilen epostayı  alıcı smtp sunucusu red edecektir.Peki bu durumda NDR nereye gönderilecek?Elbette envelope sender kısmındaki kurbanımızın eposta adresine.Karda yürü ama izini belli etme.

Çözüm

Sanıyorum ki binlerce dolar ödenen o pek gözde,pek güzide eposta sistemleri kendi içinde bir mekanizmayla bu işi çözmüşlerdir.

Ama binlerce dolarım yok,aynı zamanda hosting işindeyim diyorsanız hayat size biraz daha zor.Zira elimizde kullanabildiğimiz en modern,gelişmiş ve güvenli smtp postfix.Postfixin resmi sayfasında backscatter engelleme ile ilgili bir takım çözüm önerileri var.Tembellik etmedim okudum.Neticede sunucunuzda bir veya birkaç hosting koşuyorsa kabul edilebilir bir çözüm sunulmuş.Ancak bu çözüm,paylaşımlı bir hosting sunucusu yönetiyorsanız ve şöyle 50-100 ve üzeri hosting barındırılıyorsa hiçbir işe yaramaz.

Yine gerçek dünyadan bir örnek vermek gerekirse;zaten yukarda sözünü ettiğimiz raporlama sistemi kanımca pek bir işe yaramıyor.Çünkü kimse pc başında karşısına çıkan hata mesajlarını okumuyor.O yüzden kökten çözüm olarak  NDR’ı komple kapatma yolunu seçebilirsiniz.

Bunun için postfix’in master.cf dosyasını açın.

ve aşağıdaki satırı;

bounce    unix  –    –    n    –    0    bounce

şu şekilde değiştirin;

bounce    unix  –    –    n    –    0    discard

dosyayı kaydedip kapattıktan sonra postfix servisini restart edin.Hepsi bu kadar.

 

horde sevmeyenlere linux plesk 9.5 afterlogic webmail lite kurulumu

sunucunuza ssh üzerinden login olun.psa-horde paketinin kurulu olduğu dizine geçin;

cd /usr/share/psa-horde/

Bu dizine afterlogic webmail lite uygulamasını indirin;

wget http://www.afterlogic.com/download/webmail_php.zip

Sıkıştırılmış dosyayı açın;

unzip webmail_php.zip

dizinin içine girin;

cd webmail

bu aşamada webmail için gerekli mysql veritabanını oluşturuyoruz;

mysqladmin -uadmin create alwebmaildb -p$(cat /etc/psa/.psa.shadow)

mysql -uadmin -p$(cat /etc/psa/.psa.shadow)

bu komutla mysql konsola girdikten sonra aşağıdaki cümleleri sırasıyla yazın.

CREATE USER ‘afterlogic’@’localhost’ IDENTIFIED BY ‘sizinşifreniz’;

GRANT USAGE ON * . * TO ‘afterlogic’@’localhost’ IDENTIFIED BY ‘sizinşifreniz’ WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

GRANT ALL PRIVILEGES ON `afterlogic` . * TO ‘afterlogic’@’localhost’;

FLUSH PRIVILEGES;

mysqlden çıktıktan sonra (quit yazarak veya ctrl+c),kurulumda sorun çıkmaması için ufak bir dosya hatasını gideriyoruz;

cd /usr/share/psa-horde/webmail/install/steps/
chmod 644 root compatibility.php

diğer gerekli yazma izinleri (webmailin bulunduğu alanda php scriptlerini Apache çalıştırıyorsa;

cd /usr/share/psa-horde/webmail/
chown apache.apache data/ -R

Browserınızın adres satırına kurulum url adresi olarak aşağıdaki satıra kendi alanadınızın adını yazın.

http://webmail.sizinalanadiniz.com/webmail/install/

web tabanlı kurulum.sırasıyla aşağıdaki aşamaları geçin;

  • klasörlere yazma izinleri,çeşitli php modul kontrolü vs vs
  • webmail veritabanı oluşturulması için sql bilgileri girişi (yukarıda oluşturmuştuk..
  • smtp /pop / imap test
  • mailadm yönetici şifre oluşturma

aşamaları tamamladıktan sonra kurulum sizden install dizinini silmenizi isteyecektir;

 

cd /usr/share/psa-horde/webmail/

rm -rf install/

artık horde webmaili kullanmayacaksanız index.php nin adını değiştirip,yeni index.php nizi oluşturun.

cd /usr/share/psa-horde/

mv index.php index.old.horde

içine şunları yazın.

nano index.php

<?php
header(‘Location: ./webmail/index.php’);
?>

Postfix mail sunucusunda günlük gönderim limiti uygulaması

Cluebringer v2.1

Quata modülü sayesinde ,postfix mail sunucusunda e-mail kullanıcılarının günlük gönderim limitlerini kontrol edebileceğiniz,web arayüzünden ayarları yapabildiğiniz açık kaynak kodlu yazılım.

Detaylı bilgi ve kurulum dökümanı için http://www.policyd.org/

Mail formlardan gönderilen e-maillerin izlenmesi ve kontrolü

Web sayfalarının bir çoğunda mail form kullanılıyor.Bu scriptlerde bulunabilecek bir açık sunucunuz üzerinden onbinlerce spam gönderimine sebep ve sizin karalistelere girmenize sebep olabilir.Aşağıda kurulumu anlatılan script form maillerden gönderilen her mailin logunu yazmakta ve sizin belirteceğiniz alıcı sayısına göre maili engellemektedir.Scriptin bir kısmı anonim alıntıdır,ilaveler bulunmaktadır.

Öncelikle php betiğinin çalışması için gerekli paketleri sistemimize kuruyoruz.Redhat,Centos kullanıyorsanız şu komutla ilgili paketleri kurabilirsiniz;

yum install php-pear-Auth-SASL.noarch php-pear-Mail.noarch php-pear-Mail-Mime.noarch php-pear-Net-SMTP.noarch php-pear-Net-Socket.noarch

Kurulum bittikten sonra aşağıdaki scripti fmmgw.php adıyla sisteminizde uygun bir yere veya /usr/local/bin altına kopyalayın.

#!/usr/bin/php
<?php
ini_set(‘include_path’, ‘/usr/share/pear’);
//—CONFIG
$config = array(
‘host’ => ‘localhost’,
‘port’ => 25,
‘auth’ => FALSE,
);
$logDir      = ‘/var/log’;
$logFile     = ‘mail_proxy.log’;
$failPrefix  = ‘fail_’;
$EOL         = “\n”; // change to \r\n if you send broken mail
$defaultFrom = ‘”hostadresiniz.alanadiniz.com Webserver” <fmmgw@alanadiniz.com>’;
//—END CONFIG

if (!$log = fopen(“{$logDir}/{$logFile}”, ‘a’)) {
die(“ERROR: cannot open log file!\n”);
}

require(‘Mail.php’); // PEAR::Mail
if (PEAR::isError($Mailer = Mail::factory(‘SMTP’, $config))) {
fwrite($log, ts() . “Failed to create PEAR::Mail object\n”);
fclose($log);
die();
}

// get headers/body
$stdin = fopen(‘php://stdin’, ‘r’);
$in = ”;
while (!feof($stdin)) {
$in .= fread($stdin, 1024); // read 1kB at a time
}

list ($headers, $body) = explode(“$EOL$EOL”, $in, 2);

$recipients = array();
$headers = explode($EOL, $headers);
$mailHdrs = array();
$lastHdr = false;
$recipFields = array(‘to’,’cc’,’bcc’);
foreach ($headers AS $h) {
if (!preg_match(‘/^[a-z]/i’, $h)) {
if ($lastHdr) {
$lastHdr .= “\n$h”;
}
// skip this line, doesn’t start with a letter
continue;
}
list($field, $val) = explode(‘: ‘, $h, 2);
if (isset($mailHdrs[$field])) {
$mailHdrs[$field] = (array) $mailHdrs[$field];
$mailHdrs[$field][] = $val;
} else {
$mailHdrs[$field] = $val;
}
if (in_array(strtolower($field), $recipFields)) {
if (preg_match_all(‘/[^ ;,]+@[^ ;,]+/’, $val, $m)) {
$recipients = array_merge($recipients, $m[0]);;
}
}
}
if (!isset($mailHdrs[‘From’])) {
$mailHdrs[‘From’] = $defaultFrom;
}

$recipients = array_unique($recipients); // remove dupes

if(count($recipients)>2) die(“HATA”);

// send
if (PEAR::isError($send = $Mailer->send($recipients, $mailHdrs, $body))) {
$fn = uniqid($failPrefix);
file_put_contents(“{$logDir}/{$fn}”, $in);
fwrite($log, ts() .”Error sending mail: $fn (“. $send->getMessage() .”)\n”);
$ret = 1; // fail
} else {
fwrite($log, ts() .”Mail sent “. count($recipients) .” recipients.\n”);
$ret = 0; // success
}
fclose($log);
return $ret;

//////////////////////////////

function ts()
{
return ‘[‘. date(‘y.m.d H:i:s’) .’] ‘;
}

?>

Log dosyanızı elle oluşturun

touch /var/log/mail_proxy.log

Son olarak php.ini dosyanızda ilgili alanı şu şekilde değiştirin.

sed -i -e ‘s:;sendmail_path = /usr/sbin/sendmail -t -i:sendmail_path = /usr/local/bin/fmmgw.php:g’ php.ini

veya nano,vi gibi bir editor ile php.ini dosyanızda

sendmail_path

satırını bulup karşısına

/usr/local/bin/fmmgw.php

yazarak dosyanızı kaydedin.

Apache web servisini resetleyin.

Gönderilen mailleri anlık izlemek için

tail -f /var/log/mail_proxy.log

yazıp inceleyebilirsiniz.