Merhaba,
10 adımda Apache web server güvenliği hakkında ufak bir içerik girdisi oluşturmaya karar verdim. Elbette Apache kullanmak yerine Nginx veya daha farklı yapılar kullanıyor ve geçilmesini benim gibi öneriyor olabilirsiniz ancak halen ağırlıklı olarak Apache kullanıldığı için önceliği buna vermeye karar verdim. Sırayla ilk adımda yapılabilecekleri listeleyeceğim. Her başlığın üzerine tıklayarak nasıl yapılacağının anlatımını yaptığım sayfaya geçebilirsiniz.
1. Apache ve Php Versiyonunu Gizleyin:
Ek bir ayar yapmadığınız zaman server signature aktif durumda olur. Peki bu ne demek? Keşif yapan kişinin Apache mi, Nginx mi kullandığınızı ve Apache kullanıyorsanız deneyeceği exploitleri bilmesi demek. Ona göre Layer7 saldırı türlerini de deneyecektir. Örneğin Slowloris, Hammer, Arme vs. deneyebilir ve exploit açığını kullanabilir. Bkz:Apache 2.2.22 Exploit List
*Örneğin slowloris.cf domainimin çalıştığı sunucuda hem signature pasif hem de Cloudflare ile maskeledim.
2. Dizin Listelemesini Kapatın:
Default Apache yapılandırmasında dizin içerisinde index dosyası olmadığında dizine istek geldiğinde dosyalar listelenir. Bu da ftp alanınızdaki her şeyin public olmasına yol açar. Bu sebeple bunun gerekmesi halinde kapatılması önemlidir.
1 2 3 |
<Directory /var/www/html> Options -Indexes </Directory> |
3. Apache Versiyonunu Güncel Tutun:
1. maddede aktif olan exploitlerin ve güvenlik güncellemelerini belirten bir link belirtmiştim. Oradan da görebileceğiniz üzere aralıklarla güncelleme yapmak gerekiyor ancak update çıktı diyerek hemen güncelleme yapmayın. Önce biraz bekleyin, stackoverflow ve diğer sitelerde bir bug veya sorun belirtilmiş mi? Sonra iOS güncellemeleri gibi perişan edebilir.
1 2 |
httpd -v yum update |
4. Gereksiz Modülleri Devre Dışı Bırakın:
En nihayetinde Apache modüllerden oluşan bir yapı ve modüllerde oluşacak bir açık tüm projenizi mahvedebilir. Bu nedenle httpd.conf içerisinde tanımlı olan aktif modülleri gözden geçirin. İşinize yaramayacak olanları kaldırın.
Buradan hangi modülün hangi işe yaradığının anlatımı bulunuyor.
Apache Sürüm 2.4.x Module
CentOS’da /etc/http/conf/httpd.conf altında bulabilirsiniz. Ya da locate yapıp httpd.conf dosyasının olduğu yolu bulabilirsiniz. Orada LoadModule diye arattığınızda bulacaksınız.
5. Apache’nin Çalışması İçin Ayrı User/Group Oluşturma:
Varsayılan bir kurulum ile Apache süreçlerini nobody veya daemon kullanıcısı ile çalıştırır. Güvenlik nedenlerinden ötürü Apache’yi ayrıcalıksız kendi hesabında çalıştırmak gerekir. Örneğin: http-dev.
6. Dizinlere Erişimi Kısıtlayın:
2. maddede detayından bahsetmiştim. Burada ise httpd.conf dosyasına ekleyeceğiniz bir kod ile bu kısıtlamayı sağlayabilirsiniz.
1 2 3 4 5 |
<Directory /> Options None Order deny,allow Deny from all </Directory> |
7. Güvenlik Modüllerini Yükleyin:
Burada önünüze bir sürü seçenek çıkacak. Kimisi Apache 2.2.x sürümlerinde tam performans çalışırken, 2.4.x sürümlerinde crash sebep olmaktadır. Ancak ben Apache 2.2.x için vazgeçilmez olan mod_qos (2.4’te sıkıntı yaratıyor), mod_security ve mod_evasive’den bahsedeceğim. Apache yapılandırmasıyla ilgili şu an stabil yapıya ulaştığımda ayrı bir konu olarak paylaşacağım. (https://slowloris.cf domainim üzerinden testleri sürdürüyorum.)
8. İstek Boyutunu Limitleyin:
Varsayılan ayarlarda http requestin total boyutu için sınır yoktur. Bu sebeple izin verildiğinde Dos Attack kurbanı olmanız mümkündür. Apache yönergesi (LimitRequestBody) ile istek boyutunu dizin kapsamında sınırlayabilirsiniz.
9. Apache Loglamasını Aktifleştirin:
Apache, işletim sisteminizin günlüğe kaydetme işleminden bağımsız olarak oturum açılmasını sağlar. Apache günlüğünü etkinleştirmek web sunucunuzla etkileşime giren kullanıcıların girdiği komutlar gibi daha fazla bilgiyi sağlar.
10. Web Servisi Monitör Edin:
Zabbix, Argus, PRTG, Nagios veya daha farklı monitör sistemleriyle düzenli takip etmek ve logstash ile loglattırmak. Nagios kurulumu ve yapılandırmasından bahsetmiştim, buradan inceleyebilirsiniz.
Icinga kurulumu da benzerdir.