SMTP / e-posta sunucuları için yük dengeleme yapabilir miyim?
Kısa cevap
Evet, L7 TCP vService ile. 25 ve 587 portları frontend'de TCP protokolüyle olduğu gibi iletilir; STARTTLS e-posta sunucusunda gerçekleşir. 465 portundaki SMTPS istenirse ayrı bir vService'te TCP + TLS ile TR7'de sonlandırılır. En önemli nokta istemci IP'sidir: relay kısıtları, SPF ve istenmeyen posta denetimleri gerçek IP'ye dayandığı için sunucunun TR7'nin değil istemcinin IP'sini görmesi sağlanır. Bunun iki yolu vardır: Kurum Servisinde SNAT → Use Client IP ya da e-posta sunucusu destekliyorsa Proxy Protocol.
Sorun: E-posta Sunucusu Neden İstemci IP'sini Görmeli?
L7 TCP vService bağlantıyı TR7'de karşıladığı için e-posta sunucusu varsayılan olarak bütün bağlantıları TR7'nin IP'sinden gelmiş gibi görür. E-posta sunucuları ise hangi adreslerin posta aktarabileceğine (relay), SPF kontrolüne ve kara liste denetimine istemci IP'sine bakarak karar verir. Bütün trafik tek bir iç IP'den geliyor görünürse bu denetimler çalışmaz; relay kuralları iç ağa izin veriyorsa sunucu dışarıdan gelen postayı da aktarmaya başlayabilir.
Çözüm: İki Yöntem
İki yöntemde de SMTP portları L7 TCP vService ile yayınlanır; fark, istemci IP'sinin e-posta sunucusuna nasıl taşındığıdır.
| Durumunuz | Uygun yöntem |
|---|---|
| Sunucunun dönüş trafiği TR7'den geçirilebiliyor (gateway ya da Spoofing) | Yöntem 1: SNAT → Use Client IP |
| E-posta sunucusu Proxy Protocol destekliyor (ör. Postfix); ağ değişmeyecek | Yöntem 2: Proxy Protocol |
Yöntem 1: SNAT → Use Client IP Önerilen
- Nasıl çalışır TR7 SMTP bağlantılarını sunuculara dağıtır; Kurum Servisindeki SNAT ayarıyla sunucuya açtığı bağlantıyı istemcinin IP'siyle kurar.
- Nerede açılır vService → Type: L7 TCP → Frontend 25 / 587 → Protocol: TCP; Kurum Servisi → SNAT → Use Client IP
- Gereksinim E-posta sunucusunun dönüş trafiğinin TR7'den geçmesi (sunucunun gateway'i TR7 ya da Spoofing)
- vService tipi L7 TCP
- Kurum Servisi tarafı Gateway TR7 yapılacaksa sunucuda değiştirilir; Spoofing kullanılırsa sunucuda değişiklik gerekmez. Sunucu artık gerçek istemci IP'lerini gördüğü için relay izinleri (ör. Postfix
mynetworks) yalnızca posta aktarmasına izin verilecek ağları içerecek şekilde gözden geçirilir.
Adım adım yapılandırma
Load Balancer → Profiles → Health Checks ekranında Add butonuna tıklanır (nasıl eklenir).
Name girilir, Check Type olarak SMTP seçilir; sunucu STARTTLS gerektiriyorsa Use STARTTLS açılır.
Formun altındaki Add butonuna tıklanır.
Load Balancer → Backend Services ekranında Add butonuna tıklanır (Kurum Servisi nasıl eklenir; hangi bilgiler zorunludur?).
Backend Service Name ve Address (ör. 192.0.2.80:25) girilir; Health Check alanında 1–3. adımlarda oluşturulan profil seçilir.
Aynı formun Details bölümünde Use Frontend Port açılır; birden fazla port tek vService'te yayınlandığı için her bağlantı sunucunun aynı portuna gider.
SNAT alanında Use Client IP seçilir. Sunucunun default gateway'i TR7 değilse görünen Spoofing anahtarı açılır; cluster'da Spoofing IP VIP Condition alanında spoofing'in çalışacağı cihazı belirleyen VIP seçilir.
Formun altındaki Add (mevcut Kurum Servisinde Edit) butonuna tıklanır. Her e-posta sunucusu için 4–8. adımlar tekrarlanır.
Load Balancer → Load Balancer vService List → Add adımları izlenir; Name girilir ve Type olarak L7 TCP seçilir.
Frontend tablosuna aynı IP ile 25 / TCP ve 587 / TCP satırları eklenir. 465 (SMTPS) TLS sunucuda kalacaksa üçüncü satır 465 / TCP olarak eklenir; SMTPS'in TR7'de sonlandırılması gerekiyorsa 465 ayrı bir vService'te TCP + TLS ve sertifikayla yayınlanır. IP listede yoksa önce Network → Interfaces → Actions → Add IP ile eklenir (Frontend IP'sini neden elle yazamıyorum; listede olmayan bir IP'yi (ör. IPv6) vService'te kullanmak için ne yapmalıyım?).
Default Backend Services tablosunda 4–8. adımlarda eklenen Kurum Servisleri seçilir.
Save butonuna tıklanır. Cluster kurulumunda değişiklik varsayılan auto-sync ile eş cihaza da aktarılır; Manual Sync Mode açıksa Synchronize ile elle gönderilir.
Doğrulama
openssl s_client -starttls smtp -connect 203.0.113.70:587E-posta sunucusunun sertifikası ve 250 yanıtıE-posta sunucusunun bağlantı logunda gelen bağlantının kaynak adresine bakılır.
connect from [198.51.100.25] (istemcinin IP'si)Yöntem 2: Proxy Protocol
- Nasıl çalışır TR7, e-posta sunucusuna açtığı her bağlantının başında istemcinin IP'sini Proxy Protocol başlığıyla gönderir; sunucu bu adresi relay ve istenmeyen posta denetimlerinde kullanır.
- Nerede açılır Kurum Servisi → Proxy → Proxy (v1) ya da Proxy v2
- Gereksinim E-posta sunucusunun Proxy Protocol'ü desteklemesi ve TR7'den gelen bağlantılarda bu başlığı bekleyecek şekilde yapılandırılması
- vService tipi L7 TCP
- Kurum Servisi tarafı Gerekir: sunucu Proxy Protocol başlığını bekleyecek şekilde yapılandırılır (Postfix örneği aşağıdaki panelde). Ağda ve gateway'de değişiklik gerekmez.
Adım adım yapılandırma
Sunucu, TR7'den gelen bağlantılarda Proxy Protocol başlığı bekleyecek şekilde yapılandırılır (aşağıdaki panel). Sunucu hazırlanmadan TR7'de Proxy açılırsa bağlantılar başarısız olur.
Load Balancer → Profiles → Health Checks ekranında Add butonuna tıklanır.
Name girilir ve Check Type olarak TCP seçilir. TR7'nin health check'leri Proxy Protocol başlığı göndermez; başlık bekleyen portta SMTP health check reddedilir. TCP yerine, Kurum Servisinde Use Different IP for Health Check ile Proxy Protocol beklemeyen ayrı bir port da denetlenebilir.
Formun altındaki Add butonuna tıklanır.
Load Balancer → Backend Services ekranında Add butonuna tıklanır.
Backend Service Name ve Address girilir; Health Check alanında 2–4. adımlarda oluşturulan profil seçilir.
Formun Details bölümünde Use Frontend Port açılır.
Proxy alanında sunucunun beklediği sürüm (Proxy ya da Proxy v2) seçilir; varsayılan No Proxy'dir. SNAT Default kalır.
Formun altındaki Add (mevcut Kurum Servisinde Edit) butonuna tıklanır. Her e-posta sunucusu için 5–9. adımlar tekrarlanır.
Yöntem 1'in 9–11. adımları uygulanır: Type L7 TCP, aynı IP ile 25 / TCP ve 587 / TCP (varsa 465 / TCP) satırları ve Kurum Servisleri.
Save butonuna tıklanır. Cluster kurulumunda değişiklik varsayılan auto-sync ile eş cihaza da aktarılır.
Ayar, Postfix'in main.cf dosyasına yazılır ve Postfix yeniden yüklenir; haproxy değeri Proxy Protocol v1 ve v2 başlıklarını kabul eder (Postfix · smtpd_upstream_proxy_protocol).
# main.cf
smtpd_upstream_proxy_protocol = haproxyYalnızca TR7'den gelen bağlantılar
Bu ayar açık olan porta yalnızca TR7'nin bağlanabilmesi sağlanır; Proxy Protocol başlığını doğrudan gönderebilen bir istemci, kendini başka bir IP'den geliyormuş gibi gösterebilir.
Doğrulama
İstemciden openssl s_client -starttls smtp -connect 203.0.113.70:587 ile bağlanılır ve e-posta sunucusunun bağlantı loguna bakılır.
connect from [198.51.100.25] (istemcinin IP'si)Sık Yapılan Hatalar
- Use Frontend Port'u açmamak. 25, 587 ve 465 aynı vService'teyken Kurum Servisinin Address'teki tek portu kullanılır; bütün bağlantılar aynı porta gider.
- SNAT'ı varsayılanda bırakmak. Sunucu bütün bağlantıları TR7'nin IP'sinden görür; relay kuralları iç ağa izin veriyorsa sunucu dışarıdan gelen postayı da aktarabilir.
- Use Client IP'yi dönüş yolunu hazırlamadan açmak. Sunucunun cevapları TR7'yi atlarsa SMTP bağlantıları tamamlanmaz; gateway TR7 yapılır ya da Spoofing açılır.
- 25 ya da 587'de TCP + TLS seçmek. STARTTLS bağlantının içinde sonradan başlar; TR7'de sonlandırılamaz.
- Proxy Protocol'ü desteklemeyen sunucuda açmak. Desteklemeyen sunucu başlığı SMTP komutu sanar ve bağlantılar bozulur.
Dokümantasyonda nasıl yapılır
