Hafta ortasında, sabah kahvemi içerken posta sunucumuzun beklenenden çok daha fazla e-posta kuyruğu ürettiğini fark ettim. Normalde birkaç yüz mesajı rahatça işleyen Postfix, bir anda binlerce “deferred” (gecikmiş) ve “bounce” mesajıyla dolmuştu. IT altyapıda sık görülmeyen ama etkisi hissedilen sorunlardan biriydi; kullanıcılar gönderim hatası alıyor, iş akışları bloke oluyordu. Aşağıda bu durumun nasıl ortaya çıktığını, adım adım nasıl tespit edip çözdüğümü ve sonrası için hangi önlemleri aldığımızı anlatıyorum.
Sorunun Ortaya Çıkışı
Gözlem: Gönderilen e-postaların büyük kısmı alıcı tarafında reddediliyor veya teslim edilmeden kuyruğa düşüyordu. Destek hattından gelen şikâyetler; özellikle dışa gönderilen faturalarda ve sistem uyarılarında gecikmeler vardı. Mail loglarında kısa süre içinde tekrarlayan TLS/TLS handshake hataları görünüyordu.
Çevre: Postfix (Linux), önünde bir antispam/antivirus appliance ve Let’s Encrypt ile yenilenen sertifika zinciri. Gece yarısı otomatik bir güvenlik güncellemesi (openssl + cipher policy) ve aynı zamanda TLS politikamızda bir sıkılaştırma (zayıf şifreleri yasaklama) uygulanmıştı.
Teshis: İlk Kontroller
İlk işim sistem durumunu hızlıca özetlemek oldu: posta kuyruğu büyüklüğü, CPU/RAM, disk I/O ve disk doluluk. Ardından mail loglarını gerçek zamanlı izledim.
sudo tail -n 200 /var/log/maillog
Loglarda sıkça aşağı benzeri satırlar gördüm: “TLS is required, but peer does not support TLS” veya “SSL_connect: error:1408F10B:SSL routines:ssl3_get_record:wrong version number”. Bu TLS el sıkışma (handshake) sorununa işaret ediyordu.
Teshis: Kuyruk İçeriğine Bakmak
Kuyrukta bekleyen mesajları inceledim.
postqueue -p | head -n 50
Burada hedef MX’e bağlanırken zaman aşımı/RCPT/SMTP hatası veren adresleri gördüm. Hedef domain’lere karşı bağlantı testleri yaparak el sıkışma sürecini doğruladım:
openssl s_client -starttls smtp -crlf -connect mx.hedefdomain.com:25 -servername mail.miz.com
Testlerde bazı sunucularla TLS bağlantısı kurulurken, bazılarında sertifika zinciri hatası veya hiç TLS başlamadan bağlantı kesiliyordu. Özellikle eski antispam/legacy sistemlere sahip birkaç büyük sağlayıcı ile görüşmede problemlerin yoğunlaştığını gördüm.
Teshis: Değişiklikleri Geri İzleme
Son yapılmış paket güncellemelerini ve config değişikliklerini inceledim (yum/apt history, /etc/cron.daily, konfig değişiklikleri için git/ansible kayıtları). Aynı gece otomatik olarak uygulanan “cipher policy” kuralının bazı eski TLS sürümlerini ve SNI davranışını etkilediğini tespit ettim. Ayrıca sertifika zincirinde Let’s Encrypt’in ara sertifikası tam yüklenmemişti; bazı alıcılar zinciri doğrulayamayınca bağlantıyı düşürüyordu.
Çözüm — Adım Adım
1) Kısa süreli rahatlama: İlk olarak posta kuyruğunun daha da büyümesini engellemek için outbound hızını sınırladım ve kritik mesajların önceliklendirilmesini sağladım. Postfix’te transport/always_bcc gibi ağır operasyonları tetiklemeyecek şekilde yapılandırmayı geçici değiştirdim.
# geçici hız sınırlama (örnek) postconf -e 'smtp_destination_rate_delay = 2s' postfix reload
2) Sertifika zincirini düzelttim: Let’s Encrypt için fullchain.pem dosyasını kontrol edip doğru ara sertifikayı ekledim ve Postfix’in ssl_cert dosyasına gösterdim. Sonra Postfix’i yeniden başlattım.
postfix stop cp /etc/letsencrypt/live/miz.com/fullchain.pem /etc/postfix/certs/fullchain.pem cp /etc/letsencrypt/live/miz.com/privkey.pem /etc/postfix/certs/privkey.pem chmod 600 /etc/postfix/certs/* postfix start
3) TLS politikası değişikliğini kademeli geri çekme: Güvenlik ekibiyle koordine ederek sıkılaştırılmış cipher listelerini geçici olarak gevşettik. Hedef MX’lerle TLS uyumluluk testleri (openssl s_client ve swaks) yaptım; uyumsuz sunucular için daha yumuşak bir profil açtık ve iletişimi sürdürdük.
# openssl ile test örneği openssl s_client -starttls smtp -connect mx.hedef.com:25 -cipher 'HIGH:!aNULL' -crlf
4) Kuyruğun temizlenmesi: Önce başarısız olan, ama yeniden denenebilecek olan mesajları yeniden kuyruğa aldım; açıkça hatalı/bounce olması gerekenleri uygun şekilde işaretledim. Büyük hacimli gereksiz bekleyen öğeleri temizlerken dikkatli davrandım.
# sadece deferred mesajları yeniden dene postfix flush # çok sayıda gereksiz mesaja manuel müdahale gerekiyorsa postsuper -d ALL deferred
5) İletişim: Büyük alıcı sağlayıcılarla (özellikle zincir doğrulaması yapanlar) doğrudan iletişime geçtik; onların tarafında bir sıkı TLS zorunluluğu veya SNI beklentisi olup olmadığını teyit ettik. Partnerlerimizin çoğu kısa süre içinde uyum sağladı.
Alınan Dersler
- Değişiklikleri kademeli dağıt: TLS/cipher policy gibi kritik güvenlik değişikliklerini önce birkaç test hedefi ve küçük üretim diliminde deneyin.
- Sintetik testler kur: Her sabah otomatik bir “canary” e-posta gönderimi olsun; hem teslimat hem de TLS el sıkışma testi yapsın. Sorun olduğunda alarm üretsin.
- Rollback planı zorunlu: Her değişiklik için net ve hızlı uygulanabilir geri alma adımları olsun; otomatik rollback mümkünse daha güvenli.
- Log’ları yorumlama pratiği: Maillog kısa mesajlarından TLS el sıkışma hatasını ayırabilmek hayat kurtarıyor — “wrong version number” ile “peer does not support TLS” farklı sebeplere işaret eder.
- Partner havuzu yönetimi: Büyük hacimli dışa gönderim yapan sistemlerde alıcı taraf davranışları heterojendir; sıkı security kuralları bazı eski zincirlerle uyumsuz olabilir.
Kapanışta küçük bir not: Teknik olarak hatayı bulmak keyifli ama gece yarısı posta kuyruğunu temizlemek insanı uykusuz bırakıyor — bir yanda log analizi, diğer yanda destekten gelen panik mesajları; sonuçta hep birlikte koşturduk ve sistemi tekrar normal akışına döndürdük. Sonrasında devops pipeline’ımıza küçük bir test adımı ekledim: her TLS konfig değişikliğinden sonra otomatik olarak 10 popüler MX ile el sıkışma testi yapılıyor artık. Bu olay, küçük bir konfigürasyon değişikliğinin bile iş süreçlerini ne kadar hızlı etkileyebileceğini tekrar hatırlattı.