[Çözüldü] Fail2ban standart web sitesi login girişimi

Başlatan smt_smt, 26 Kasım 2013 - 18:29:32

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

smt_smt

Merhaba arkadaşlar,
fail2ban konusunda baya araştırdım fakat çözemediğim ve artık yapılabilirliğinden şüphe ettiğim bir sorum var.
ben ssh haricinde de login attemptlerinde belli bir süreliğine o ip adresinin banlanmasını istiyorum.
yapılandırma ayarlarındaki [default] un onun için kullanıldığını sanıyordum. veya [apache] var.. çünkü logpath'i apachenn kendi error logu.
Ama normal web sitesi loginindeki hatalara dayalı banlamayı gerçekleştiremedim.

aslında direk php ve database ile direk çözülür bu sorun. her login sorgusunda wrong dönüyorsa belli bir table a now() ile ip'yi ekleyip çeşitli kontrollerle her requestte ip databaseden ip kontrolü odaklı.. Biraz karışık bahsetmiş olabilir affola.

Ama bu isteğimi ve sorunumu fail2ban ile çözmek istiyorum. Ekstra bir select, insert  ve ifler kurmaktansa...

cagriemer

Web uygulamasinin fail2ban'in takip ettigi log dosyalarina kayit dusmesi gerekiyor boyle bir engelleme yapilabilmesi icin. Yani diyelim wordpress kurulumunuz var, wp-login sayfasini takip etmek istiyorsunuz fail2ban ile. filter.d/ altina bir wp-login.conf dosyasi olusturup dersiniz ki access.log'u takip et, wp-login'e 100 saniyede 4'ten fazla post istegi yapildiysa ve eger bu istekler 200 dondurmusse, IP'yi su kadar sure icin engelle.

Yani istediginizi yapmak mumkun, fakat web uygulamasinin davranisina oldukca bagimli.

acablack

fail2ban ı sende araştırdıysan  /etc/fail2ban/jail.conf
da hangi log dosyasına hangi süre ile hangi Chain'e ip yazılacagı ayarını görmüşündür. Bunu enable yaptıysan  bunun bir alt klasörün de pattern lar var. Orada ki patternları kontrol et.  Yüksesk ihtimal orada ki desenler ile log da yazan desenler uyuşmuyor. Özellikle Fail2ban ve log da yazan tarih ve saat alanını iyi kontrol et.

smt_smt

#3
Cevaplar için teşekkürler. error logunda login failure hatalarını kaydetmediğini farkettim. Ben de login kontrolünde şifre veya kullanıcı adı sağlanmıyorsa error_log("Login Failure") gibi bir şey yazdım. Artık gerçekten de error.log'unda ip clien=IP Login Failure gibi bir şey yazıyor
ÖR:
[Fri Nov 29 12:13:15 2013] [error] [pid 20682] sapi_apache2.c(325): [client IP] Login Failure

Fakat fail2ban'de henüz devreye sokamadım.
------------------------------------------------------------------
filter.d/apache-auth için internetten de bulduğum bazı şeyleri ekledim.. Buna ek olarak Login Failure kelimesini de... Ama eksik bir şey yapıyorum. ya da direk hatalı
apache-auth:
failregex = ^%(_apache_error_client)s (AH01797: )?client denied by server configuration: (uri )?\S*(, referer: \S+)?\s*$
            ^%(_apache_error_client)s (AH01617: )?user .*? authentication failure for "\S*": Password Mismatch(, referer: \S+)?$

           [b] ^Login Failure$[/b]
            ^%(_apache_error_client)s (AH01618: )?user .*? not found(: )?\S*(, referer: \S+)?\s*$
            ^%(_apache_error_client)s (AH01614: )?client used wrong authentication scheme: \S*(, referer: \S+)?\s*$
            ^%(_apache_error_client)s (AH\d+: )?Authorization of user \S+ to access \S* failed, reason: .*$
            ^%(_apache_error_client)s (AH0179[24]: )?(Digest: )?user .*?: password mismatch: \S*(, referer: \S+)?\s*$
            ^%(_apache_error_client)s (AH0179[01]: |Digest: )user `.*?' in realm `.+' (not found|denied by provider): \S*(, referer: \S+)?\s*$
            ^%(_apache_error_client)s (AH01631: )?user .*?: authorization failure for "\S*":(, referer: \S+)?\s*$
            ^%(_apache_error_client)s (AH01775: )?(Digest: )?invalid nonce .* received - length is not \S+(, referer: \S+)?\s*$
            ^%(_apache_error_client)s (AH01788: )?(Digest: )?realm mismatch - got `.*?' but expected `.+'(, referer: \S+)?\s*$
            ^%(_apache_error_client)s (AH01789: )?(Digest: )?unknown algorithm `.*?' received: \S*(, referer: \S+)?\s*$



error_log haricinde apache'nin kendii içinde login failure'ları kaydetme şansım yok mu.
Apache.conf'un içinde bazı ayarlamalar yaptım. ErrorLog yazım tarzı gibi bir şey bulmuştum ama işlemedi.

yani şuan en azından "Login Failure" diye yukarda da kopyala yapıştır yaptığım bi dize error.log'a giriyor. Ama fail2ban ile bu ip'yi engelleyemiyorum

şimdiden teşekkürler

acablack

#4
[Fri Nov 29 12:13:15 2013] [error] [pid 20682] sapi_apache2.c(325): [client IP] Login Failure
Bu log ile  pattern lar uyuşmuyor gibi
mesela
[error].*:<HOST>Login Failure
gibi bir pattern olması gerekiyor. Az çok reguler expression biliyorsan bunu da çok güzel halledebileceğine inanıyorum.

smt_smt

Regular expression'ı bu işi çözecek kadar biliyorum aslında. Sorun aslında şurdan başladı; hatalı loginnler error.log'a kaydedilmiyormuş. Neyse php'de error_log fonksiyonuyla ekleyebiliyorum. İstediğim bir dizi ile hatta..
Ama başına bir şey ekliyor apache bilmem ne diye o biraz karıştırıyor işleri.. Bilmiyorum bir şeyleri eksik yapıyorum belki.

Tam bir örnek de bulamadım. Error loga bunu yazdırın, conf'a bunu aratın gibi..

En sonda yeter dedim PHP ile yazdım. fail olmuşsa biri tabloda tutuluyor. 3. yaparsa 1 saat giremiyor. 1 Saat sonra başarılı giriş yaparsa sıfırlanıyor.

Ama tabi bu loginin haricinde avantajları var fail2ban'in. Mesela phpmyadmin istekleri, ya da işte durmadan admin dosyası jjs dosyası bilmem dosyası diye aratıyorlar ya, o arama hatalarını engeller. Bir gün döner dolaşır bi dosya bulur diye tırsmıyorum değil :)

acablack

Güvenlik işi çok önemli, dediğiniz gibi. Ve sorunu klasik bir sql cümlesi ve php ile çözmüşsünüz.  Elinize sağlık. Bende bir ara başka bir konu için bayagı ugraşmıştım.