Forums / National / Russian / Модули и плагины / Автобан

12>>>

Автоматический банн IP

Amro
#1 2009-02-04 21:23
Есть предложение по внедрению в Cotonti Автобана, под Seditio для своих проектов я уже это реализовал и успешно применяю.

У меня таким способом банятся все спам роботы и челы желающие проверить меня на дыры XSpiderom и всякими другими сканерами

В чём суть :

Итак, у нас есть так называемый "Системный лог", куда сыпятся все ошибки. Нас интересуют только системные ошибки, т.е. в таблице sed_logger значение поля log_group. Есть смысл проводить временной анализ этой таблицы, к примеру брать 30 мин, и проверять начиная с текущего времени за минусом 30 мин, количество ошибок с группой "sec". И если к примеру за 30 мин у вас 5 ошибок уровня "sec", то банить этот IP к примеру на неделю. Все параметры можно сделать чтоб задавались в конфиги того же банлиста:
Пример хака который я использую для Seditio на своих проектах, для Cotonti он тоже подойдёт :

файл common.php
вставляем прямо перед разделом

/* ======== Check the banlist ======== */

/* ========== Auto Banlist System ============ */

$now_time = $sys['now']; // текущее время
$old_time = $sys['now'] - 1800; // время за минусом 30 мин
$usip = $usr['ip']; // собственно IP 
$count_ban_ip = 0; // количество ошибок
// далее делаем запрос к таблице логов и выдираем логи за последние 30 мин.
$sql = sed_sql_query("SELECT log_date, log_ip, log_group FROM $db_logger WHERE log_date < '$now_time' AND log_date > '$old_time'");

while ($rowban = sed_sql_fetcharray($sql))
{
//если в логе системная ошибка, то накручиваем счётчик
	if (($usr['ip'] == $rowban['log_ip']) && ($rowban['log_group'] == "sec") )
	{
		$count_ban_ip++;		
	}
}
// если за 30 мин более 5 ошибок, то баним IP на делелю
if ($count_ban_ip > 5)
 {
//проверям не забанен ли уже IP
	$sql_ban = sed_sql_query("SELECT COUNT(*) FROM $db_banlist WHERE banlist_ip = '$usip'");
	$count_ban = sed_sql_result($sql_ban,0,"COUNT(*)"); 
	
	if ($count_ban == 0)
	 {
// текущее время + неделька
		 $ban_expire = $now_time + 604800;
		 $sql_insert = sed_sql_query("INSERT INTO $db_banlist (banlist_id, banlist_ip, banlist_reason, banlist_expire) 
										VALUES ('', '$usip', 'Your IP address is banned for 1 week!', '$ban_expire')");
	 }
 } 
Если идеологу интересно ) то можно это сделать и в стандарте к Cotonti.
Сам считаю это незоменимой вещью, если нет тогда наклена нам вообще этот лог )))
P.S. админа в этом хаке не учитывал )
Dayver
#2 2009-02-04 21:45
Прикольная идея! Вот только захотят ли координаторы дать согласие на внедрение в ядро?!
Pavlo Tkachenko aka Dayver
Ratibor
#3 2009-02-04 21:49
Нельзя добавлять это в стандартную поставку, покрайней мере в таком виде.
К примеру у моего прова из локалки в инет все выходят под одним внешним IP.
Один накосячит и остальные тоже фиг попадут на сайт.
Это же грозит пользователям спутникового инета.
Не задавай глупых вопросов, не услышишь вранья.
Dayver
#4 2009-02-04 21:53
увеличить лимит ошибок с 5 до 15 к примеру.....а если действительно это злоумышленик сидит на айпишнике сети, как же тогда с ним боротся как не банить всю сетку ?
Pavlo Tkachenko aka Dayver
Amro
#5 2009-02-04 21:53
Ratibor т.е. ты будешь смотреть как тебя долбят с какого-нить IP и пить кофею, так ?

Я предложил идею, не код который нужно внедрять! Этот код это пример для теста.
Естественно всё должно быть настраиваемо! И никто не говорит про идёю бана на неделю.
В настройках банлиста просто будут следующие конфиги :

Активировать автобанлист : Да/Нет
Временной интервал : 10 мин, 15 мин, 30 мин, 1 час и т.д.
Количество ошибок за данное время : 5, 10, 15, 20
Время бана : 10 мин, 30 мин, 1 час, 24 часа и т.д.

При этом системный лог и автобан это зависимые вещи, автобан без включенного лога работать не будет
Dayver
#6 2009-02-04 21:55
да и вообще лимит же можно в админке выставлять.....боитесь сетку банить выставляйте нуОооооочень большое число, вот и все
Pavlo Tkachenko aka Dayver
Ratibor
#7 2009-02-04 21:55
# Dayver : а если действительно это злоумышленик сидит на айпишнике сети, как же тогда с ним боротся как не банить всю сетку ?
Из за этото сотни людей не смогут попасть на сайт.
И поверь это будет намного хуже, народ этого не поймет.
Не задавай глупых вопросов, не услышишь вранья.
Amro
#8 2009-02-04 22:02
Ratibor:
Из за этото сотни людей не смогут попасть на сайт.
И поверь это будет намного хуже, народ этого не поймет.
По твоему мнению банлист, который есть сейчас, нужно вообще из двигла убрать, а это не есть гуд, его надо не убирать, а расширять возможности
Dayver
#9 2009-02-04 22:02
Сайт вам положат на лопатки вот этого народ точно не поймет
Pavlo Tkachenko aka Dayver
Ratibor
#10 2009-02-04 22:02
# Amro : Ratibor т.е. ты будешь смотреть как тебя долбят с какого-нить IP и пить кофею, так ?
Я не против этой идеи, но это все надо продумать досконально.
Я привел пример того какие грабли могут вылезти.
И о этих граблях я говорю не по наслышке, т.к. во первых я уже сказал про своего прова,
а во вторых все пользователи моего сайта - это пользователи спутникового инета :)
Я пробовал раньше банить по IP, но ничего из этого толкового не выходило.

# Dayver : Сайт вам положат на лопатки вот этого народ точно не поймет
Автобан в этом не большой помошник.
Чтоб не сломали сайт, нужно дыры вовремя закрывать,
вернее их не делать :)
А протов DDOS атаки тоже помощи мало, вперед пров лягет.
Не задавай глупых вопросов, не услышишь вранья.
This post was edited by Ratibor (2009-02-04 22:06, 15 years ago)
Dayver
#11 2009-02-04 22:08
# Ratibor : Чтоб не сломали сайт, нужно дыры вовремя закрывать,
вернее их не делать :)
Ну сообственно ради этого мы тут и собрались не так ли?
Pavlo Tkachenko aka Dayver
Trustmaster
#12 2009-02-04 23:22
Отличная идея... для плагина. Кому надо - поставит. Кому не надо не будет. И ничего лишнего в ядре.
May the Source be with you!
Amro
#13 2009-02-05 01:48
Качаем кому надо, кому нинадо не качаем Autobanlist

Тестим, плагин работает в хуке global
Впринципе хук global есть и в Seditio, так что должен работать и там!

P.S. Советую временной интервал проверки системного лога ставить меньше чем период бана, а то не разбанитесь никогда )))
Trustmaster
#14 2009-02-05 01:53
May the Source be with you!
Amro
#15 2009-02-05 01:56
Ну в начале оттестить нужно ведь )

12>>>