SNI ile Host Header'ı uyuşmayan istekleri (domain fronting) reddedebilir miyim (SNI/Host Validation)?
Kısa cevap
Evet. TLS Security Profile'daki SNI/Host Validation açılıp profil HTTP vService'e atanır; TLS el sıkışmasındaki SNI ile HTTP Host başlığı (port hariç, büyük/küçük harf duyarsız) uyuşmayan istekler 421 Misdirected Request ile reddedilir. SNI göndermeyen istemcilerde kontrol yapılmaz. Yalnızca HTTP vService'te çalışır; L7 TCP vService'te Host başlığı okunmadığı için uygulanmaz. WEB-CLI'da profil alanı --sniHostValidation ile açılır.
Sorun: Bir Alan Adının Sertifikasıyla Başka Bir Siteye Erişiliyor
Domain fronting'de istemci TLS el sıkışmasında bir alan adını (SNI) kullanır, ama HTTP isteğinde başka bir alan adını (Host) ister. Böylece güvenlik denetimleri atlatılabilir ve bir sitenin sertifikası üzerinden aynı TR7'deki başka bir siteye ulaşılabilir. SNI ile Host'un aynı olması zorunlu tutulmalıdır.
Çözüm: İki Yöntem
| Durumunuz | Uygun yöntem |
|---|---|
| Arayüzden | Yöntem 1: SNI/Host Validation |
| Komut satırından | Yöntem 2: WEB-CLI |
Yöntem 1: SNI/Host Validation Önerilen
- Nasıl çalışır Her istekte Host başlığı (port atılarak, küçük harfe çevrilerek) SNI ile karşılaştırılır; uyuşmazlıkta istek Kurum Servisine iletilmeden 421 ile reddedilir. HTTP/2'de yalnızca ilgili istek reddedilir ve tarayıcı isteği ayrı bir bağlantıyla yeniden dener; HTTP/1.1'de yanıtla birlikte bağlantı kapatılır.
- Nerede açılırCertificates & PKI → TLS Security Profiles → Frontend-only Settings → SNI/Host Validation
- Gereksinim HTTP vService'te Encrypted (HTTPS) frontend satırı
- vService tipi HTTP
Adım adım yapılandırma
Sol alttaki TR7 logosuyla Configuration Menu açılır; Certificates & PKI → TLS Security Profiles ekranında vService'in kullandığı profil seçilip Edit tıklanır; yeni profil için Add tıklanır ve Security Profile Name girilir (nasıl eklenir).
Frontend-only Settings bölümünde SNI/Host Validation açılır (varsayılan kapalı).
Formun altındaki Edit tıklanır (yeni profilde Add). Profil zaten vService'lere atanmışsa ayar hepsine uygulanır ve 4–6. adımlar atlanır.
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit tıklanır.
Details panelinde Frontend Settings altındaki SSL Security kutusu işaretlenir ve 3. adımdaki profil seçilir (vService'te profil seçimi). Kutu yalnızca en az bir frontend satırında şifreli protokol seçiliyken listelenir.
Save tıklanır. Cluster kurulumunda varsayılan auto-sync ile değişiklik eş cihaza da gönderilir; Manual Sync Mode açıksa eş cihaza elle gönderilir.
Doğrulama
SNI'si a.example.com olan bağlantıda farklı ve aynı Host başlığıyla birer istek gönderilir.
Komut: curl -sk https://a.example.com/ -H "Host: b.example.com" -o /dev/null -w "%{http_code}" · curl -sk https://a.example.com/ -H "Host: a.example.com:443" -o /dev/null -w "%{http_code}"
İlki 421 · ikincisi normal yanıt (port farkı uyuşmazlık sayılmaz)Yöntem 2: WEB-CLI
- Nasıl çalışır Profilin SNI/Host Validation alanı
--sniHostValidationile açılır; profil vService'e atanmamışsa--sslSecurityile atanır. - Nerede açılır TR7 WEB-CLI →
lb ssl-security update·lb service update - Gereksinim WEB-CLI erişimi; HTTP vService'te Encrypted (HTTPS) frontend satırı
- vService tipi HTTP
Adım adım yapılandırma
<profil> yerine profil Tab ile seçilir (Bağlantı davranışı):
lb ssl-security update id <profil> --sniHostValidation trueProfil vService'te zaten seçiliyse bu adım atlanır; <vService> yerine HTTP vService Tab ile seçilir:
lb service update id <vService> --sslSecurity <profil>Doğrulama
Komut: lb ssl-security show <profil>
sniHostValidation trueSık Yapılan Hatalar
- L7 TCP vService'te beklemek. Host başlığı yalnızca HTTP vService'te okunur; profilde açık olsa da L7 TCP vService'te uygulanmaz.
- SNI göndermeyen istemcilerin reddedileceğini sanmak. SNI yoksa kontrol yapılmaz; IP adresiyle bağlanan istemciler etkilenmez.
- SSL SNI Info koşuluyla aynı işi yapmaya çalışmak. SSL SNI Info koşulu TLS'in TR7'de çözülmediği bağlantılarda eşleşir; HTTP vService'te SNI ile Host karşılaştırması için bu ayar kullanılır.
- HTTP/2 bağlantı paylaşımının kırılacağından endişe etmek. HTTP/2'de 421 yalnızca ilgili isteğe döner; tarayıcı isteği ayrı bir bağlantıyla yeniden dener.
Dokümantasyonda nasıl yapılır
