Форум русской поддержки Joomla!® CMS
06.12.2016, 06:59:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

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

 (Прочитано 750 раз)
0 Пользователей и 1 Гость смотрят эту тему.
mister_boy
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 151


« : 18.03.2015, 14:17:55 »

Привет!

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

Нашел скрипт:
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
Профи
********

Репутация: +487/-86
Offline Offline

Пол: Мужской
Сообщений: 8711


любит наш народ всякое гавно...


« Ответ #1 : 18.03.2015, 14:20:18 »

Недальновидное решение.
Во первых - так полинтернета забаниться, во вторых, после разрастания файла htaccess начнутся из-за этого тормоза.
Записан
mister_boy
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 151


« Ответ #2 : 18.03.2015, 14:31:31 »

Недальновидное решение.
Во первых - так полинтернета забаниться, во вторых, после разрастания файла htaccess начнутся из-за этого тормоза.

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

Какие более дальновидные решения?
Записан
voland
Профи
********

Репутация: +487/-86
Offline Offline

Пол: Мужской
Сообщений: 8711


любит наш народ всякое гавно...


« Ответ #3 : 18.03.2015, 14:33:58 »

Если ВДСка - то поискать решения для нгинкс, типа таких.
Записан
mister_boy
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 151


« Ответ #4 : 19.03.2015, 00:50:58 »

Если ВДСка - то поискать решения для нгинкс, типа таких.

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

Репутация: +1/-0
Offline Offline

Сообщений: 151


« Ответ #5 : 19.03.2015, 01:51:05 »

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

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

Репутация: +226/-9
Offline Offline

Сообщений: 3529


« Ответ #6 : 19.03.2015, 10:13:03 »

Код:
  $o = @fopen($htaccess, "a+"); // открывает .htaccess
  $write = @fputs($o, $ban); // пишет строку о бане
замените на
Код:
  $o = fopen($htaccess, "a+"); // открывает .htaccess
fputs($o, $ban); // пишет строку о бане

как возможный вариант еще отправка почты может мешать закрытию файла
Записан
mister_boy
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 151


« Ответ #7 : 19.03.2015, 22: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");

Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet