PDA

Pogčedajte punu verziju : URL Filter


misk0
26. 01. 2007., 08:49
Imam tonu zahtjeva (zahvaljujuci nekom luzeru koji je napisao virus koji vuche neke nepostojece linkove sa moja 2 sajta) tipa GET /1/999.php i slicno koji ne rade nista, osim sto mi opterecuju apache (sad manje, ali na pocetku je bio uzas) i prave dnevno par par MB logova koji kasnije webalizeru usporavaju rad jer nakon mjesec dana treba mu po 2 sata da obradi log fajl od 300-400MB.

Ono sto mi treba je neki modul za apache koji ce da te zahtjeve ubije u startu prije obrade, da ih prestane logovati i da ih prestane obradjivati. Sad, da li postoji modul ili postoji neki drugi soft koji bih mogao iskoristiti, nije vazno, vazno je da radi....

Ne mogu blokirati preko IPova jer ih ima mnogo ... rijetko se ponavljaju.

bojan_bozovic
26. 01. 2007., 10:00
Mozes iskljuciti logovanje, ali mislim da to ne zelis.

http://httpd.apache.org/docs/2.0/logs.html

misk0
26. 01. 2007., 10:24
Naravno da NE zelim iskljuciti kompletno logovanje, vec logovanje tih 3 tipa zahtjeva. Koliko sam gledao, nema mogucnost 'selektivnog' logovanja u smislu 'ovo loguj a ovo ne'.

bojan_bozovic
26. 01. 2007., 11:16
Kako nema kad ima (mod_log_config)


# Mark requests from the loop-back interface
SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
# Mark requests for the robots.txt file
SetEnvIf Request_URI "^/robots\.txt$" dontlog
# Log what remains
CustomLog logs/access_log common env=!dontlog

Napisi kolko treba regexa da ignorise i zameni sa time CustomLog direktivu.

zextra
26. 01. 2007., 12:03
@bojan_bozovic: za to nisam znao, dobra stvar :)

@misk0: Apache (za 2.0 verziju znam 100%) podrzava slanje logova (preko pajpa) eksternoj aplikaciji, koja radi sa samim log fajlovima.

Primer:

CustomLog "| /path/to/your_log_app /var/log/apache/access.log" combined
ErrorLog "| /path/to/your_log_app /var/log/apache/error.log"

Naravno, aplikaciju napises tako da prihvata tekst kroz stdin, i ispisuje ga u navedeni fajl (ili stdout, ako nisi naveo fajl - za svaki slucaj).

Evo ti primer skripte u perlu koja radi taj posao.


#!/usr/bin/perl

open my $log, q{>>}, $ARGV[0] or die $!;

while ( <> ) {
# prilagodi sledece regexp-e
# ti najbolje znas po cemu bi hteo da filtriras zapise...
next if /\s404\s/;
next if /\s404\s/;
#...

# nisam 100% siguran da li apache prosledjuje i \n na kraju reda, proveri
print $log $_, qq{\n};
}

Ovo je primer kako ne treba pisati perl kod :)

Naravno, ako planiras da radis na ovaj nacin, malo popravi kod ili ga napisi u jeziku koji bolje poznajes (za ove stvari moze i CLI PHP da radi posao, bas kao i obican grep)

misk0
26. 01. 2007., 12:58
oki, logovanje smo sredili... a sad kako sprijeciti apache da se sto manje 'opterecuje' sa tim zahtjevima. Nesto kao 'zatvori odmah konekciju, bez parsiranja ovo ono'??

Koristio sam mod_throttle ali nisam siguran da radi posao..

ivanhoe
26. 01. 2007., 14:39
RewriteRule zeljena_adresa.htm - [F]
gde je zeljena adresa neki regexp po zelji, a moze da se kombinuje i sa RewriteCond za bolju kontrolu

vraca odmah forbidden http status... ako to stavis direktno u httpd.conf radice veoma brzo