1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

Варвары

Тема в разделе "OFF-топик", создана пользователем лиса, 27.01.2014.

Загрузка
Статус темы:
Закрыта.
  1. лиса

    лиса Заблокирован

    Регистрация:
    05.10.10
    Сообщения:
    395
    Симпатии:
    84
    Тему мне подсказало обсуждения вопроса о взломах
    http://www.xf-russia.ru/forum/threads/sluxi-o-vzomax-xenforo.8619/

    Мне странным показались рассуждения о том, насколько движок устойчив против атак хакеров, при этом, как бы админа вообще нет на сайте, там 24 часа в сутки хозяйничают варвары. Такое положение дел с защитой сайта было бы оправдано в случае испытания движка сайта на устойчивость к взломам. Кроме того, использование хакерами сайта не по назначению создаёт непроизводительные нагрузки на сервер. Я назвала тему "Варвары" не просто так, потому что хакеры и их программы обращаются с сервером на котором находится сайт, по варварски, тем самым создаются такие нагрузки на сервер, которых нет от добропорядочных гостей и пользователей сайтов

    Таким образом, вред сайту наносится уже самим присутствием хакера на сайте, а, если ничего не предпринимать, надеясь на авось, то рано или поздно сайт будет взломан хакерами. Отсюда вывод, с непрошеным гостям необходимо уделять внимание, создавать им дискомфорт на сайте и препятствовать им в достижении ими своих целей.

    Ниже я приведу код PHP файла, который в определённой степени создаст проблемы для хакеров. Этот файл не даст вам полной защиты, но существенно ограничит перемещение хакера по вашему сайту. Хакер попадая на файл автоматически банится по IP-адресу.
    Код:
    <?php
    /*
    *--------------------------------------------------------
    * Модуль antiskaner V1.0.7  2013-11-07
    * Copyright(C) Vizantium  http://www.vizantium.net
    *--------------------------------------------------------
    * Модуль предназначен для ограничения доступа к сайту
    * сканирующих машин.
    * Принцип работы в том, что при обращении к определённому
    * файлу с данным кодом гость блокируется по ip-адресу через
    * файл .htaccess
    * IP-адрес заблокированного прописывается в файл .htaccess
    * по адресу, указанному в этой строке
    * $f = fopen($_SERVER['DOCUMENT_ROOT'] . '/forum/.htaccess', "a");
    * В каталоге с файлом создаём текстовый файл ip.txt, где скрипт
    * файла будет вести записи о блокировке IP-адрес.
    * Старые записи в файле .htaccess желательно временами удалять,
    * чтобы не нагружать сервер
    *--------------------------------------------------------
    */
    header($_SERVER["SERVER_PROTOCOL"] . "403 Access forbidden");
    header("Status: 403 Access forbidden");
    
    /* Ip-адрес пользователя. В настройках разных серверов он может
    содержаться в разных переменных. Здесь нужно вставить именно
    ту, которая будет содержать реальный адрес пользователя. */
    $USER_IP = getenv ("REMOTE_ADDR");
    
    /* Запись Ip-адреса в текстовый файл */
    $log = fopen("ip.txt", "a+");
    fwrite($log, "\n " . $USER_IP . "  дата:" . date('Y-m-d/H:i:s'));
    fclose($log);
    /* Баним по Ip-адресу в файле .htaccess */
    $f = fopen($_SERVER['DOCUMENT_ROOT'] . '/forum/.htaccess', "a");
    fwrite($f, "\n# " . date('Y-m-d H:i:s') . "\ndeny from " . $USER_IP);
    fclose($f);
    echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">";
    echo "<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\" xml:lang=\"en\">
    <head>
    <title>Access forbidden!</title>
    <link rev=\"made\" href=\"mailto:support@vizantium.net\" />
    <style type=\"text/css\">
    body {color: #000000; background-color: #FFFFFF;}
    a:link {color: #0000CC;}
    p, address{margin-left: 3em;}
    span {font-size: smaller;}
    </style>
    </head>
    <body>
    <h2>Error 403</h2>
    <h1>Access forbidden!</h1>
    <p>
    You don't have permission to access the requested object.
    It is either read-protected or not readable by the server.
    </p>
    <p>
    If you think this is a server error, please contact
    the <a href=\"mailto:support@vizantium.net\">webmaster</a>.
    </p>
    <address>
    <a href=\">www.vizantium.net\">Portal Vizantium</a>
    </address>
    </body>
    </html>";
    exit();
    ?>
    В коде PHP модуля замените адрес сайта и мыло на свои. IP-адрес будет зарываться в файле .htaccess и записываться в текстовый файл, который нужно создать с именем ip.txt и разместить его вместе с PHP файлом в одном каталоге. IP-адреса в файле .htaccess лучше удалять по мере накопления, что бы сервер не грузить. В текстовом файле история забаненых будет сохранена. Запись забаненых IP-адресов ведётся с указанием даты и времени бана.

    Разместите модуль там где считаете нужным, с названием файла, которое вам нужно. Количество таких файлов-ловушек не ограничено, но по понятным причинам приведённый код PHP модуля не может находится в рабочих файлах сайта. Чтобы удалить IP-адрес из забаненых, достаточно удалить адрес из файла .htaccess.
     
    Betelgelze и Mirovinger нравится это.
  2. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Немного не так. Рано или поздно сайт может упасть. Т.е. произойдет отказ в обслуживании. Это не одно и то же, что взлом. Взлом - значительно более серьезная проблема. Так как он позволяет злоумышленнику не просто отключить сайт, а получить доступ к данным пользователей, к закрытому контенту и т.д.
    Таким образом, DoS и взлом - это разные атаки, которые могут дополнять друг друга, но могут быть и независимы. В случае XenForo взлом является очень нетривиальной задачей. Все таки он достаточно устойчив к этому в отличие от массы других движков.

    Теперь по взломам. Проще всего защитить админку белым списком IP адресов. При этом попытки получения доступа к админке можно фиксировать и использовать в качестве условия для fail2ban. Это будет намного эффективней, чем любой код PHP, который требует для своей работы как минимум запуска интерпретатора хоть в виде модуля, хоть в виде CGI и т.д. Ведь веб-сервер ведет свои логи ошибок. Ну а 403 ошибка при доступе к админке, к примеру, и будет фиксироваться. Примечательно как раз то, что это произойдет еще до запуска кода на сервере. Таким образом, получаем легкую обработку таких запросов. Ну а fail2ban - это хорошо зарекомендованное средство блокирования различных атак на многие сервисы, включая web, ftp, ssh и т.д.

    Конечно, есть и ложка дегтя для схемы, указанной выше. Дело в том, что fail2ban можно установить и использовать только на своем сервере (виртуальном или физическом). На шаред хостингах это невозможно.
     
    Последнее редактирование: 27.01.2014
    Mirovinger и Yoskaldyr нравится это.
  3. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    сомнительная защита, учитывая что на нормально настроенном сервере нет апача и htaccess там до одного места :)
     
  4. лиса

    лиса Заблокирован

    Регистрация:
    05.10.10
    Сообщения:
    395
    Симпатии:
    84
    Конечно, не поняли.
    Речь не идёт о прямой защите сайта и его файлов, ну, или если и есть в этом признаки, то они определяются уже применением данного модуля. Как частный случай, можно использовать его как индексный файл в переименованном каталоге админки. НО это на любителя.

    Основное предназначение модуля, это банить злодеев за сканирование файлов сайта, чем затруднить работу программы хакера и снизить нагрузку на сервер от сканирующих программ. Это не теория, лечит сайт на 100%. Сейчас у меня на сайтах хакер редкий гость.
    Не встречала, но дополнение существенное, учитывая, что используется файл .htaccess.
    --- добавлено : 27 янв 2014 в 16:39 ---
    Этот модуль даже близко не стоит рядом с защитой от ДДОС, потому что он "работает" с файлами не относящимися к движку. Сканер злодея перебирает сотни файлов известных ему движков, пока не найдёт файлы движка вашего сайта.

    Затем злодей будет ломать ваш сайт целенаправленно, имея уже список файлов вашего сайта.
     
    Последнее редактирование модератором: 04.02.2014
  5. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Похоже это вы не поняли как работает ксенфоро. Поймите при правильной настройке сервера до этого файла даже дело не дойдет, т.к. будет выполяться совсем другие файлы, которые уже обрабатывают полный урл-запроса, фактически в xenforo точек входа для php минимум, в отличие от того же vbulletin и смысла в этой так называемой защите - ноль (еще раз повторюсь это в случае xenforo) и это не учитывая что htaccess может вообще не использоваться на сайте (например если стоит nginx, litespeed, cherokee или lighttpd). Также очень большая "полезность" этой "защиты" если зайдет поисковик по этой ссылке :))), а поисковики зайдут если только где-то появится ссылка на этот скрипт или кто-то из пользователей зайдет по этому урл-у из браузера с установленным яндекс баром или гугло баром (не говоря уже о яндекс-браузере и хроме)

    А от dos и ddos надо защищаться совсем другими средствами, тут я полностью согласен с @infis-ом, но какими именно зависит полностью от задач и знаний администратора (iptables, nginx, fail2ban и т.п.)

    P.S. Данный топик - это начинание полезное в плане того что о защите надо беспокоиться, но в деталях - типичные вредные советы с нулевой полезностью
     
    Mirovinger, Kolya groza morey и infis нравится это.
  6. лиса

    лиса Заблокирован

    Регистрация:
    05.10.10
    Сообщения:
    395
    Симпатии:
    84
    Очевидно я общаюсь с людьми у которых есть свои сервера и они гордятся этим. У меня же другие возможности, отсюда и своё решение в рамках имеющихся возможностей.
    Только мне не понятно, это вы мне пишите о нулевой полезности? Наверное я бы не стала предлагать своё решение проблемы с хакерами, если бы не было бы результата. Кроме того, эффективность модуля зависит от того как его использовать. Просто загрузить его на сервер, наверное результат будет тот, что вы предсказали.

    И кто же ему даст эту ссылку, хакер которого забанили? Это всё теоретические изыскания.
    На сайте я использую в качестве одной из ловушек индексный файл в каталоге форума. Злодеи слетаются на него как мухи на свет лампочки и там остаются упакованными. Ни один робот поисковика не забанился на этом файле.
    --- добавлено : 27 янв 2014 в 17:24 ---
    У моего движка защита ещё круче, но я не хочу, что бы кто-то кроме админа, ковырялся в файлах. Не хочу облегчать труд хакера. Пусть выкладывается по полной, что бы добраться до движка, или валит на другой сайт, где попроще.
     
    Последнее редактирование модератором: 04.02.2014
  7. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Вы зря обижаетесь. Просто @Yoskaldyr и я попытались объяснить, что есть более эффективные методы защиты на нормальных серверах. А Ваш метод больше подходит для шаред хостинга и при доступе к .htaccess.
    Дело в том, что значительно эффективнее не допускать выполнения какого-либо кода, отлавливая несанкционированные обращения еще до PHP. Тогда меньше шансов нарваться на DoS или DDoS. Ну и запрет IP через .htaccess все равно приводит к обработке запроса сервером (apache), на что тратятся ресурсы. Тогда как тот же fail2ban элементарно блокирует через iptables, что не идет ни в какое сравнение с обработкой каким-либо сервисом запроса. И fail2ban постоянно считывает логи веб-сервера. Т.е. веб-серверу достаточно генерировать 403 ошибку и все, дальше все будет работать автоматом. И выполнение PHP в данном случае просто не будет. Более того, удаление из бана IP адресов не требует вмешательства веб-сервера и PHP. Что будет более производительным (и эффективным) решением?
    Любая защита от DoS и от DDoS строится на минимизации затрачиваемых ресурсов на обработку запроса. Поэтому взваливать эту работу на PHP просто неразумно.

    Также какие-либо "заглушки" проще всего повесить через обработку правил веб-сервера (для apache это .htaccess, а для nginx - это его конфиг со схожим функционалом). Тогда не придется дергать лишний раз PHP, что благотворно скажется на производительности сервера.

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

    лиса Заблокирован

    Регистрация:
    05.10.10
    Сообщения:
    395
    Симпатии:
    84
    Вот пример из лог файла

    183.60.243.189 - - [23/Jan/2014:02:07:53 +0400] "GET / HTTP/1.1" 200 1 "http://www.baidu.com" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0" 0
    183.60.243.189 - - [23/Jan/2014:02:07:54 +0400] "GET / HTTP/1.1" 200 1 "http://www.baidu.com" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0" 0
    183.60.243.189 - - [23/Jan/2014:02:07:54 +0400] "HEAD / HTTP/1.1" 200 - "-" "Opera/9.80 (X11; U; Linux i686; en-US; rv:1.9.2.3) Presto/2.2.15 Version/10.10" 0
    183.60.243.189 - - [23/Jan/2014:02:07:55 +0400] "GET /lionsky_client/WebHtmlEditor/1_7_2006_1020/Theme/Office_Tinge/WebHtmlEditor.css HTTP/1.1" 403 1100 "http://www.baidu.com" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0" 0

    Как видите, на четвёртом заходе на сайт и при первом же обращении к файлу IP был забанен
     
  9. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Я где-то говорил, что это не работает?
     
  10. лиса

    лиса Заблокирован

    Регистрация:
    05.10.10
    Сообщения:
    395
    Симпатии:
    84
    Это судьба такая, что мой пример встал под вашим постом.
    А так, я написала свой пост, что бы пояснить суть, для чего этот модуль нужен.
    То что, злодея не нужно подпускать к PHP - это не обсуждается. Но мой хостер сказал, что у него нет решения такой задачки.

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

    лиса Заблокирован

    Регистрация:
    05.10.10
    Сообщения:
    395
    Симпатии:
    84
    Вы всё больше напоминаете мне сапорт.
    Там ещё попкорн жрали, когда я что писала у них на сайте. А мне, что, больше всех надо? Мне-то как раз ничего здесь не нужно и движок моего сайта другой.
    Пойду-ка я отсюдова, технических форумов хватит на всех.
     
  12. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Ну вот, обиделись. Почем зря. Когда речь идет о безопасности, нужно давать пользователям максимум информации о том или ином методе защиты. Соответственно, нужно давать как сильные, так и слабые стороны. Иначе пользователь будет уверен, что он защитился от чего-то, а на самом деле защитился совсем от другого или защитился недостаточно.
    Также часто веб-сервер пытаются защитить с помощью скриптов PHP, создавая таким образом потенциально DoS-узявимость. В вашем случае неверная работа скрипта может привести к полному отказу в обслуживании веб-проекта, если по каким-то причинам будет некорректно записан или обновлен файл .htaccess. Я вообще стараюсь этот файл закрыть от записи пользователем, из под которого работает веб-сервер и PHP. Как раз для того, чтобы избежать умышленного или случайного изменения данного файла.
     
    Yoskaldyr и Mirovinger нравится это.
  13. Aiden

    Aiden Местный

    Регистрация:
    03.01.12
    Сообщения:
    202
    Симпатии:
    74
    Версия XF:
    1.4.3
    Охоспаде!

    Ну вот зачем? У ксени есть, как уже сказали, одна точка: index.php с уже подключаемыми библиотеками. На все директории кинуть права, данные в readme.txt и всё, жизнь какеру усложнили значительно. Можно, конечно, через .htaccess заморачиваться, но это лишнее. Никто в здравом уме не будет искать на сервере файлы, это роботы делают (и зачем, когда можно скачать дистрибутив и посмотреть код/файл/путь?). Запретите доступ, установите надёжные пароли и не придумывайте велосипед.
    Большинство уязвимостей под XF — запрос/база/дыра скрипта. Только нет смысла клепать заплатки, которые и не нужны, ведь всё делается стандартными средствами.

    Вот более интересный вопрос: откуда боты накапывают информацию о сайте? Сайт, которому 1-2 дня уже начинает в логи выводить ошибки 404 при попытках ботов найти файлы админ-панели, хотя домен абсолютным образом нигде не светится ещё.
     
  14. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Так как потенциально на любом форуме используются какие-либо плагины, а качество всех плагинов досконально не проверишь, потому и стараются дополнительно защитить форум. Хотя точки входа определены и их не много, никто не застрахован от попытки залить шелл. И вот в этом случае (когда шел таки зальют через дыру в плагине, например, или через 0-day уязвимость самого движка XenForo, который также потенциально может содержать ошибки) есть возможность запретить выполнение скрипта вне точек входа. Почему бы и не воспользоваться этим?
    Естественно, что злоумышленнику интереснее будет непосредственно в шаблон залить шелл и его уже использовать вполне себе незаметно. Но это не так просто сделать, хотя и реально. Защититься в этом случае можно, лишь периодически сравнивая базы или определенные таблицы.
    Ну у меня так не было. Возможно, сам сайт успевает ссылками или переходами где-то засветиться.
     
  15. лиса

    лиса Заблокирован

    Регистрация:
    05.10.10
    Сообщения:
    395
    Симпатии:
    84
    Вот статистика за десять дней.
    Им не суждено проверить эффективность самозащиты скриптов сайта.
    # 2014-03-17 17:39:04
    deny from 5.79.175.79
    # 2014-03-17 20:42:43
    deny from 91.236.74.158
    # 2014-03-18 09:42:47
    deny from 176.104.205.49
    # 2014-03-18 12:34:19
    deny from 91.207.7.82
    # 2014-03-19 10:14:40
    deny from 194.50.141.137
    # 2014-03-19 11:27:00
    deny from 183.207.228.2
    # 2014-03-19 21:44:46
    deny from 23.89.184.250
    # 2014-03-20 01:36:56
    deny from 91.207.4.125
    # 2014-03-20 03:53:06
    deny from 199.15.233.171
    # 2014-03-20 05:41:10
    deny from 46.191.204.24
    # 2014-03-20 21:32:10
    deny from 72.46.141.50
    # 2014-03-21 04:19:49
    deny from 195.190.13.118
    # 2014-03-21 05:51:43
    deny from 193.150.120.33
    # 2014-03-21 06:58:49
    deny from 95.79.2.242
    # 2014-03-21 08:38:07
    deny from 31.41.216.106
    # 2014-03-21 11:30:56
    deny from 91.236.74.191
    # 2014-03-21 14:31:30
    deny from 91.236.74.7
    # 2014-03-21 23:12:34
    deny from 91.236.74.3
    # 2014-03-22 00:51:08
    deny from 91.236.74.134
    # 2014-03-22 06:13:08
    deny from 72.46.134.146
    # 2014-03-22 08:56:57
    deny from 91.236.74.138
    # 2014-03-22 12:12:56
    deny from 91.207.7.61
    # 2014-03-22 15:53:34
    deny from 76.164.234.138
    # 2014-03-22 17:32:34
    deny from 176.213.34.1
    # 2014-03-22 18:39:19
    deny from 199.19.105.124
    # 2014-03-22 20:43:14
    deny from 62.210.122.216
    # 2014-03-22 23:10:16
    deny from 93.79.84.168
    # 2014-03-22 23:10:16
    deny from 46.241.207.218
    # 2014-03-22 23:10:24
    deny from 31.180.67.223
    # 2014-03-22 23:10:52
    deny from 109.191.3.56
    # 2014-03-22 23:11:19
    deny from 37.213.41.226
    # 2014-03-22 23:11:40
    deny from 109.60.197.201
    # 2014-03-22 23:11:40
    deny from 89.79.197.164
    # 2014-03-22 23:11:55
    deny from 190.232.187.248
    # 2014-03-22 23:12:01
    deny from 79.186.252.209
    # 2014-03-22 23:12:22
    deny from 5.105.139.123
    # 2014-03-22 23:12:26
    deny from 124.13.160.63
    # 2014-03-23 00:51:17
    deny from 76.164.224.130
    # 2014-03-23 06:06:21
    deny from 37.112.65.155
    # 2014-03-23 18:51:21
    deny from 91.236.74.164
    # 2014-03-24 03:43:35
    deny from 93.120.249.194
    # 2014-03-24 05:00:43
    deny from 5.158.235.71
    # 2014-03-24 11:37:18
    deny from 195.82.154.25
    # 2014-03-24 12:00:21
    deny from 72.46.156.18
    # 2014-03-24 21:55:58
    deny from 119.96.195.161
    # 2014-03-25 00:34:38
    deny from 208.66.16.65
    # 2014-03-25 02:13:28
    deny from 36.250.246.220
    # 2014-03-25 02:39:36
    deny from 91.200.13.78
    # 2014-03-25 03:00:07
    deny from 109.87.146.126
    # 2014-03-26 17:24:43
    deny from 180.241.109.158
    # 2014-03-26 17:25:05
    deny from 95.58.171.126
    # 2014-03-26 17:25:06
    deny from 94.179.34.176
    # 2014-03-26 17:25:06
    deny from 212.2.232.210
    # 2014-03-26 17:25:08
    deny from 95.165.35.17
    # 2014-03-26 17:25:08
    deny from 178.122.244.192
    # 2014-03-26 17:26:11
    deny from 95.169.184.219
    # 2014-03-27 00:30:24
    deny from 36.250.244.184
     
  16. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    это все очень просто - боты просто мониторят сайты регистраторов доменов, где есть списки что домен такой-то зарегистрирован и т.д. и т.п. и очень часто в этих списках домены представлены ссылками, а раз ссылка, значит бот по ней может перейти. Есть еще один тип ботов, которые напрямую мониторят изменения ДНС в заданных корневых зонах и сразу после появления домена начинают проверять адрес на наличие стандартных уязвимостей для всех популярных движков типа (WordPress Joomla и т.п.). Смысл в том что все эти стандартные уязвимости как то закрываются, но обычно это манипуляции с настройками уже после установки движка. А т.к. если учитывать человеческий фактор, то времени до того как админ уберет уязвимость может прости от нескольких часов до нескольких дней (при условии конечно что админ будет это делать), то боту только и надо что найти новый сайт и оставить шелл на будущее и потом если админ и уберет уязвимость, то шелл то никуда не денется. Поэтому и имеет смысл таким нехорошим ботам сканить такие новые сайты - хорошее расширение собственных ботнетов.
     
    SpiritFlame, infis, Mirovinger и ещё 1-му нравится это.
  17. лиса

    лиса Заблокирован

    Регистрация:
    05.10.10
    Сообщения:
    395
    Симпатии:
    84
    Подведу итог.
    Страждущих узнать тип движка сайта путём сканирования файлов почти не осталось. Вместо них появились качалки, в сутки банятся до 20 штук IP адресов качалок.
    Опасения, высказанные здесь по поводу автобана роботами поисковиками, не подтвердились. Тем не менее, один бот от Гуля попался. Очевидно, пришёл по внешней ссылке, что видно из лог файла. Попытки удалить адрес файла из базы Гугля не дали результата, бот регулярно приходил посмотреть на файл и банился.

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

    Options +FollowSymlinks
    RewriteEngine on
    RewriteBase /
    RewriteCond %{HTTP_USER_AGENT} Googlebot [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} Mail\.Ru [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} Nigma\.ru [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} news [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} Yahoo [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} bingbot [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} Scooter [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} Aport [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} YahooSeeker [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} msnbot [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} StackRambler [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} Yandex [NC]
    RewriteRule ^$ http://www.mysite.ru [R=301,L]

    ## PREVENT VIEWING OF .HTACCESS
    <Files .htaccess>
    order allow,deny
    deny from all
    </Files>

    В списке USER_AGENT указываете желанных ботов. Все боты из списка, в случае посещения каталога с файлом автобана будут перенаправлены на ту страничку сайта, адрес которой напишите в конце списка
     
    Последнее редактирование: 11.09.2014
    Mirovinger нравится это.
  18. Oleg-2012

    Oleg-2012 Местный

    Регистрация:
    21.04.12
    Сообщения:
    700
    Симпатии:
    297
    Прочитал тему ещё раз и не понял, каким-же образом Хакер попадёт на этот файл, можно конечно сделать фейк но смысл ?
    Вообще часто для защиты от ддоса например инклудится в index.php специальный скрипт, который банит айпишники файерволом при например х посещений за х секунд, пример такого скрипта:

    Код:
    <?php
    /*
    *--------------------------------------------------------
    * Модуль antioverload
    *--------------------------------------------------------
    * Модуль предназначен для ограничения доступа к сайту или
    * к страницам, где он включён.
    * Принцип работы в том, что запоминается ip-адрес и время
    * обращения с этого адреса. И если в течение заданного
    * времени происходит обращение с того же адреса, то ему
    * выдаётся ошибка 503.
    * Модуль необходимо подключать к скрипту самым первым.
    * Этим обеспечивается быстрота его работы.
    *--------------------------------------------------------
    */
    /* Время задержки в секундах */
    $ad_delay=2;
    /* Путь к папке с временными файлами. Должен существовать */
    $ad_DirName=$_SERVER['DOCUMENT_ROOT'].'/tmp';
    /*
    *---------------------------------------------------------
    * Список поисковых роботов.
    * Очень не хорошо, если поисковый робот будет натыкаться
    * на ошибки на сайте. Ему это может сильно не понравиться.
    * Поэтому пишем список юзер-агентов роботов; добавляем или
    * удаляем, что нужно.
    *---------------------------------------------------------
    */
    $ad_Robots_UserAgent=array(
      'aipbot',
      'Aport',
      'eStyleSearch',
      'Gigabot',
      'Gokubot',
      'Google',
      'MJ12bot',
      'msnbot',
      'PlantyNet_WebRobot',
      'StackRambler',
      'TurtleScanner',
      'Yahoo',
      'Yandex',
      'YaDirectBot',
    );
    /*
    *---------------------------------------------------------
    * Список доверенных IP.
    *---------------------------------------------------------
    */
    $ad_good_ip = array(
        '217.107.36.73',
    );
    /*
    *----------------------------------------------------------
    * Функция создаёт в указанной директории файл, начинающийся
    * с буквы a (для отличия от других возможных файлов) и
    * содержащий в имени ip-адрес клиента.
    *----------------------------------------------------------
    */
    function ad_WiteIP($dir){
      $f=fopen($dir.'/a'.$_SERVER['REMOTE_ADDR'], 'w');
      fclose($f);
    }
    /*
    *----------------------------------------------------------
    * Проверка на наличие в поле HTTP_USER_AGENT чего-нибудь из
    * вышенаписанного списка.
    *----------------------------------------------------------
    */
    $ad_IsRobot=false;
    foreach ($ad_Robots_UserAgent as $match){
      if (strstr($_SERVER['HTTP_USER_AGENT'], $match)){
          $ad_IsRobot=true;
          break;
      }
    }
    if( in_array($_SERVER['REMOTE_ADDR'], $ad_good_ip) ) {
        $good_ip = true;
    } else {
        $good_ip = false;
    }
    /*
    *---------------------------------------------------------
    * Поисковые роботы не любят, когда к адресу страницы
    * добавляется переменная сессии. Поэтому, если на сайте
    * используются сессии, то их лучше включать, если агент -
    * не робот.
    * Если сессии не используются, то этот кусок можно убрать.
    *---------------------------------------------------------
    */
    if (!$ad_IsRobot AND !$good_ip){
      session_start();
    }
    if (!$ad_IsRobot AND !$good_ip){
      /*** Чтение каталога и удаление старых файлов ***/
      $ad_dir      =opendir($ad_DirName)
          or die('Отсутствует директория для временных файлов');
      $ad_now      =time();
      $ad_forbid  =$ad_now-$ad_delay;
      /* IP-адрес в имени файла, начинающегося на букву a,
          а время обращения - время изменения файла */
      while (false!==($ad_FName=readdir($ad_dir))){
          if (ereg('^a[1-9]',$ad_FName)
            && (@ filemtime($ad_DirName.'/'.$ad_FName)<$ad_forbid)){
            @ unlink($ad_DirName.'/'.$ad_FName);
          }
      }
      closedir($ad_dir);
      /*** Проверка на существование пометки
          о недавнем обращении с данного ip-адреса ***/
      if (file_exists($ad_DirName.'/a'.$_SERVER['REMOTE_ADDR'])){
          /* Если обращение было недавно, то выводим сообщение об ошибке */
          header('HTTP/1.0 503 Service Unavailable');
          header('Status: 503 Service Unavailable');
          header('Retry-After: '.$ad_delay*3);
    ?>
    <!doctype html public "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head>
    <title>Ошибка 503</title>
    <meta http-equiv="Content-Type" content="text/html; charset=Windows-1251" />
    </head>
    <body>
    <h1>Ошибка 503 (Service Unavailable)</h1>
    <p>Сервер не может в данный момент выдать запрашиваемую Вами страницу.
    Попробуйте вызвать эту страницу позже (клавиша F5).</p>
    </body>
    </html>
    <?php
          ad_WiteIP($ad_DirName);  // Перед выходом записываем ip
          exit;
      }else{
          ad_WiteIP($ad_DirName);
      }
    }
    ?>

    Но это вредно, т.к. защищает от слабых атак, а во вторых создаёт нагрузку на сервер ! ;)
    --- добавлено : 11 дек 2014 в 20:27 ---
    Вот ещё вариант по лучше, но повторюсь использовать лучше когда непосредственно ддосят:
    Код:
    <?php
    #(c) Boolean.
    #####################################################################################
    #####################################################################################
    #####################################################################################
    #####################################################################################
    $config['time']                = 2;
    #Время обращения к скрипту, после которого будет(возможно) выдан бан.
    $config['countaban']            = 5;
    #количество возможных нарушений времени обращения, такая возможность введена для более детально точного отделения пользователей от атакующих ботов.
    $config['directory']            = '_temp';
    #временна директория, должна существовать, и иметь права на запись.
    $config['checkmask']            = 'check';
    #маска для проверки, не стоит трогать.
    $config['banmask']              = 'ban';
    #маска для бана, не стоит трогать.
    #Комманды после нарушения времени и кол-ва обращений. Используйте константу [IP] - IP Бота.
    $config['commands'][]          = 'iptables -A ISPMGR -s [IP] -j DROP';
    $config['commands'][]          = 'iptables -I INPUT -s [IP] -j DROP';
    #Доверенные IP.
    $config['white']['ip']          = @file('whiteips.txt');
    #Доверенные ЮзерАгенты.
    $config['white']['useragent'][] = 'Google bot';
    $config['white']['useragent'][] = 'Yasha bot';
    #Сообщение для пользователя. HTML Работает.
    $config['message']              = file_get_contents("ddosmessage.html");
    #####################################################################################
    #####################################################################################
    #####################################################################################
    #####################################################################################
    $ip                            = $_SERVER['REMOTE_ADDR'];
    $useragent                      = $_SERVER['HTTP_USER_AGENT'];
    if ( ! is_dir($config['directory']) )
        exit("Temp directory not found.");
    if ( ! is_writable($config['directory']) )
        exit("Temp directory is not writable.");
    if ( @in_array($ip,$config['white']['ip']) || @in_array($useragent,$config['white']['useragent']) )
        $white = true;
    if ( ! $white ){
       
        if ( file_exists( $config['directory'] . "/" . $config['checkmask'] . $ip ) ){       
           
            $time = filemtime($config['directory'] . "/" . $config['checkmask'] . $ip);
            $f=fopen( $config['directory'] . "/" . $config['checkmask'] . $ip , 'w' );
            fclose($f);
                   
            if ($time >= time() - $config['time']){
               
                if (file_exists($config['directory'] . "/" . $config['banmask'] . $ip)){
                   
                    $count = file_get_contents($config['directory'] . "/" . $config['banmask'] . $ip);
                    if ($count >= $config['countaban']){           
                        for($i = 0; $i <= count($config['commands']) - 1; $i++)
                            @system(str_replace("[IP]",$ip,$config['commands'][$i]));                   
                    }else{
                        $time = filemtime($config['directory'] . "/" . $config['banmask'] . $ip);
                        if ($time >= time() - $config['time']){
                            $count++;
                            $f=fopen( $config['directory'] . "/" . $config['banmask'] . $ip , 'w' );
                            fwrite($f,$count);
                            fclose($f);
                        }else{
                            $f=fopen( $config['directory'] . "/" . $config['banmask'] . $ip , 'w' );
                            fwrite($f,"1");
                            fclose($f);                       
                        }
                    }     
                       
                }else{
                    $f=fopen( $config['directory'] . "/" . $config['banmask'] . $ip , 'w' );
                    fwrite($f,"0"); 
                    fclose($f);
                }
                exit($config['message']);
            }
           
        }else{   
            $f=fopen( $config['directory'] . "/" . $config['checkmask'] . $ip , 'w');   
            fclose($f);   
        } 
         
    } 
    ?>
     
    Последнее редактирование модератором: 19.12.2014
    Mirovinger и лиса нравится это.
  19. лиса

    лиса Заблокирован

    Регистрация:
    05.10.10
    Сообщения:
    395
    Симпатии:
    84
    В соседней ветке усомнились в работоспособности скрипта. Полагают, что злодей может многократно обращаться к файлу, следствием чего, файл .htaccess разрастётся и это приведёт сайт в нерабочее состояние.
    То что большой файл .htaccess может быть не обработан сервером, теоретически правильно. А остальное надумано и не имеет практического применения.
    первое, надо знать наименование файла где есть закладка
    второе, надо знать алгоритм работы файла
    третье, зачем тратить время и ресурсы, что бы набивать в .htaccess IP адреса.

    Опять же теоретически переполнение .htaccess может вызвать ошибку сервера 500. Ремонтируется сайт быстро - очистка файла .htaccess от адресов, которые понаписал туда злодей. То есть по времени заполнение .htaccess трудоёмкая работа и почти мгновенное уничтожение результатов труда злодея.

    Если этого мало, то усложним работу злодея. В скрипт я добавила таймер, по началу срабатыванию которого, IP адреса перестают записываться в файл .htaccess. Спустя некоторое время файл со скриптом вновь готов записывать IP адреса в .htaccess
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++
    <?php
    /*
    *--------------------------------------------------------
    * Модуль antiskaner V1.1.7 2014-12-11
    * Copyright(C) Vizantium http://www.vizantium.net
    *--------------------------------------------------------
    * Модуль предназначен для ограничения доступа к сайту
    * сканирующих машин.
    * Принцип работы в том, что при обращении к определённому
    * файлу с данным кодом гость блокируется по ip-адресу через
    * файл .htaccess
    * IP-адрес заблокированного прописывается в файл .htaccess
    * по алресу указанному в этой строке
    * $f = fopen($_SERVER['DOCUMENT_ROOT'] . '/forum/.htaccess', "a");
    * В каталоге с файлом создаём текстовый файл ip.txt, где скрипт
    * файла будет вести записи о блокировке IP-адрес.
    * Старые записи в файле .htaccess желательно временами удалять,
    * чтобы не нагружать сервер
    *--------------------------------------------------------
    */
    header($_SERVER["SERVER_PROTOCOL"] . "403 Access forbidden");
    header("Status: 403 Access forbidden");
    /* Ip-адрес пользователя. В настройках разных серверов он может
    содержаться в разных переменных. Здесь нужно вставить именно
    ту, которая будет содержать реальный адрес пользователя. */
    $USER_IP = getenv ("REMOTE_ADDR");
    $naclk = 1;
    $d = 30;
    $url = "count.txt";
    if (file_exists($url)==false)
    {
    $handle = fopen($url, "w");
    $count = 0;
    fwrite($handle, $count);
    fclose($handle);
    }
    else
    {
    $file = file($url);
    $count = $file[0];
    }
    $count++;
    $handle = fopen($url, "w");
    fwrite($handle, $count);
    fclose($handle);
    //echo "<div>" . $count . "</div>";
    if ($count === $naclk)
    {
    /* Запись Ip-адреса в текстовый файл */
    $log = fopen("ip.txt", "a+");
    fwrite($log, "\n " . $USER_IP . " дата:" . date('Y-m-d/H:i:s'));
    fclose($log);
    /* Баним по Ip-адресу в файле .htaccess */
    $site = fopen($_SERVER['DOCUMENT_ROOT'] . '/.htaccess', "a");
    fwrite($site, "\n# " . date('Y-m-d H:i:s') . "\ndeny from " . $USER_IP);
    fclose($site);
    $forum = fopen($_SERVER['DOCUMENT_ROOT'] . '/forum/.htaccess', "a");
    fwrite($forum, "\n# " . date('Y-m-d H:i:s') . "\ndeny from " . $USER_IP);
    fclose($forum);
    }
    if ($count > $naclk)
    {
    $t = time();
    while(1)
    {
    if($d <= time()-$t)
    {
    $filename = 'count.txt';
    if (!$handle = fopen($filename, 'w+"'))
    {
    echo "Не могу открыть '$filename' " ;
    exit;
    }
    fclose($handle);
    echo "<meta http-equiv=\"refresh\" content= \"1;\" />";
    }
    sleep(1);
    }
    }
    echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">";
    echo "<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\" xml:lang=\"en\">
    <head>
    <title>Access forbidden!</title>
    <link rev=\"made\" href=\"mailto:хххххх@хххххх.net\" />
    <style type=\"text/css\">
    body {color: #000000; background-color: #FFFFFF;}
    a:link {color: #0000CC;}
    p, address{margin-left: 3em;}
    span {font-size: smaller;}
    </style>
    </head>
    <body>
    <h2>Error 403</h2>
    <h1>Access forbidden!</h1>
    <p>
    You don't have permission to access the requested object.
    It is either read-protected or not readable by the server.
    </p>
    <p>
    If you think this is a server error, please contact
    the <a href=\"mailto:ХХХХХХ@ХХХХХ.net\">webmaster</a>.
    </p>
    <address>
    <a href=\">www.ваш сайт.net\">ВАШ САЙТ</a>
    </address>
    </body>
    </html>";
    exit();
    ?>
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++

    $naclk = 1; устанавливает количество кликов до включения таймера
    $d = 30; устанавливает длительность работы таймера в секундах.

    Указанными настройками можно регулировать частоту обращения к файлу .htaccess что бы предотвратить переполнение .htaccess записями IP адресов.
    --- добавлено : 11 дек 2014 в 20:53 ---
    Они приходят на сайт уже с целью найти определённые файлы и перебирают все, что у них есть в памяти. Ну, и подрываются на закладках. После чего уходят с сайта ни с чем.
    --- добавлено : 11 дек 2014 в 21:05 ---
    ля гугля надо писать ip адреса, потому что у него индексируют сайты, кроме основного бота, мобильные и просто браузеры.

    А в общем скрипт хороший. У него есть другие версии. Но они как то криво написаны и не на всех серверах работают
     
    Последнее редактирование модератором: 19.12.2014
    Oleg-2012 нравится это.
  20. Oleg-2012

    Oleg-2012 Местный

    Регистрация:
    21.04.12
    Сообщения:
    700
    Симпатии:
    297
    Ну чисто теоретически будет конечно работать, только мало это как повлияет на защиту, да кто будет долбить например admin.php получат бан, только боты навряд-ли будут долбить этот файл, хотя могут долбить брутеры это-да ! ;)
    Хочу сразу предостеречь, два момента:

    1)Если ддосер изменит юзерагент, например на Yandex, то может и дальше продолжать ддосить, тогда лучше-да поменять на вайт айпи...

    2)Лучше использовать когда именно пик атаки, предварительно побанив ботов, в повседневном использовании эти скрипты негодяться, по причине что могут-быть ложные срабатывания + увеличивают нагрузку !
     
Статус темы:
Закрыта.

Поделиться этой страницей