Web Sitem Güvendemi?
Şimdi sizlere Binbir uğRaşla yAptığınIz web siteNizi korumak için bir kaç yoldan bahsedeceğim. Hiç birimiz onca emekle yaptığımız sitenin daha sonra lamerler tarafından hacklenmesini(!) istemeyiz. Peki nelere dikkat etmeyiz, bildiğim kadarıyla anlatmaya çalışacağım.
1)Mail Güvenliği
Her şeyden önce mail adreslerinizin günvenliğini sağlamalısınız. Çünkü Hostunuz, domaininizi aldığınız yer bilgilerinizi önce mail adresine yollarlar.
Mail şifreniz mutlaka harf ve rakam kombinasyonlarından oluşsun. Ör: 125asd47a gibi. Asla kişisel bilgilerinizden herhangi birini şifreniz olarak kullanmayınız. Gizli sorunuz ve cevabınız sadece sizin bileceğiniz bir şey olsun. Burayada özel bilgileriniz girmeyiniz. Ayrıca mailinize gelen bazı mailler fake mail olabilir. Eğer mailinize gelen yada başka bir yerden indirdiğiniz bir dosya size işlem yapabilmek için mail adresinizin kullanıcı adı ve şifresini girmesini isterse o sayfalara k.a. ve şifrenizi girmeyin. O sayfayı direk kapatıp mailinizi tekrar açarak login olabilirsiniz. Adres çubuğunda yazan isimlere dikkat edin. Eğer mailinizi aldığınız yerle bir alakası yoksa bu bir fake maildir.
2)Hosting Güvenliğiniz
Hostinginizi aldığınız yerdede aynen mailiniz gibi şifrenin karışık olsun ve mailinizle aynı şifreyi kullanmayın. Sadece güvenilir kuruluşlardan ve işine özen gösteren yerlerden hosting almaya çalışın. Çünkü bazı serverlarda hala bir çok açık bulunmakta. Bunun sebebi ise kullandıkları yazılımlarda güncelleme yapmamaları. Sitenizi ele geçirmek isteyen kişiler bu açıkları kullanarak hostinginizi elegeçirebilirler.
3)Domain Güvenliğiniz
Domain adınızı aldığınız yerdede şifreniz farklı ve karışık olsun. (Her şeyin başı şifre). Domain whois bilgilerinde domaini aldığınız yere verdiğiniz mail adresinizi kullanmayın. Çünkü domaininizi ele geçirmek isteyen saldırgan öncelikle sitenize whois çekip mailinizi ve hostinginizi öğrenmek ister. Daha sonra önce mailinizi ele geçirmeye çalışır.
4)Web Programlamasında Güvenlik
İlk üç adımı uygulamanıza rağmen hala sisteminizde programlamadan kaynaklanan açıklar olabilir. Bunlarıda bir kaç başlık altında toplayalım.
a)Hazır portal ve forumlarda güvenlik
Web sitenizde hazır portal veya forum kullanıyorsanız sürekli olarak kullandığınız portalın/forumun sitesini ziyaret edin ve güncellemeleri elinizden geldiğince yapmaya çalışın. Çünkü genelde bir çok versiyonda sitenizin ele geçirilmesini sağlayacak açıklar mevcuttur. Bunların yamalarını ve açıkları yazılımın kendi sitesinden öğrenebilirsiniz. Ayrıca b-2 deki database güvenliğinede bakınız.
b)Kendi Yazdığınız Sistemlerde Güvenlik
b-1) Kodlama Hataları
Sisteminizi yazdınız ve sorunsuz çalışıyor. Herşey yolunda ama yaptığınız veya eklemeyi unuttuğunuz bir kaç kod yüzünden sitenizde bazı açıklar mevcuttur. Ve malesef saldırganlar bu açıkları kullanarak sisteminize girebilirler ve zarar verebilirler. Peki bunlar nelerdir?
b-1-1) Login Panelleri
Saldırgan öncelikle login panellerinde bir kaç kod deneyerek database’inizin yonu bulabilir ve sızıntılarla datebase’den sizin veya üyelerinizin bilgilerini ele geçirebilir. Genelde ‘or 1=1 tarzında kodlamaları bu panellerde deneyerek SQL injection yapmaya çalışırlar. O yüzden bu tür kodları kabul etmeyen ayıklan bir sistem yazmalısınız. Bu tarz kodlamaları girince sisteminizin iç hata vermemesi lazım. Ayrıca login panellerinde deneme yanılma yöntemleriyle kullanıcı adı ve şifrenizi ele geçeribilirler. Bunu önlemek için mümkünse güvenlik kodu uygulaması yapmanız iyi olacaktır. Ayrıca birkaç yanlış denemeden sonra ip adresini banlarsanız buda işe yarar.
b-1-2) Haber/Yorum Ekleme
Login panellerinde olduğu gibi haber ve yorum ekleme scriptlerinde sızıntıları önlemeniz gerekir. Asla bu bölümler kod kabul etmemelidir.Yoksa kullanıcı yorum yada haber olarak bir kod ekleyerek sitenizin o sayfasını başka bir sayfaya yönlendirebilir. Burdada yapmanız gereken bu tür kodları kabul etmeyen bir sistem yazmaktır.
b-2) Database Güvenliği
Database’iniz mutlaka şifre korumalı olsun. Eğer access veritabanı kullanıyorsanız. Veritabanınızı hostinginizde bulunan db klasörü içine koyun. Bu klasörden database’inizi indiremezler. Hazır kullandığınız scriptlerdeki dblerin adlarını ve yollarını mutlaka değiştirn. Bu saldırganın db yolunuzu öğrenmesini ve sızmasını engeller.
Evet bu yukarda yazılanları yaptıkdan sonra tahminimce siteniz %90 güvende olur. Ama asla %100 olmaz. Çünkü hack için mutlaka bir yol vardır. Tabi bunu yapabilecek kişilerde sayılıdır. Asla bütün üyeliklerinizde aynı şifreyi kullanmayın. Ayrıca eğer sitenizde sizden başka yönetici / editör varsa onlarıda mail güvenliği konusunda uyarın. Ben bu yazılanlarının bir kısmını uygulamıyorum. Kendinize düşman edinmemeye çalışın ve saldırganlara sitenizi ele geçirmek için bir sebeb vermemeye gayret gösterin. Mutlaka bu yazılanlarada eklenmesi gereken şeyler vardır. Sizde bildiklerinizi bu postun altına eklerseniz güzel bir kaynak olur.
Genel Server Güvenliği
%100 server güvenliğini sağlamanın tek yolu o serverın fişinden geçmektedir. En güvenli server fişi çekik serverdır.Bunun dışındaki tüm methotlar sadece server güvenliğini arttırmak içindir. Aşağıda server güvenliği ile ilgili verilmiş bilgiler genel bilgiler olup kullanıcıya göre değişebilmektedir.
vi, pico vb editorler kullanılarak aşağıdaki satırlar /etc/sysctl.conf içine eklenmelidir
# disable packet forwarding net.ipv4.ip_forward = 0 # enable source route verification
net.ipv4.conf.all.rp_filter = 1 # ignore broadcast pings
net.ipv4.icmp_echo_ignore_broadcasts = 1 # enable syn cookies
net.ipv4.tcp_syncookies = 1 # size of syn backlog
net.ipv4.tcp_max_syn_backlog = 512 # disable automatic defragmentation #
set max files fs.file-max = 32768 # Enable IP spoofing protection, turn on
Source Address Verification net.ipv4.conf.all.rp_filter = 1
# Enable TCP SYN Cookie Protection net.ipv4.tcp_syncookies = 1
# Enable ignoring ping request net.ipv4.icmp_echo_ignore_all = 1
Bu ne yapar?
Bu kodlar linux işletim sisteminin kendisi tarafından kullanılmaktadır. Bu kodlar sisteme ping, icmp, isteklerini
redetmesini ve SYN korumasını devreye alınmasını, network forwarding in engellenmesini sağlar. Ancak bu değişiklik
yapıldıktan sonra server reboot edilmelidir.
/etc/rc.local, içine aşağıdaki kod eklenmelidir
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > done
echo 1 > /proc/sys/net/ipv4/tcp_syncookies for f in /proc/sys/net/ipv4/conf/*/accept_source_route;
do echo 0 > done echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
Bu kısım bir önceki kısımla aynıdır ve bu isteklerin rededilmesi işlemini tekrar, başka bir guvenlik katmanıdır.
/etc/host.conf, içine aşağıdaki kodlar eklenmelidir , tabi içinde yoksa
# Lookup names via DNS first then fall back to /etc/hosts.
order bind,hosts
# We have machines with multiple IP addresses.
multi on
# Check for IP address spoofing.
nospoof on
/etc/hosts.deny içine aşağıdaki kod eklenmelidir
ALL: PARANOID
Burada bir önceki işlemde yapılan spoofing korumasını arttırılması sağlanır.
Firewall linux server için en önemli ihtiyaçtır. Firewall olmaksızın linux server tamamı ile tehlike altındadır
denilebilir , firewall ile server güvenlik altındadır ve korunabilir diyebiliriz ancak unutlmamalıdır ki hiç bir firewall %100 güvenlik sağlamaz.
Kernel bilgilerini aramalı ve bulmalısnız. Hatta kişisel kernel derlemeside yapabilirsiniz, (eğer linuxde çok iyi bir kullanıcı değilseniz kesinlikle bu işlem önerilmez) veya RPM kullanabilrsiniz.Kernel derlemesi local olmayan makinalarda kesinlikle önerilmeyen bir işlemdir. Sebebi ise , eğer bir şeyler ters giderse sizin power düğmesine basıp kapatacak şansınız olmayacak ve tek kullanıcı modunda serverı başlatamayaaksınız.Data Center ı beklemeli bir destek isteğinde bulunmalı ve onların yanıt vermesini beklemek zorunda kalacaksınız.Buda hem büyük zaman kaybı, hem oldukça yavaş hem de çok maliyetli bir işlemdir. Diğer uygulamalar yapılan konfigurasyon değişiklikleri sistem aşırı yükünü vb sorunları engelleyecektir.
Örnek
proftpd:
/etc/proftpd.conf, içine aşağıdaki kod eklenebilir
TimeoutIdle 600 TimeoutNoTransfer 600 TimeoutLogin 300 MaxInstances 30 MaxClientsPerHost 2
mysql için:
/etc/my.cnf
[mysqld] port = 3306 skip-locking
set-variable = max_connections=100
set-variable = max_user_connections=20
set-variable = key_buffer=16M
set-variable = join_buffer=4M
set-variable = record_buffer=4M
set-variable = sort_buffer=6M
set-variable = table_cache=1024
set-variable = myisam_sort_buffer_size=32M
set-variable = interactive_timeout=100
set-variable = wait_timeout=100
set-variable = connect_timeout=10
set-variable = thread_cache_size=128
ve son olarak, /etc/rc.local, içine aşağıdaki kod eklenebilir.
TMOUT=180 export TMOUT
Bu kısım serverda 3 dk hareketsiz duran herkesle bağlantısını kesecektir.Bu rakamı değiştirerek zamanı da değiştirilebilir, örnek 300 yapıldığında bu 5 dk olacaktır Güvenliğin bir seviye daha artırılması için aşağıdaki gibi bir uygulama yapılabilir ssh erişimi kısıtlaması
in /etc/hosts.deny
sshd: ALL
in /etc/hosts.allow
Code:
sshd: host.ip.number.1,host.ip.number.2,etc