Перейти к содержанию

Рекомендуемые сообщения

Всем привет!

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 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.