Nginx Güvenlik Başlıkları (Security Headers) Yapılandırması
Nginx'te HTTP güvenlik başlıkları: HSTS, X-Frame-Options, Content-Security-Policy, Referrer-Policy ve Permissions-Policy yapılandırması.
Nginx Güvenlik Başlıkları Nedir?
HTTP güvenlik başlıkları (security headers), web sunucusunun tarayıcıya yanıtıyla birlikte gönderdiği ve tarayıcının içeriği nasıl işleyeceğini belirleyen özel HTTP başlıklarıdır. Bu başlıklar; XSS (Cross-Site Scripting) saldırıları, clickjacking, MIME sniffing ve diğer web güvenlik açıklarına karşı ekstra koruma katmanı oluşturur.
Güvenlik başlıkları test etmek için securityheaders.com ve mozilla observatory gibi ücretsiz araçlar kullanabilirsiniz. Bu rehberde Nginx üzerinde kritik güvenlik başlıklarının nasıl yapılandırılacağını öğreneceksiniz.
Nginx'te Güvenlik Başlıkları Ekleme Yöntemleri
Güvenlik başlıklarını iki yerden ekleyebilirsiniz:
sudo nano /etc/nginx/conf.d/security-headers.conf
1. HTTP Strict Transport Security (HSTS)
HSTS, tarayıcıyı sitenize yalnızca HTTPS üzerinden bağlanmaya zorlar. Bir kez bu başlığı gördükten sonra tarayıcı, HTTP isteklerini otomatik olarak HTTPS'e yönlendirir:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Parametre açıklamaları:
- max-age=31536000: 1 yıl boyunca HTTPS zorunlu
- includeSubDomains: Alt domainlere de uygulanır
- preload: Tarayıcıların HSTS preload listesine eklenebilir
2. X-Frame-Options
Sitenizin bir iframe içinde yüklenmesini engeller (clickjacking koruması):
add_header X-Frame-Options "SAMEORIGIN" always;
# DENY: Hiçbir yerde iframe'e izin verme
# SAMEORIGIN: Sadece aynı domain iframe kullanabilir
# ALLOW-FROM https://trusted.com: Belirli siteye izin ver (eski)
3. X-Content-Type-Options
Tarayıcının MIME tipini otomatik tahmin etmesini (MIME sniffing) engeller:
add_header X-Content-Type-Options "nosniff" always;
4. X-XSS-Protection
Eski tarayıcılar için yerleşik XSS filtresi (modern tarayıcılarda CSP tercih edilir):
add_header X-XSS-Protection "1; mode=block" always;
5. Content Security Policy (CSP)
CSP, hangi kaynakların yüklenebileceğini belirterek XSS saldırılarına karşı en güçlü savunmayı sağlar:
# Temel CSP (katı)
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; connect-src 'self'; frame-ancestors 'none';" always;
# WordPress için daha esnek CSP
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.google-analytics.com https://www.googletagmanager.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com; connect-src 'self' https://www.google-analytics.com;" always;
6. Referrer-Policy
Kullanıcılar sitenizden ayrıldığında Referer başlığında ne gönderileceğini kontrol eder:
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# no-referrer: Hiç referrer gönderme
# strict-origin: Sadece protokol+host (HTTPS->HTTP geçişinde hiç gönderme)
# strict-origin-when-cross-origin: Aynı origin için tam URL, cross için sadece origin
7. Permissions-Policy
Tarayıcı API'lerini (kamera, mikrofon, konum, vb.) kısıtlar:
add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()" always;
8. Cross-Origin Headers
add_header Cross-Origin-Opener-Policy "same-origin" always;
add_header Cross-Origin-Embedder-Policy "require-corp" always;
add_header Cross-Origin-Resource-Policy "same-origin" always;
Tam Yapılandırma Dosyası
sudo nano /etc/nginx/conf.d/security-headers.conf
# Sunucu sürümünü gizle
server_tokens off;
# Güvenlik başlıkları
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), microphone=(), payment=()" always;
# PHP sürümünü gizle (fastcgi_params'ta)
fastcgi_hide_header X-Powered-By;
sudo nginx -t
sudo systemctl reload nginx
Güvenlik Puanınızı Test Etme
# curl ile başlıkları kontrol et
curl -I https://example.com
# Belirli başlığı kontrol et
curl -sI https://example.com | grep -i "strict-transport"
# Tüm güvenlik başlıklarını görüntüle
curl -sI https://example.com | grep -iE "(strict|frame|content-type|xss|referrer|permissions|csp)"
Sık Karşılaşılan Sorunlar
HSTS Sonrası HTTP'ye Dönülemez
HSTS aktifleştirmeden önce sitenizin kesinlikle HTTPS çalıştığından emin olun. max-age değerini başlangıçta düşük tutun (300 saniye) ve her şeyin çalıştığından emin olduktan sonra 1 yıla çıkarın:
add_header Strict-Transport-Security "max-age=300" always; # Test için
CSP Scriptleri/Stilleri Kırıyor
# Report-Only modda test edin (engellemez, sadece raporlar):
add_header Content-Security-Policy-Report-Only "default-src 'self'; ..." always;
# Browser console'da ihlalleri görün, ardından gerçek CSP'yi aktifleştirin
Sonuç
Nginx üzerinde kritik HTTP güvenlik başlıklarını yapılandırarak web uygulamalarınızı XSS, clickjacking, MIME sniffing ve diğer tarayıcı tabanlı saldırılara karşı korudunuz. HSTS, CSP, X-Frame-Options ve Permissions-Policy kombinasyonu ile A+ güvenlik puanı alabilirsiniz.
Yorumlar
Henüz yorum yok. İlk yorumu siz yapın!