Nginx ile Web Sunucunuzu Güçlendirin: Temel Güvenlik Başlıkları Rehberi 
Selam sistemciler!
Bugün terminalin tozunu alıp, Nginx konfigürasyonlarımızın derinliklerine biraz daha iniyoruz. Konumuz, genellikle arka planda sessizce çalışan ama güvenliğimiz için kritik öneme sahip olan HTTP Güvenlik Başlıkları. Bu başlıklar, tarayıcılara web sitenizi nasıl daha güvenli bir şekilde sunacaklarını ve kullanıcı verilerini nasıl koruyacaklarını söyleyen küçük ama etkili talimatlardır. Gelin, bu gizli kahramanları Nginx'imize nasıl ekleyeceğimizi birlikte görelim. 
Neden Bu Başlıklar Önemli?
Basitçe söylemek gerekirse, bu başlıklar Cross-Site Scripting (XSS), clickjacking gibi yaygın saldırı vektörlerine karşı ek bir koruma katmanı sağlar. Ayrıca, SSL/TLS kullanımını zorlayarak verilerin şifrelenmesini garanti altına alırlar. Sadece birkaç satır konfigürasyonla, sitenizin güvenlik duruşunu ciddi oranda iyileştirebilirsiniz.
Hazırlık: Nginx Konfigürasyon Dosyanızı Bulun
İşe, bu değişiklikleri yapacağımız dosyayı bularak başlayalım. Genellikle bu, sanal host (site) konfigürasyonunuzdur. Örneğin:
Ya da tüm sitelerinizde global olarak uygulamak isterseniz `nginx.conf` veya `/etc/nginx/conf.d/` altındaki bir dosyayı da kullanabilirsiniz. Değişiklik yaptıktan sonra her zaman Nginx'i test etmeyi ve yeniden yüklemeyi unutmayın:
Ekleyeceğimiz Temel Güvenlik Başlıkları
Şimdi, en yaygın ve faydalı başlıkları tek tek inceleyelim. Bu başlıkları, Nginx konfigürasyonunuzdaki `server { ... }` bloğunun içine, genellikle `location / { ... }` bloğundan önce ekleyeceğiz.
Nginx Konfigürasyon Örneği
İşte yukarıdaki başlıkları içeren örnek bir konfigürasyon bloğu:
Başlıkları Test Etmek
Ayarlarınızı kaydettikten ve Nginx'i yeniden yükledikten sonra, başlıkların doğru şekilde eklendiğini kontrol etmek önemlidir.
Bunun için komut satırından `curl` aracını kullanabilirsiniz:
Çıktıda, eklediğimiz `X-Frame-Options`, `Strict-Transport-Security` gibi başlıkları görmelisiniz.
Önemli Uyarılar
İşte bu kadar! Birkaç basit satırla web sunucunuzun güvenlik duvarlarını biraz daha yükseltmiş olduk. Bu başlıklar, sihirli bir değnek değil, ancak savunmanızı güçlendiren sağlam birer tuğla.
Peki ya siz? Bu güvenlik başlıklarından hangilerini zaten kullanıyorsunuz, ya da eklerken karşılaştığınız ilginç bir sorun oldu mu? Yorumlarda deneyimlerinizi paylaşın, birlikte öğrenelim!
Selam sistemciler!
Neden Bu Başlıklar Önemli?
Basitçe söylemek gerekirse, bu başlıklar Cross-Site Scripting (XSS), clickjacking gibi yaygın saldırı vektörlerine karşı ek bir koruma katmanı sağlar. Ayrıca, SSL/TLS kullanımını zorlayarak verilerin şifrelenmesini garanti altına alırlar. Sadece birkaç satır konfigürasyonla, sitenizin güvenlik duruşunu ciddi oranda iyileştirebilirsiniz.
Hazırlık: Nginx Konfigürasyon Dosyanızı Bulun
İşe, bu değişiklikleri yapacağımız dosyayı bularak başlayalım. Genellikle bu, sanal host (site) konfigürasyonunuzdur. Örneğin:
Bash:
sudo nano /etc/nginx/sites-available/siteniz.com
Bash:
sudo nginx -t
sudo systemctl reload nginx
Ekleyeceğimiz Temel Güvenlik Başlıkları
Şimdi, en yaygın ve faydalı başlıkları tek tek inceleyelim. Bu başlıkları, Nginx konfigürasyonunuzdaki `server { ... }` bloğunun içine, genellikle `location / { ... }` bloğundan önce ekleyeceğiz.
- X-Frame-Options: Sitenizin bir `<frame>`, `<iframe>`, `<embed>` veya `<object>` içinde yüklenmesini engelleyerek clickjacking saldırılarına karşı koruma sağlar.
- X-Content-Type-Options: Tarayıcının, sunucunun belirttiği MIME türünü (`Content-Type`) yok sayıp dosyayı "sniff" ederek (tahmin ederek) farklı türde yorumlamasını engeller. Bu, bazı XSS ve MIME türü karıştırma saldırılarını önler.
- Referrer-Policy: Tarayıcının, bir kullanıcı sizden başka bir siteye tıkladığında veya bir kaynak istediğinde, HTTP Referer başlığında ne kadar bilgi göndereceğini kontrol eder. Bu, hassas URL yol bilgilerinin sızdırılmasını engeller.
- Strict-Transport-Security (HSTS): Tarayıcıya, bu siteye sadece HTTPS üzerinden bağlanması gerektiğini ve gelecekteki tüm HTTP isteklerini otomatik olarak HTTPS'ye yönlendirmesi gerektiğini söyler. SSL/TLS zorunluluğu getirir.

Nginx Konfigürasyon Örneği
İşte yukarıdaki başlıkları içeren örnek bir konfigürasyon bloğu:
NGINX:
server {
listen 443 ssl http2;
server_name siteniz.com www.siteniz.com;
# SSL sertifika ayarları burada olacak
ssl_certificate /etc/ssl/certs/siteniz.com.crt;
ssl_certificate_key /etc/ssl/private/siteniz.com.key;
# GÜVENLİK BAŞLIKLARI
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Not: 'always' parametresi, tüm yanıt kodları (404, 500 vb.) için de başlığın eklenmesini sağlar.
# Diğer konfigürasyonlar...
root /var/www/siteniz.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
Başlıkları Test Etmek
Ayarlarınızı kaydettikten ve Nginx'i yeniden yükledikten sonra, başlıkların doğru şekilde eklendiğini kontrol etmek önemlidir.
Bash:
curl -I https://siteniz.com
Önemli Uyarılar
- HSTS (Strict-Transport-Security): Bu başlığı eklemeden önce sitenizin TÜM sayfalarında HTTPS'nin sorunsuz çalıştığından emin olun. Aksi takdirde, tarayıcılar sitenize HTTP üzerinden erişimi tamamen engelleyebilir. İlk testler için `max-age` değerini düşük (ör. 300 saniye) tutabilirsiniz.
- Content-Security-Policy (CSP): Bu, çok güçlü ama karmaşık bir başlıktır. Yanlış yapılandırılırsa sitenizi tamamen kırabilir. Bu rehberde temel başlıklara odaklandık, CSP için ayrı ve dikkatli bir araştırma yapmanızı öneririm.
- Her zaman değişiklik yaptıktan sonra `sudo nginx -t` komutuyla konfigürasyonunuzun sözdizimini kontrol edin.
İşte bu kadar! Birkaç basit satırla web sunucunuzun güvenlik duvarlarını biraz daha yükseltmiş olduk. Bu başlıklar, sihirli bir değnek değil, ancak savunmanızı güçlendiren sağlam birer tuğla.
Peki ya siz? Bu güvenlik başlıklarından hangilerini zaten kullanıyorsunuz, ya da eklerken karşılaştığınız ilginç bir sorun oldu mu? Yorumlarda deneyimlerinizi paylaşın, birlikte öğrenelim!