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?
HTTP güvenlik başlıkları, tarayıcıya sitenizin nasıl işleneceğini söyleyerek XSS, tıklama hırsızlığı (clickjacking) ve protokol düşürme saldırılarının etkisini azaltır. Bu rehberde Nginx ve Apache için HSTS, CSP ve diğer temel güvenlik başlıklarını ekleyeceğiz; riskli olanları (HSTS ve CSP) kademeli devreye alacağız. Tahmini süre 30-45 dakikadır.
Bu başlıklar sitenizin çalışmasını etkileyebileceği için özellikle CSP’yi önce yalnızca raporlama modunda deneyin. Yanlış bir CSP, betik veya görsellerin yüklenmesini engelleyebilir.
Gereksinimler
- Nginx veya Apache çalıştıran bir sunucu ve root/sudo yetkisi
- Geçerli bir HTTPS sertifikası (HSTS için zorunlu)
- Sitenizde kullanılan dış kaynakların (CDN, analitik, yazı tipi) listesi
- Yapılandırma dosyası yedeği
- Alt alan adlarınızın tamamının HTTPS’i desteklediğinin bilgisi
Adım adım güvenlik başlıkları kurulumu
1. Mevcut başlıkları kontrol edin
curl -sI https://alanadiniz.com2. Önce yapılandırmayı yedekleyin
# Nginx
sudo cp -a /etc/nginx /root/nginx-yedek
# Apache (Debian/Ubuntu)
sudo cp -a /etc/apache2 /root/apache2-yedek3. Temel başlıkları ekleyin (Nginx)
Nginx’te başlıkları ilgili server bloğuna ekleyin. always parametresi, hata yanıtlarında da başlığın gönderilmesini sağlar.
add_header X-Content-Type-Options nosniff always;
add_header X-Frame-Options SAMEORIGIN always;
add_header Referrer-Policy strict-origin-when-cross-origin always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;Not: Nginx’te bir location bloğunda kendi add_header satırınız varsa üst düzeydeki başlıklar o blokta devralınmaz. Gerekirse başlıkları ilgili blokta tekrar yazın.
4. Temel başlıkları ekleyin (Apache)
Apache’de mod_headers modülü gerekir.
sudo a2enmod headers # Debian/Ubuntu (AlmaLinux/Rocky’de varsayılan olarak yüklüdür)Header always set X-Content-Type-Options nosniff
Header always set X-Frame-Options SAMEORIGIN
Header always set Referrer-Policy strict-origin-when-cross-origin
Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"5. HSTS’yi kademeli açın
HSTS (Strict-Transport-Security), tarayıcıya siteye yalnızca HTTPS ile bağlanmasını söyler. UYARI: HSTS tarayıcıda belirtilen süre boyunca saklanır; HTTPS bozulursa kullanıcılar siteye erişemez. Önce kısa bir süreyle başlayın.
# Aşama 1: test (5 dakika)
add_header Strict-Transport-Security "max-age=300" always;
# Aşama 2: tüm alt alan adları HTTPS ise, daha uzun süre
# add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;Apache için karşılığı: Header always set Strict-Transport-Security "max-age=300". HSTS başlığını yalnızca HTTPS (443) server veya VirtualHost bloğuna ekleyin; tarayıcılar HTTP üzerinden gelen HSTS başlığını yok sayar. preload seçeneğini yalnızca ne yaptığını tam bilerek ve geri dönüşün zor olduğunu kabul ederek ekleyin.
6. CSP’yi önce yalnızca raporlama modunda deneyin
İçerik Güvenliği Politikası (CSP), hangi kaynaklardan betik, stil ve görsel yüklenebileceğini belirler. Önce Content-Security-Policy-Report-Only ile yayınlayın; tarayıcı konsolunda ihlalleri görürsünüz ancak hiçbir şey engellenmez.
add_header Content-Security-Policy-Report-Only "default-src 'self'; img-src 'self' data: https:; script-src 'self'; style-src 'self' 'unsafe-inline'" always;Tarayıcı geliştirici araçları konsolundaki ihlal mesajlarına göre izinli kaynakları ekleyin. Sorunsuz hale geldiğinde başlık adını Content-Security-Policy yaparak zorlayın. Satır içi betikleri tamamen engellemek için nonce veya hash kullanımı öneren güncel CSP rehberlerine bakın.
7. Yapılandırmayı sınayın ve yeniden yükleyin
sudo nginx -t && sudo systemctl reload nginx
# veya Apache (Debian/Ubuntu)
sudo apachectl configtest && sudo systemctl reload apache2
# veya Apache (AlmaLinux/Rocky)
sudo apachectl configtest && sudo systemctl reload httpdDoğrulama
curl -sI https://alanadiniz.com | grep -iE 'strict-transport|content-security|x-frame|x-content-type|referrer|permissions'Beklenen sonuç: eklediğiniz başlıklar çıktıda görünür. Tarayıcı geliştirici araçlarının ağ sekmesinden de başlıkları ve konsolda CSP ihlallerini inceleyebilirsiniz. Üçüncü taraf başlık tarama araçlarıyla da genel bir not alabilirsiniz.
Sık karşılaşılan sorunlar
- Başlıklar görünmüyor: Başlığı eklediğiniz bloğun doğru
serverolduğunu ve yapılandırmanın yeniden yüklendiğini kontrol edin; önbellek veya CDN eski yanıtı sunuyor olabilir. - Site CSP sonrası bozuldu: Raporlama moduna dönün ve konsoldaki ihlalleri tek tek çözün.
- HSTS sonrası bir alt alan açılmıyor: O alt alan HTTPS desteklemiyordur; sertifikayı ekleyin veya
includeSubDomainsifadesini kaldırın. - Başlıklar iki kere görünüyor: Hem uygulama hem sunucu aynı başlığı ekliyordur; birini kaldırın.
Güvenlik ve bakım notları
- HSTS süresini kademeli artırın ve alt alan adlarını önceden denetleyin.
- CSP’yi yeni bir üçüncü taraf kaynak eklediğinizde güncelleyin.
- Gereksiz
unsafe-inlineveunsafe-evalifadelerinden mümkün olduğunca kaçının. - Başlıkları yapılandırma yönetimi (Git, otomasyon) ile sürümleyin.
- Eski ve kaldırılan başlıklara (örn. X-XSS-Protection) güvenmeyin.
- Sertifika yenileme sürecinizi izleyin; süresi dolan sertifika HSTS altında siteyi tamamen kapatır.
Sık sorulan sorular
HSTS’yi geri alabilir miyim?
Başlığı kaldırabilirsiniz ancak tarayıcılar daha önce aldıkları süre dolana kadar HTTPS’i zorlamaya devam eder. Bu yüzden önce kısa max-age ile başlamak önemlidir.
CSP olmadan site güvensiz mi olur?
Hayır, CSP ek bir savunma katmanıdır. Girdi doğrulama ve çıktı kodlaması gibi temel önlemlerin yerine geçmez.
Kontrol panelinde bu başlıkları nasıl eklerim?
Birçok panel, alan adı başına ek web sunucusu yönergesi eklemeye izin verir. Panelin kendi belgesine bakarak Nginx veya Apache ek yönergeler bölümünü kullanın.
İlgili sözlük terimleri
Bu kategorideki diğer rehberler
- AIDE ile dosya bütünlüğü izlemeAIDE ile sunucudaki dosya değişikliklerini izleyin: kurulum, veritabanı oluşturma, kural yazma, düzenli denetim, güncelleme ve sonuçları güvenle yorumlama adımları.
- Dosya yükleme güvenliği: uzantı, MIME, depolama ve çalıştırma engeliDosya yükleme formlarını güvenli hale getirin: uzantı beyaz listesi, gerçek MIME denetimi, rastgele dosya adı, web kökü dışında depolama ve yükleme dizininde betik çalıştırmayı engelleme.
- XSS önleme ve CSP ile site savunmasıSiteler arası betik çalıştırma (XSS) saldırılarını çıktı kaçışı, güvenli çerezler ve Content-Security-Policy başlığıyla önleyin; Nginx ve Apache örnekleri ve Report-Only ile güvenli geçiş.
- SQL enjeksiyonunu önleme: hazır sorgular (prepared statements) ve doğrulama (PHP PDO örnekleriyle)SQL enjeksiyonunu PHP PDO hazır sorgularıyla önleyin: parametre bağlama, beyaz liste ile ORDER BY, IN listeleri, en az yetkili veritabanı kullanıcısı ve saldırı denemesiyle doğrulama.