Nginx ile Web Sunucunuzu Güçlendirin: Temel Güvenlik Başlıkları Rehberi 
Selam sistemciler!
Bugün, Nginx web sunucumuzu biraz daha "sertleştirmek" için terminalin tozunu alıyoruz. Bir sunucuyu kurmak ve çalıştırmak bir şey, onu kötü niyetli isteklere karşı korumak ise bambaşka bir hikaye. Nginx, performansı kadar güçlü güvenlik özellikleri de sunar, ama bunları doğru yapılandırmak bizim elimizde.
Bu rehberde, Nginx konfigürasyon dosyalarınıza ekleyebileceğiniz, web sunucunuzu temel saldırı vektörlerine karşı koruyacak HTTP Güvenlik Başlıklarını ele alacağız. Bu başlıklar, tarayıcılara web sitenizi nasıl daha güvenli bir şekilde yükleyip çalıştıracaklarını söyleyen direktiflerdir. Hadi başlayalım!
Neden Bu Başlıklar Önemli?
Bu başlıklar, Cross-Site Scripting (XSS), clickjacking gibi saldırıları önlemeye, hassas bilgilerin sızmasını engellemeye ve modern, güvenli tarayıcı özelliklerini zorunlu kılmaya yardımcı olur. Ayrıca, güvenlik tarama araçları (SSL Labs testi gibi) ve bazı SEO değerlendirmeleri için de olumlu bir sinyaldir.
1. X-Frame-Options: Clickjacking'e Karşı Kalkan
Bu başlık, sitenizin bir `<frame>`, `<iframe>`, `<embed>` veya `<object>` içinde başka bir site tarafından yüklenip yüklenemeyeceğini belirler. Kötü amaçlı bir site, sitenizi görünmez bir çerçevede yükleyip kullanıcıları kandırarak tıklamaya zorlayabilir (clickjacking).
2. X-Content-Type-Options: MIME Tipi Karışıklığını Önleme
Sunucu, bir dosyayı (örneğin bir CSS dosyasını) `text/css` olarak belirtirse, tarayıcı onu CSS olarak yorumlar. Ancak kötü niyetli birisi, aslında JavaScript olan bir dosyayı `text/css` olarak sunabilir. Bu başlık, tarayıcının belirtilen MIME tipine sadık kalmasını ve "sniffing" (koklama) yapmamasını sağlar.
3. Referrer-Policy: Referrer Bilgisini Kontrol Edin
Kullanıcı sitenizden başka bir siteye tıkladığında, tarayıcı hedef siteye "bu kullanıcı şu sayfadan geldi" bilgisini (Referrer) gönderir. Bu, hassas yol veya sorgu parametrelerinin sızmasına neden olabilir. Bu başlıkla bu bilginin ne kadarının gönderileceğini kontrol edersiniz.
4. Permissions-Policy (Eski Adıyla Feature-Policy)
Bu modern başlık, tarayıcının belirli özellikleri ve API'leri (kamera, mikrofon, konum, otomatik oynatma vb.) sitenizde kullanıp kullanamayacağını kontrol etmenizi sağlar. Varsayılan olarak birçok özelliği kapatmak iyi bir güvenlik önlemidir.
5. Güvenli SSL/TLS Yapılandırması ile İlgili Bir Not
Güvenlik başlıklarından önce, temelinizin sağlam olması gerekir. SSL/TLS yapılandırmanız modern ve güvenli olmalı. Bu, `ssl_protocols` ve `ssl_ciphers` direktifleriyle sağlanır. Ayrıca, HTTP Strict Transport Security (HSTS) başlığı, tarayıcıları sitenize bir daha sadece HTTPS üzerinden bağlanmaya zorlar.
Nereye Eklemeliyim?
Bu `add_header` direktiflerini genellikle ana Nginx konfigürasyon dosyanızda (`nginx.conf`) veya `/etc/nginx/conf.d/` altındaki bir güvenlik konfigürasyon dosyasında, `http` bloğu içine ekleyebilirsiniz. Bu, tüm sunucu blokları (virtual host) için geçerli olmasını sağlar. Eğer sadece belirli bir site için eklemek isterseniz, o sitenin `server` bloğu içine de ekleyebilirsiniz.
Önemli Uyarı: `add_header` direktifi kalıtsaldır, ancak bir seviyede tanımlandığında, üst seviyedeki aynı başlığı ezebilir (override). Özellikle `location` bloklarında dikkatli olun.
Test Etme Zamanı!
Değişiklikleri yaptıktan sonra mutlaka Nginx konfigürasyonunuzun doğruluğunu kontrol edin ve servisi yeniden başlatın/yeniden yükleyin.
Ardından, tarayıcınızın Geliştirici Araçları'nı (F12) açın, "Network" sekmesine gidin ve sitenizi yenileyin. İsteklere tıkladığınızda "Response Headers" kısmında eklediğiniz güvenlik başlıklarını görmelisiniz.
Ayrıca, securityheaders.com gibi ücretsiz çevrimiçi araçlarla sitenizi taratıp notunu görebilirsiniz.
Bu temel başlıklar, web sunucunuzun güvenlik duruşunu önemli ölçüde iyileştirecektir. Siz sunucularınızda hangi ek güvenlik önlemlerini alıyorsunuz? Özellikle Nginx için favori "küçük ama etkili" güvenlik ipuçlarınız var mı? Yorumlarda paylaşalım!
Selam sistemciler!
Bu rehberde, Nginx konfigürasyon dosyalarınıza ekleyebileceğiniz, web sunucunuzu temel saldırı vektörlerine karşı koruyacak HTTP Güvenlik Başlıklarını ele alacağız. Bu başlıklar, tarayıcılara web sitenizi nasıl daha güvenli bir şekilde yükleyip çalıştıracaklarını söyleyen direktiflerdir. Hadi başlayalım!
Neden Bu Başlıklar Önemli?
Bu başlıklar, Cross-Site Scripting (XSS), clickjacking gibi saldırıları önlemeye, hassas bilgilerin sızmasını engellemeye ve modern, güvenli tarayıcı özelliklerini zorunlu kılmaya yardımcı olur. Ayrıca, güvenlik tarama araçları (SSL Labs testi gibi) ve bazı SEO değerlendirmeleri için de olumlu bir sinyaldir.
1. X-Frame-Options: Clickjacking'e Karşı Kalkan
Bu başlık, sitenizin bir `<frame>`, `<iframe>`, `<embed>` veya `<object>` içinde başka bir site tarafından yüklenip yüklenemeyeceğini belirler. Kötü amaçlı bir site, sitenizi görünmez bir çerçevede yükleyip kullanıcıları kandırarak tıklamaya zorlayabilir (clickjacking).
NGINX:
# Sitenizi hiçbir sitede çerçeve içinde gösterme
add_header X-Frame-Options "DENY";
# VEYA sadece kendi alan adınızda gösterme izni verin
# add_header X-Frame-Options "SAMEORIGIN";
2. X-Content-Type-Options: MIME Tipi Karışıklığını Önleme
Sunucu, bir dosyayı (örneğin bir CSS dosyasını) `text/css` olarak belirtirse, tarayıcı onu CSS olarak yorumlar. Ancak kötü niyetli birisi, aslında JavaScript olan bir dosyayı `text/css` olarak sunabilir. Bu başlık, tarayıcının belirtilen MIME tipine sadık kalmasını ve "sniffing" (koklama) yapmamasını sağlar.
NGINX:
add_header X-Content-Type-Options "nosniff";
3. Referrer-Policy: Referrer Bilgisini Kontrol Edin
Kullanıcı sitenizden başka bir siteye tıkladığında, tarayıcı hedef siteye "bu kullanıcı şu sayfadan geldi" bilgisini (Referrer) gönderir. Bu, hassas yol veya sorgu parametrelerinin sızmasına neden olabilir. Bu başlıkla bu bilginin ne kadarının gönderileceğini kontrol edersiniz.
NGINX:
# Referrer bilgisini sadece aynı kök alan adı (origin) içinde gönder, dışarıya hiç gönderme.
add_header Referrer-Policy "strict-origin-when-cross-origin";
4. Permissions-Policy (Eski Adıyla Feature-Policy)
Bu modern başlık, tarayıcının belirli özellikleri ve API'leri (kamera, mikrofon, konum, otomatik oynatma vb.) sitenizde kullanıp kullanamayacağını kontrol etmenizi sağlar. Varsayılan olarak birçok özelliği kapatmak iyi bir güvenlik önlemidir.
NGINX:
add_header Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=()";
5. Güvenli SSL/TLS Yapılandırması ile İlgili Bir Not
Güvenlik başlıklarından önce, temelinizin sağlam olması gerekir. SSL/TLS yapılandırmanız modern ve güvenli olmalı. Bu, `ssl_protocols` ve `ssl_ciphers` direktifleriyle sağlanır. Ayrıca, HTTP Strict Transport Security (HSTS) başlığı, tarayıcıları sitenize bir daha sadece HTTPS üzerinden bağlanmaya zorlar.
NGINX:
# HSTS Başlığı (DİKKAT: Önce HTTPS'in düzgün çalıştığından emin olun!)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# 'preload' direktifini eklemek isterseniz, önce hstspreload.org sitesine kaydolmalısınız.
Nereye Eklemeliyim?
Bu `add_header` direktiflerini genellikle ana Nginx konfigürasyon dosyanızda (`nginx.conf`) veya `/etc/nginx/conf.d/` altındaki bir güvenlik konfigürasyon dosyasında, `http` bloğu içine ekleyebilirsiniz. Bu, tüm sunucu blokları (virtual host) için geçerli olmasını sağlar. Eğer sadece belirli bir site için eklemek isterseniz, o sitenin `server` bloğu içine de ekleyebilirsiniz.
Önemli Uyarı: `add_header` direktifi kalıtsaldır, ancak bir seviyede tanımlandığında, üst seviyedeki aynı başlığı ezebilir (override). Özellikle `location` bloklarında dikkatli olun.
Test Etme Zamanı!
Değişiklikleri yaptıktan sonra mutlaka Nginx konfigürasyonunuzun doğruluğunu kontrol edin ve servisi yeniden başlatın/yeniden yükleyin.
Bash:
sudo nginx -t
sudo systemctl reload nginx # veya sudo service nginx reload
Ardından, tarayıcınızın Geliştirici Araçları'nı (F12) açın, "Network" sekmesine gidin ve sitenizi yenileyin. İsteklere tıkladığınızda "Response Headers" kısmında eklediğiniz güvenlik başlıklarını görmelisiniz.
Ayrıca, securityheaders.com gibi ücretsiz çevrimiçi araçlarla sitenizi taratıp notunu görebilirsiniz.
Bu temel başlıklar, web sunucunuzun güvenlik duruşunu önemli ölçüde iyileştirecektir. Siz sunucularınızda hangi ek güvenlik önlemlerini alıyorsunuz? Özellikle Nginx için favori "küçük ama etkili" güvenlik ipuçlarınız var mı? Yorumlarda paylaşalım!