Apache için mod_security Kurulumu
Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYHscDhk' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349
Modsecurity olarak da bilinen ve bir apache modülü olarak çalışan mod_security, web uygulamalarının güvenliğini sağlamak amacıyla geliştirilmiş bir web application firewall (WAF) yazılımıdır.Bilindiği gibi bir web sunucusu üzerinde çalıştırılan web uygulamalarının kodsal bakımdan ne kadar güvenli olup olmadığını bilmek herzaman için kolay olabilen bir şey değildir; buna rağmen çalışan bu uygulamalar herhangi bir açık içeriyorsa bu durumun can sıkan sonuçları olabilir. İşte bu gibi durumların önüne geçebilmek için mod_security isimli apache modülünü kullanmak oldukça yerinde olacaktır. Kuruluma geçmeden önce konuyla ilgili biraz detay vermek istiyorum. |
Herhangi bir açık içeren kod parçasına sahip bir yazılım nedeni ile sunucunuz ciddi anlamda risk altında olabilir. Konuya bir örnek vermek gerekirse, geçenlerde round cube isimli php tabanlı bir webmail uygulamasında bir açık saptandı ve üzerinde roundcube kurulu olan bir sunucunun saldırıya maruz kaldığına şahit oldum.
Tipik olarak, saldırganlar internet üzerindeki sunucuları çeşitli web vulnerability scanner yazılımları ile tarayıp herhangi bir sunucu üzerinde açık içerdiği bilinen yazılımların bulunup bulunmadığını tespit etmeye çalışıyorlar. Bu işlem sunucuya 80. porttan erişilip ilgili yazılımlara ait ismi bilinen dosyaların kontrolünden ibaret olduğundan epey basit olay. Mesela roundcube örneğinden gidersek, uzaktan kod çalıştırmaya yarayan açık bu yazılımın içerdiği html2text.php isimli dosyada belirtilen bir php class'tan kaynaklanıyor ve saldırganlar ilk olarak hedef sunucuda bu yazılımın bulunup bulunmadığını anlamak üzere roundcube'un kurulu olabileceği tüm path'leri (mesela http://www.falanca.com/roundcube/bin/html2text.php) kontrol ediyorlar. Sunucundan dönen cevaptan hareketle de yazılımın tespitini yapmış oluyorlar. Bundan sonra da bu açıktan gayet rahat yararlanabiliyorlar.
Sonuç olarak bu gibi saldırıların önüne geçebilmek için ModSecurity kullanmak oldukça yerinde bir harekettir. ModSecurity, bildiğimiz layer 3 firewall mantığında olduğu gibi gelen istekleri tarıyor ve daha önceden tanımlanmış olan kuralları baz alarak kontrolden geçiriyor. Eğer herhangi bir istek kurallardan biriyle eşleşirse bu isteğin reddedilmesini sağlıyor.
Kurulum ile birlikte gelen kural setleri oldukça da yeterli görünüyorlar. dolayısı ile hali hazırdaki bu kuralları kullanmanız bile yeterince iş görecektir. Ayrıca kendi kurallarınızı da yazmanız mümkün.
Yazının bundan sonraki bölümünde FreeBSD 7.o üzerinde çalışan bir Apache 2.0.x için mod_security'nin kurulumu ve konfigürasyonu ile ilgili notları bulabilirsiniz.
FreeBSD'de bir yazılım yüklemenin en güzel yöntemi port ağacı kullanmaktır. Sisteminizde port ağacı güncel değilse öncelikle bu işi yapın.
# portsnap fetch update
Güncelleme bittikten sonra, aşağıdaki şekilde port ağacındaki mod_security21 dizinine gidin kurulumu yapın. Bu şekilde mod_security ve libxml gibi gerekli olan diğer tüm paketler sisteme kurulacaktır.
Not: Kurulumlar sırasında gelen options ekranlarında herhangi bir şey seçmeden devam edebilirsiniz.
# cd /usr/ports/www/mod_security21/ # make install clean
Kurulum sorunsuz bir şekilde tamamlandıysa konfigürasyon kısmına geçebiliriz.
Modül /usr/local/libexec/apache2/ dizininin altında mod_security2.so ismi ile bulunmakta, kuralların belirtildiği dosyalar ve ana conf dosyası ise /usr/local/etc/apache2/Includes/mod_security2/ dizini altında bulunuyor.
Öncelikle httpd.conf dosyası içerisinde aşağıdaki değişiklikleri yapmak gerekiyor; ilk olarak aşağıdaki satırı bulun ve başındaki (#) işaretini kaldırıp uncomment edin sonrasında ise hemen bir satır üzerine LoadFile /usr/local/lib/libxml2.so satırını ekleyin.
Görüntü şöyle olmalıdır:
Not: Sıralama önemlidir.
LoadFile /usr/local/lib/libxml2.so LoadModule security2_module libexec/apache2/mod_security2.so
Daha sonra /usr/local/etc/apache2/Includes/mod_security2.conf editleyip küçük bir değişiklik daha yapmamız gerekiyor.
Ben apache 2.0.x sürümünü kullanıyorum ve bu sürümde modsecurity21 kurduğunuz zaman bahsettiğim bu conf dosyası içerisinde gelen IfModule containerındaki bir syntax hatası yüzünden mod_security'nin audit.logları ile ilgili sorunlar yaşanıyor. Sorunu yaşadığım sıralarda konuyu araştırırken kurulum sırasında bu dosyaya eklenen IfModule satırında apache 2.2.x versiyonu için geçerli olan syntax'ın kullanılmış olduğundan bahseden yazılar buldum ve sonuç olarak doğru formatta yazınca sorun ortadan kalktı.
Şimdi bu değişikliği yapalım: /usr/local/etc/apache2/Includes/mod_security2.conf dosyasını editleyin ve içeriğini aşağıdaki gibi değiştirin. (# ile comment out edilen satır kurulumla gelen orjinal halidir.)
Bu adım da bittiyse mod_sceurity'nin temel konfigürasyon ayarlarının tutulduğu dosyayı editleyip kuralların uygulanmasını sağlayabiliriz.
Kural dosyaları /usr/local/etc/apache2/Includes/mod_security2 dizini altında bulunmaktadır ve bu dosyalardan ismi modsecurity_crs_10_config.conf olanı ana tanımlamaların yapıldığı conf dosyasıdır. Dosyayı incelediğiniz zaman değiştirebileceğiniz bir çok parametre bulunduğunu görebilirsiniz. Bunlardan birisi de ModSecurity'nin hangi modda çalışacağımı belirleyen SecRuleEngine parametresidir; bu parametre kurulumda default olarak “DetectionOnly” modda geliyor. Bu da gelen isteklerin sadece monitor edilmesini ve herhangi bir engelleme yapılmamasını sağlıyor. Eğer bu parametreyi On konumuna getirirseniz, kurallar ile eşleşen http istekleri engellenmeye başlayacaktır; dolayısı ile biz de On yapacağız.
Görünüm şöyle olmalıdır:
# Turn ModSecurity on ("On"), set to monitoring only # ("DetectionOnly") or turn off ("Off"). SecRuleEngine On
Bu değişiklikler ile birlikte, mod_security default kurallar ile birlikte çalışabilir hale gelmektedir. Dolayısı ile apache'yi restart edebilir ve mod_security'nin devreye girmesini sağlayabiliriz.
# apachectl restart
Şu anda mod_security çalışıyor olmalı; eğer herşey yolunda gittiyse, httpd-error.log dosyasında aşağıdaki gibi bir çıktı görmeniz gerekir.
[notice] ModSecurity for Apache 2.1.7 configured - Apache/2.0.63 (FreeBSD) [notice] Apache/2.0.x (FreeBSD) configured -- resuming normal operations
Görüldüğü gibi ModSecurity devrede. Gelen isteklerle ilgili bilgileri ve ne gibi bir işleme tabi tutulduğunu gene /var/log dizini altında httpd-modsec2_debug.log dosyasında görebilirsiniz.
İşte bir örnek:
[28/Jan/2009:19:20:27 +0200] [192.168.12.125/sid#2840adf8][rid#2878a050][/] [1] Access denied with code 400 (phase 2). Pattern match "^[\\d\\.]+$" at REQUEST_HEADERS:Host. [id "960017"] [msg "Host header is a numeric IP address"] [severity "CRITICAL"]
Ayrıca, daha detaylı bilgiler de aynı dizindeki httpd-modsec2_audit.log dosyasında tutulmaktadır. Bu dosyaya loglanacak bilgilerin neler olacağı ana conf dosyasında (modsecurity_crs_10_config.conf) belirtilmektedir. İlgili açıklamaları okuyup kendinize göre özelleştirmeniz mümkündür.
ModSecurity ile ilgili temel kurulum notları bunlardan ibaret. Özellikle kullanıma yönelik olarak değinmediğim bir çok nokta var; derine inmek için aşağıdaki kaynakça'dan yararlanabilirsiniz.
Kaynaklar:
http://www.modsecurity.org/
http://www.modsecurity.org/documentation/modsecurity-apache/2.5.7/html-multipage/
http://www.enderunix.org/docs/modseckilavuz.htm
http://www.cyberciti.biz/faq/freebsd-install-configure-mod_security/
Bu yazılar da ilginizi çekebilir:
- Apache mod_proxy, mod_cache ile Reverse Proxy Kurulumu
- Bandwidth Monitoring – Bandwidthd
- IPFIREWALL ve Snort_Inline ile IPS – Part 2: Snort_Inline Kurulumu
- OTRS (Open Ticket Request System) Kurulumu
- eAccelerator Kurulumu
Yorumlar
Henuz yorum yapilmamis.
Yorumda bulunun.