Bu döküman sayesinde Apache Konfigürasyon (unuzu) daha güvenli hale getire bilirsiniz...
1) Ilk olarak en son yamalari geçtiginize emin olun
Eger kapiniz açik ise pencerelere kilit koymanin bir mantigi yoktur. Ayni sekilde, eger gerekli yamalari kurmadiysaniz, diger önerilere yamalari geçtikten sonra bakin.
2) Apache sürüm numarasini ve diger bilgileri gizleyin
Varsayilan olarak, bütün Apache kurulumlari bütün dünyaya hangi Apache sürümünü, isletim sistemini çalistirdiginizi ve hatta hangi Apache modüllerinin sunucuda kurulu oldugunu söyleyecektir. Saldirganlar bu bilgileri kullanirlar. Ayrica varsayilan ayarlari ellemediginizi belirten bir mesaj da verilmis olur.
httpd.conf dosyasinda asagidaki iki direktifi vermeniz gerekiyor:
ServerSignature Off
ServerTokens Prod
ServerSignature direktifi 404 sayfalari, klasör listeleri gibi apache tarafindan yaratilan sayfalarin en altinda bilgilerin görüntülenmesi ile ilgilidir.
ServerTokens direktifi ise Apache’nin HTTP cevap basliginda Server kismina ne yazacagini belirler. Bunu Prod’a set ederek HTTP cevabinda asagidaki sekilde cevap verdirmek mümkün:
Server: Apache
Eger fazla paranoyaksaniz bunu da kaynak kodunda degisiklik yaparak veya mod_security kullanarak (asagida anlatiliyor) degistirebilirsiniz.
3) Apache’yi kendi kullanici hesabi ve grubunda çalistirin
Çesitli apache kurulumlari nobOdy kullanici hesabi ile çalisir. Eger hem Apache hem de Eposta sunucunuzun da nobOdy kullanici hesabi ile çalistirildigini varsayarsak, Apache’ye yapilan basarili bir saldiri sonrasi eposta sunucusunun da ele geçirilmesi veya bunun tersi mümkün olabilir.
User apache
Group apache
4) Web klasörünün disindaki dosyalara erisimi engelleyin
Apache’nin web ana klasörü disindaki dosyalara erisimini istemeyiz. Bütün web sitelerinizin ayni klasör altinda oldugunu varsayarsak (örnekte /web olarak geçiyor) asagidaki gibi bir ayar yapmalisiniz:
Order Deny,Allow
Deny from all
Options None
AllowOverride None
Order Allow,Deny
Allow from all
Not: Options None ve AllowOverride None set ettigimiz için bu sunucunun tüm override islemlerini kapatacaktir. Bu sebeple Option veya Override gerektiren her bir klasör için elle ekleme yapmaniz gerekir.
5) Klasör içerigi görüntülemeyi kapatin
Bunu bir Directory tag’i içerisinde Options ile yapabilirsiniz. Options’i None veya -Indexes olarak set edin:
Options -Indexes
6) Sunucu tarafi dahil etmeleri (server side include) kapatin
Bu da Directory tag’i içerisinde Options ile yapiliyor. Options’i None veya -Includes olacak sekilde ayarlayin:
Options -Includes
7) CGI çalistirmayi kapatin
Eger CGI kullanmiyorsaniz Directory tag’i içerisinde Options’da set ederek kapatin. Options’i None veya -ExecCGI olarak set edin:
Options -ExecCGI
8) Apache’nin sembolik link’leri takip etmesine izin vermeyin
Bu da Directory tag’i içerisinde Options ile yapiliyor. Options’i None veya -FollowSymLinks olacak sekilde ayarlayin:
Options -FollowSymLinks
9) Bütün Options özelliklerinin kapatilmasi
Bütün Options’lari kapatmak istiyorsaniz,
Options None
olarak set edin. Birden fazla özellik kapatmak isterseniz ayni satir içerisinde bosluk vererek belirtin:
Options -ExecCGI -FollowSymLinks -Indexes
10) .htaccess dosyalari için destegin kaldirilmasi
Bu Directory tag’i içerisinde AllowOverride direktifi ile yapiliyor. None olacak sekilde ayarlayin:
AllowOverride None
Eger Overrides’a ihtiyaciniz varsa indirilemediklerinden (download) ve/veya isimlerini .htaccess’den baska bir seye degistirin. Örnegin .httpdoverride olarak degistirelim ve .ht ile baslayan bütün dosyalarin indirilmesini engelleyelim:
AccessFileName .httpdoverride
Order allow,deny
Deny from all
Satisfy All
11) mod_security çalistirin
mod_security, Apache Security kitabinin da yazari olan Ivan Ristic tarafindan hazirlanmis yararli bir Apache modülüdür.
mod_security ile asagidakileri yapabilirsiniz:
* Basit filtreleme
* Regular Expression tabanli filtreleme
* URL kodlama kontrolü
* Unicode kodlama kontrolü
* Denetim (Auditing)
* Null byte saldirisi önleme
* Upload hafiza sinirlari
* Sunucu kimligi maskeleme
* Dahili chroot destegi
* ve dahasi
12) Gereksiz modülleri kapatin
Apache tipik olarak çesitli modüllerle birlikte kurulmaktadir. Apache modül dokümantasyonuna göz atarak hangi modülün ne yaptigini ögrenin. Aktif durumda olan bazi modüllere ihtiyaciniz olmayabilir.
httpd.conf dosyasinda LoadModüle içeren satirlara bakin. Bir modülü devre disi birakmak için basitçe satirin basina bir # isareti koyun (comment out). Modülleri aratmak için
grep LoadModule httpd.conf
komutunu çalistirin.
Genelde aktif olan fakat ihtiyaç duyulmayan modüllere örnek olarak,
mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex
verilebilir.
13) Apache’nin konfigürasyon ve çalistirilabilir dosyalarina sadece root’un okuma izni olsun
Eger Apache kurulumunuzun /usr/local/apache oldugunu varsayarsak:
chown -R root:root /usr/local/apache
chmod -R o-rwx /usr/local/apache
14) Timeout degerini düsürün
Timeout (zaman asimi) süresi varsayilan olarak 300 saniyeye ayarlidir. Servis kullanimi engelleme saldirilarinin (DoS) potansiyel etkilerini azaltmak için bunu düsürebilirsiniz:
Timeout 45
15) Büyük boyutlu isteklerin sinirlanmasi
Apache bir http isteginin boyutunu sinirlamaniza izin veren çesitli direktifler sunar. Bu özellik de servis kullanimi engelleme saldirilarinin etkilerini azaltmak için kullanilabilir.
Baslangiç olarak LimitRequestbOdy direktifi kullanilabilir. Bu direktif varsayilan olarak unlimited/sinirsiz olarak ayarlidir. Eger 1mb’in üzerinde dosya gönderimine izin vermiyorsaniz bunu:
LimitRequestbOdy 1048576
olarak set edebilirsiniz. Eger dosya gönderimlerine (upload) izin vermiyorsaniz daha da düsük tutabilirsiniz.
Bakilabilecek diger direktifler ise LimitRequestFields, LimitRequestFieldSize ve LimitRequestLine. Bu direktifler çogu sunucu için varsayilan olarak makul degerlere ayarlidir fakat ihtiyaçlariniza göre degisiklik yapabilirsiniz. Detayli bilgi için Apache dokümanina göz atin.
16) XML bOdy boyutunu sinirlamak
Eger mod_dav kullaniyorsaniz bir XML isteginin gövedesinin maksimum boyutunu sinirlamak isteyebilirsiniz. LimitXMLRequestbOdy sadece Apache 2’de var ve varsayilan degeri 1 milyon byte (yaklasik 1mb). Çogu makalede eger WebDAV kullaniyor ve büyük dosyalar upload ediliyorsa, bu degeri 0’a set ederek boyut sinirlamasinin kaldirilmasindan bahsedilir. Fakat sadece kaynak (source) kontrol için kullaniyorsaniz bu degeri 10mb gibi bir degerle sinirlayabilirsiniz:
LimitXMLRequestbOdy 10485760
17) Ayni anda kullanim (concurrency) sinirlamasi
Apache ayni anda yapilan istekleri isleme ile ilgili olarak çesitli konfigürasyon ayarlari sunar. MaxClients isteklere hizmet için maksimum olarak kaç child process’in yaratilacagini belirler. Eger sunucunuzun çok sayida concurrent istegi karsilayacak kadar hafizasi yoksa bu degeri yüksek tutmak isteyebilirsiniz.
MaxSpaceServer, MaxRequestsPerChild ve Apache2 deki ThreadsPerChild, ServerLimit, ve MaxSpareThreads direktifleri de isletim sistemi ve donaniminiza uyacak sekilde ayarlanabilir.
18) Erisimleri IP’ye göre kisitlama
Eger sadece belirli bir agdan veya IP adresinden erisilmesi gereken kaynaklariniz varsa bunu apache konfigürasyonunda ayarlayabilirsiniz. Örnegin intranet’inize sadece 176.16 agindan erisim yapilmasini istiyorsaniz:
Order Deny,Allow
Deny from all
Allow from 176.16.0.0/16
veya IP kisitlamasi:
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
19) KeepAlive ayarlari
Apache dokümantasyonuna göre HTTP Keep Alive özelligi istemci performansini %50 oraninda artirmaktadir. Bu sebeple bu ayarlari degistirirken dikkatli olun, servis kullanimi engelleme saldirisina karsi az bir koruma saglarken performans’dan önemli ölçüde ödün verebilirsiniz.
KeepAlive varsayilan olarak aktiftir ve açik birakabilirsiniz, fakat varsayilan olarak 100 olan MaxKeepAliveRequests degerini ve 15’e ayarli olan KeepAliveTimeout degerini degistirebilirsiniz.Log dosyalarinizi analiz ederek uygun degerleri bulmaya çalisin.
20) Apache’yi chroot ortaminda çalistirin
chroot programlari kendi ayristirilmis hapishanelerinde (jail) çalistirmanizi saglar. Bu da bir servisin kirilma durumunda sunucudaki diger seyleri etkilemesini engeller.
Yukarida mod_security modülünün kendisinin chroot destegi oldugunu söylemistim. Bu modül sayesinde asagidaki direktifi eklemek yeterli:
SecChrootDir /chroot/apache
(Kaynak: Peter Freitag’in Apache Konfigürasyonunda Yapilacak Bazi düzenlemeler adli kitabindan Manuel olarak alinti yapilmistir...Bundan dolayi açik link verilemektedir. )