Nginx, hafif yapısı ve yüksek performansıyla en popüler web sunucularından biri. Ancak doğru yapılandırılmadığında OWASP Top 10 listesindeki güvenlik açıklarına karşı savunmasız kalabilir. Bu yazıda, Nginx'inizi bu tehditlere karşı nasıl koruyacağınızı adım adım anlatıyorum. Örnek konfigürasyonlarla desteklenmiş pratik çözümler bulacaksınız.
Genel Güvenlik İlkeleri
Herhangi bir yapılandırmaya başlamadan önce, Nginx'i güncel tutun (sürüm 1.24 veya üstü önerilir). Gereksiz modülleri devre dışı bırakın, sunucu imzasını gizleyin ve varsayılan siteleri kaldırın. Örneğin, server_tokens off; direktifi ile Nginx sürüm bilgisini HTTP başlıklarından kaldırabilirsiniz. Ayrıca, /etc/nginx/conf.d/ altındaki gereksiz dosyaları silin.
OWASP Top 10 Başlıca Tehditler ve Nginx'te Çözümler
1. Enjeksiyon (A1)
SQL, NoSQL veya OS komut enjeksiyonlarına karşı girişleri filtreleyin. Nginx seviyesinde en etkili yöntem, ModSecurity (OWASP CRS) entegrasyonudur. Ayrıca limit_req ile istek hızını sınırlayarak brute-force saldırılarını engelleyin. Örnek konfigürasyon:
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/s; location /login { limit_req zone=login burst=10 nodelay; }
Bu ayar, /login yoluna saniyede 5 istekten fazlasını engeller.
2. Kimlik Doğrulama ve Oturum Yönetimi (A2)
HTTPS zorunlu olmalı. Nginx'te ssl_protocols TLSv1.2 TLSv1.3; kullanarak eski protokolleri devre dışı bırakın. Oturum çerezlerini korumak için proxy_cookie_flag HttpOnly Secure SameSite=Lax ekleyin. Ayrıca, auth_basic ile basit yöntemlerden kaçının; OpenID Connect veya JWT doğrulaması için auth_request modülünü kullanın.
3. Hassas Verilerin Açığa Çıkması (A3)
SSL/TLS ayarlarını sıkılaştırın: ssl_ciphers HIGH:!aNULL:!MD5; ve HSTS başlığını ekleyin: add_header Strict-Transport-Security "max-age=63072000" always;. Ayrıca, add_header X-Content-Type-Options nosniff; ile MIME türü karıştırmayı önleyin. Hassas dosyaların (örneğin .env) erişimini engellemek için:
location ~ \.(env|git|svn|log)$ { deny all; return 404; }
4. XML Dış Varlıkları (XXE) (A4)
Nginx doğrudan XML ayrıştırmasa da, arka uç uygulamalarına yönelik XXE saldırılarını engellemek için proxy_request_buffering ile isteği tamponlayın ve client_max_body_size ile boyut sınırlayın. OWASP CRS kuralları XXE'yi tespit eder.
5. Erişim Kontrolü Kırılmaları (A5)
location bloklarıyla hassas alanları kısıtlayın. Yalnızca gerekli IP adreslerine izin verin:
location /admin { allow 192.168.1.0/24; deny all; }
Ayrıca, map ile dinamik erişim kontrolü yapabilirsiniz.
6. Güvenlik Yanlış Yapılandırmaları (A6)
Varsayılan yapılandırmayı kullanmayın. ssl_session_tickets off;, ssl_buffer_size 4k; gibi ayarlarla performans ve güvenlik arasında denge kurun. Hata sayfalarını özelleştirin: error_page 404 /custom_404.html;. Ayrıca, add_header X-Frame-Options SAMEORIGIN; ile clickjacking'i önleyin.
7. Cross-Site Scripting (XSS) (A7)
İçerik Güvenlik Politikası (CSP) başlığını ekleyin:
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'" always;
Diğer başlıklar: X-XSS-Protection 1; mode=block ve Referrer-Policy no-referrer. Bu ayarlar, tarayıcı kaynaklı XSS saldırılarını azaltır.
8. Güvensiz Deserialization (A8)
Nginx doğrudan deserialization yapmasa da, arka uca giden isteklerde boyut sınırı koyun: client_body_buffer_size 128k;. Ayrıca, proxy_request_buffering off ile akışı kesintiye uğratın.
9. Bilinen Zafiyetleri Olan Bileşenler (A9)
Nginx düzenli güncellenmelidir. CentOS/RHEL için yum update nginx, Ubuntu/Debian için apt upgrade nginx. Ayrıca, kullanmadığınız modülleri derleme aşamasında devre dışı bırakın. Nginx'in kendi güvenlik bültenlerini takip edin.
10. Yetersiz Loglama ve İzleme (A10)
Log formatını özelleştirerek saldırı tespitini kolaylaştırın:
log_format detailed '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log detailed;
Fail2ban ile şüpheli IP'leri otomatik engelleyin. Ayrıca, error_log seviyesini warn olarak ayarlayın.
Ek Önlemler ve Sonuç
Yukarıdaki yapılandırmaları tek başına uygulamak yeterli değil. Bir Web Uygulama Güvenlik Duvarı (WAF) olarak ModSecurity + OWASP CRS kullanmanızı öneririm. Örneğin, Nginx'i modsecurity ile derler veya Nginx Plus'ın yerleşik WAF'ını tercih edebilirsiniz. Ayrıca, düzenli güvenlik taramaları yapın ve penetration testleri ihmal etmeyin.
Son olarak, HostingServer.com.tr olarak, bu ayarların üretim ortamında dikkatlice test edilmesini tavsiye ediyoruz. Her sunucu farklıdır; kendi ihtiyaçlarınıza göre ince ayar yapın. Unutmayın, güvenlik bir ürün değil, süreçtir.