Postfix sunucunuzdan e-posta göndermeye çalıştığınızda 554 5.7.1 Relay access denied hatasıyla karşılaşıyorsanız, sunucunuz yetkisiz bir istemcinin veya etki alanının posta iletmesini engelliyordur. Bu yazıda hatanın kök nedenlerini, log analizini ve adım adım çözüm yöntemlerini ele alacağız.
mynetworks veya relay_domains yapılandırmasından kaynaklanır; istemci IP'sini mynetworks'e eklemek ya da SASL kimlik doğrulamasını etkinleştirmek sorunu çözer.SMTP protokolü, RFC 5321'de açık biçimde tanımlanmıştır: bir posta aktarım ajanı (MTA), kendi denetimindeki etki alanları dışındaki alıcılara posta iletmek için ya göndericinin kimliğini doğrulaması ya da göndericinin IP adresini güvenilir ağlar listesinde tutması gerekir. Postfix bu prensibi smtpd_relay_restrictions ve smtpd_recipient_restrictions direktifleriyle uygular.
Hata kodu 554 5.7.1 şu anlama gelir: sunucu isteği kalıcı olarak reddetti ve bu ret, güvenlik politikasından kaynaklanıyor. Kodun ilk rakamı (5) kalıcı bir hata olduğunu, ikinci basamak (5) protokol durumuna işaret ettiğini, üçüncü basamak (4) güvenlik/politika ihlalini gösterir.
Postfix günlükleri genellikle /var/log/mail.log (Debian/Ubuntu) veya /var/log/maillog (RHEL/CentOS) konumunda bulunur. Hatayı ayırt etmek için şu komutu kullanın:
grep "Relay access denied" /var/log/mail.log | tail -20
Tipik bir log satırı şöyle görünür:
May 29 09:14:22 mailserver postfix/smtpd[12345]: NOQUEUE: reject: RCPT from unknown[203.0.113.45]: 554 5.7.1 <user@example.com>: Relay access denied; from=<sender@external.com> to=<user@example.com> proto=ESMTP helo=<mail.external.com>
Burada dikkat edilmesi gereken alanlar şunlardır: kaynak IP (203.0.113.45), hedef adres ve helo değeri. Bu üç bilgi, sorunun hangi katmanda olduğunu belirlemenizi sağlar.
Postfix, mynetworks parametresinde listelenen IP adreslerine veya ağ bloklarına kayıtsız şartsız posta iletme izni tanır. Uygulamanız aynı sunucuda çalışıyorsa 127.0.0.0/8 yeterlidir; ancak farklı bir sunucudan bağlanıyorsanız o IP'yi ya da ağı eklemeniz gerekir.
# /etc/postfix/main.cf
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.1.0/24
Değişikliği uygulamak için:
sudo postfix reload
Uzak bir istemcinin (örneğin bir uygulama sunucusu veya mail istemcisi) posta gönderebilmesi için SASL kimlik doğrulaması zorunludur. Postfix, Dovecot SASL veya Cyrus SASL ile entegre çalışabilir. Aşağıdaki main.cf direktifleri temel yapılandırmayı göstermektedir:
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
Sunucunuzun posta kabul etmesi gereken etki alanları mydestination veya relay_domains içinde tanımlı değilse, bu etki alanlarına gelen postalar da reddedilir. Özellikle birden fazla etki alanı barındıran sunucularda bu durum sık karşılaşılır:
relay_domains = example.com, mail.example.com
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
Postfix 2.10 ve sonrası sürümlerde smtpd_relay_restrictions direktifi smtpd_recipient_restrictions'dan önce değerlendirilir. Eğer reject_unauth_destination kuralı izin kurallarından önce geliyorsa meşru istekler de reddedilebilir. Doğru sıra:
smtpd_relay_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
defer_unauth_destination
| Parametre | Açıklama | Örnek Değer | Etkisi |
|---|---|---|---|
mynetworks |
Kimlik doğrulaması olmadan posta iletebilecek ağ/IP listesi | 127.0.0.0/8 192.168.0.0/16 |
Listelenen ağlardan gelen tüm postalar kabul edilir |
relay_domains |
Postfix'in posta kabul ettiği hedef etki alanları | example.com |
Bu etki alanlarına gelen postalar iletilir |
mydestination |
Sunucunun yerel olarak teslim ettiği etki alanları | $myhostname, localhost |
Bu etki alanları için yerel teslimat yapılır |
smtpd_sasl_auth_enable |
SASL kimlik doğrulamasını etkinleştirir | yes |
Kimlik doğrulayan istemciler relay yapabilir |
smtpd_relay_restrictions |
Relay kısıtlama kuralları listesi (Postfix 2.10+) | permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination |
Relay izin/ret mantığını belirler |
smtpd_recipient_restrictions |
Alıcı bazlı kısıtlamalar | reject_unauth_destination |
Yetkisiz hedefler reddedilir |
SASL kimlik doğrulamasını etkinleştirirken parolaların şifrelenmeden iletilmesini önlemek kritik önem taşır. RFC 4954 (SMTP Service Extension for Authentication), kimlik bilgilerinin açık metin iletilmesinin yalnızca TLS koruması altında kabul edilebilir olduğunu belirtir. Bu nedenle aşağıdaki yapılandırma eklenmeli:
smtpd_tls_security_level = may
smtpd_tls_cert_file = /etc/ssl/certs/mail.crt
smtpd_tls_key_file = /etc/ssl/private/mail.key
smtpd_tls_loglevel = 1
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
noplaintext seçeneği TLS olmadan düz metin kimlik doğrulamasını engeller; smtpd_sasl_tls_security_options ise TLS bağlantılarında bu kısıtlamayı kaldırarak LOGIN ve PLAIN mekanizmalarına izin verir.
"Relay access denied" hatası çoğunlukla Postfix'in iç yapılandırmasından kaynaklanır; ancak bazı alıcı sunucular, gönderim altyapısı doğru yapılandırılmamış postalar için benzer ret mesajları döndürebilir. RFC 7208 (SPF), RFC 6376 (DKIM) ve RFC 7489 (DMARC) standartları, özellikle büyük e-posta sağlayıcıları tarafından sıkı biçimde uygulanmaktadır. Google Postmaster Tools ve Microsoft'un SNDS (Smart Network Data Services) platformu, gönderim sağlığını izlemek için kullanılabilecek resmi araçlardır.
SPF kaydınızı doğrulamak için:
dig TXT example.com | grep spf
DKIM imzasını test etmek için:
opendkim-testkey -d example.com -s mail -vvv
Değişiklikler sonrası Postfix yapılandırmasının sözdizimini doğrulamak için:
sudo postfix check
sudo postconf -n
postconf -n yalnızca varsayılandan farklı olan direktifleri listeler; bu sayede aktif yapılandırmayı hızlıca gözden geçirebilirsiniz. Telnet ile SMTP bağlantısını manuel olarak test etmek de hatanın tam olarak nerede oluştuğunu belirlemenizi sağlar:
telnet mail.example.com 25
EHLO test.example.com
MAIL FROM:<test@test.com>
RCPT TO:<user@example.com>
Sunucu yanıtı 554 5.7.1 ise relay kısıtlaması aktif demektir. 250 2.1.5 Ok yanıtı ise kabul edildiğini gösterir.
Bu hata, Postfix'in göndericiyi güvenilir bulmadığı ve hedef etki alanına posta iletmeyi reddettiği anlamına gelir. "554" kalıcı bir SMTP hata kodudur; "5.7.1" ise RFC 3463'e göre güvenlik/politika ihlalini işaret eden genişletilmiş durum kodudur.
Yalnızca gerçekten denetlediğiniz ve güvendiğiniz IP adreslerini ya da ağ bloklarını ekleyin. Uygulama sunucularınızın IP'leri, iç ağ bloklarınız (örneğin 10.0.0.0/8) ve gerekirse belirli harici IP'ler eklenebilir. Asla 0.0.0.0/0 eklemeyin; bu sunucunuzu açık relay haline getirir.
Önce smtpd_relay_restrictions içinde permit_sasl_authenticated kuralının reject_unauth_destination'dan önce geldiğini kontrol edin. Ardından /var/log/mail.log dosyasında "warning: SASL authentication failure" satırlarını arayın. Dovecot SASL socket yolunun (private/auth) doğru yapılandırıldığından ve Dovecot servisinin çalıştığından emin olun.
postconf mail_version veya postfix -v 2>&1 | head -1 komutunu çalıştırın. Postfix 2.10 öncesi sürümlerde smtpd_relay_restrictions direktifi mevcut değildir; relay mantığı yalnızca smtpd_recipient_restrictions üzerinden yönetilir.
Bu durum, hedef etki alanlarının relay_domains veya mydestination içinde tanımlanmadığını gösterir. İlgili etki alanını bu parametrelerden birine ekleyin ve sudo postfix reload ile yapılandırmayı yenileyin.
MXToolbox (mxtoolbox.com) üzerindeki "Open Relay Test" aracını ya da relay-test.mail-abuse.org hizmetini kullanarak sunucunuzu test edebilirsiniz. Açık relay tespit edilirse mynetworks değerini daraltın ve reject_unauth_destination kuralının aktif olduğunu doğrulayın.
Son kullanıcı mail istemcilerinden gönderim için RFC 6409 (Message Submission for Mail) uyarınca port 587 kullanılması önerilir. Port 587, zorunlu kimlik doğrulaması (SASL) ve TLS ile yapılandırılmalıdır. Postfix'te master.cf dosyasında submission servisi ayrıca tanımlanır.
mydestination içindeki etki alanlarına gelen postalar yerel olarak teslim edilir (sunucudaki kullanıcı hesaplarına). relay_domains içindeki etki alanlarına gelen postalar ise başka bir posta sunucusuna iletilir; bu, genellikle bir backup MX veya gateway senaryosunda kullanılır.
Evet. sudo postfix reload komutu çalışan süreci durdurmadan yeni yapılandırmayı yükler. Yalnızca master.cf değişikliklerinde tam yeniden başlatma (sudo systemctl restart postfix) gerekebilir.
Bu durumda sorun büyük olasılıkla Postfix'in iç yapılandırmasında değil, gönderim altyapınızın itibarında veya kimlik doğrulama kayıtlarındadır. SPF kaydınızın (RFC 7208), DKIM imzanızın (RFC 6376) ve DMARC politikanızın (RFC 7489) doğru yapılandırıldığını kontrol edin. Google Postmaster Tools'da etki alanı itibarınızı ve DMARC raporlarını inceleyebilirsiniz.
Reklamsız, KVKK uyumlu; kurulum ve geçiş ücretsiz, mailleri biz taşırız.
Kurulum + migrasyon ücretsiz. KVKK uyumlu, Türkiye'de barındırma. 7/24 Türkçe destek.
Kampanya 30 Haziran'a kadar geçerlidir.