Web Sunucu Güvenliği İpuçları

Linux web sunucularda temp dizini güvenliği

Web sunucunuzdaki geçici işlemler için dosya oluşturulan dizin /tmp dizinidir.Bir web sunucusunda genelde /tmp dizini üzerine tüm kullanıcılar yazma okuma izinlerine sahip oluyor.Böylece herkesin yazabildiği ve okuyabildiği bir alan güvenlik riskini arttırıyor.

Bu riski bir nebze düşürmek için /tmp dizinini ayrı bir partition olarak bağlamalı ve için kod çalıştırılamaz şekilde ayarlamalısınız.

Eğer işin bu kısmını düşünmeden sunucu kurmuşsanız ve diskinizde boş alan yoksa aşağıdaki linux/unix işletim sistemlerine özgü raw disk image mount alternatifini kullanabilirsiniz.

Önce tmp bölümün ne kadar alana gereksinim duyduğuna karar verin ve bunun için diskinizdeki boş alanı kontrol edin

Ssh üzerinden root kullanıcısı ile bağlıyken şu komutu verin;

 

[root@localhost ]# df -h

 

/dev/sda1 214G 130G 74G 64% /

 

 

Burada / dizininde 74 Gb boş alan olduğunu görüyoruz.Bize tahminen 15 gb tmp dizini yeterli olabilir.

Şimdi disk imajı oluşturma ve sisteme bağlama aşamasındayız.Önemli servislerinizi (mysql,apache vb.) durdurup /tmp dizin içeriğinizi bir yere yedekleyin .Daha sonra aşağıdaki komutları sırasıyla yazın.

dd if=/dev/zero of=/usr/tmpMnt bs=1024 count=15000000

 

/sbin/mke2fs /usr/tmpMnt

 

/usr/tmpMnt is not a block special device.
Proceed anyway? (y,n) y

 

 

 

Bu komutları sırasıyla uyguladığınızda artık /usr altında 15 gb ‘lık tmpMnt dosyanızın olduğunu görebilirsiniz.Imajı sisteme tmp olarak bağlayalım;

mount -o loop,noexec,nosuid,rw /usr/tmpMnt /tmp

 

Bu komuttan sonra hiçbir hata çıkmadıysa disk imajı tmp olarak bağlanmış demektir.Daha önce başka bir yere almış olduğunuz dosyaları şimdi /tmp ‘e tekrar aktarıp servislerinizi çalıştırabilirsiniz.

Ayarların her açılışta yüklenmesi için,

nano ile /etc/fstab dosyasını açıp alttaki satırı dosyanın en altına yazın.

/usr/tmpMnt /tmp ext2 loop,noexec,nosuid,rw 0 0

 

Not 1: Bu işlemler sonucunda /tmp dizinin izinleri değişmiş olabilir.

chmod 1777 /tmp çalıştırın.

Not 2: /usr/tmpMnt yolu zorunlu değildir.İstediğiniz klasörde istediğiniz isimle imaj dosyasını oluşturabilirsiniz.Yeterki fstabdaki isimler doğru olsun.

Not 3: Herşey bittikten sonra mount komutu ile /tmp dizinin doğru bağlandığına emin olun.

 

 

 

 

 

 

 

 

Debian Linux ile L2tpd Ipsec Vpn server kurulumu

Kuruluma geçmeden önce belirtmek isterim ki bu sistemi kurabilmek  için tam 1 hafta çalıştım.Pek çok kez başarısızlıkla sonuçlandı.Ipsec vpn kurulumunda hatalar veya problemler sunucudan kaynaklanmayabiliyor.Bu da boşuna debelenmenize sebep oluyor.

Örneğin ben bu kurulumu Debian Linux 6 ‘da yapabildim.Bundan önce Ubuntu Server 11 (i386,x64) ve Ubuntu 10.04.1 (i386,x64) LTS’de denedim.Yani kurulumu tamamlamak için toplam 5 kez linux kurmak zorunda kaldım.Bunun sebebi tahminimce l2tpd servisi ile OS kernel uyumsuzluğu veya openswan ‘ın kullandığı kernel modullerinin yine OS kernel ile tam uyumlu çalışmaması.

Eğer böyle bir sistem kullanmak istiyorsanız muhtemelen windows istemcilerle vpn yapmak isteyeceksiniz.Bu durumda ipsec/l2tpd vpn bağlantısı bakımından Windows Xp,Vista veya Windows 7 ‘nin de farklılıklar gösterdiğini görebilirsiniz.

Tecrübe ettiğim diğer bir husus da ADSL modem.Ben evimde zxyel 660 prestige modem kullanıyorum.Piyasadaki modemlere göre eski fakat iyi cihazlardan biri.Fakat l2tp/ipsec vpn bağlantımı sunucuya ulaştıramıyor.Yani istek modemden dışarı çıkmıyor.Belki bir firmware ile çözülebilir.

Son olarak söyleyeceğim şey,kurulumu aynen benim gibi yapsanız bile sistemin çalışmama olasılığının her zaman mevcut olması.

Bu kadar gereksiz sözden sonra kurulum ortamına geçeyim.

 

Sunucu ve istemci altyapısı

Sunucu ve istemci Vmware üzerinde çalışmaktadır.

Debian Linux 6 Kernel 2.6.32-5-686 üzerinde Openswan (2.6.28+dfsg-5) + Xl2tpd (1.2.7+dfsg-1)

Sunucunun iki etherneti var.Biri real ip diğer lokal ip ye sahip.

İstemci Windows 2008 R2 x64

 

Kurulum

İşletim sisteminin kurulumunu en basit haliyle tamamladıktan sonra ethernetlerinize ip adreslerinizi atadıktan sonra paketleri kuralım.

(Burda önemli bir nokta,eğer sunucunuz direk real ip ile internete bağlanmıyorsa,bir modem veya firewall arkasında bulunuyorsa ipsec ayarlarını değiştirmek zorunda kalabilirsiniz.)

 

Paketleri apt ile kuruyoruz.

Konsolda;

apt-get install openswan xl2tpd

Bu komutu verdikten sonra ipsec x.509 ile ilgili bir soru ile karşılaşacaksınız.Buna hayır cevabını verin.

Apt paketleri kuracak fakat bunlar standart konfigurasyonlarıyla çalışmaya başlayacaktır.

Openswan sistemde hali hazırda netkey modulunu tanıyacağı için bu modul ile çalışmaya başlayacaktır.

Xl2tpd için de durum farklı değil.Henüz ayarlar yapılmadığı için sadece çalışıyor vaziyette olacaktır.

Konsolda;

ipsec verify

ps aux | grep ipsec

ps aux | grep xl2tpd

komutlarıyla servislerin başlayıp başlamadığını görebilirsiniz.

ipsec verify çıktısı aşağıdaki gibi görülecektir

 

> ipsec verify
> Checking your system to see if IPsec got installed and started
> correctly:
> Version check and ipsec on-path [OK] > Linux Openswan kernel_version (netkey)
> Checking for IPsec support in kernel [OK] > NETKEY detected, testing for disabled ICMP send_redirects
> [FAILED] >
> Please disable /proc/sys/net/ipv4/conf/*/send_redirects
> or NETKEY will cause the sending of bogus ICMP redirects!
>
> NETKEY detected, testing for disabled ICMP accept_redirects
> [FAILED] >
> Please disable /proc/sys/net/ipv4/conf/*/accept_redirects
> or NETKEY will accept bogus ICMP redirects!
>
> Checking for RSA private key (/etc/ipsec.secrets) [OK] > Checking that pluto is running [OK] > Checking for ‘ip’ command [OK] > Checking for ‘iptables’ command [OK] > Opportunistic Encryption Support
> [DISABLED]

FAILED olan kısımlardaki problemleri gidermek için /etc/sysctl.conf dosyasının bir yedeğini alıp,bir editor ile açın ve aşağıdaki satırları uygun biçimde yerleştirin

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.default.log_martians = 0
net.ipv4.conf.all.log_martians = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.neigh.default.gc_thresh1 = 1024
net.ipv4.neigh.default.gc_thresh2 = 2048
net.ipv4.neigh.default.gc_thresh3 = 4096

sysctl.conf dosyanızı kaydettikten sonra

Konsolda;

sysctl -p komutunu verin veya sunucunuzu baştan başlatın.

Önemli bir nokta,sunucunuzu baştan başlattığınızda ipsec pid askıda kalmış olduğu için açılışta start edilemiyor.Debian ve Ubuntuya özgü bir durumdan da kaynaklanıyor olabilir.Henüz gerçek ortama geçirmediğim için üzerinde durmadım.