Автоматический банн IP
| Amro |  | 
|---|---|
| Есть предложение по внедрению в 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')");
	 }
 } Сам считаю это незоменимой вещью, если нет тогда наклена нам вообще этот лог ))) P.S. админа в этом хаке не учитывал ) | 
| Dayver |  | 
|---|---|
| Прикольная идея! Вот только захотят ли координаторы дать согласие на внедрение в ядро?! Pavlo Tkachenko aka Dayver | 
| Ratibor |  | 
|---|---|
| Нельзя добавлять это в стандартную поставку, покрайней мере в таком виде. К примеру у моего прова из локалки в инет все выходят под одним внешним IP. Один накосячит и остальные тоже фиг попадут на сайт. Это же грозит пользователям спутникового инета. Не задавай глупых вопросов, не услышишь вранья. | 
| Dayver |  | 
|---|---|
| увеличить лимит ошибок с 5 до 15 к примеру.....а если действительно это злоумышленик сидит на айпишнике сети, как же тогда с ним боротся как не банить всю сетку ? Pavlo Tkachenko aka Dayver | 
| Amro |  | 
|---|---|
| Ratibor т.е. ты будешь смотреть как тебя долбят с какого-нить IP и пить кофею, так ? Я предложил идею, не код который нужно внедрять! Этот код это пример для теста. Естественно всё должно быть настраиваемо! И никто не говорит про идёю бана на неделю. В настройках банлиста просто будут следующие конфиги : Активировать автобанлист : Да/Нет Временной интервал : 10 мин, 15 мин, 30 мин, 1 час и т.д. Количество ошибок за данное время : 5, 10, 15, 20 Время бана : 10 мин, 30 мин, 1 час, 24 часа и т.д. При этом системный лог и автобан это зависимые вещи, автобан без включенного лога работать не будет | 
| Dayver |  | 
|---|---|
| да и вообще лимит же можно в админке выставлять.....боитесь сетку банить выставляйте нуОооооочень большое число, вот и все Pavlo Tkachenko aka Dayver | 
| Ratibor |  | 
|---|---|
| # Dayver : а если действительно это злоумышленик сидит на айпишнике сети, как же тогда с ним боротся как не банить всю сетку ?Из за этото сотни людей не смогут попасть на сайт. И поверь это будет намного хуже, народ этого не поймет. Не задавай глупых вопросов, не услышишь вранья. | 
| Amro |  | 
|---|---|
| Ratibor:По твоему мнению банлист, который есть сейчас, нужно вообще из двигла убрать, а это не есть гуд, его надо не убирать, а расширять возможности | 
| Dayver |  | 
|---|---|
| Сайт вам положат на лопатки вот этого народ точно не поймет Pavlo Tkachenko aka Dayver | 
| Ratibor |  | 
|---|---|
| # Amro : Ratibor т.е. ты будешь смотреть как тебя долбят с какого-нить IP и пить кофею, так ?Я не против этой идеи, но это все надо продумать досконально. Я привел пример того какие грабли могут вылезти. И о этих граблях я говорю не по наслышке, т.к. во первых я уже сказал про своего прова, а во вторых все пользователи моего сайта - это пользователи спутникового инета :) Я пробовал раньше банить по IP, но ничего из этого толкового не выходило. # Dayver : Сайт вам положат на лопатки вот этого народ точно не пойметАвтобан в этом не большой помошник. Чтоб не сломали сайт, нужно дыры вовремя закрывать, вернее их не делать :) А протов DDOS атаки тоже помощи мало, вперед пров лягет. Не задавай глупых вопросов, не услышишь вранья. Відредаговано: Ratibor (04.02.2009 22:06, 16 років тому) | 
| Dayver |  | 
|---|---|
| # Ratibor : Чтоб не сломали сайт, нужно дыры вовремя закрывать,Ну сообственно ради этого мы тут и собрались не так ли? Pavlo Tkachenko aka Dayver | 
| Trustmaster |  | 
|---|---|
| Отличная идея... для плагина. Кому надо - поставит. Кому не надо не будет. И ничего лишнего в ядре. May the Source be with you! | 
| Amro |  | 
|---|---|
| Качаем кому надо, кому нинадо не качаем Autobanlist Тестим, плагин работает в хуке global Впринципе хук global есть и в Seditio, так что должен работать и там! P.S. Советую временной интервал проверки системного лога ставить меньше чем период бана, а то не разбанитесь никогда ))) | 
| Trustmaster |  | 
|---|---|
| А в downloads/plugins? May the Source be with you! | 
| Amro |  | 
|---|---|
| Ну в начале оттестить нужно ведь ) |