Portál AbcLinuxu, 30. dubna 2025 16:49
LogFormat "%h - - %t %s %D %V%U" testovaci CustomLog /var/log/httpd/test-oma.sk.log testovaciRátanie celkovej dĺžky do cronu daný shell skript (pričom číslo 212605775 je moja magická konštanta ktorá ešte neblokuje slušných robotov, ale blokuje tých zlých).
#!/bin/sh export LC_ALL=en_GB.utf8 dd="%d/%b/%Y:%H:%M" d0=`date +$dd` d1=`date -d '1 minute ago' +$dd` d2=`date -d '2 minute ago' +$dd` d3=`date -d '3 minute ago' +$dd` d4=`date -d '4 minute ago' +$dd` da="$d0\|$d1\|$d2\|$d3\|$d4"; #echo $d IFS=" "; d=`date --rfc-3339='seconds'` #echo "$d :: 194.187.168.25" > /var/log/httpd/dos-oma.log for i in `cat /var/log/httpd/test-oma.sk.log |grep -v '.ico\|.png\|.jpg\|.js' | grep "$da" | awk 'BEGIN { FS=OFS=SUBSEP=" "}{arr[$1]+=$7 }END {for (i in arr) print arr[i],i}' |sort -g|tail`; do l=`echo $i | sed 's/ .*//'` if [ `echo "$l > 212605775" |bc` -eq 1 ]; then echo $i | sed "s/.* /$d :: /" >> /var/log/httpd/dos-oma.log fi doneFail2ban konfig Naj problém bol dať dátum/čas do logu, aby to fail2ban zvládal (viď date --rfc-3339='seconds' hore), nie je to moc dokumentované. Potom to už šlo. Filter filter.d/apache-dos.filter :
[Definition] failregex = ^.* <HOST>$a jail (popri ostatných typu ssh a pod):
[oma-dos] enabled = true filter = apache-dos port = http,https logpath = /var/log/httpd/dos-oma.log maxretry = 1 findtime = 60asi by to išlo aj elegantnejšie, teším sa na komentáre.
Tiskni
Sdílej:
Na mojom webe www.oma.sk sa občasne vyzurujú nejaký crawleri. Trošku mi uniká dôvod prečo si taliani sťahujú webstránku po Slovensku a po slovensky, ale čo už. Ako sa brániť?Spíš mi uniká důvod, proč se tomu bránit. Většina těhle crawlerů jsou vyhledávače a tímhle efektivně odřízneš ty italské.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.