Bu başlık altında mümkün olduğunca güvenlikle ilgili sorularınızı cevaplıyacağım. Aslında başka bir arkadaşın sorusu üzerine onun konusuna yazmam gerekliydi fakat düşündüm de herkesin konuyu daha rahat bulabilmesi için ayrı bir başlık açmak iyi olur.
Konuya Bartuc rumuzlu arkadaşımızın
sorusuyla başlıyoruz.
bir local server kurmayı planlıyorum. apache ve php sorunsuz çalıştırdım, fakat http.conf'da gerekli birkaç modül include etmek dışında ne tip ayarlar yapılmalı bilmiyorum.
kontrol paneli kullanmıyorum, doğrudan php.ini ve httpd.conf editlemem gerekiyor. neler önerirsiniz, nelere dikkat etmeliyim?
edit: belirtmeyi unutmuşum, apache 2.2.8 ve php 5.2.6 kullanıyorum.
ayrıca, sadece kendi site(leri)m bulunacak. yani başkasına verilmeyecek.
httpd.conf üzerinden güvenlik sağlayamazsınız. Oradan ancak optimizasyon ile sunucu yükünü düşürebilir ve verim almanızı arttırabilirsiniz.
php.ini konusunda, engellemeniz gereken fonksiyonlar var.
engelleme konusunda her tarafta çeşitli fonksiyonlar var. Onlardan bir demeti aşağıda yazdım:
shell_exec,exec,system,glob,cat,dl,openbasedir,popen,proc_close,proc_get_status,proc_nice,proc_open,escapeshellcmd,escapeshellarg,show_source,posix_mkfifo,mysql_list_dbs,get_current_user,getmyuid,pconnect,link,symlink,pcntl_exec,ini_alter,parse_ini_file,leak,apache_child_terminate,posix_kill,posix_setpgid,posix_setsid,posix_setuid,proc_terminate,syslog,fpassthru,allow_url_fopen,stream_select,socket_select,socket_create,socket_create_listen,socket_create_pair,socket_listen,socket_accept,socket_bind,socket_strerror,pcntl_fork,pcntl_signal,pcntl_waitpid,pcntl_wexitstatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifstopped,pcntl_wstopsig,pcntl_wtermsig,openlog,apache_get_modules,apache_get_version,apache_getenv,apache_note,apache_setenv,virtual,name
Hatta benim önerim işi abartın ve php kodlamaları siz yaptığınız için kullanmadığınız fonksiyonların hepsini yazın

kalabalık olsun.
Bunun dışında güvenlik için mod_security olmazsa olmaz bir eklentidir. Sunucu güvenliğinin ~%80'ini mod_security sağlar diyebiliriz. Mod security için de kural zincirleri mevcut bir çok yerde bunlara ekstra olarak sizlere önerim. Alın shell scriptleri atın sunucuya tıklayın bir yerine adres satırına bakın örnek asd.php?shell&cmd=kapgel tarzı birşey yazıyorsa
?shell&cmd= burasını alın ve mod security kural zincirine ekleyin ve engelleyin. Ufak bir örnek kural zinciri de yazayım onun üzerinden geliştirip kullanabilirsiniz.
#Bu bölümde yaptığımız adres bazlı engelleme. Yani eğer tarayıcıda adres satırında aşağıdakiler geçiyorsa kişinin o sayfayı açmasını engelliyoruz.
SecFilterSelective THE_REQUEST "act=cmd"
SecFilterSelective THE_REQUEST "act=tools"
SecFilterSelective THE_REQUEST "act=gof"
SecFilterSelective THE_REQUEST "act=ls"
SecFilterSelective THE_REQUEST "act=mk"
SecFilterSelective THE_REQUEST "act=f&"
SecFilterSelective THE_REQUEST "r57"
SecFilterSelective THE_REQUEST "c99"
#Bu bölümde yaptığımızda dizin bazlı engelleme. Aşağıdaki klasörleri web(apache) üzerinden görüntülemeye kapatıyoruz.
SecFilter /boot/
SecFilter /dev/
SecFilter /etc/
SecFilter /initrd/
SecFilter /lib/
SecFilter /lost+found/
SecFilter /mnt/
SecFilter /proc/
SecFilter /root/
SecFilter /sbin/
SecFilter /tmp/
SecFilter /usr/
SecFilter /usr/local/apache/
SecFilter /usr/local/mysql/
SecFilter /var/
Bunların dışında geliştirmeniz mümkün bu kuralları amaç mantığını anlamak. Benim burada kendi kullandığım özel kural zincirini vermem bile sizi korumaz çünkü güvenlik anlık bir olaydır sürekli takip ister. Hazıra alışmak yerine mantığını öğrenin ve kendinizi geliştirin. Mantık konusunda seve seve yardımcı olurum. Fakat kimse hazır balık beklemesin

tutmayı öğrenmek isteyenlere kapım her zaman açık.
Evet bir kaç güvenlik önlemi daha alalım
SSH portunu değiştirelim.
/etc/ssh/sshd_config dosyasını düzenlemek için açalım. vi , nano , pico gibi editörler kullanabiliriz. vi bir çok kişi için zor geliyor en basiti nano ve pico'dur. yeni başlayanlar bunları kullansın.
[ root@netbilsis ~ ] nano /etc/ssh/sshd_config
dedik ve açılan ekranda
Alıntı
#Port 22
#Protocol 2,1
#ListenAddress 0.0.0.0
#ListenAddress ::
şeklinde bir bölüm var. Burayı
Alıntı
Port 4099
Protocol 2
#ListenAddress 0.0.0.0
#ListenAddress ::
şeklinde yapıyoruz. Buradaki 4099 rakamını siz istediğiniz bir rakamla değiştirin. Buraya yazacağımız değer artık bizim port numaramız olacak. Bir alt satırda da dikkat ettiyseniz 1 protokolünü kaldırdık. Ctrl + X yapıyoruz düzenlemeden sonra onaylayıp kaydediyoruz.
UYARI:
bu işlemi yaptıkdan sonra egerki sunucunuzda apf, csf veya daha farklı bir firewall yüklü ise 4099 portunu kesinlikle acınız. yoksa ciddi sorun yaratabilir.
Güvenlikle ilgili başka sorularınız varsa buraya yazabilirsiniz. Ama rica ediyorum. Mantıklı sorular sorun. Çocukça şeyler(Abi sitemi hacklediler ne edeyim?, Abi apache derledim sıra nerede?) sormayın.
Örnek Soru Modeli: Apache yapılandırmasını yaptıktan sonra httpd.conf içerisinde xxx yyy zzz noktalarına optimizasyon yapmayı düşünüyorum, makine özelliklerim bu, makinemdeki site sayısı şu , toplam hitim bilmem ne kadar, işletim sistemim bu , kontrol panelim (varsa) bu vs. vs. vs...
bu şekilde sorun lütfen. Sizin sorularınıza mümkün olduğu kadar direk cevap vermek için detaylı yazın. Bazen öyle oluyor ki yardım isteyene yardım etmek için ağzından laf almaya uğraşıyoruz. Bunu yapmazsanız benden de detaylı cevap alırsınız.