2013-08-19 8 views
1

Я думал о веб-безопасности, и эта мысль появилась у меня в голове.Избегание автоматически созданного трафика рывками

Скажите, что есть этот рывок, который меня ненавидит и знает, как программировать. Я управляю приятным сайтом/блогом со значительным количеством трафика. Затем этот рывок создает программу, которая автоматически запрашивает мой сайт снова и снова.

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

Этот тип атак может не распространяться, но если кто-то пытается что-то сделать на моем веб-сайте, я должен что-то с этим сделать. Я не думаю, что популярные CMS, такие как wordpress или drupal, делают что-то в этом типе атак.

Мое предположение;

Если пользователь запрашивает более x раз (допустим, 50) за 1 минуту, заблокируйте этого пользователя. (прекратить отвечать)

Мои вопросы:

  1. Является ли мое предположение хорошо? Если нет, что с этим делать?

  2. Такие веб-сайты, как Google, Facebook, Youtube ... [и т. Д.] Делают что-то в этом типе атак.

+2

http://en.wikipedia.org/wiki/Denial-of-service_attack –

+1

Необходимо заблокировать запрос, пока вы не получите запрос, который вы не можете определить, заблокирован он или нет. Так что уже слишком поздно :( – piddl0r

ответ

2

Эти типы атак называются (D) DoS (Распределенный отказ в обслуживании) и, как правило, предотвращено веб-сервер хостинг вашего приложения PHP. Поскольку apache используется больше всего, я нашел статью, которая может вам понравиться: http://www.linuxforu.com/2011/04/securing-apache-part-8-dos-ddos-attacks/.

В статье говорится, что Apache имеет несколько модов, специально созданных для предотвращения (D) атак DoS. Их все еще необходимо установить и настроить в соответствии с вашими потребностями.

Я действительно верю, что Facebook, Google и т. Д. Имеют свои собственные аналогичные реализации для предотвращения DoS-атак. Я знаю, что Google Search Engine использует капчу, если многие поисковые запросы поступают из одной и той же сети.

Почему не разумно предотвращать DoS внутри PHP-скрипта, потому что PHP-процессор все равно нужно запускать всякий раз, когда делается запрос, что вызывает много накладных расходов. При использовании веб-сервера для этого у вас будет меньше накладных расходов.

EDIT: Как указано в другом ответе, также можно предотвратить общие атаки DoS путем настройки брандмауэра сервера. Проверка атак с использованием правил брандмауэра происходит до того, как веб-сервер получает удар, поэтому еще меньше накладных расходов. Кроме того, вы также можете обнаруживать атаки на другие порты (например, порты). Я считаю, что комбинация из двух лучших лучей, поскольку оба дополняют друг друга.

+0

Итак, вы просто говорите, что мне не нужно беспокоиться об этом, потому что Apache (или что-то еще) заботится о DoS-атаках, правда? –

+1

Нет, Apache все еще нужно настроить забота об атаках, но ее нужно обрабатывать путем настройки вашего веб-сервера, а не изменения чего-либо в вашем php-коде. –

+0

Точно, он все равно должен быть настроен. Иногда ваш хостинг-провайдер позаботится об этом, но не всегда. это при выборе хостинг-провайдера. – Hless

3

Перед вами стоит DoS. [Отказ в обслуживании] Атака. Когда одна система пытается отправить пакеты на ваш веб-сервер и делает ее неактуальной.

Вы упоминали об одном рывке, что, если тот же рывка было много друзей, и здесь приходит DDoS [Distributed DoS] Attack. Ну, этого нельзя предотвратить.


Быстрое исправление от Apache Документов для DoS, но не для DDoS ...

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

Часто наиболее эффективным средством защиты от DoS является межсетевой экран или другие конфигурации операционной системы. Например, большинство брандмауэров могут быть , настроенные на ограничение количества одновременных подключений с любого индивидуального IP-адреса или сети , тем самым предотвращая ряд простых атак . Конечно, это не поможет против распределенного отказа от Служебных атак (DDoS).

Source

0

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

Это будет более эффективно, чем передача через PHP и Apache, так как им нужно использовать много (относительно) процесса для проверки, и они могут блокировать ваш сайт, даже если вы обнаружите своих злоумышленников.

Вы можете проверить эту тему для получения дополнительной информации: https://serverfault.com/questions/410604/iptables-rules-to-counter-the-most-common-dos-attacks

1

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

Нанесение чрезмерного трафика с помощью злонамеренных намерений называется атакой «Отказ в обслуживании». Идея состоит в том, чтобы поразить сайт трафиком до такой степени, что сервер не может справиться с нагрузкой, перестает отвечать на запросы, и, таким образом, никто не сможет пройти, и сайт будет отключен.

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

Как говорили другие, важно настроить ваш веб-сервер для работы с большими объемами трафика; Я позволю другим ответам говорить сами за себя, и это важный момент, но есть вещи, которые вы можете сделать в своем собственном коде, чтобы улучшить ситуацию.

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

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

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

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

Теперь представьте, что одна и та же страница может быть оптимизирована, чтобы сократить время, скажем, полсекунды. Теперь тот же сервер может обрабатывать 20 запросов в секунду, просто потому, что код PHP быстрее. Но также, это будет легче для него оправиться от избыточного трафика. И поскольку PHP-код занимает меньше времени для запуска, меньше шансов на то, что любые заданные запросы будут одновременными в любом случае.

Вкратце, способность сервера справляться с высокими объемами трафика увеличивает невероятно, поскольку вы сокращаете время, затрачиваемое на обработку запроса.

Таким образом, это ключ к тому, что сайт переживает всплеск высокого трафика: заставьте его работать быстрее.

  • Кэширование: CMS, такие как Drupal и Wordpress, имеют встроенное кэширование. Убедитесь, что он включен. Для еще большей производительности рассмотрите систему кеша уровня сервера, такую ​​как Varnish. Для системы типа CMS, в которой вы не меняете контент страницы, это самая важная вещь, которую вы можете сделать для повышения производительности.

  • Оптимизация кода: в то время как вы не можете ожидать, чтобы исправить проблемы с производительностью в программное обеспечение сторонних производителей, как Drupal, вы можете анализировать производительность вашего собственного кода, если у вас есть. Пользовательские модули Drupal, может быть? Используйте инструмент профилировщика, чтобы найти узкие места. Очень часто такой анализ может выявить, что на узкое место приходится 90% времени загрузки страницы. Не беспокойтесь об оптимизации небольшого материала, но если вы сможете найти и исправить одно или два больших узких места, как это, это может иметь драматический эффект.

Надеюсь, что это поможет.