Nginx ile Web Sunucunuzu Güçlendirin: Temel Güvenlik Başlıkları Rehberi 
Selam sistemciler!
Bugün terminalin tozunu alıp, Nginx'in arka kapılarını kapatacağız. Bir web sunucusunu sadece hızlı değil, aynı zamanda sağlam bir kale gibi güvenli hale getirmek hepimizin ortak hedefi. Bu rehberde, "Nginx ile Web Sunucunuzu Güçlendirin: Temel Güvenlik Başlıkları Rehberi
" başlığı altında, uygulayabileceğiniz pratik ve etkili güvenlik önlemlerini adım adım ele alacağız. Hadi başlayalım!
1. Sunucu Bilgilerini ve Versiyonu Gizlemek
Varsayılan olarak Nginx, hata sayfalarında ve bazen yanıt başlıklarında kendi versiyon numarasını gösterir. Bu, bir saldırgan için değerli bir bilgidir. Bu bilgiyi gizlemek için:
Bu basit ama etkili ayar, `Server:` başlığında sadece "nginx" yazmasını sağlar, versiyon numarasını gizler.
2. Gereksiz HTTP Metotlarını Engellemek
Web sunucunuzun sadece ihtiyaç duyduğu HTTP metotlarına (GET, POST) izin vermesi güvenliği artırır. Özellikle `TRACE` veya `DELETE` gibi potansiyel riskli metotları engelleyebilirsiniz. Bunun için `limit_except` bloğunu kullanabilirsiniz:
3. Güvenli HTTP Başlıkları Eklemek
Modern tarayıcıların anlayacağı ve sitenizi daha güvenli hale getirecek bazı başlıklar vardır.
Bunları Nginx konfigürasyonunuza ekleyelim:
* X-Frame-Options: Sitenizin başka bir site içinde iframe olarak gösterilmesini (clickjacking saldırılarına karşı) engeller.
* X-Content-Type-Options: Tarayıcının dosya türlerini "sniff" etmesini (tahmin etmesini) engelleyerek MIME tipi atlama saldırılarını önler.
* Referrer-Policy: Ziyaretçilerinizin hangi siteden geldiği bilgisinin (referrer) ne kadar paylaşılacağını kontrol eder.
* Permissions-Policy: Tarayıcı özelliklerine (konum, mikrofon, kamera gibi) erişimi kısıtlar.
4. İçerik Güvenlik Politikası (CSP) ile XSS'e Karşı Koruma
CSP, sitenizin hangi kaynaklardan (script, stil, resim vb.) içerik yükleyebileceğini tanımlar ve Cross-Site Scripting (XSS) saldırılarını engellemede çok güçlüdür.
Basit bir başlangıç politikası:
**Önemli:** CSP kurallarınızı sitenizin ihtiyaçlarına göre çok dikkatli yapılandırın, aksi takdirde siteniz düzgün çalışmayabilir.
5. SSL/TLS Yapılandırmasını Sertleştirmek
SSL sertifikanız varsa, güvenliği artırmak için protokolleri ve şifreleme yöntemlerini (cipher suites) güncelleyin.
Bu ayarlar, daha güçlü şifreleme ve daha güvenli el sıkışma (handshake) süreçleri sağlar.
6. Kötü Niyetli User-Agent ve IP Adreslerini Engellemek
Bilinen tarama araçlarının (nikto, sqlmap vb.) veya belirli IP adreslerinin erişimini engelleyebilirsiniz. Bunun için `map` bloğu ve `if` koşulu kullanabilirsiniz (if kullanımında dikkatli olun):
IP engelleme için ise `deny` direktifini kullanabilirsiniz:
7. Dosya Yükleme Limitlerini ve Zaman Aşımlarını Ayarlamak
Sunucunuzu aşırı büyük dosya yüklemelerine veya uzun süren bağlantılara karşı koruyun.
**Son Kontroller ve Yeniden Başlatma**
Tüm bu değişiklikleri yaptıktan sonra, Nginx konfigürasyonunuzun sözdizimini kontrol etmeyi unutmayın:
Eğer her şey yolundaysa, Nginx'i yeniden yükleyin:
Bu adımlar, Nginx tabanlı web sunucunuz için sağlam bir güvenlik temeli oluşturacaktır. Unutmayın, güvenlik tek seferlik bir iş değil, sürekli bir süreçtir. Loglarınızı düzenli takip etmek ve güncellemeleri asla ertelememek en önemli kurallardır.
Peki ya siz? Sunucularınızı güvence altına alırken en çok hangi yöntemlere güveniyorsunuz? Paylaşmak istediğiniz ek ipuçlarınız var mı? Yorumlarda buluşalım!
Selam sistemciler!
1. Sunucu Bilgilerini ve Versiyonu Gizlemek
Varsayılan olarak Nginx, hata sayfalarında ve bazen yanıt başlıklarında kendi versiyon numarasını gösterir. Bu, bir saldırgan için değerli bir bilgidir. Bu bilgiyi gizlemek için:
NGINX:
http {
server_tokens off;
# ... diğer ayarlar
}
Bu basit ama etkili ayar, `Server:` başlığında sadece "nginx" yazmasını sağlar, versiyon numarasını gizler.
2. Gereksiz HTTP Metotlarını Engellemek
Web sunucunuzun sadece ihtiyaç duyduğu HTTP metotlarına (GET, POST) izin vermesi güvenliği artırır. Özellikle `TRACE` veya `DELETE` gibi potansiyel riskli metotları engelleyebilirsiniz. Bunun için `limit_except` bloğunu kullanabilirsiniz:
NGINX:
location / {
limit_except GET POST {
deny all;
}
# ... diğer location ayarları
}
3. Güvenli HTTP Başlıkları Eklemek
Modern tarayıcıların anlayacağı ve sitenizi daha güvenli hale getirecek bazı başlıklar vardır.
NGINX:
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 Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
* X-Frame-Options: Sitenizin başka bir site içinde iframe olarak gösterilmesini (clickjacking saldırılarına karşı) engeller.
* X-Content-Type-Options: Tarayıcının dosya türlerini "sniff" etmesini (tahmin etmesini) engelleyerek MIME tipi atlama saldırılarını önler.
* Referrer-Policy: Ziyaretçilerinizin hangi siteden geldiği bilgisinin (referrer) ne kadar paylaşılacağını kontrol eder.
* Permissions-Policy: Tarayıcı özelliklerine (konum, mikrofon, kamera gibi) erişimi kısıtlar.
4. İçerik Güvenlik Politikası (CSP) ile XSS'e Karşı Koruma
CSP, sitenizin hangi kaynaklardan (script, stil, resim vb.) içerik yükleyebileceğini tanımlar ve Cross-Site Scripting (XSS) saldırılarını engellemede çok güçlüdür.
NGINX:
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted.cdn.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:;" always;
**Önemli:** CSP kurallarınızı sitenizin ihtiyaçlarına göre çok dikkatli yapılandırın, aksi takdirde siteniz düzgün çalışmayabilir.
5. SSL/TLS Yapılandırmasını Sertleştirmek
SSL sertifikanız varsa, güvenliği artırmak için protokolleri ve şifreleme yöntemlerini (cipher suites) güncelleyin.
NGINX:
ssl_protocols TLSv1.2 TLSv1.3; # TLSv1.0 ve TLSv1.1'i devre dışı bırak
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
Bu ayarlar, daha güçlü şifreleme ve daha güvenli el sıkışma (handshake) süreçleri sağlar.
6. Kötü Niyetli User-Agent ve IP Adreslerini Engellemek
Bilinen tarama araçlarının (nikto, sqlmap vb.) veya belirli IP adreslerinin erişimini engelleyebilirsiniz. Bunun için `map` bloğu ve `if` koşulu kullanabilirsiniz (if kullanımında dikkatli olun):
NGINX:
http {
map $http_user_agent $bad_bot {
default 0;
~*(nikto|sqlmap|wget|curl|libwww-perl) 1;
}
server {
if ($bad_bot) {
return 403;
}
# ... diğer server ayarları
}
}
IP engelleme için ise `deny` direktifini kullanabilirsiniz:
NGINX:
location /admin {
deny 123.123.123.123;
deny 10.0.0.0/8;
allow all;
# ... admin paneli ayarları
}
7. Dosya Yükleme Limitlerini ve Zaman Aşımlarını Ayarlamak
Sunucunuzu aşırı büyük dosya yüklemelerine veya uzun süren bağlantılara karşı koruyun.
NGINX:
client_max_body_size 10M; # Maksimum yükleme boyutunu 10MB ile sınırla
client_body_timeout 10s;
client_header_timeout 10s;
send_timeout 10s;
**Son Kontroller ve Yeniden Başlatma**
Tüm bu değişiklikleri yaptıktan sonra, Nginx konfigürasyonunuzun sözdizimini kontrol etmeyi unutmayın:
Bash:
sudo nginx -t
Eğer her şey yolundaysa, Nginx'i yeniden yükleyin:
Bash:
sudo systemctl reload nginx # veya sudo service nginx reload
Bu adımlar, Nginx tabanlı web sunucunuz için sağlam bir güvenlik temeli oluşturacaktır. Unutmayın, güvenlik tek seferlik bir iş değil, sürekli bir süreçtir. Loglarınızı düzenli takip etmek ve güncellemeleri asla ertelememek en önemli kurallardır.
Peki ya siz? Sunucularınızı güvence altına alırken en çok hangi yöntemlere güveniyorsunuz? Paylaşmak istediğiniz ek ipuçlarınız var mı? Yorumlarda buluşalım!