HTTP-сервер - медленное чтение

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

Вот что я делаю:

  1. Запросите огромный файл (скажем, ~ 1 МБ) с http-сервера.
  2. Прочитайте ответ от сервера в цикле, ожидая 100 секунд перед последовательным чтением

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

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

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


person NPE    schedule 24.02.2012    source источник


Ответы (2)


Возможно, это будет более полезно для вас (проще и сэкономит ваше время): http://ha.ckers.org/slowloris/, который представляет собой сценарий Perl, который отправляет частичные HTTP-запросы, сервер Apache оставляет соединение открытым (теперь недоступным для новых пользователей) и, если он выполняется в среде Linux (Linux не ограничивает потоки за пределами аппаратных возможностей ) вы можете эффективно заблокировать все открытые сокеты и, в свою очередь, предотвратить доступ других пользователей к серверу. Он использует минимальную пропускную способность, потому что не «заваливает» сервер запросами, а просто медленно берет в заложники сокеты. Вы можете скачать файл здесь: http://ha.ckers.org/slowloris/slowloris.pl

Чтобы предотвратить подобную атаку (ну, смягчить), см. здесь: https://serverfault.com/questions/32361/how-to-best-defend-against-a-slowloris-dos-attack-against-an-apache-веб-сервер< /а>

Вы также можете использовать балансировщик нагрузки или настройку циклического перебора.

person ionFish    schedule 24.02.2012
comment
Спасибо @mesh. Я видел эту атаку, но я специально смотрю на атаку, которую я описал. Дайте мне знать, если вы знаете параметр конфигурации сервера для сброса соединения. - person NPE; 24.02.2012
comment
@ sachin2182 - Не уверен, что это сработает для ваших целей, http://httpd.apache.org/docs/2.0/mod/core.html#timeout, где в httpd.conf или .htaccess вы указываете TimeOut xyz, где xyz — это максимальное количество секунд, которое вы хотите подождать, прежде чем разорвать соединение. Я рекомендую, может быть, 10 секунд, если у вас быстрое соединение. - person ionFish; 24.02.2012
comment
Директива timeout предназначена для запросов, отправленных клиентом. Допустим, если сервер не получил запрос (который он ожидает) от клиента в течение определенного времени, то если мы хотим разорвать соединение, то можно использовать этот вариант. - person NPE; 24.02.2012

Попробуйте https://code.google.com/p/slowhttptest/wiki/SlowReadTest, чтобы протестировать атаку медленного чтения. повторное описание. (Его также можно использовать для проверки медленной отправки заголовков.)

person tuomassalo    schedule 09.01.2015