Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Автобан по IP


Recommended Posts

Всем привет!

Opencart 2.3.0.2


Возникла следующая проблема: На три часа сайт стал очень тормозить. Стал смотреть статистику загрузки процессора и лог обращений... Кто-то качал сайт с одного ip (91.244.169.154)

Забанил данного злодея через htaccess. Но это не решило проблемы целиком - только временная мера.

Нашел данный скрипт:

<?php
$bot='';
$ip=$_SERVER['REMOTE_ADDR'];

if (strstr($_SERVER['HTTP_USER_AGENT'], 'Yandex')) $bot='Yandex';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Google')) $bot='Google';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Yahoo')) $bot='Yahoo';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Mail')) $bot='Mail';

if ($bot=='') {
$db=mysqli_connect("localhost","логин","пароль","имя_бд");

 $res=mysqli_query($db,"INSERT INTO all_visits (ip,date) VALUES
     (INET_ATON('".$ip."'),'".time()."')");
 $res=mysqli_query($db,"SELECT count(id) FROM all_visits WHERE
     (ip=INET_ATON('".$ip."') and date>'".(time()-10)."') LIMIT 1");
 $count_visit=mysqli_fetch_array($res);

 if ($count_visit[0]>10) {
 $res=mysqli_query($db,"INSERT INTO black_list_ip (ip,date) VALUES
     (INET_ATON('".$ip."'),'".time()."')");

 $start_line=0;
 $lines='';
 $ln_hta='';

 $fh=fopen(".htaccess", "a+");
 flock($fh, LOCK_EX);
 fseek($fh, 0);
 while (!feof($fh)) $lines.=fread($fh,2048);
 $lines=explode("\n", $lines);

  for ($n=0; $n<=count($lines); $n++) {
   if (strstr($lines[$n],"Order Allow,Deny")) $start_line=$n;
  }
  if ($start_line!=0) for ($n=0; $n<$start_line; $n++) $ln_hta[]=$lines[$n];
  else $ln_hta=$lines;

  $ln_hta[]="Order Allow,Deny";
  $ln_hta[]="Allow from all";

  $res=mysqli_query($db,"SELECT INET_NTOA(ip) AS ip,date FROM black_list_ip
      ORDER BY INET_ATON(ip)");
  while ($bad_ip=mysqli_fetch_array($res)) {
   if (time()<($bad_ip[date]+900))$ln_hta[]=" deny from ".$bad_ip[ip];
  }

  $ln_hta=implode("\n",$ln_hta);
  ftruncate($fh, 0);
  fwrite($fh, $ln_hta);
  flock($fh, LOCK_UN);
  fclose($fh);
 }
}
?>

Взято отсюда: http://usefulscript.ru/temporary_avtoban.php (не знаю, может кто сочтет это за рекламу ))) но просто скопипастить не вариант)



Но куда я не вставлял этот код - не работает (и index.php и header.tpl и прочее).

Подскажите, как можно его интегрировать? Может быть есть какое-нибудь другое решение для Opencart?

Надіслати
Поділитися на інших сайтах


Попробуйте в конце htaccess написать такой код:

Order Allow,Deny
Allow from all
Deny from НОМЕР АЙ-ПИ
Deny from ДРУГОЙ АЙ-ПИ

Deny from ТРЕТИЙ АЙ-ПИ

и т.д.

Надіслати
Поділитися на інших сайтах


4 минуты назад, Rubynoid сказал:

Попробуйте в конце htaccess написать такой код:

Order Allow,Deny
Allow from all
Deny from НОМЕР АЙ-ПИ
Deny from ДРУГОЙ АЙ-ПИ

Deny from ТРЕТИЙ АЙ-ПИ

и т.д.

 

 

Я так и сделал... но завтра может быть другой ip, а постоянно мониторить загрузку сервера вряд ли осуществимо, поэтому я и ищу способ автоматизации

Надіслати
Поділитися на інших сайтах


3 минуты назад, wizand1 сказал:

 

 

Я так и сделал... но завтра может быть другой ip, а постоянно мониторить загрузку сервера вряд ли осуществимо, поэтому я и ищу способ автоматизации

Ну тогда заблокируйте на пару деньков сайт от всех ай-пи, кроме своего:

order deny,allow deny from all allow from СВОЙ-АЙПИ

Возможно за пару дней он и отстанет.

Змінено користувачем Rubynoid
Надіслати
Поділитися на інших сайтах


Смешно )))) выключить сайт, чтобы за пару дней он упал в выдаче плюс потеря потенциальных клиентов

 

В принципе, судя по подписи у Вас над аватаром граббинг Вам знаком не понаслышке :D

Змінено користувачем wizand1
Надіслати
Поділитися на інших сайтах


2 минуты назад, wizand1 сказал:

Смешно )))) выключить сайт, чтобы за пару дней он упал в выдаче плюс потеря потенциальных клиентов

я рад, что поняли шутку.

Ищите способ автоматической фильтрации нужных ай-пи, главное не перепутать ай-пи злодея с потенциальным покупателем :wink:

 

Надіслати
Поділитися на інших сайтах


А логи можно глянуть (связанный кусочек)? 

Вообще, чтобы грузануть сайт с одного ip нужно конкретно постараться. Или устанавливать многопотоковое соединение, или запрашивать какие-то очень тяжелые страницы. И если такие страницы вообще присутствуют - от них нужно избавляться.

 

Во-первых, скрипт плохой. Даже сложно сказать, что в нем самое плохое - установление доп соединения с базой (потенциальные конфликты), отсутствие закрытия этого соединение, минимум +4 запроса в базу для каждого пришедшего посетителя, работа с файловой системой или авторедактирование .htaccess через пхп. Решение даже называться костылем не достойно.

 

Во-вторых, решаться это, в идеале, должно не на уровне вебсервера. Так, например, даже если Вы даете вебсерверу установку "этому IP ничего не давать", то вебсерверу все равно придется на запросу злоумышленника отвечать. То есть дос-атаки возможны, как и ранее. Разве что теперь вебсервер отвечает быстро, и с одного ip сайт уже не положить.

Для сложных случаев на серверах всегда  присутствует утилита iptables. Это линуксовый брандмауэр (фаервол). Изучите его, или найдите тех людей, кто разбирается, и настройте сервер так, чтобы он не падал от запросов одного IP. 
И повторюсь, если проблема в создании мульти соединения от данного IP, то iptables легко режет их до нужного числа (например, с одного IP нельзя одновременно установить более чем 10 соединений), фильтрует зловредные IP и делает еще кучу сложных штук.

Если проблема в отсутствии кэша или присутствии тяжеленных страниц, и Вас там кладут через f5 - то работать нужно в первую очередь над этим. Учитывая 1 IP, который вы баните руками, настройкой nginx можно реализовать не только защиту от мелкого досера, а еще и повысить быстродействие сайта.

 

Змінено користувачем Gorman
Надіслати
Поділитися на інших сайтах

7 часов назад, Gorman сказал:

А логи можно глянуть (связанный кусочек)? 

Вообще, чтобы грузануть сайт с одного ip нужно конкретно постараться. Или устанавливать многопотоковое соединение, или запрашивать какие-то очень тяжелые страницы. И если такие страницы вообще присутствуют - от них нужно избавляться.

 

 

Спойлер

 

 

2018-03-02_19-23-40.thumb.png.72c9820b6e44066fac095262d5ba5946.png

2018-03-02_19-24-24.png

 

 

 

6 часов назад, zlob сказал:

У @Yoda в блоге была статья как раз на эту тему 

 

https://ocshop.info/ubit-ix-vsex-na-xuj/

 

Подскажите, куда его лучше подключить

Цитата

...и подключаем его в index перед $registry->set(‘db’, $db);

 

в index.php такой строки нет (Opencart 2.3.0.2)

Змінено користувачем wizand1
Надіслати
Поділитися на інших сайтах


Если Вы все-таки решили использовать данный скрипт, чтобы было не так больно, я бы все таки советовал попросить кого-нибудь его переписать хотя бы в части установления соединения с базой - т.к. опенкарт и так инициализирует соединение к базе. Можно и нужно использовать его, а не устанавливать новое.

 

Если это слишком сложно для Вас, то хотя бы скажите, вы в скрипте этом меняли данные подключения к базе - юзер, пароль и прочее? Таблицу дополнительную в базе данных создали?

Если кидаете код в индекс.пхп, то что происходит? Ничего или ошибка?

Змінено користувачем Gorman
Надіслати
Поділитися на інших сайтах

5 часов назад, Gorman сказал:

Если это слишком сложно для Вас, то хотя бы скажите, вы в скрипте этом меняли данные подключения к базе - юзер, пароль и прочее? Таблицу дополнительную в базе данных создали?

Если кидаете код в индекс.пхп, то что происходит? Ничего или ошибка?

 

Решил, что использовать его не буду - не дело веб-сервера отбивать ddos )) при необходимости воспользуюсь специализированным сервисом

 

а по поводу подключения. Да, данные своей базы указывал, скрипт размещал в отдельном файле, а в индекс.пхп с помощью 

<?php include "avtoban.php"; ?> 

Выдает ошибку

Змінено користувачем wizand1
Надіслати
Поділитися на інших сайтах


На самом деле отбивать ддос вполне может быть работой вебсервера, если работа эта не доходит до php :) В случае со скриптом мы уже спускаем на уровень приложения, вот здесь действительно не месту этому.
Если есть доступ к апачу, что вряд ли, если вы на хостинге, то можно установить специальный мод анти-ддос. Но лучше, конечно, решать на сетевом уровне.

 

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

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.