Postfix Linux sunucularda en yaygın olarak kullanılan mail sistemidir, çoğu durumda Hosting hizmeti verdiğiniz müşterileriniz kuralları ihlal ederek mailing (toplu reklam maili gönderme) yapacak veya yaşanan teknik bir arıza nedeni ile gelen veya giden mailler postfix kuyruğunda yığılmaya neden olarak sunucunun mail trafiğini durma noktasına getirecektir.
Yakın zamanda “bize gönderilen mailler gelmiyor” şikayeti olan bir kuruma verdiğimiz teknik destek esnasında yaşanan teknik bir sorun nedeni ile Kuyrukta 16.367 (evet yanlış okumadınız On altı bin üç yüz atmış yedi 🙂 ) mailin takıldığını kendi gözlerimiz ile gördük.
Bu durumun tek ve en etkin çözümü Queue (Kuyruk) havuzundaki tüm iletileri silmekten geçiyor, evet çok sert bir yöntem ama maalesef tek çözüm bu.
Kuyruk silme yapabilmek için sunucumuza SSH üzerinden bağlantı kurmamız gerekiyor.
Sunucumuza ssh bağlantısı yapmak için en yaygın ssh uygulaması olan PuTTY’yi kullanacağız. PuTTY uygulamasını http://the.earth.li/~sgtatham/putty/latest/w64/putty-64bit-0.73-installer.msi adresinden indirebilirsiniz.
PuTTY uygulamasını çalıştırıyoruz,
- Host Name : sunucumuzun ip adresi – 192.168.1.245
- Port : 22 – standart ssh portu
- Connection type : SSH
bu ayarları yaptıktan sonra Open butonuna basarak bağlanıyoruz,
Sonraki adımda kullanıcı adımız ve şifremiz sorulacak,
Ubuntu 18.04 Kurulumu yazımızda kullanıcı adımızı ispconfig şifremizi ise 123456 olarak belirlemiştik, bu bilgileri girerek enter tuşuna basıyoruz.
Bu arada linux işletim sistemlerinde terminal üzerinden şifrenizi yazarken **** işaretleri görmezsiniz, bu sanki yazmıyormuşsunuz algısı yaratabilir merak etmeyin yazıyorsunuz ????
Kullanıcı adınız ve şifrenizi doğru girdiyseniz aşağıdaki ekranla karşılaşmanız gerekiyor,
SU (SuperUser)/Yönetici moduna geçmemiz gerekiyor, bunun için terminal ekranındayken;
sudo su
komutunu girerek enter tuşuna basıyoruz,
Yeniden şifremiz isteniyor, şifremizi girerek enter tuşuna basıyoruz,
Ekran görüntüsünde işaretlendiği şekilde, kullanıcı adımız artık ispconfig değil root, yani şu andan itibaren yönetici modundayız, su modunda iken uyguladığınız komutlara çok dikkat etmeniz gerekiyor çünkü sunucuya yazılımsal olarak hasar verebilir, işletim sistemini çökertebilirsiniz, aman dikkat ????
Terminale aşağıdaki komutları sırasıyla gönderiyoruz;
postsuper -d mail_queue_id postsuper -d ALL postsuper -d ALL deferred postfix reload
gönderdiğimiz son komut ile birlikte postfix servisini restart etmiş olduk, postfix için restart işlemi 5 dakika kadar sürebilmekte.
Bu işlem tüm domainlerde bulunan tüm mail hesaplarına ait kuyruk havuzunu silecektir, örneğin sunucunuzda 60 farklı domain var ve bu sorun sadece bir domainde mevcut, bu komutları çalıştırdığınızda kalan 59 domaine ait kuyruk havuzunu da silecektir, o nedenle bu komut dizesini son çare olarak kullanırız, bunun yerine nokta atışı girilen mail adresine ait havuz kaydını silen script’i kullanıyoruz;
#!/usr/bin/perl -w # pfdel - deletes message containing specified address from # Postfix queue. Matches either sender or recipient address. # # Usage: pfdel <email_address> # use strict; # Change these paths if necessary. my $LISTQ = "/usr/sbin/postqueue -p"; my $POSTSUPER = "/usr/sbin/postsuper"; my $email_addr = ""; my $qid = ""; my $euid = $>; if ( @ARGV != 1 ) { die "Usage: pfdel <email_address>\n"; } else { $email_addr = $ARGV[0]; } if ( $euid != 0 ) { die "You must be root to delete queue files.\n"; } open(QUEUE, "$LISTQ |") || die "Can't get pipe to $LISTQ: $!\n"; my $entry = <QUEUE>; # skip single header line $/ = ""; # Rest of queue entries print on # multiple lines. while ( $entry = <QUEUE> ) { if ( $entry =~ / $email_addr$/m ) { ($qid) = split(/\s+/, $entry, 2); $qid =~ s/[\*\!]//; next unless ($qid); # # Execute postsuper -d with the queue id. # postsuper provides feedback when it deletes # messages. Let its output go through. # if ( system($POSTSUPER, "-d", $qid) != 0 ) { # If postsuper has a problem, bail. die "Error executing $POSTSUPER: error " . "code " . ($?/256) . "\n"; } } } close(QUEUE); if (! $qid ) { die "No messages with the address <$email_addr> " . "found in queue.\n"; } exit 0;
Yukarıdaki dosyayı çalıştırmanız için bir kaç işlem yapmanız gerekiyor, aşağıdaki komutları sırasıyla uyguluyoruz.
/home/sunucunuzun_adi/Desktop konumuna mailqsil.py dosyası oluşturacağız;
pico /home/ispconfig/Desktop/mailqsil.py
Dosyamızın herkes tarafından okunabilir ve yazılabilir olması gerekiyor, bunun için gerekli yetkiyi veriyoruz;
chmod a+rw mailqsil.py
Dosyamızı çalıştırıyoruz;
perl mailqsil.py kuyruksilinecekmail@maildomaini.com
Bu script sayesinde nokta atışı olarak istediğimiz maile ait kuyruk havuzunu silerek sorunu çözmüş bulunuyoruz.
Not : İlgili script’in OP(Original Poster) bilgisi elimizde mevcut değil ancak kendisine eline sağlık diyor ve saygılarımızı iletiyoruz.
Sevgiler 🙂
1996 Yılından bu yana Yurtiçi ve Yırtdışında Bilişim Sektörü’nde hizmet veriyor. Network, Ağ Güvenliği, Linux, Windows sunucular ve bir çok programlama dilinde uzman.
Teknoloji, işini karmaşık göstererek kendini Süpermen olarak tanıtma sevdalısı megalomanyakların gösterdiği/anlattığı kadar karmaşık değil, yapamazsın dedikleri her şeyi yapar, anlamazsın dedikleri her şeyi anlarsınız, yeter ki kendinize inanın ve güvenin.