Server, X-Powered-By gibi sunucu bilgisi veren header'ları nasıl gizlerim?
Kısa cevap
En kısa yol Manage HTTP Security Headers aksiyonunda Response Headers listesinden Remove server fingerprints(Server, X-Powered-By etc.) seçeneğini işaretlemektir; bu seçenek Server, X-Powered-By, X-AspNet-Version ve X-AspNetMvc-Version başlıklarını bütün yanıtlardan kaldırır. Başka başlıklar ya da koşula bağlı silme için On Response aşamasında Delete HTTP Header, başlığı koruyup değerini gizlemek için Set HTTP Header ya da Replace HTTP Header Content kullanılır.
Sorun: Yanıtlar Sunucu Yazılımını ve Sürümünü Ele Veriyor
Web sunucuları ve uygulama çatıları yanıtlara Server: Apache/2.4.41 (Ubuntu) ya da X-Powered-By: PHP/7.4 gibi başlıklar ekler. Bu bilgiler yazılımın ve sürümünün dışarıdan görülmesini sağlar; güvenlik denetimleri de bu başlıkların kaldırılmasını ister. Kurum Servislerinin yapılandırmasına tek tek dokunmadan, yanıt TR7'den geçerken başlıklar kaldırılır.
Çözüm: Dört Yöntem
Yöntemlerin hepsi HTTP vService'te, Kurum Servisinden dönen yanıtlara uygulanır; aksiyon vService'in Actions alanına eklenince devreye girer.
| Durumunuz | Uygun yöntem |
|---|---|
| Yaygın parmak izi başlıklarını tek seçimle kaldırmak | Yöntem 1: Manage HTTP Security Headers |
| Başka başlıklar ya da koşula bağlı silme | Yöntem 2: Delete HTTP Header |
| Başlık kalsın, değeri sabit olsun | Yöntem 3: Set HTTP Header |
| Yalnızca sürüm bilgisini atmak | Yöntem 4: Replace HTTP Header Content |
Yöntem 1: Manage HTTP Security Headers Önerilen
- Nasıl çalışır Tek seçenek dört parmak izi başlığını bütün yanıtlardan kaldırır; aksiyon koşul almaz. Aynı aksiyonda güvenlik başlıkları da seçilebilir.
- Nerede açılırLoad Balancer → Actions → Manage HTTP Security Headers → Response Headers
- Gereksinim En az bir seçim
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Actions → Add tıklanır (nasıl eklenir).
Action Name girilir, Action Type = Manage HTTP Security Headers seçilir.
Response Headers listesinden Remove server fingerprints(Server, X-Powered-By etc.) işaretlenir.
Add tıklanır.
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit tıklanır.
Save tıklanır. Değişiklik açık bağlantılar kopmadan uygulanır; cluster'da varsayılan auto-sync ile eş cihaza da gönderilir (Manual Sync Mode açıksa Synchronize ile).
Doğrulama
curl -skI https://www.example.com/ | grep -iE '^(server|x-powered-by|x-aspnet)'
Çıktı boşvService'te Debug açıkken Debug Mode Logs kaydının Response sekmesine bakılır.
Server ve X-Powered-By kırmızı satır, çöp kutusu işaretiYöntem 2: Delete HTTP Header
- Nasıl çalışır Adı yazılan başlık yanıttan silinir; koşulla yalnızca belirli yanıtlara uygulanabilir.
- Nerede açılırLoad Balancer → Actions → Delete HTTP Header
- Gereksinim Her başlık için ayrı aksiyon
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Actions → Add tıklanır.
Action Type = Delete HTTP Header seçilir.
Execution Level = On response (varsayılan On request; kayıttan sonra değiştirilemez), Header to Delete = X-Generator. Koşula bağlı silmek için Conditions alanında koşul seçilir (hata sayfalarında framework bilgisi).
Add tıklanır; silinecek her başlık için 1–4. adımlar tekrarlanır.
vService Edit ile açılır.
Details → Actions alanında aksiyonlar seçilir.
Save tıklanır.
Doğrulama
curl -skI https://www.example.com/ | grep -i '^x-generator'
Çıktı boşYöntem 3: Set HTTP Header
- Nasıl çalışır Başlık kalır, değeri sabit bir metinle değiştirilir; aynı adlı başlığın bütün tekrarları tek değere iner.
- Nerede açılırLoad Balancer → Actions → Set HTTP Header
- Gereksinim Yok
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Actions → Add tıklanır.
Action Type = Set HTTP Header seçilir.
Execution Level = On response, Header to Edit = Server, Header Content = web.
Add tıklanır.
vService Edit ile açılır.
Details → Actions alanında aksiyon seçilir.
Save tıklanır.
Doğrulama
curl -skI https://www.example.com/
Server: webYöntem 4: Replace HTTP Header Content
- Nasıl çalışır Kalıp eşleşirse başlık değeri yeniden yazılır; grupla yakalanan yazılım adı korunur, sürüm atılır.
- Nerede açılırLoad Balancer → Actions → Replace HTTP Header Content
- Gereksinim Kalıp büyük/küçük harfe duyarlıdır
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Actions → Add tıklanır.
Action Type = Replace HTTP Header Content seçilir.
Execution Level = On response, Header to Replace = Server, Regex to Match = ^([^/]+)/.*$, Replacement Content = \1 (Header değerini regex ile değiştirebilir miyim?).
Add tıklanır.
vService Edit ile açılır.
Details → Actions alanında aksiyon seçilir.
Save tıklanır.
Kalıbın örnek değerlerdeki sonucu:
| Server değeri | Sonuç |
|---|---|
Apache/2.4.41 (Ubuntu) | Apache |
nginx/1.18.0 | nginx |
Microsoft-IIS/10.0 | Microsoft-IIS |
cloudflare, Apache (sürümsüz) | Eşleşmez; değişmez |
Doğrulama
curl -skI https://www.example.com/
Server: ApacheSık Yapılan Hatalar
- Delete HTTP header'da Execution level'ı On request bırakmak. Başlık istekten silinir, yanıtta kalır; Execution level kayıttan sonra değiştirilemediği için aksiyon On response ile yeniden oluşturulur.
- Joker karakterle toplu silme beklemek. Delete HTTP Header adı birebir eşleştirir (büyük/küçük harf farkı gözetilmez);
X-*gibi desenler çalışmaz. - Manage HTTP security headers'a koşul eklemeye çalışmak. Bu aksiyonun Conditions alanı yoktur ve bütün yanıtlara uygulanır; koşula bağlı silme için Delete HTTP Header kullanılır.
- TR7'nin kendi ürettiği yanıtlarda etki beklemek. Başlıklar Kurum Servisinden dönen yanıtlardan kaldırılır; TR7'nin ürettiği engelleme, yönlendirme ve hata yanıtları zaten bu başlıkları taşımaz.
Dokümantasyonda nasıl yapılır
