Art569

Рейтинг
46
Регистрация
06.08.2006
Himiko:
По поводу парсинга логов...

Можно сделать так на FreeBSD:

cat НУЖНЫЙСАЙТ.access.log | grep "GET /" | awk '{print $1}' | sort | uniq -c | sort -n | awk '{if ($1>100) print "ipfw add deny tcp from "$2" to me"}' | sh

Эта команда будет банить все ip-адреса, которые более 100 раз запрашивали корень сайта.

Здесь, наверное, опечатка.

Нужно заменить grep "GET /" на grep "GET / ", а то под это условие попадет не только корень сайта.

Я немножко дописал. Получилось что-то типа такого


#!/bin/sh

logname=/home/site/logs/access.log
linesave=.linenumber

line1=$(cat $logname |wc -l)

if [ -f $linesave ];
then
line0=$(cat $linesave)
offset=$((line1-line0))
else
offset=$line1
fi

if [ $line1 -ne $line0 ];
then
echo $line1 >$linesave
tail -n $offset $logname | grep "GET / " | awk '{print $1}' | sort | uniq -c | sort -n | awk '{if ($1>100) print "ipfw add deny tcp from "$2" to me"}' | sh
fi

Основное изменение - просмотр только части access.log с последнего запуска. Таким образом, если запускать этот скрипт каждую минуту, то будут блокироваться IP обратившиеся к главной странице 100 раз ({if ($1>100)) в течении минуты. Механизм блокировки основан на командах Himiko.

Пояснения к коду.

Обрабатываемый лог указывается в переменной logname. В коде это /home/site/logs/access.log. Файл .linenumber используется для сохранения номера последней строки со времени последнего запуска. Если используется ротация логов, то .linenumber нужно удалять.

Anobeos:
2:Art569
Не спасает ни то ни другое ((( 😡 Тупо висит в процессах, но признаков жизни не подает.

Так эта фишка программы :).

А если серьезно, то при генерации и в Windows XP такое происходит.

innix, хочу предложить такое решение (временное) с помощью iptables.

iptables -A INPUT -p tcp --dport 80 -m string --string 'GET / ' --algo bm --from 40 --to 46 -m connlimit --connlimit-above 4 -j DROP

Не более 4 одновременных запросов к главной странице с одного IP. На остальные страницы ограничение не действует.

Это реализация в Linux :(, наверное такое же можно сделать и в FreeBSD 6.1

neov, IMHO если в свап (swap) ничего не пишется, то на размер памяти (по top) можно не обращать внимание.

VirtualPC не самый лучший выбор, по крайней мере, 2007 (6.0.156.0). Не поддерживает загрузку по сети, как описано в статье Установка Windows XP по сети. RIS, но не Microsoft. А это для меня было важно.

Stripe:
Как сделать так, что бы траф приходящий на сайт со всех IP кроме Питера уходил на сторонний ресурс или вместо нужных контактных данных выводились другие? Так же вопрос - как сделать это безопасно, что бы сайт не выкинули из индекса?

На мой взгляд, безопасней выдавать одно содержание Питеру, а другое Москве с использованием JavaScript. При этом для поисковиков страница будет одинаковой.

neolord:
нотисы не считаются за ошибки синтаксиса, и без них все должно работать.
Но ради чистоты эксперимента я поставил E_STRICT. И display_startup_errors тоже включил из конфига (раньше включалось из .htaccess)

Толку ноль
тестю вот на этом http://awcms.ru/error.php
там внутри

if $var=x then x;

для надежности.

Согласен E_NOTICE не ошибки синтаксиса. Ошибки это E_PARSE.

Ваш код при E_STRICT у меня выдает пустой экран. При Е_ALL Parse error: syntax error, unexpected T_VARIABLE, expecting '(' in /home/www/2.php on line 2. Такая же ошибка и при E_ALL & ~E_NOTICE

Версия PHP Version 5.2.6

neolord,

error_reporting=E_ALL ^ E_NOTICE

заменить на error_reporting=E_ALL или на error_reporting = E_ALL & ~E_NOTICE

neolord, php.ini


error_reporting = E_ALL
display_errors = On

Dreammaker, можешь паказать, кто ворует?

Всего: 188