Blog

NGINX Hardening

Merhaba!

Bu makalede Ağustos 2020 tarihinde katıldığım, 14 gün süren “Türk Telekom Siber Güvenlik Kampı” kapsamında  araştırma ve uygulamalar yapmış olduğum NGINX Kurulumu ve Hardening konusundan bahsedeceğim. Başlamadan önce şunu belirtmek isterim, eğer daha önce bu konuyla ilgili herhangi bir çalışma yapmadıysanız mutlaka tüm adımları kendi kurmuş olduğunuz sisteminizde deneyerek tecrübe etmelisiniz. Bu şekilde çok daha yararlı olacağına inanıyorum. İyi okumalar..

Nginx Nedir?

Nginx en kısa tanımıyla web hizmetleri verebilmek üzere kullanılan bir web sunucusudur. Diğer web sunucu uygulamalarına nispeten yüksek performans ve düşük bellek kullanımı gibi özellikleri ile ön plana çıkmaktadır. Aynı zamanda ters vekil sunucu, load balancer ve http ön bellek olarakta kullanılabilmektedir.

 

Nginx Kurulumu

Nginx web sunucu kurulumu debian tabanlı işletim sistemlerinde apt yükleyicisi ile doğrudan sisteme yüklenerek temel kullanıma hazır hale gelmektedir.

  • apt install nginx komutu (versiyonu eski olan debian sistemlerde apt-get install nginx komutu kullanılmalıdır.) kullanılarak nginx web sunucu uygulaması lokal ortama indirilir ve ve otomatik olarak kurulumu gerçekleştirilir.
  • systemcyl start nginx & systemctl status nginx komut dizisi kullanılarak nginx web sunucu servisi başlatılır ve status komutu yardımıyla çalışma durumu ve ayağa kalkma zamanı gibi detaylar monitör edilebilmektedir.

 

 

 

Nginx Yapılandırması

  • Nginx yapılanmaları nginx –t komutu ile kontrol/test edilebilir. Bu komutun kullanımında aşağıdaki gibi bir çıktı alınması gerekmektedir. 

  • Hardening kapsamında ilk olarak fstab dosyası içerisinde nginx servisi için güvenlik kurallarına uygun bir şekilde mount kuralı yazmamız gerekmektedir. Bu kural aşağıdaki gibi oluşturulabilmektedir. 

  • Burada görülmekte olan nosuid parametresi ile SUID ve SGID bit kullanımına yönelik izinleri iptal etmiş olduk. Bu sayede SUID ve SGID bit kullanımı yasaklanmış oldu. Noexec parametresi ile binary dosyaların çalıştırılmasına yönelik izinleri kapatmış olduk.
  • Yazmış olduğumuz kuralın son kısmında ise dump alanına 1 değeri vererek kontrol sırasında öncelik tanımlamış olduk. Bu sayede dosya sisteminin (linuxta her şey bir dosyadır!) dökümlenmesini ve bir nevi kayıtları inceleme imkanı oluşturmuş olduk. Kuralın son alanı olan fsck alanına ise 2 değeri verilerek sistemin yeniden başlatılması esnasında yapılan denetimlerin sıralaması belirtilmiştir. Burada verilen 2 değeri dosya sistemini belirtmektedir. Kök dosya sistemleri için bu değer 1 olmalıdır.
  • /etc/nginx/nginx.conf dosyası içerisinde gerekli olan konfigürasyonların yapılması gerekmektedir. Dosya içerisinde SSL bağlantı kurallarının yazılı olduğu satırda bulunan TLSv1 ve TLSv1.1 protokolleri sürüm/versiyonları eski veya sorun çıkarabilecek gibi olduğu için kural satırından kaldırılmalıdır. Kaldırılan eski versiyon protokollerin yerine TLSv1.3 eklenebilir.
  • Nginx.conf dosyasından kaldırdığımız eski versiyon bilgilerini /etc/nginx/default/ dizini altındaki konfigürasyon dosyası içerisinden de kaldırmamız gerekmektedir.
  • Kötü niyetli kişiler bilgi toplama aşamasında nginx web sucusuna curl gibi basit araçlarla bir http request göndererek sistemde çalışan web servisi ve işletim sistemi hakkında bilgi edinebilirler. Ayrıca web sunucuda barındırılmayan rastgele bir sayfaya web tarayıcı ile GET isteği yapıldığında 404 hata sayfasından da web servisi hakkında bilgi toplanabilmektedir. Bu bilgilerin requestlere cevap olarak döndürülmemesi ve bilgi sızdırılmaması için gerekli konfigürasyonu yapmalıyız.
  • Bu aşamada /etc/nginx/nginx.conf dosyasındaki server_token off; satırını aktif hale getirdikten sonra nginx.conf dosyasını kayıt ederek servisi yeniden başlatmamız gerekmektedir.
  • Aşağıdaki 2 farklı görselde server token bilgilerinin gizlenmesi ve öncesinde ki elde edilebilecek temel bilgilerin olduğu yanıtlar görülmektedir.

  • Bir diğer güvenlik tedbiri sunucuya istek olarak gelen metodlar arasında istenmeyen metodların engellenmesidir. Örneğin DELETE, PUT vs. gibi kritik değişikliklere sebep olabilecek olabilecek olan istekler sunucuya gelip işleme alınmadan önce engellenmelidir. Yukarıda belirtilen ve benzeri isteklerin engellenmesi aşağıdaki işlemin yapılması gerekmektedir. Bu isteklere izin verilmediğini belirten aşağıdaki kural nginx.conf dosyasına eklenmelidir. 

  • Tampon alanın da taşmalara ve bilgi sızıntılarına engel olmak amacıyla nginx.conf dosyason içerisinde maksimum tampon alanlarının belirtilmesi gerekmektedir. Bu belirtim aşağıdaki gibi yapılabilmektedir.
  • Web servisini otomatize araçlara ve bot yazılımlara karşı korumak için user-agent engellemesi yapabilmekteyiz. Bu işlem için ise aşağıdaki satırlar nginx.conf dosyasına içerisine eklenmelidir.
  • Web servisini xss saldırılarına karşı korunaklı bir hale getirebilmek amacıyla /etc/nginx/conf.d dizini altında oluşturduğumuz ssl.conf dosyası içerisine kural olarak ekleyebiliriz. Bu dosya nginx.conf dosyasına çalıştırıldığında include edilecektir. 

  • nginx veya diğer web servislerin kullanılması sırasında güvenliğin olabildiğince sağlanabilmesi adına son olarak belirtilmesi gereken işlem güncellemelerin sürekli olarak yapılması işlemidir. Güncel olmayan servislerde keşfedilen ve public edilen zafiyetler söz konusu olabilmekte ve bu zafiyetler kötü niyetli kişiler tarafından istismar edilebilmektedir. 

     

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir