Uygulama sunucundan çıkan şifre sıfırlama mailleri Gmail'e ulaşmıyorsa, ya da beş farklı sunucunun her birinde ayrı ayrı mail ayarı tutmaktan bıktıysan, aradığın şey SMTP relay'dir. SMTP relay, kısaca, maili doğrudan alıcının sunucusuna teslim etmek yerine önce güvendiğin bir aracı SMTP sunucusuna teslim etmek demektir; teslimatın geri kalanını o aracı üstlenir. Bu tek mimari karar, teslimat oranından IP itibarına, günlük yönetimden log takibine kadar pek çok şeyi tek noktada toplar.
Bu yazıda önce relay'in ne olduğunu ve ne zaman gerçekten gerektiğini netleştireceğim; sonra iki yönlü kurulumu anlatacağım: Postfix'i başka bir relay'e gönderen taraf olarak yapılandırmak ve kendi sunucunu iç ağ için relay hizmeti veren taraf hâline getirmek. Port ve TLS seçimlerini, SASL kimlik doğrulamasını, açık relay tuzağını ve log üzerinden sorun gidermeyi gerçek yapılandırma satırlarıyla göstereceğim. Sonunda elinde çalışan ve kötüye kullanılamayacak bir relay yapılandırması olacak.
SMTP Relay Nedir, Ne İşe Yarar#
Normal şartlarda bir mail sunucusu, alıcının alan adının MX kaydına bakar ve mesajı doğrudan o sunucuya teslim etmeye çalışır. Buna doğrudan teslimat denir. SMTP relay'de ise bu zincire bir ara durak eklenir: senin sunucun mesajı aracı sunucuya verir, aracı sunucu da alıcının MX'ine ulaştırır. Aracı, mesajı kabul edip kuyruğuna aldığı anda senin sorumluluğun büyük ölçüde biter.
Bu ara durağın üç somut faydası vardır. Birincisi teslimat: aracı sunucunun IP'si genellikle uzun süredir kullanılan, itibarı oturmuş bir adrestir; senin yeni sunucunun sıfırdan itibar kazanmasına gerek kalmaz. İkincisi merkezîlik: on farklı uygulama sunucusunun her birinde ayrı DKIM anahtarı, ayrı SPF kaydı ve ayrı kuyruk yönetmek yerine hepsi tek bir relay'e konuşur, kimlik doğrulama ve log tek yerde toplanır. Üçüncüsü ağ kısıtları: birçok veri merkezi ve bulut sağlayıcısı 25. portu dışarıya kapatır; relay kullanmak bu kısıtı 587 üzerinden aşmanın meşru yoludur.
[Uygulama sunucusu] --587/TLS--> [SMTP Relay] --25--> [Alıcının MX sunucusu]
senin kodun kimlik doğrulamalı doğrudan teslimat
Relay'in maliyeti ise şeffaflığın bir kısmını kaybetmendir: mesaj aracıya geçtikten sonra teslim edilip edilmediğini kendi logundan göremezsin, aracının raporlarına bakman gerekir. Bu yüzden relay seçerken log ve bounce raporu sunup sunmadığına bakmalısın.
Ne Zaman Relay Kullanmalısın#
Her sunucunun relay'e ihtiyacı yoktur. Şu durumlardan birindeysen relay doğru karardır:
| Senaryo | Relay gerekli mi | Neden |
|---|---|---|
| Web uygulaması bildirim maili gönderiyor | Evet | Uygulama sunucusunun IP itibarı yok |
| Birden fazla sunucu mail gönderiyor | Evet | Tek noktadan kimlik doğrulama ve log |
| Bulut sağlayıcı 25. portu kapatmış | Evet | 587 üzerinden meşru çıkış |
| Kurumsal posta kutusu sunucun var | Genelde hayır | Zaten kendi MTA'sı teslim ediyor |
| Günde 5 mail gönderen küçük site | Opsiyonel | Basit kurulumla da çözülür |
| Toplu pazarlama maili | Evet, özel servis | Ayrı IP havuzu ve raporlama gerekir |
Uygulama maillerinin neden ayrı ele alınması gerektiğini ve pazarlama mailinden farkını işlemsel e-posta nedir yazısında ayrıntılı anlattım. Relay yerine sağlayıcının HTTP API'sini kullanmayı da düşünüyorsan, iki yöntemin karşılaştırmasını SMTP mi API mi yazısında bulabilirsin.
Postfix'i Relay Üzerinden Gönderecek Şekilde Yapılandırma#
En yaygın senaryo budur: sunucunda Postfix var, mailleri kendisi teslim etmeye çalışıyor ve sen bunu bir relay'e devretmek istiyorsun. İlgili ayar relayhost parametresidir; yanına kimlik doğrulama ve TLS eklemen gerekir.
# /etc/postfix/main.cf
# Aracı sunucu ve port. Köşeli parantez MX sorgusunu ATLAR — şart.
relayhost = [smtp.saglayici.com]:587
# SASL kimlik doğrulamasını aç
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
# TLS'i zorunlu kıl — parolayı düz metin göndermemek için kritik
smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
# Kuyrukta bekleyen mesaj için yeniden deneme aralığı
smtp_connection_cache_on_demand = no
Köşeli parantez ayrıntısını atlama: relayhost = [smtp.saglayici.com]:587 yazdığında Postfix o ismin A kaydına doğrudan bağlanır. Parantezsiz yazarsan Postfix önce o ismin MX kaydını sorgular, bulamazsa bağlanamaz. Bu, relay kurulumlarında en sık yaşanan sessiz hatadır.
Kimlik bilgilerini ayrı bir dosyada tutar ve karma tabloya çevirirsin:
# Kullanıcı adı ve parolayı yaz (relayhost satırıyla BİREBİR aynı yazım)
echo "[smtp.saglayici.com]:587 [email protected]:GucluParola" \
> /etc/postfix/sasl_passwd
# Dosyayı kilitle — parola içeriyor
chmod 600 /etc/postfix/sasl_passwd
chown root:root /etc/postfix/sasl_passwd
# Postfix'in okuyabileceği .db biçimine çevir
postmap /etc/postfix/sasl_passwd
# Yapılandırmayı yeniden yükle
systemctl reload postfix
Debian/Ubuntu'da SASL istemci kütüphaneleri kurulu değilse kimlik doğrulama sessizce başarısız olur; apt install libsasl2-modules ile kurmayı unutma. Test etmenin en hızlı yolu swaks aracıdır:
# Relay üzerinden gerçek bir test maili gönder
swaks --to [email protected] \
--from [email protected] \
--server smtp.saglayici.com:587 \
--auth LOGIN --auth-user [email protected] \
--tls
# Ya da doğrudan yerel Postfix üzerinden
echo "Relay testi" | mail -s "Test" [email protected]
tail -f /var/log/mail.log
Elinde swaks yoksa ya da hangi komutu çalıştıracağından emin değilsen, SMTP test aracı port/TLS uyumunu kontrol edip sana kopyalayıp yapıştırabileceğin openssl ve swaks komutlarını üretir.
Kendi Relay Sunucunu Kurmak#
İkinci senaryo, kendi sunucunu iç ağdaki diğer makineler için relay hâline getirmektir. Burada Postfix'i gönderen değil kabul eden taraf olarak yapılandırırsın ve tek kritik soru şudur: kimin mail göndermesine izin veriyorsun?
# /etc/postfix/main.cf — relay hizmeti veren sunucu
myhostname = relay.firmaniz.com
mydestination = localhost
# Kimlik doğrulamasız güvenilecek ağlar — DAR tutulmalı
mynetworks = 127.0.0.0/8, 10.10.0.0/24
# Relay yetkisi kuralları — sıralama önemli
smtpd_relay_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
defer_unauth_destination
# Alıcı kabul kuralları
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
# Gelen bağlantılarda TLS sun
smtpd_tls_security_level = may
smtpd_tls_cert_file = /etc/letsencrypt/live/relay.firmaniz.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/relay.firmaniz.com/privkey.pem
# Kimlik doğrulamayı yalnızca şifreli oturumda kabul et
smtpd_sasl_auth_enable = yes
smtpd_tls_auth_only = yes
# Mesaj boyutu üst sınırı (25 MB)
message_size_limit = 26214400
Buradaki defer_unauth_destination satırı sunucunun kalkanıdır: yetkisiz bir istemci senin üzerinden dışarıya mail atmaya kalktığında istek reddedilir. Sertifikayı henüz kurmadıysan Postfix'e Let's Encrypt TLS sertifikası kurma yazısındaki adımları önce tamamla; TLS olmadan SASL kimlik doğrulaması parolayı ağ üzerinde açık taşır.
Yapılandırmayı yükledikten sonra 587 portunu master.cf içinde açtığından emin ol:
# /etc/postfix/master.cf — submission (587) servisi
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
Port Seçimi ve TLS Modu#
Relay kurulumlarında yaşanan bağlantı sorunlarının yarısı yanlış port/TLS eşleşmesinden çıkar. Üç port ve iki TLS modu vardır; hangisinin hangisiyle çalıştığını bilmek gerekir:
| Port | TLS modu | Kullanım | Not |
|---|---|---|---|
| 25 | STARTTLS (opsiyonel) | Sunucudan sunucuya teslimat | Bulut sağlayıcıları sık kapatır |
| 587 | STARTTLS (zorunlu) | İstemci/uygulama gönderimi | Standart submission portu, ilk tercih |
| 465 | Örtük TLS (SMTPS) | İstemci gönderimi | Bağlantı en baştan şifreli açılır |
| 2525 | STARTTLS | Alternatif | Standart değil, bazı sağlayıcılar sunar |
Kural basittir: 465 kullanıyorsan STARTTLS deme, 587 kullanıyorsan örtük TLS deme. İkisini karıştırmak, istemcinin el sıkışma sırasında takılıp zaman aşımına düşmesine yol açar ve log'da anlamsız görünen bir hata bırakır. Bağlantının gerçekten şifreli açılıp açılmadığını şöyle görürsün:
# 587 + STARTTLS testi
openssl s_client -connect smtp.saglayici.com:587 -starttls smtp
# 465 + örtük TLS testi
openssl s_client -connect smtp.saglayici.com:465
Çıktıda Verify return code: 0 (ok) görüyorsan sertifika zinciri de sağlıklıdır.
Açık Relay Tuzağı ve Güvenlik#
Kendi relay sunucunu kuruyorsan bilmen gereken en tehlikeli hata açık relay (open relay) bırakmaktır. Açık relay, kimlik doğrulaması yapmadan herkesin senin sunucun üzerinden istediği adrese mail göndermesine izin veren yapılandırmadır. Bunu bırakırsan sunucun saatler içinde spam botları tarafından bulunur, IP'n kara listelere düşer ve gerçek mailerin de teslim edilmez olur. Toparlanması haftalar sürer.
En sık yapılan hata mynetworks alanını geniş tutmaktır. mynetworks = 0.0.0.0/0 yazmak sunucunu doğrudan açık relay yapar; mynetworks_style = subnet bırakmak da bulut ortamlarında beklediğinden çok daha geniş bir aralığa güvenmene yol açabilir. Kendi durumunu şöyle test edersin:
# Dışarıdan bir makineden, kimlik doğrulaması OLMADAN dene
swaks --to [email protected] --from [email protected] \
--server relay.firmaniz.com:25
# Beklenen cevap:
# 554 5.7.1 <[email protected]>: Relay access denied
"Relay access denied" görüyorsan yapılandırman doğrudur. Mesaj kabul edildiyse derhal smtpd_relay_restrictions satırını düzelt ve mynetworks içeriğini daralt. Ek koruma katmanı olarak güvenlik duvarında 25 ve 587 portlarını yalnızca gerçekten ihtiyaç duyan kaynaklara aç:
# Sadece iç ağdan 587'ye izin ver
ufw allow from 10.10.0.0/24 to any port 587 proto tcp
# Genel internetten gelen 25'i kabul et (posta almak için gerekiyorsa)
ufw allow 25/tcp
Bir de gönderim hızını sınırlamayı ihmal etme: ele geçirilmiş bir uygulama hesabı, saniyede binlerce mail göndererek IP'ni birkaç dakikada yakabilir. Postfix'te smtpd_client_message_rate_limit gibi kısıtlarla makul bir tavan koymak, kötü günde hasarı sınırlar.
Sorun Giderme: Log Okuma ve Kuyruk#
Relay sorunlarının tamamı mail logunda görünür; sadece nereye bakacağını bilmek gerekir. Postfix her teslimat denemesi için tek satırlık bir özet yazar ve o satırdaki status= alanı sana her şeyi söyler.
# Canlı takip
tail -f /var/log/mail.log
# Sadece relay üzerinden çıkanları filtrele
grep "relay=smtp.saglayici.com" /var/log/mail.log | tail -20
# Kimlik doğrulama hatalarını ara
grep -i "SASL authentication failed" /var/log/mail.log
# Kuyrukta ne var
postqueue -p
# Takılı bir mesajın içeriğini incele
postcat -q A1B2C3D4 | head -40
# Kuyruğu hemen yeniden dene
postqueue -f
En sık karşılaşılan durum kodları ve anlamları şöyledir:
| Log ifadesi | Anlamı | Yapılacak |
|---|---|---|
| status=sent | Relay mesajı kabul etti | Sorun yok |
| status=deferred | Geçici hata, tekrar denenecek | Bağlantı/kimlik doğrulamayı kontrol et |
| status=bounced | Kalıcı ret | Alıcı adresi ve relay kurallarını kontrol et |
| SASL authentication failed | Kullanıcı adı/parola hatalı | sasl_passwd ve postmap kontrolü |
| Connection timed out | Port kapalı ya da güvenlik duvarı | Portu ve çıkış kurallarını kontrol et |
| Relay access denied | Relay sende yetki vermemiş | mynetworks / SASL kurulumu |
status=deferred görüp de sebebini bulamıyorsan, ilk bakılacak yer parola dosyasıdır: relayhost satırındaki yazım ile sasl_passwd içindeki yazımın birebir aynı olması gerekir. [smtp.saglayici.com]:587 yazıp parola dosyasına smtp.saglayici.com yazarsan eşleşme olmaz ve Postfix kimlik bilgisi göndermez. Bu ayrıntı, kurulum sırasında saatler kaybettiren klasik bir tuzaktır.
Sıkça Sorulan Sorular#
SMTP relay ücretsiz mi#
Kendi sunucunu relay olarak kurmak yazılım tarafında tamamen ücretsizdir; Postfix açık kaynaktır ve TLS sertifikasını Let's Encrypt üzerinden bedelsiz alırsın. Maliyet, sunucunun kendisinde ve bakım emeğindedir. Dışarıdan bir relay hizmeti kullanacaksan çoğu sağlayıcı aylık gönderim hacmine göre ücretlendirir ve düşük hacimli ücretsiz kademeler sunar.
Relay kullanınca SPF kaydımı değiştirmem gerekir mi#
Evet, gerekir. SPF kaydı alan adın adına hangi sunucuların mail gönderebileceğini söyler; relay üzerinden çıkan mailler artık senin IP'nden değil relay'in IP'sinden gelir. Bu yüzden relay sağlayıcısının verdiği include: ifadesini ya da IP aralığını SPF kaydına eklemen gerekir. Eklemezsen SPF kontrolü başarısız olur ve teslimat oranın düşer.
Port 25 kapalıysa ne yapmalıyım#
Bulut sağlayıcılarının çoğu spam'i önlemek için 25. portu varsayılan olarak kapatır. Doğru çözüm, 587 üzerinden kimlik doğrulamalı bir relay kullanmaktır; bu zaten önerilen yöntemdir. Bazı sağlayıcılar talep üzerine 25'i açar ama bu genelde bir doğrulama süreci gerektirir. Alternatif olarak 465 portunu destekleyen bir relay de kullanabilirsin.
Açık relay olup olmadığımı nasıl anlarım#
Sunucunun dışındaki bir makineden, kimlik doğrulaması yapmadan kendi sunucun üzerinden dış bir adrese mail göndermeyi dene. Sunucu 554 5.7.1 Relay access denied benzeri bir hatayla reddediyorsa yapılandırman güvenlidir. Mesaj kabul edilirse açık relaysin demektir; mynetworks değerini daralt ve smtpd_relay_restrictions içinde defer_unauth_destination bulunduğundan emin ol.
Relay kullanmak mail gecikmesine yol açar mı#
Pratikte fark edilir bir gecikme yaratmaz; mesaj relay'e teslim edildikten sonra genelde saniyeler içinde asıl alıcıya iletilir. Gecikme yaşanıyorsa sebep genellikle relay'in kuyruğunda değil, alıcı tarafındaki greylisting uygulamasındadır. Alıcı sunucu ilk denemeyi geçici olarak reddedip birkaç dakika sonra kabul eder; bu durum relay olmadan da yaşanır.
Birden fazla alan adı için tek relay kullanabilir miyim#
Evet, bu relay'in en güçlü yanlarından biridir. Aynı relay üzerinden farklı alan adları adına mail gönderebilirsin; tek şart her alan adının SPF kaydında relay'i yetkilendirmesi ve mümkünse kendi DKIM anahtarıyla imzalanmasıdır. Postfix tarafında sender_dependent_relayhost_maps ile gönderen adrese göre farklı relay'lere yönlendirme de yapabilirsin.
Kapanış#
SMTP relay, mail altyapısında karmaşıklığı tek noktada toplayan sade bir mimari tercihtir. Aklında kalması gereken dört alışkanlık şunlar: relayhost değerini köşeli parantezle yazıp MX sorgusunu atla, kimlik bilgisi dosyasını chmod 600 yapıp postmap ile derlemeyi unutma, TLS'i zorunlu tut ki parola ağda açık dolaşmasın ve kendi relay'ini kuruyorsan mynetworks alanını olabildiğince dar tutup açık relay testini mutlaka dışarıdan yap.
Uygulama maillerini posta kutularından ayırmak istiyorsan Postfix, Dovecot ve DKIM kurulu hâlde teslim edilen SMTP sunucu paketimiz doğrudan bu iş için hazırlanmıştır. Relay'i kendi sunucunda çalıştırmayı tercih ediyorsan VDS paketlerimizde tam root erişimiyle kendi yapılandırmanı kurabilir, kurulum ve bakım yükünü devretmek istersen sunucu yönetimi hizmetimizden yararlanabilirsin. Toplu bilgilendirme gönderimi planlıyorsan e-posta pazarlama tarafındaki ayrı altyapı daha uygun bir başlangıç olur.