Страница 1 из 1

Логирование причин банов в PF

Добавлено: 2012-04-19 13:07:06
Dmitriy_K
Большая просьба поделиться опытом своих расследований причин банов в PF. Можно ли как-то записывать в лог превышения лимитов типа max-src-conn, max-src-conn-rate ?
У меня есть такая строка в конфиге:

Код: Выделить всё

options="(max-src-conn 200, max-src-conn-rate 2000/20, overload <ddos>)"
Вроде бы весьма свободный лимит (как раз хотелось его урезать), но периодически (до 5-10 раз в день) возникают баны, причины которых непонятны.
Я сделал простой кроновский контрольный скрипт, чтобы проверять наличие явных злоупотреблений при банах. Там в качестве дополнительной информации выдаётся частота в минуту запросов с забаненных адресов на web-сервер и виды наиболее частых запросов.

Код: Выделить всё

#!/bin/sh

LOG=/usr/home/web/pf_show.log
N_LOG=/jails/web/var/log/nginx-access.log
REPORT=/usr/home/web/report.txt

SHOW_DDOS=`(pfctl -t ddos -T show 2>&1) |grep -v 'ALTQ' |awk '{print $1}'`

if test -z "$SHOW_DDOS"
then exit 0
fi

for IP in $SHOW_DDOS
do
tail -2 $LOG |grep -q $IP
CHECK=$?
	if [ $CHECK -eq 1 ]
	then
	TIME=`date "+DATE: %Y-%m-%d  TIME: %H:%M:%S"`
	S_TIME=`date "+%s"`
	L_TIME1=`date -v -1M "+%H:%M:"`
	L_TIME2=`date -v -2M "+%H:%M:"`
	IP_FR1=`tail -20000 $N_LOG |grep "$L_TIME1" |grep $IP |wc -l`
	IP_FR2=`tail -20000 $N_LOG |grep "$L_TIME2" |grep $IP |wc -l`
	COM_FR1=`tail -20000 $N_LOG |grep "$L_TIME1" |wc -l`
	COM_FR2=`tail -20000 $N_LOG |grep "$L_TIME2" |wc -l`

	echo "$IP $TIME $S_TIME $IP_FR1 $IP_FR2 $COM_FR1 $COM_FR2" >> $LOG
	echo "$IP  $TIME" > $REPORT
	echo >> $REPORT

	echo "Requests for 1min from IP = $IP_FR2/$IP_FR1" >> $REPORT
	echo >> $REPORT
	tail -20000 $N_LOG |grep "$L_TIME1" |grep $IP |tail -5 >> $REPORT
	echo >> $REPORT
	tail -20000 $N_LOG |grep "$L_TIME1" |grep $IP |awk '{print $2,$7,$11}' |sort |uniq -c |sort -r |head -5 >> $REPORT
	echo "--------------------------------------" >> $REPORT

	echo "Common requests for 1min = $COM_FR2/$COM_FR1" >> $REPORT
	echo >> $REPORT
	tail -20000 $N_LOG |grep "$L_TIME1" |awk '{print $1,$7,$9,$11}' |sort |uniq -c |sort -r |head -5 >> $REPORT
	cat $REPORT |mail -s "Temporaly blocked IP" root
	fi
done

exit 0
Странным образом получается несколько банов в день с весьма невинными показаниями счётчиков.

Код: Выделить всё

217.69.134.91  DATE: 2012-04-19  TIME: 13:04:00

Requests for 1min from IP =      118/      54

217.69.134.91 www. - [19/Apr/2012:13:03:24 +0400] "GET /ru/pressa/analitic_comments/index.php?id4=14414 HTTP/1.0" 200 16800 "-" "Mozilla/5.0 (compatible; Mail.RU/2.0)"
217.69.134.91 www. - [19/Apr/2012:13:03:25 +0400] "GET /common/img/uploaded/Funds/legal-entity/Bankovskie_rekvizity.doc HTTP/1.0" 200 28672 "-" "Mozilla/5.0 (compatible; Mail.RU/2.0)"
217.69.134.91 www. - [19/Apr/2012:13:03:25 +0400] "GET /ru/issuers-news/index.php?amp;afrom4=14.03.2012&ato4=14.04.2012&page4=23&id4=6480 HTTP/1.0" 200 23813 "-" "Mozilla/5.0 (compatible; Mail.RU/2.0)"
217.69.134.91 www. - [19/Apr/2012:13:03:26 +0400] "GET /ru/pressa/analitic_comments/index.php?id4=14413 HTTP/1.0" 200 13941 "-" "Mozilla/5.0 (compatible; Mail.RU/2.0)"
217.69.134.91 www. - [19/Apr/2012:13:03:26 +0400] "GET /ru/trading/Comments_experts/printable.php?id4=33861&print=1 HTTP/1.0" 200 3285 "-" "Mozilla/5.0 (compatible; Mail.RU/2.0)"

   1 www. /ru/issuers-news/index.php?amp;afrom4=14.03.2012&ato4=14.04.2012&page4=23&id4=6524 "-"
   1 www. /ru/issuers-news/index.php?amp;afrom4=14.03.2012&ato4=14.04.2012&page4=23&id4=6523 "-"
   1 www. /ru/issuers-news/index.php?amp;afrom4=14.03.2012&ato4=14.04.2012&page4=23&id4=6522 "-"
   1 www. /ru/issuers-news/index.php?amp;afrom4=14.03.2012&ato4=14.04.2012&page4=23&id4=6521 "-"
   1 www. /ru/issuers-news/index.php?amp;afrom4=14.03.2012&ato4=14.04.2012&page4=23&id4=6520 "-"

--------------------------------------
Common requests for 1min =     1647/    1393

   3 188.234.192.175 /images/loadingAnimation.gif 404
   2 93.88.22.13 / 301 "-"
   2 93.88.22.13 / 200 "-"
Я не могу понять есть ли при этом какие-то другие злоупотребления типа сканов портов (хотя там всё дропается кроме 80 и 443). Каким образом превышаются лимиты?
Буду благодарен за идеи как можно получить ещё полезную информацию о причинах банов.

Re: Логирование причин банов в PF

Добавлено: 2012-08-14 19:57:38
Alex Keda
а в messages или security не пишется?
ipfw в security пишет...