Не подскажет ли знающая публика как решить такую задачу?
Есть веб сервер (IIS,ASP) который обрабатывает энное количесво запросов от клиентов. Нагрузка обычно небольшая, так что проблем нет. Но ведь легко может найтись идиот который от нечего делать напишет простейшую программу и пошлет сотни или тысячи запросов в секунду. Тогда сервер может загнуться. Есть ли системные средства или стандартные методы программирования чтобы от этого защититься?
Я не говорю о сложных DDoS атаках, от них довольно сложно звшититься и отличить их от активности нормальных пользователей. Но простейших алгоритм типа: получив очередной запрос на страницу проверить не исполняется ли уже запрос на на такую-же страницу и если да, то по крайней мере отменить всю предыдуший запрос. Особую сложность вызывает здесь необходимость отменить исполняющийся запрос к базе данных.
Может кто знает решение?
07.10.04 14:59: Оставлено модератором в 'Веб программирование' — TK
Здравствуйте, ipm, Вы писали:
ipm>Может кто знает решение?
Я бы на твоём месте пошёл а кухню и поставил чайник. На крайний случай в аптеку за новопасситом.
Такая опасность существует, конечно, всегда, только большинство не заморачивается. Просто надо быть уверенным что сервер -- не Pentium 166 и софт на нём не 5-летней давности. DoS`а бояться -- в интернет не ходить.
Здравствуйте, Ivun, Вы писали:
I>Здравствуйте, ipm, Вы писали:
ipm>>Может кто знает решение?
I>Я бы на твоём месте пошёл а кухню и поставил чайник. На крайний случай в аптеку за новопасситом.
I>Такая опасность существует, конечно, всегда, только большинство не заморачивается. Просто надо быть уверенным что сервер -- не Pentium 166 и софт на нём не 5-летней давности. DoS`а бояться -- в интернет не ходить.
Да я бы и не заморачивался, если бы сервер от этого не рухнул. И вроде сервер неплохой и софт новый.
Здравствуйте, ipm, Вы писали:
ipm>Да я бы и не заморачивался, если бы сервер от этого не рухнул. И вроде сервер неплохой и софт новый.
Значит либо плохой либо не новый.
Здравствуйте, ipm, Вы писали:
ipm>Может кто знает решение?
Может быть просто ограничить количество одновременных подключений к web-узлу? Это делается в настройках конкретного сайта, в свойствах быстродействия... Поставить 100 пользователей максимум (или сколько там нужно)...
Здравствуйте, Spidola, Вы писали:
S>Здравствуйте, ipm, Вы писали:
ipm>>Может кто знает решение?
S>Может быть просто ограничить количество одновременных подключений к web-узлу? Это делается в настройках конкретного сайта, в свойствах быстродействия... Поставить 100 пользователей максимум (или сколько там нужно)...
Вот атакующий и сделает 100 соединений со совей машины, а остальных сервер сам повыгоняет.
Лучше всего сделать ограничение на количество одновременных сессий с одного хоста. Можно по ИП, но могут обломаться пользователи прокси. Ну, можно скомбинировать адрес+куки, ...
Здравствуйте, glyph, Вы писали:
G>Здравствуйте, Spidola, Вы писали:
S>>Здравствуйте, ipm, Вы писали:
ipm>>>Может кто знает решение?
S>>Может быть просто ограничить количество одновременных подключений к web-узлу? Это делается в настройках конкретного сайта, в свойствах быстродействия... Поставить 100 пользователей максимум (или сколько там нужно)... G> Вот атакующий и сделает 100 соединений со совей машины, а остальных сервер сам повыгоняет.
Зато не рухнет.
G> Лучше всего сделать ограничение на количество одновременных сессий с одного хоста. Можно по ИП, но могут обломаться пользователи прокси. Ну, можно скомбинировать адрес+куки, ...
Вообще ИМХО данную задачу лучше решать внешним роутером (желательно с файрволом), поскольку все программные барьеры всё равно требуют под себя ресурсы.
Здравствуйте, glyph, Вы писали:
G>Здравствуйте, Spidola, Вы писали:
S>>Здравствуйте, ipm, Вы писали:
ipm>>>Может кто знает решение?
S>>Может быть просто ограничить количество одновременных подключений к web-узлу? Это делается в настройках конкретного сайта, в свойствах быстродействия... Поставить 100 пользователей максимум (или сколько там нужно)... G> Вот атакующий и сделает 100 соединений со совей машины, а остальных сервер сам повыгоняет. G> Лучше всего сделать ограничение на количество одновременных сессий с одного хоста. Можно по ИП, но могут обломаться пользователи прокси. Ну, можно скомбинировать адрес+куки, ...
А как это сделать? На уровне приложения? IIS? или дополнительое устройство типа router, firewall, IDS?
Здравствуйте, Spidola, Вы писали:
S>Здравствуйте, glyph, Вы писали:
G>>Здравствуйте, Spidola, Вы писали:
S>>>Здравствуйте, ipm, Вы писали:
ipm>>>>Может кто знает решение?
S>>>Может быть просто ограничить количество одновременных подключений к web-узлу? Это делается в настройках конкретного сайта, в свойствах быстродействия... Поставить 100 пользователей максимум (или сколько там нужно)... G>> Вот атакующий и сделает 100 соединений со совей машины, а остальных сервер сам повыгоняет.
S>Зато не рухнет.
Ну разница не очень велика так как сайт в это случае все равно не работает.
G>> Лучше всего сделать ограничение на количество одновременных сессий с одного хоста. Можно по ИП, но могут обломаться пользователи прокси. Ну, можно скомбинировать адрес+куки, ...
S>Вообще ИМХО данную задачу лучше решать внешним роутером (желательно с файрволом), поскольку все программные барьеры всё равно требуют под себя ресурсы.
В том то и дело, что я не могу найти устройство которое может справиться с такой задачей. Firewall (с моей точки зрения) не работает на таком уровне. Он может отсечь неправильный пакет, но сделать анализ типа: запрос на туже самую страницу пришел всего через одну миллисекунду с того же адреса я думаю он не в сосотоянии. Если я ошибаюсь, то что вы посоветуете использовать.
Здравствуйте, ipm, Вы писали:
S>>>>Может быть просто ограничить количество одновременных подключений к web-узлу? Это делается в настройках конкретного сайта, в свойствах быстродействия... Поставить 100 пользователей максимум (или сколько там нужно)... G>>> Вот атакующий и сделает 100 соединений со совей машины, а остальных сервер сам повыгоняет.
S>>Зато не рухнет.
ipm>Ну разница не очень велика так как сайт в это случае все равно не работает.
Почему, сайт то затухнет, зато после атаки опять начнёт работать самостоятельно...
ipm> Если я ошибаюсь, то что вы посоветуете использовать.
Ничего не посоветую, поскольку не совсем компетентен в роутерах, просто видел такие фразы:
Не забывая и о безопасности внутренней сети, NetScreen создала персональный межсетевой экран NetScreen-Remote, который (как и аналогичный продукт Check Point) существует в двух вариантах: с функциями VPN-клиента или с функциями защиты компьютера (пакетный фильтр, защита от DoS-атак, контроль приложений и т. п.).
Здравствуйте, ipm, Вы писали:
ipm>Есть веб сервер (IIS,ASP) который обрабатывает энное количесво запросов от клиентов. Нагрузка обычно небольшая, так что проблем нет. Но ведь легко может найтись идиот который от нечего делать напишет простейшую программу и пошлет сотни или тысячи запросов в секунду. Тогда сервер может загнуться. Есть ли системные средства или стандартные методы программирования чтобы от этого защититься?
ИМХО, 100% решения по защите от DOS/DDOS в Internet нет. Вообще говоря DOS бывают разные, и защищаются от них по-разному.
Если рассматривать DOS-атаки типа флуда (видимо это те, которых вы боитесь больше всего ), то от них обычно защищаются различными брэндмауерами и фильтрами. От атак на вычислительные ресурсы сервера обычно спасают лимиты (на время выполнения; число запросов, процессов и т.п.), в таких случаях максимальное чего может достичь атакующий, это недоступность сервисов для некоторых клиентов, или частичное нарушение их функциональности. Так же, наверно более эффективным решением является использование кластеров и распределённых систем, т.е. когда сервис фактически предоставляют несколько серверов, запросы на которые распределяют либо другие сервера, либо специалные устройства..
От DOS-атак на затопление канала передачи наверно помогут только жёсткие настройки роутинга и фильтрация, использование широких каналов
ipm>Я не говорю о сложных DDoS атаках, от них довольно сложно звшититься и отличить их от активности нормальных пользователей. Но простейших алгоритм типа: получив очередной запрос на страницу проверить не исполняется ли уже запрос на на такую-же страницу и если да, то по крайней мере отменить всю предыдуший запрос. Особую сложность вызывает здесь необходимость отменить исполняющийся запрос к базе данных.
Если на ваш сервер посупают тысячи запросов, вам будет не до проверок, выполняется ли там какой-то запрос.. Используйте эффективные методы кэширования, чтобы не нужно было на каждый запрос лезти в базу и делать в ней выборку полумилиона строк
Здравствуйте, Spidola, Вы писали:
S>Вообще ИМХО данную задачу лучше решать внешним роутером (желательно с файрволом), поскольку все программные барьеры всё равно требуют под себя ресурсы.
ИМХО, нужно сочетать все подходы.