Komutları üretim sunucusunda çalıştırmadan önce yedek alın ve mümkünse bir test ortamında deneyin. Yönetim erişiminizi (SSH, panel) kaybetmemek için ayar değişikliklerinde açık bir ikinci oturum bulundurun.
Bu rehberde ne yapacağız?
Sunucunuzdaki betikler, cron işleri ve uygulamalar bildirim e-postası göndermek ister; ancak sunucudan doğrudan göndermek çoğu zaman spam olarak işaretlenir veya sağlayıcı tarafından 25. port engellenir. Çözüm, giden postayı güvenilir bir dış SMTP hizmetine yönlendirmektir. Bu rehberde Postfix ile giden e-posta yönlendirme (smarthost) yapılandırmasını, TLS ve kimlik doğrulamayı, yalnızca yerel kullanım için güvenli kurulumu ve açık röle olmadığını doğrulamayı anlatıyoruz.
Rehber, sunucudan sistem bildirimi veya uygulama e-postası gönderen yöneticilere yöneliktir. Tahmini süre: 20-30 dakika. Yönlendirme için kullanacağınız SMTP hizmetinin sunucu adı, portu ve kullanıcı bilgisini sağlayıcınızdan edinmeniz gerekir.
Gereksinimler
- Debian/Ubuntu veya AlmaLinux/Rocky çalıştıran bir sunucu ve sudo yetkisi
- Dış SMTP röle hizmeti: sunucu adı, port (genellikle 587), kullanıcı adı ve parola veya uygulama anahtarı
- Sunucudan ilgili SMTP portuna çıkış izni
- Gönderen adresin, röle hizmetinde doğrulanmış alan adına ait olması
Adım adım Postfix ile smarthost yapılandırması
1. Postfix'i kurun
Debian/Ubuntu'da kurulum sırasında bir yapılandırma ekranı çıkabilir; Internet Site yerine Satellite system seçeneği bu amaca uygundur, ancak aşağıdaki adımlar zaten ayarları elle yapar. Kimlik doğrulama için SASL modülü de gerekir.
# Debian/Ubuntu
sudo apt update
sudo apt install postfix libsasl2-modules mailutils
# AlmaLinux/Rocky
sudo dnf install postfix cyrus-sasl-plain mailx
# EL9 ve sonrasında mail komutunu s-nail paketi sağlar2. Önce yedek alın ve yalnızca yerelde dinletin
Postfix'in yalnızca kendi sunucunuzdaki uygulamalardan posta almasını sağlayın. Dışarıdan bağlantı kabul etmesine gerek yoktur; bu, açık röle riskini ortadan kaldırır.
sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.yedek
sudo postconf -e 'inet_interfaces = loopback-only'
sudo postconf -e 'inet_protocols = ipv4'
sudo postconf -e 'mynetworks = 127.0.0.0/8'IPv6 kullanmak isterseniz inet_protocols = all bırakabilir ve mynetworks değerine [::1]/128 ekleyebilirsiniz.
3. Röle sunucusunu ve TLS ayarlarını tanımlayın
Röle adresini köşeli parantez içinde yazmak, Postfix'in MX araması yapmadan doğrudan o sunucuya bağlanmasını sağlar. Sunucu adını ve portunu kendi sağlayıcınızdan alın; aşağıdaki değerler örnektir.
sudo postconf -e 'relayhost = [smtp.example.com]:587'
sudo postconf -e 'smtp_sasl_auth_enable = yes'
sudo postconf -e 'smtp_sasl_security_options = noanonymous'
sudo postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd'
sudo postconf -e 'smtp_tls_security_level = encrypt'
sudo postconf -e 'smtp_tls_loglevel = 1'Sertifika yetkilisi paketini dağıtımınıza göre ekleyin:
# Debian/Ubuntu
sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt'
# AlmaLinux/Rocky
sudo postconf -e 'smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt'Sağlayıcınız 465 portunda örtük TLS (SMTPS) sunuyorsa ek olarak smtp_tls_wrappermode = yes gerekir; portu ve modu sağlayıcı belgesinden doğrulayın.
4. Kimlik bilgisi dosyasını güvenli oluşturun
Parolayı komut satırına yazmayın; kabuk geçmişine girer. Dosyayı önce kısıtlı izinle oluşturun, sonra bir düzenleyiciyle içeriğini girin.
sudo install -m 600 -o root -g root /dev/null /etc/postfix/sasl_passwd
sudoedit /etc/postfix/sasl_passwdDosya içeriği tek satırdır: röle adresi, ardından kullanıcı adı ve parola.
[smtp.example.com]:587 kullanici@example.com:buraya-parolaArdından Postfix'in okuyabileceği veritabanı dosyasını üretin ve izinleri kısıtlayın.
sudo postmap /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.dbNot: Berkeley DB içermeyen yeni Postfix paketlerinde (ör. bazı EL10 sürümleri) hash: tablo türü bulunmaz. postconf -m ile desteklenen türlere bakın; gerekiyorsa bu rehberdeki hash: değerlerini lmdb: ile değiştirin, bu durumda .db yerine .lmdb dosyası oluşur.
5. Gönderen adresini düzenleyin
Rölelerin çoğu yalnızca doğrulanmış gönderen adreslerini kabul eder. root@sunucuadi gibi adreslerle gönderilen postalar reddedilebilir. Gönderen adresini yeniden yazan bir eşleme kullanabilirsiniz.
echo 'root bildirim@example.com' | sudo tee /etc/postfix/sender_canonical > /dev/null
sudo postmap /etc/postfix/sender_canonical
sudo postconf -e 'sender_canonical_maps = hash:/etc/postfix/sender_canonical'Başka kullanıcılar için de benzer satırlar ekleyebilirsiniz; her değişiklikten sonra postmap çalıştırın.
6. Yapılandırmayı denetleyin ve hizmeti yeniden başlatın
sudo postfix check
sudo systemctl enable postfix
sudo systemctl restart postfix7. Test e-postası gönderin
Alıcıyı kendi adresinizle değiştirin. mail komutu mailutils veya mailx paketi tarafından sağlanır.
echo 'Smarthost deneme iletisi' | mail -s 'Postfix deneme' alici@example.org
sudo postqueue -pDoğrulama
Gönderimi günlük kayıtlarından doğrulayın. Debian/Ubuntu'da /var/log/mail.log, RHEL tabanlı sistemlerde /var/log/maillog ya da journalctl kullanılır.
# Debian/Ubuntu'da asıl birim postfix@-.service olduğu için desen kullanılır
sudo journalctl -u 'postfix*' --no-pager -n 30
sudo postconf -n | grep -E 'relayhost|inet_interfaces|mynetworks|smtp_tls_security_level'Beklenen sonuç: günlükte status=sent ve röle sunucusunun kabul yanıtı görünür; postqueue -p çıktısı boş (Mail queue is empty) olur ve alıcı iletiyi alır. Açık röle olmadığını kanıtlamak için hizmetin yalnızca yerelde dinlediğini doğrulayın:
sudo ss -lntp | grep ':25 'Çıktıda yalnızca 127.0.0.1:25 görünmelidir. Dışarıdaki bir makineden nc -vz sunucu-adresi 25 bağlantısı reddedilmelidir.
Sık karşılaşılan sorunlar
- SASL authentication failed: Kullanıcı adı veya parola yanlıştır, ya da sağlayıcı uygulama anahtarı istiyordur; sasl_passwd dosyasındaki röle adresiyle relayhost değerinin tıpatıp aynı olduğundan emin olup postmap'i yeniden çalıştırın.
- Connection timed out: Çıkış portu engellenmiş olabilir;
nc -vz smtp.example.com 587ile sunucudan erişimi deneyin ve sağlayıcının güvenlik duvarını kontrol edin. - Sender address rejected: Gönderen adresi röle hizmetinde doğrulanmamıştır; sender_canonical ile doğrulanmış bir adrese çevirin.
- Certificate verification failed: smtp_tls_CAfile yolu yanlıştır veya CA paketi eksiktir; ca-certificates paketini kurun.
- Postalar kuyrukta birikiyor:
sudo postqueue -pile nedene bakın; düzelttikten sonrasudo postqueue -file kuyruğu yeniden deneyin.
Güvenlik ve bakım notları
- sasl_passwd ve .db dosyalarını yalnızca root okuyabilsin (600); parolayı komut satırında veya betiklerde açıkta vermeyin.
- Postfix'i loopback-only ile yalnızca yerelde dinletin; gelen posta almıyorsanız 25. portu hiç açmayın.
- mynetworks değerini geniş ağlara açmayın; bu, açık röleye yol açar.
- Röle hizmetinin SPF ve DKIM yapılandırmasını gönderen alan adınız için tamamlayın; aksi halde postalar spam olabilir.
- Uygulama anahtarı gibi sınırlı yetkili kimlik bilgisi kullanın ve düzenli olarak yenileyin.
- Kuyruk büyüklüğünü ve reddedilen postaları izleme sistemine ekleyin; ani artış, ele geçirilmiş bir hesabın işaretidir.
Sık sorulan sorular
Neden doğrudan göndermek yerine smarthost kullanmalıyım?
Sunucu IP adresleri çoğu zaman itibar listelerinde düşük puanlıdır veya 25. port sağlayıcı tarafından engellenir. Kimliği doğrulanmış güvenilir bir röle, teslim edilebilirliği artırır ve SPF/DKIM yönetimini kolaylaştırır.
Sunucumun açık röle olup olmadığını nasıl anlarım?
Postfix yalnızca loopback üzerinde dinliyorsa dışarıdan kimse posta aktaramaz. Dışarıdan 25. porta bağlantı kurulamıyorsa ve mynetworks yalnızca yerel ağı içeriyorsa açık röle riski yoktur.
Parolayı güvenle nasıl saklarım?
sasl_passwd dosyasına yalnızca root okuma izni verin ve mümkünse tam hesap parolası yerine yalnızca gönderim yetkisi olan bir uygulama anahtarı kullanın. Dosyayı yedeklerken de aynı izin kısıtlarını koruyun.
İlgili sözlük terimleri
Bu kategorideki diğer rehberler
- logrotate yapılandırması: günlük döndürme, sıkıştırma ve saklamalogrotate ile günlük dosyalarını döndürme, sıkıştırma ve saklama süresini ayarlama; özel uygulama günlükleri için yapılandırma yazma, test etme ve sık hataları çözme rehberi.
- GoAccess ile Nginx/Apache web log analiziGoAccess ile Nginx ve Apache erişim günlüklerini terminalde ve HTML rapor olarak analiz etme, log formatı seçimi, gz arşivlerini okuma, zamanlanmış rapor ve erişim koruması rehberi.
- Memcached kurulumu ve güvenliğiMemcached önbellek sunucusunu Debian ve RHEL tabanlı sistemlere kurma, UDP kapatma, bind adresi ve güvenlik duvarıyla erişimi kısıtlama ve SASL notlarını içeren güvenli kurulum rehberi.
- PostgreSQL kurulumu ve güvenli yapılandırmaPostgreSQL kurulumu ve güvenli yapılandırma: paket kurulumu, listen_addresses, pg_hba.conf, scram-sha-256, en az yetkili rol, yedekleme ve doğrulama adımları.