Bu notta Apache web sunucusu için belirtilen kurallara göre yasaklama işlemi gerçekleştirerek servis dışı bırakma türündeki saldırılara karşı IP bazlı kısıtlama sağlayan mod_evasive modülünün RedHat tabanlı sistemlerde kurulum uygulaması yapılacaktır.

Modül Kurulumu

Öncelikle gerekli Apache sunucusu için gerekli bağımlı paketlerinin kurulumu gerçekleştirilir.  

# yum install httpd-devel

Yum ile EPEL paket deposundan aşağıdaki gibi modül kurulumu sağlanabilir.

# yum install mod_evasive

Alternatif bir yol olarak bağlantıdan mod_evasive paketi indirildikten sonra apxs2 ile kurulumu gerçekleştirilir.

# cd /usr/src
# wget wget http://www.zdziarski.com/blog/wp-content/uploads/2010/02/mod_evasive_1.10.1.tar.gz
# tar xzf mod_evasive_1.10.1.tar.gz
# cd mod_evasive
# apxs2 -cia mod_evasive20.c

Kaynak koddan kuruldu ise Apache yapılandırma dosyası içerisi (/etc/httpd/conf/httpd.conf) düzenlenerek modül etkin hale getirilir.

LoadModule evasive20_module   /usr/lib/httpd/modules/mod_evasive20.so

Paket deposundan kurulum sonrası modülle ilgili yapılandırmanın tutulduğu dosya içerisindeki (/etc/httpd/conf.d/mod_evasive.conf) parametreler sisteme uygun şekilde ayarlanır.

<IfModule mod_evasive20.c>
DOSHashTableSize    3097
DOSPageCount        2
DOSSiteCount        50
DOSPageInterval     1
DOSSiteInterval     1
DOSBlockingPeriod   60
DOSEmailNotify admin@sirket.com
DOSLogDir   "/var/lock/mod_evasive"
</IfModule>

Beyaz liste oluşturarak istenen IP adreslerinin kontrol haricinde tutulması sağlanabilir:

DOSWhitelist 127.0.0.1
DOSWhitelist 127.0.0.*

Değişikliklerin etkin olması için Apache servisi yeniden başlatılmalıdır.

# /etc/init.d/httpd restart

Kurulum sonrası test için arşiv dosyası içerisinde gelen test.pl betiği kullanılabilir.

# ./test.pl
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden

Apache log dosyasında durum şu şekilde gözükmektedir:

# tail -f /var/log/httpd/error_log
[Tue Apr 12 17:02:22 2012] [error] [client 192.168.0.2] client denied by server configuration: /var/www/html/
[Tue Apr 12 17:02:22 2012] [error] [client 192.168.0.2] client denied by server configuration: /var/www/html/
[Tue Apr 12 17:02:22 2012] [error] [client 192.168.0.2] client denied by server configuration: /var/www/html/

IPtables Kullanan Betiğin Entegrasyonu

Her ne kadar istemciler bu şekilde bloklanarak HTTP 403 hata sayfası ile karşılaşsalar da bu durum bağlantı tutulduğu her halükarda sistem kaynağının tüketilmesine yol açacaktır. Bu durumda DOSSystemCommand    parametresi yardımıyla aşağıdakine benzer bir betik çalıştırılarak belirlenen IP adreslerinden gelen paketlerin belirli bir süre boyunca IPtables tarafından düşürülmesi sağlanabilir.

DOSSystemCommand "sudo /etc/local/scripts/yasak.sh %s"

Burada çalıştırılmak istenen betik yasak.sh şu şekilde olabilir:

#!/bin/sh
IP=$1
IPTABLES=/sbin/iptables
$IPTABLES -A banned -s $IP -p TCP --dport 80 -j DROP
echo "$IPTABLES -D banned -s $IP -p TCP --dport 80 -j DROP" | at now +1 hours

Betiğin Apache kullanıcısı tarafından çalıştırılabildiği kontrol edilmelidir.
IPtables kullanılarak 60 saniye içerinde 20 bağlantıdan fazlasını kurmaya çalışan IP adresinin yasaklanması için aşağıdaki gibi bir kural girilmesi yeterlidir.

# iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
# iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 20 -j DROP
# service iptables save

0 comments:

Post a Comment

 
Top