|
Проясните поведение сервера при Slow POST атаке
|
|||
---|---|---|---|
#18+
Приветствую. Читал о Slow POST атаках, но везде "в общих чертах". Типа делается пост-запрос с большим Content-Length заголовком и медленно передаются данные. Потом соединение прерывается с инициативы клиента не отправив все данные, и открывается новое. А сервер ожидает передачи всех данных и исчерпывает все соединения. Но у меня возникли вопросы, не могу найти ответа. Прошу разъяснить или направить где это подробно описано. 1. Имеется сервер Apache 2.х Заголовки в ответ выдаёт на обычный запрос Connection: Keep-alive Keep-Alive: timeout=5, max=100 Что значит timeout=5? Он закроет соединение через 5 секунд после последнего переданного байта от клиента, или всё таки будет ждать, пока не придут все байты опред. в Content-length? 2. Если курлом делать запрос, то "разрыв" соединения как практически происходит? По таймауту? 3. Если прокси используется, с ним когда соединения рвутся? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2016, 19:58 |
|
Проясните поведение сервера при Slow POST атаке
|
|||
---|---|---|---|
#18+
janco, на все три вопроса ответ один - поставьте nginx перед apache. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2016, 20:09 |
|
Проясните поведение сервера при Slow POST атаке
|
|||
---|---|---|---|
#18+
janco1. Имеется сервер Apache 2.х Заголовки в ответ выдаёт на обычный запрос Connection: Keep-alive Keep-Alive: timeout=5, max=100 Что значит timeout=5? Он закроет соединение через 5 секунд после последнего переданного байта от клиента, или всё таки будет ждать, пока не придут все байты опред. в Content-length? Сначала читать, как минимум, тут Дальше, по ссылкам с wiki: timeout и max . Иными словами, Вы сами, с помощью поисковиков, вполне могли найти ответы на вопросы о Keep-Alive. janco2. Если курлом делать запрос, то "разрыв" соединения как практически происходит? По таймауту? 3. Если прокси используется, с ним когда соединения рвутся? Грубо, Апачу неважно, соединяется с ним curl, бровзет, еще какой клиент, прямо или через прокси. Если Keep-Alive: timeout=5, max=100, то соединение после одного запроса curl-лом будет разорвано через 5 сек после его выполнения. Если идет много запросов, например, бровзер открывает страницу, соединие будет разорвано или после 5 сек неативности, или после 100 запросов в одном соединении. Механизм Keep-Alive никаго отношения к Slow POST атакам не имеет. Таймуты Keep-Alive никак не влияют на воможность или невозможность Slow POST. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2016, 16:11 |
|
Проясните поведение сервера при Slow POST атаке
|
|||
---|---|---|---|
#18+
netwindjanco, на все три вопроса ответ один - поставьте nginx перед apache. Как мне nginx ответит на эти вопросы? @VGrey, спасибо. Но Вы коснулись только стороны работы сервера. VGreyМеханизм Keep-Alive никаго отношения к Slow POST атакам не имеет. Таймуты Keep-Alive никак не влияют на воможность или невозможность Slow POST. Вот это я не очень понимаю. На возможность/невозможность нет, а вот на сам ход атаки - сомневаюсь. Из документации Апача: apacheSetting KeepAliveTimeout to a high value may cause performance problems in heavily loaded servers. The higher the timeout, the more server processes will be kept occupied waiting on connections with idle clients. Т.е. от этого значения зависит время ожидания соединения. Чем больше будут ожидаться запросы, тем быстрее лимит исчерпается. А при малом значении часть соединений будут закрываться и освобождаться для обслуживания новых клиентов и их запросов. Или я неправильно понимаю? Здесь также не ясно что такое idle client ? Например если я курлом делаю запрос (интересует именно его случай) с опцией --max-time 20 (для примера). И после 20 секунд если все данные не будут переданы, соединение будет закрыто с инициативы клиента, или оно станет idle? - Вот что наиболее меня интересует. Дальше. Вот цитата с Хабра , что меня сбивает: отсылаем http запрос, указывая большой content-length и медленно передаем всего по одному байту, обрывая на одном из моментов свой коннект и начиная новый. По стандарту, сервер должен дождаться полной отправки данных (полной — получив содержимое в Content-Length байт), прервав только по таймауту. По какому таймауту? Вот зато я и спрашиваю. С одной стороны сервер должен дождаться всех байтов, с другой стороны, если я оборву связь на одном из моментов, то он закроет соединение через KeepAliveTimeout - 5 секунд. Собственно и вопрос: Сколько он будет ждать? Пока не получит все байты, или 5 секунд? Ведь получается одна ситуация другую "перекрывает". Какая приоритетнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2016, 17:40 |
|
Проясните поведение сервера при Slow POST атаке
|
|||
---|---|---|---|
#18+
janconetwindjanco, на все три вопроса ответ один - поставьте nginx перед apache. Как мне nginx ответит на эти вопросы? nginx отвечает на запросы посетителей и решает конкретные проблемы. Он почти что не подвержен подобной атаке, из-за того что контекст подключения почти невесомый. Теоретизирование с непонятной целью - это на форум к какерам. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2016, 21:12 |
|
Проясните поведение сервера при Slow POST атаке
|
|||
---|---|---|---|
#18+
jancoConnection: Keep-alive Keep-Alive: timeout=5, max=100 Что значит timeout=5?Keep-alive это "постоянные соединения", а то, что вы подумали это тайм-ауты на обработку запроса. Не нравятся умолчания - крутите mod_reqtimeout P.S. Apache 2.2.x и 2.4.x - различаются по возможностям и документации. P.P.S. Постоянные соединения работают при сочетании всех условий: 1. Запрошены клиентом и разрешены на сервере; 2. Размер ответа известен; 3. Новый запрос поступает до истечения тайм-аута после отсылки ответа; 4. Общее число запросов на одном TCP-соединении не превышает разрешённого на сервере. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 17:53 |
|
Проясните поведение сервера при Slow POST атаке
|
|||
---|---|---|---|
#18+
Basil A. Sidorov3. Новый запрос поступает до истечения тайм-аута после отсылки ответа; Так ответа никакого и нет потому что запрос не доведён до конца: данные передаются медленно на сервер и потом в один момент прекращается передача. Т.е. будет ждать все байты? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 18:52 |
|
Проясните поведение сервера при Slow POST атаке
|
|||
---|---|---|---|
#18+
jancoТак ответа никакого и нет потому что запрос не доведён до концаПовторяю ещё раз: таймауты на обработку запроса (безотносительно постоянных соединений) и таймауты между запросами для постоянных соединений - две совершенно разные сущности. P.S. По вашему я, что, постскритумы от нечего делать поставил? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 19:02 |
|
Проясните поведение сервера при Slow POST атаке
|
|||
---|---|---|---|
#18+
может оно так и было в какой-то версии апача. если это работает именно так, то это работает потому что данные могли не сбрасываться на диск, и хранится в памяти. само соединение почти не требует ресурсов. то, что описал тс, довольно странно, ведь сервер может взять да и оборвать самое старое соединение, если у него не хватает ресурсов. если клиент закрывает соединение, то сервер об этом узнает и тоже его закроет. клиенту нужно просто перестать отправлять данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2016, 21:01 |
|
Проясните поведение сервера при Slow POST атаке
|
|||
---|---|---|---|
#18+
alexy_blackможет оно так и было в какой-то версии апача. если это работает именно так, то это работает потому что данные могли не сбрасываться на диск, и хранится в памяти. само соединение почти не требует ресурсов. Это где-то в идеальном мире ускоспециализированных программ. Но Apache - Универсальный Веб-Сервер . Он делает все, что может потребоваться разнообразным модулям. Для оценки масштаба унификации следует вспомнить, что существовал даже некий cisco sip proxy server на базе apache. То есть, модуль обрабатывающий протокол SIP отдаленно похожий на HTTP. Соединение задействует не только дескрипторы соединения, но и все что apache для него выделяет - весь контекст потока,всякие буферы в каждом модуле и тд. И все это освободить нельзя до завершения обработки запроса. В этом суть атаки. то, что описал тс, довольно странно, ведь сервер может взять да и оборвать самое старое соединение, если у него не хватает ресурсов. если клиент закрывает соединение, то сервер об этом узнает и тоже его закроет. клиенту нужно просто перестать отправлять данные. Для этого нужно чтобы кто-то написал этот код. Но его не написали. По разным причинам. Максимум что apache 2.4 научили делать - не обрабатывать соединения в состоянии простого ожидания. От атаки это не спасает. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2016, 01:08 |
|
Проясните поведение сервера при Slow POST атаке
|
|||
---|---|---|---|
#18+
netwindДля этого нужно чтобы кто-то написал этот код. Но его не написали. По разным причинам. Максимум что apache 2.4 научили делать - не обрабатывать соединения в состоянии простого ожидания. От атаки это не спасает.в который раз убеждаюсь, что апач лучше не использовать :) по крайней мере как фронтенд точно. когда я пишу веб сервер, мне всегда в голову стукает мысль "что будет если кончится такой-то ресурс", память например. веб, такое дело, там всегда нужно проверять на предмет атаки. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2016, 02:36 |
|
Проясните поведение сервера при Slow POST атаке
|
|||
---|---|---|---|
#18+
alexy_black, я не писал, что apache - плохой. Я писал о том, что apache универсальный. А вот вы попытались приписать apache спорный функционал, которого нет и не понятно как вообще реализовать. Да его и в nginx нет. Что значит формулировка не "хватает ресурсов " ? Кто их будет высчитывать и по какому алгоритму ? Есть настройка MaxClients и всякие таймауты - многим этого достаточно для достижения стабильности. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2016, 00:54 |
|
|
start [/forum/topic.php?fid=25&msg=39212781&tid=1481740]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
178ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 43ms |
total: | 311ms |
0 / 0 |