Автоматический банн 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. админа в этом хаке не учитывал ) |