Bu yazıda Apache'nin dağıtımla gelen halinden daha
güvenli bir şekilde çalışabilmesi için yapmanızı tavsiye edeceğim bazı
değişiklerlerden bahsedeceğim. Bu tavsiyelerden birçoğu ayar dosyalarıyla
ilgili olacağından dolayı Apache httpd.conf
dosyası hakkında bilgi edinmiş olmanızı öneririm.
Dağıtımlarla gelen Apache kurulumları çoğu zaman kullanıcıya rahatlık sunması açısından oldukça esnek yapılandırılırlar. Bu ayarlar basit kullanımlar için oldukça yararlıdır fakat güvenliğin on planda olduğu sunucularda gereğinden fazla esnektirler. Bu yüzden ayarlarınızı gözden geçirmenizde fayda var. Bu anlatacağım senaryoları şirketinizin aynası ya da belki de ürünü olacak web sunucularında yaptığınızı gözönünde bulundurmayı unutmayın. Örneğin kullanıcı homepage'lerini silin dediğimde, "aaa olur mu öyle sey!" gibi yorumlar duymak istemiyorum :)
Örneklerin çoğu RedHat baz alınarak verilmiştir.
Dağıtımlarla gelen Apache kurulumları çoğu zaman kullanıcıya rahatlık sunması açısından oldukça esnek yapılandırılırlar. Bu ayarlar basit kullanımlar için oldukça yararlıdır fakat güvenliğin on planda olduğu sunucularda gereğinden fazla esnektirler. Bu yüzden ayarlarınızı gözden geçirmenizde fayda var. Bu anlatacağım senaryoları şirketinizin aynası ya da belki de ürünü olacak web sunucularında yaptığınızı gözönünde bulundurmayı unutmayın. Örneğin kullanıcı homepage'lerini silin dediğimde, "aaa olur mu öyle sey!" gibi yorumlar duymak istemiyorum :)
Örneklerin çoğu RedHat baz alınarak verilmiştir.
1. Kurulum: Makinaniza dagitimla gelen apache'yi
kurmaniz ve bu sekilde birakmaniz demek guvenlik acisindan intihar demektir.
Derhal apache'nin son surumunu (ister dagitimin guncelleme
kanalindan, ister programin kendisini derleyerek) kurun.
2. Modüller Genelde dagitimla gelen apache
Dynamic Shared Object (DSO) ozelligi ile derlenmistir. DSO bize plugin seklinde
eklentileri, apache'yle yeniden derlemeye gerek
birakmadan kullanmamizi saglar. Dagitimla gelen modullerin bir coguna
ihtiyaciniz yoktur. Asagidaki listeden gercektek ihtiyaciniz olmayanlari
httpd.conf dosyasindan silin. mod_dav Distributed Authoring and Version
mod_autoindex Dizinlerin icini otomatik olarak gosterir.
mod_include Eger sayfalarinizda sunucu tarafindan include'lar yapmıyorsaniz silin.
mod_info Sunucunun ayarlarini gosterir.
mod_status Sunucunun durumunu gosterir.
mod_userdir Kullanici Home dizinleri.
Tavsiyem ayar dosyasindaki buna benzer mod_* satirlarini inceleyin ve minimum modül aktive edin. Modul referansi icin http://modules.apache.org/ adresine bakin.
mod_autoindex Dizinlerin icini otomatik olarak gosterir.
mod_include Eger sayfalarinizda sunucu tarafindan include'lar yapmıyorsaniz silin.
mod_info Sunucunun ayarlarini gosterir.
mod_status Sunucunun durumunu gosterir.
mod_userdir Kullanici Home dizinleri.
Tavsiyem ayar dosyasindaki buna benzer mod_* satirlarini inceleyin ve minimum modül aktive edin. Modul referansi icin http://modules.apache.org/ adresine bakin.
3. Kullanıcı dizini? O da ne? SİLİN! :)
UserDir disable
satırını httpd.conf dosyasina ekleyin. Daha da paranoyak olmak istiyorsanız
LoadModule userdir_module modules/mod_userdir.so
satırını silin ya da comment out edin.
UserDir disable
satırını httpd.conf dosyasina ekleyin. Daha da paranoyak olmak istiyorsanız
LoadModule userdir_module modules/mod_userdir.so
satırını silin ya da comment out edin.
4. Dizin izinleri:
Web sunucunuzun kök dizinin izin ayarlarını biraz daha sıkılaştırın.
Örneğin
Aşağıdaki ayar yerine:
Web sunucunuzun kök dizinin izin ayarlarını biraz daha sıkılaştırın.
Örneğin
Aşağıdaki ayar yerine:
<?php
&
lt
;
Directory
/&
gt
;
Options
FollowSymLinks
AllowOverride None
&
lt
;/
Directory
&
gt
;
?>
bu ayarları deneyin:<?php
&
lt
;
Directory
/&
gt
;
Options None
AllowOverride None
Order allow
,
deny
Deny from all
&
lt
;/
Directory
&
gt
;
?>
5. Sunucu bilgi gizleme.
Bir web sunucu korsaninin saldiri icin yapacagi ilk adim belki de sunucu hakkinda bilgi toplamaktir. Bu nedenle sunucumuzun verdigi bilgiyi minimumda tutmamiz ilk korunma duvarimiz olacaktir. httpd.conf dosyasi icinde:
ServerSignature off
yazarsak sunucunun dinamik olarak yarattigi signature/imza satirindan kurtulmus oluruz (Ornegin 404 sayfalarinda)
Bununla beraber apache HTTP basliginda da bilgi saklar ve gosterir.
ServerTokens Prod
satiri bu bilgiyi minimuma indirger. Bazi sunucu sayfalarinda ise sistemin yoneticisinin email adresi gosterilir. (Spamciler icin ideal! :)
ServerAdmin root@localhost satırı bu emaili de saf dışı birakir.
Bir web sunucu korsaninin saldiri icin yapacagi ilk adim belki de sunucu hakkinda bilgi toplamaktir. Bu nedenle sunucumuzun verdigi bilgiyi minimumda tutmamiz ilk korunma duvarimiz olacaktir. httpd.conf dosyasi icinde:
ServerSignature off
yazarsak sunucunun dinamik olarak yarattigi signature/imza satirindan kurtulmus oluruz (Ornegin 404 sayfalarinda)
Bununla beraber apache HTTP basliginda da bilgi saklar ve gosterir.
ServerTokens Prod
satiri bu bilgiyi minimuma indirger. Bazi sunucu sayfalarinda ise sistemin yoneticisinin email adresi gosterilir. (Spamciler icin ideal! :)
ServerAdmin root@localhost satırı bu emaili de saf dışı birakir.
6. cgi-bin dizinin yok et:
Eger web sunucunuz CGI calistirmayacaksa derhal gerekli ayarlari yokedin! :) (PHP degil, cgi...) Su satirlari silin ya da comment out edin.
Eger web sunucunuz CGI calistirmayacaksa derhal gerekli ayarlari yokedin! :) (PHP degil, cgi...) Su satirlari silin ya da comment out edin.
<?php
LoadModule cgi_module modules
/
mod_cgi
.
so
LoadModule env_module modules
/
mod_env
.
so
AddModule mod_cgi
.
c
AddModule mod_env
.
c
ScriptAlias
/
cgi
-
bin
/ &
quot
;/var/
www
/
cgi
-
bin
/&
quot
;
&
lt
;
Directory
&
quot
;/var/
www
/
cgi
-
bin
&
quot
;&
gt
;
AllowOverride
None
Options None
Order allow
,
deny
Allow from all
&
lt
;/
Directory
&
gt
;
?>
7. Web dizinlerinin sistem izinleri.
Sistem icinde webe acik dizinlerin ve dosyalarin hicbirisine web serverin calistigi kullaniciya ve guruba (apache, nobody gibi) yazma hakkinin verilmemesi lazimdir. Bu duruma uymayan dizin ve dosyalari bulmak/gormek icin su asagidaki komutlari kullanabilirsiniz. [root@webserver]# find /var/www/html -user apache -perm +202 -exec ls -ld {} ; [root@webserver]# find /var/www/html -group apache -perm +202 -exec ls -ld {} ;
Sistem icinde webe acik dizinlerin ve dosyalarin hicbirisine web serverin calistigi kullaniciya ve guruba (apache, nobody gibi) yazma hakkinin verilmemesi lazimdir. Bu duruma uymayan dizin ve dosyalari bulmak/gormek icin su asagidaki komutlari kullanabilirsiniz. [root@webserver]# find /var/www/html -user apache -perm +202 -exec ls -ld {} ; [root@webserver]# find /var/www/html -group apache -perm +202 -exec ls -ld {} ;
Son olarak. Mutlaka gizli bilgilerinizi SSL yoluyla yollayin. Ornegin bir webmail servisi mi kuruyorsunuz? Mutlaka en azindan login kismini SSL ile koruyun. phpMyAdmin mi kullaniyorsunuz? SQL Sunucunuzun guvenligi icin bence SSL arkasinda tutun. Dagitimlarin cogu zaten kurulu ssl sertifikalari ile geliyordur. Eger gelmeyen birisiyle ugrasiyorsaniz kendi sertifikanizi yaratin. Onemli olan o sertifika vasitasiyla iki nokta arasinda sifreleme yapabilmeniz.
Hiç yorum yok:
Yorum Gönderme