Скрипт автобана по IP

  • 7 Ответов
  • 1094 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

Скрипт автобана по IP
« : 18.03.2015, 15:17:55 »
Привет!

Поставил задачу банить по IP всех кто пробует искать папки Wordpressа, плагинов итд.
Логи пухнут уже ;)

Нашел скрипт:
ban.php
Код
<?
// PHP-скрипт автоматического бана по IP в .htaccess при посещении запрещенного URL
// от Дмитрия 'DiM' (www.dimlife.com)
// Инструкция по использованию скрипта http://dimlife.com/php:htaccess-ban
 
$tomail = 'admin@dimlife.com'; // email владельца сайта
$frommail = 'robot@dimlife.com'; // условный email отправителя
$date = date('d.m.Y H:i:s');
$ip = $_SERVER['REMOTE_ADDR'];
$url = $_SERVER['REQUEST_URI'];
$useragent = $_SERVER['HTTP_USER_AGENT'];
$refer = $_SERVER['HTTP_REFERER'];
$ban = "# ".$date." ".$url." \r\nDeny from ".$ip." \r\n"; // эта строка запишется в .htaccess
$htaccess = $_SERVER['DOCUMENT_ROOT'].'/.htaccess'; // путь до .htaccess
$str = file_get_contents($htaccess);
$fn = 'Deny from '.$ip;
$pos = strpos($str,$fn);
 
// если IP-адрес не забанен в .htaccess
if ($pos === false)
{
  $o = @fopen($htaccess, "a+"); // открывает .htaccess
  $write = @fputs($o, $ban); // пишет строку о бане
  // уведомление на email админа сайта
  mail (
         $tomail,
         'Новый бан! ('.$url.')',
         'дата: '.$date.' | IP: '.$ip."\r\n".'юзерагент: '.$useragent."\r\n".'Запрос: '.$url.' | реферал: '.$refer,
         'From:'.$frommail
       );
  fclose($o);
  // показывает нарушителю страницу с уведомлением о бане
  echo '
        <html><head></head><body style="background:#363636;font-family:Century Gothic;color:#CFCFCF">
        <div style="position:fixed;top:25%;left:25%;width:400px;height:400px;top:expression((document.documentElement.scrollTop + screen.height/2 - 200) + \'px\');margin-left:-200px;"><span style="font-size:300px">БАН!</span></div>
        </body></html>
      ';
 
}
 
// если IP-адрес уже забанен в .htaccess
else
{
  // только уведомление на email админа сайта
  mail (
         $tomail,
         'Уже забанен ('.$ip.')',
         'дата: '.$date.' | IP: '.$ip."\r\n".'юзерагент: '.$useragent."\r\n".'Запрос: '.$url.' | реферал: '.$refer,
         'From:'.$frommail
       );
}
?>

Прописал в htaccess редирект на бан
Код
RewriteRule wp-login.php /ban.php [NC] // админка wordpress

htaccess редиректит, скрипт отрабатывает, но в htaccess не добавляет с первого раза. Если еще раз запустить ban.php, то IP добавляется и запрет на сайт работает.

Вопросы:
1) Подскажите почему не сразу после редиректа не заносится IP-ник в htaccess?
2) Что нужно добавить в код, чтобы IP-ник добавлялся не в конец файла, а после строки order allow,deny ?

*

voland

  • ********
  • 9358
  • 420
  • СКАЙП утерян! Пишите в телеграм @volandku
Re: Скрипт автобана по IP
« Ответ #1 : 18.03.2015, 15:20:18 »
Недальновидное решение.
Во первых - так полинтернета забаниться, во вторых, после разрастания файла htaccess начнутся из-за этого тормоза.

Re: Скрипт автобана по IP
« Ответ #2 : 18.03.2015, 15:31:31 »
Недальновидное решение.
Во первых - так полинтернета забаниться, во вторых, после разрастания файла htaccess начнутся из-за этого тормоза.

На счет разрастания и тормозов я знаю. На счет полинтернета не совсем согласен - у меня ходят с прокси на одни и теже урлы. хочется какое то время не давать возможность бруттить с одного IP, тем самым усложнив задачу. пусть лучше ответ получают 403, чем 404

Какие более дальновидные решения?

*

voland

  • ********
  • 9358
  • 420
  • СКАЙП утерян! Пишите в телеграм @volandku
Re: Скрипт автобана по IP
« Ответ #3 : 18.03.2015, 15:33:58 »
Если ВДСка - то поискать решения для нгинкс, типа таких.

Re: Скрипт автобана по IP
« Ответ #4 : 19.03.2015, 01:50:58 »
Если ВДСка - то поискать решения для нгинкс, типа таких.

не ВДСка. обычный хостинг. но суть понял. можно конечно создать таблицу куда добавлять IP и скрипт который в шаблон

Re: Скрипт автобана по IP
« Ответ #5 : 19.03.2015, 02:51:05 »
все таки не понятно мне почему с первого раза не отрабатывает скрипт.
ладно бы вообще не работал, но тут отрабатывает, но не добавляет IP с первого раза.

помогите кто сталкивался с таким. буду признателен.

*

flyingspook

  • *****
  • 3607
  • 236
Re: Скрипт автобана по IP
« Ответ #6 : 19.03.2015, 11:13:03 »
Код
  $o = @fopen($htaccess, "a+"); // открывает .htaccess
  $write = @fputs($o, $ban); // пишет строку о бане
замените на
Код
  $o = fopen($htaccess, "a+"); // открывает .htaccess
fputs($o, $ban); // пишет строку о бане

как возможный вариант еще отправка почты может мешать закрытию файла

Re: Скрипт автобана по IP
« Ответ #7 : 19.03.2015, 23:54:00 »
Решение нашлось. Оказалось что страница кешировалась.

Добавить в начало кода
Код
  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  header("Last-Modified: " . gmdate("D, d M Y H:i:s")." GMT");
  header("Cache-Control: no-cache, must-revalidate");
  header("Cache-Control: post-check=0,pre-check=0", false);
  header("Cache-Control: max-age=0", false);
  header("Pragma: no-cache");