Russian Qt Forum
Ноябрь 23, 2024, 22:54
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
[РЕШЕНО] Вебсервер: логика маршрутизации
Страниц:
1
2
3
[
4
]
5
6
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: [РЕШЕНО] Вебсервер: логика маршрутизации (Прочитано 38788 раз)
V1KT0P
Гость
Re: [РЕШЕНО] Вебсервер: логика маршрутизации
«
Ответ #45 :
Май 08, 2012, 19:45 »
Цитата: alexis031182 от Май 08, 2012, 19:30
Я в другой теме форума написал запрос о поиске подобной проги. Пока только
SoapUI
предложили. С ней может тогда попробую разобраться. Мне собственно пока хватило бы, чтобы сервер просто досили, а я бы смотрел ответное поведение. Самого себя досить тоже не свят-свят. А купишь сервер, начнёшь "развлекаться" - улыбки от местных админов не жди ))
Вот с ходу нашел тему:
http://habrahabr.ru/post/116056/
. Там и про OWASP HTTP POST Tool, и SYN flood. И детальное описание.
Записан
alexis031182
Гость
Re: [РЕШЕНО] Вебсервер: логика маршрутизации
«
Ответ #46 :
Май 08, 2012, 19:52 »
Цитата: V1KT0P от Май 08, 2012, 19:45
Вот с ходу нашел тему:
http://habrahabr.ru/post/116056/
. Там и про OWASP HTTP POST Tool, и SYN flood. И детальное описание.
Очень интересно, спасибо
Записан
alexis031182
Гость
Re: [РЕШЕНО] Вебсервер: логика маршрутизации
«
Ответ #47 :
Май 08, 2012, 20:21 »
Ну вроде не так плохо у меня в случае с этой атакой. Трэд не создаётся, пока запрос не будет сформирован полностью. Единственное, может быть стоит в файл по примеру nginx записывать недопринятые запросы, чтобы в памяти не висели. Хоть и небольшой там размер, но всё же. И конечно нужно добавить слежку за "тормозными" соединениями.
Записан
V1KT0P
Гость
Re: [РЕШЕНО] Вебсервер: логика маршрутизации
«
Ответ #48 :
Май 08, 2012, 20:27 »
Цитата: alexis031182 от Май 08, 2012, 20:21
Ну вроде не так плохо у меня в случае с этой атакой. Трэд не создаётся, пока запрос не будет сформирован полностью. Единственное, может быть стоит в файл по примеру nginx записывать недопринятые запросы, чтобы в памяти не висели. Хоть и небольшой там размер, но всё же. И конечно нужно добавить слежку за "тормозными" соединениями.
Тогда сделай очень много запросов(тут важно с нескольких компов или с линукса с увеличинным количеством сокетных дескрипторов). Если у тебя сервер на винде, то достаточно скоро сокетные дескрипторы закончатся =).
Записан
alexis031182
Гость
Re: [РЕШЕНО] Вебсервер: логика маршрутизации
«
Ответ #49 :
Май 08, 2012, 20:37 »
Цитата: V1KT0P от Май 08, 2012, 20:27
Тогда сделай очень много запросов(тут важно с нескольких компов или с линукса с увеличинным количеством сокетных дескрипторов).
Да, обязательно проведу тест и отпишусь о результате. Я сделал голословный вывод в общем-то, то есть пока без реальной проверки, т.к. в атаке там именно POST-запрос используется. Думаю поддержку его завтра сделать на сервере. Завтра же и попробую завалить.
Цитата: V1KT0P от Май 08, 2012, 20:27
Если у тебя сервер на винде, то достаточно скоро сокетные дескрипторы закончатся =).
Комп на линуксе. У меня скорее проблема в отсутствии виндовса для тестов ))
Записан
fuCtor
Гость
Re: [РЕШЕНО] Вебсервер: логика маршрутизации
«
Ответ #50 :
Май 09, 2012, 11:25 »
Сервер который разрабатываете больше похож на сервер приложения, читай бэкэнд. Он не должен быть супер пупер устойчивым с DoS, главное чтобы работал стабильно, не поедал ресурсы и выполнял свою задачу. Общение с миром задача фронтенда, в частности толи это кеширующий прокси, либо балансировщики по типу nginx/haproxy. Каждый должен заниться своей задачей.
По поводу apache и nginx, в апаче есть методы для отдачи статики, отдает он ее нормально. НО до некоторого количества запросов в секунду, дальше дают о себе знать архитектурные особенности, заложенные еще в самом начале. У данных продуктов абсолютно разные модели работы, если у nginx не создает под каждый запрос поток, а старается по максмуму работать асинхронно (чтение/запись в сокеты/файла), то Apache наоборот пораждает много потоков, как результат большое потребление ресурсов и накладные расходы. Поэтому его сейчас использую в качестве сервера приложений.
Почему рекомендовал посмотреть на архитектуру Ruby/Python фреймворков, т.к. по сути они запускают сервера приложений (Webrick, Thin, Mongrel, Unicord и тд) и их ВСЕГДА прячут за балансировщиком, т.к. их главная задача динамика, со статикой справятся другие.
К примеру у меня сервис (для работы) крутящийся на приличном железе выдает в динамике 6000 RPS (1000 запросов 500 конкурентных). При этом загрузка увеличивается лишь процентов на 10. Всю балансировку на себя берет Nginx, в том числе отбой лишних запросов.
ЗЫ и главный вопрос, закладываете ли основу для горизонтального масштабирования? Без него сложнее сайта визитки/портфолио и тп делать не стал бы, а для данного решения главная ниша это различные HTTP сервисы, а тут вопрос масштабирования очень остро стоит.
Записан
alexis031182
Гость
Re: [РЕШЕНО] Вебсервер: логика маршрутизации
«
Ответ #51 :
Май 09, 2012, 13:59 »
Цитата: fuCtor от Май 09, 2012, 11:25
Сервер который разрабатываете больше похож на сервер приложения, читай бэкэнд. Он не должен быть супер пупер устойчивым с DoS, главное чтобы работал стабильно, не поедал ресурсы и выполнял свою задачу. Общение с миром задача фронтенда, в частности толи это кеширующий прокси, либо балансировщики по типу nginx/haproxy. Каждый должен заниться своей задачей.
Пока получается симбиоз фронта и тыла. С одной стороны идея проекта соответствует серверу приложений. С другой - принцип обработки поступающих запросов близок фронту.
Цитата: fuCtor от Май 09, 2012, 11:25
По поводу apache и nginx, в апаче есть методы для отдачи статики, отдает он ее нормально. НО до некоторого количества запросов в секунду, дальше дают о себе знать архитектурные особенности, заложенные еще в самом начале. У данных продуктов абсолютно разные модели работы, если у nginx не создает под каждый запрос поток, а старается по максмуму работать асинхронно (чтение/запись в сокеты/файла), то Apache наоборот пораждает много потоков, как результат большое потребление ресурсов и накладные расходы. Поэтому его сейчас использую в качестве сервера приложений.
Стадия обработки поступающих запросов в моём проекте получается ближе именно к nginx. Парсинг данных каждого запроса выполняется асинхронно в главном потоке приложения. Отдельный поток создаётся только в случае полной уверенности в корректности запроса. Разница с nginx получается в том, что последний транслирует запрос бэкэнду, в то время как у меня дальнейшая обработка осуществляется тем же процессом (но в отдельном потоке, конечно). Разница с Апачем заключается в том, что я не создаю отдельных процессов на запросы, работаю с потоками в едином адресном пространстве. Это уменьшает накладные расходы, но делает сервер менее устойчивым в случае, например, возникновения segmentation fault в любом из подключенных в роли плагинов сайтов (можно сказать даже абсолютно неустойчивым, и налагает соответствующую ответственность на разработчика плагина сайта). Кстати, если предполагается использовать лишь один сайт, то его код можно внедрить непосредственно в код сервера и не использовать никаких плагинов вообще. Это, по идее, поспособствует ещё большему снижению накладных расходов.
Цитата: fuCtor от Май 09, 2012, 11:25
Почему рекомендовал посмотреть на архитектуру Ruby/Python фреймворков, т.к. по сути они запускают сервера приложений (Webrick, Thin, Mongrel, Unicord и тд) и их ВСЕГДА прячут за балансировщиком, т.к. их главная задача динамика, со статикой справятся другие.
К примеру у меня сервис (для работы) крутящийся на приличном железе выдает в динамике 6000 RPS (1000 запросов 500 конкурентных). При этом загрузка увеличивается лишь процентов на 10. Всю балансировку на себя берет Nginx, в том числе отбой лишних запросов.
Другими словами, заморачиваться с анализом на предмет зловредства slow post atack и ddos не стоит, правильно я понимаю?
Цитата: fuCtor от Май 09, 2012, 11:25
ЗЫ и главный вопрос, закладываете ли основу для горизонтального масштабирования? Без него сложнее сайта визитки/портфолио и тп делать не стал бы, а для данного решения главная ниша это различные HTTP сервисы, а тут вопрос масштабирования очень остро стоит.
Считаю эту задачу обязательной к разрешению. Одного сервера недостаточно в случае реализации серьёзного вебпроекта. Мне бы хотелось, если это возможно, услышать Ваши рекомендации по данной теме. Со своей стороны приведу следующие рассуждения.
В вопросе с горизонтальным масштабированием необходимо разделить вычисления (другими словами формирование страниц сайтов) и отдачу статики. Действительно, это разные задачи со своими особенностями в процессе исполнения, которые мешать в кучу не следует. Я был не прав, признаю. В случае со статикой масштабирование может производиться при помощи фронта и использования сетевых файловых систем. Иными словами, эту часть вопроса можно закрыть при помощи сторонних по отношению к вебсерверу средств. Таким образом, следует обратить внимание именно на динамику, задачу реализации которой можно развести на три составляющие:
база данных;
текущие данные о работе пользователя (например, сессии);
необходимость использования сторонних ресурсов.
Первый пункт может быть закрыт средствами самого сервера БД. Наверное все популярные БД поддерживают репликацию. Некоторые могут быть объединены в кластер. Однако это не обязательно, и распределение данных на разные сервера БД можно производить непосредственно плагином сайта. Плюсы и минусы обоих решений оставлю за кадром, лишь подчеркну, что оба метода поддерживаются проектом вебсервера по определению.
Над вторым пунктом мне необходимо подумать. Здесь можно использовать как и сторонний сервис, например, memcache, так и собственную реализацию взаимодействия между различными instance вебсервера, разнесёнными на разные хосты. Может быть имеет смысл реализовать поддержку обоих методов. Возможно, у Вас есть собственные соображения на этот счёт.
Третий пункт частично связан со вторым пунктом. Здесь подразумевается возможность плагина сайта подключаться к любому другому сервису в сети (да хоть к самому же вебсерверу по HTTP
) для осуществления каких-либо вычислений, необходимых ему при формировании конечного результата своей работы. Тут как бы получается, что данная возможность тоже по определению поддерживается, поскольку вебсервер никоим образом не ограничивает плагины сайтов в их собственных мытарствах.
Таким образом, задача поддержки вебсервером горизонтального масштабирования в моём случае сводится ко второму пункту.
Записан
alexis031182
Гость
Re: [РЕШЕНО] Вебсервер: логика маршрутизации
«
Ответ #52 :
Май 09, 2012, 19:40 »
Подключил POST-запрос. Напишите, пожалуйста, кто может протестить мой сервер через slow post atack. По этой ссылке можно скачать прогу юного хакера:
http://habrahabr.ru/post/116056/
У себя запускаю - открывается максимум 4000 соединений с копейками. Видимо ограничения какие-то срабатывают в системе. Пробовал в /etc/security/limits менять значение до 100000 на hard и soft. Вроде ставится, но всё равно больше 4000 соединений не создаётся, больше - операционка напрочь вырубает сервер. Это наверняка настраивается как-то, но я не стал вдаваться в подробности пока.
На 4000 соединениях вебсервер пашет без проблем (и это при том, что я через внешний адрес сам к себе подключаюсь).
Записан
alexis031182
Гость
Re: [РЕШЕНО] Вебсервер: логика маршрутизации
«
Ответ #53 :
Май 14, 2012, 22:05 »
Возникла идея защиты от fast ддоса (традиционного, в противовес slow). Например, если детектится подозрительная активность с какого-либо хоста, то автоматом вносится соответствующая запись в настройки файервола, и нехороший бот банится, не успев навредить.
Правда, это решение также автоматом выносит приложение из разряда кроссплатформенных. С виндовсом я знаком очень плохо, и там мне такое не реализовать точно. Впрочем, виндовс-вебсервер лично для меня нонсенс
В проект добавил сжатие контента через deflate и gzip (в планах sdch, и не знаю, стоит ли добавлять compress). Также добавил функционал по раздаче контента частями (Content-Range). Надо будет заняться вплотную документацией (
http://78.81.31.38/html/index.html
). Пожалуй сайт первый сделаю о проекте вебсервера и прямо на нём же, как у WT
Записан
V1KT0P
Гость
Re: [РЕШЕНО] Вебсервер: логика маршрутизации
«
Ответ #54 :
Май 14, 2012, 22:11 »
Традиционный это когда весь канал забивают мусором. Ну будешь ты отсекать этот мусор, но ведь мало кто через него пробьется к тебе из реальных пользователей.
Записан
alexis031182
Гость
Re: [РЕШЕНО] Вебсервер: логика маршрутизации
«
Ответ #55 :
Май 14, 2012, 22:26 »
Цитата: V1KT0P от Май 14, 2012, 22:11
Традиционный это когда весь канал забивают мусором. Ну будешь ты отсекать этот мусор, но ведь мало кто через него пробьется к тебе из реальных пользователей.
На уровне файервола по конкретному айпишнику пресекать доступ. Запросы с этого хоста не дойдут до приложения, а всем остальным - пожалуйста.
Записан
V1KT0P
Гость
Re: [РЕШЕНО] Вебсервер: логика маршрутизации
«
Ответ #56 :
Май 14, 2012, 22:33 »
Цитата: alexis031182 от Май 14, 2012, 22:26
На уровне файервола по конкретному айпишнику пресекать доступ. Запросы с этого хоста не дойдут до приложения, а всем остальным - пожалуйста.
Мы говорим о разных вещах. То что отсекаются боты для предотвращения загрузки процессора это понятно. Но допустим у тебя канал в 100 Мб/с, тебе боты шлют запросы с скоростью 200 Мб/с. В результате канал забивается и нормальные пользователи не могут послать запрос к тебе, ибо и так канал перегружен. Да единицы может и достучатся в течении продолжительного времени, но это будут именно единицы. Так что есть еще куда расти =).
Записан
alexis031182
Гость
Re: [РЕШЕНО] Вебсервер: логика маршрутизации
«
Ответ #57 :
Май 14, 2012, 22:40 »
Цитата: V1KT0P от Май 14, 2012, 22:33
Мы говорим о разных вещах. То что отсекаются боты для предотвращения загрузки процессора это понятно. Но допустим у тебя канал в 100 Мб/с, тебе боты шлют запросы с скоростью 200 Мб/с. В результате канал забивается и нормальные пользователи не могут послать запрос к тебе, ибо и так канал перегружен. Да единицы может и достучатся в течении продолжительного времени, но это будут именно единицы.
Мне это известно, и я не заявлял о 100% защите. Да, завалят (как и любой другой вебпрокси), но чтобы завалить вебсервер с э-э-э... таким активным файерволом (назовём это так) потребуется гораздо больше ресурсов, нежели чем без него. Мне кажется, что резон тут имеется.
Цитата: V1KT0P от Май 14, 2012, 22:33
Так что есть еще куда расти =).
Есть более интересные идеи?
Записан
V1KT0P
Гость
Re: [РЕШЕНО] Вебсервер: логика маршрутизации
«
Ответ #58 :
Май 14, 2012, 23:05 »
Цитата: alexis031182 от Май 14, 2012, 22:40
Есть более интересные идеи?
Если есть несколько серверов, то можно какую-нибудь схему придумать =).
Записан
alexis031182
Гость
Re: [РЕШЕНО] Вебсервер: логика маршрутизации
«
Ответ #59 :
Май 14, 2012, 23:33 »
Цитата: V1KT0P от Май 14, 2012, 23:05
Если есть несколько серверов, то можно какую-нибудь схему придумать =).
Это да, масштабирование хорошая вещь. Но если есть возможность делать на одной машине то, для чего в другой ситуации потребуется две или даже несколько, то по идее отказываться от такого варианта не гут. Да и не противоречит "активный" файервол связкам. А очень хорошо дополняет. Другое дело, что наверное тогда это решение стоит вынести в отдельное приложение, и дать вебсерверу возможность им управлять. Или пусть самостоятельным будет полностью. Но тогда проще взять готовое.
Записан
Страниц:
1
2
3
[
4
]
5
6
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...