Комментарии 74
Nginx не поможет?
Дефолтные apache, nginx, lightpd, IIS отказывают в обслуживании на ура.
Но зачем же читать статью? ;)
Статья подразумевалась информационной, без обсуждения защиты, там по ссылке внизу есть пара советов. В кратце:
— надо дропать соединения с ненормально маленьким advertised окном. iptables например
— надо на уровне приложения ограничивать время соединения, в независости от состояния соединения. ModSecurity, flying frog
— надо дропать соединения с ненормально маленьким advertised окном. iptables например
— надо на уровне приложения ограничивать время соединения, в независости от состояния соединения. ModSecurity, flying frog
Как понять «дефолтные»?
Это которые у большинства стоят или с какими-то настройками из коробки?
Это которые у большинства стоят или с какими-то настройками из коробки?
Он требует меньше ресурсов для поддержания того же количества одновременных соединений, т.е. можно отдалить DoS, но глобально — не поможет.
А ваш сервер уяязвииииимм к мееееееееееедлееееееннномууууу…
НЛО прилетело и опубликовало эту надпись здесь
даже школьник в состоянии реализовать данный метод на практике.
Господа, позвольте спросить, а за что минусуете человека? Не поняв он вполне корректно задал вопрос в комментарии, получил ответ.
Интересно что вопрос минусуют, а ответ нет, хотя, если расценить вопрос как недостойный хабра, то, думаю, и ответ на него тоже должен минусоваться.
Интересно что вопрос минусуют, а ответ нет, хотя, если расценить вопрос как недостойный хабра, то, думаю, и ответ на него тоже должен минусоваться.
НЛО прилетело и опубликовало эту надпись здесь
Думаю, причины две:
1. Потому что это совершенно тупая придирка ко вполне легитимной языковой конструкции. В данном контексте союз «и» вполне имеет право использоваться.
2. Потому что такие формулировки, когда человек нарочито корчит из себя идиота, пытаясь показать этим свое «превосходство» у нормальных людей вызывает страшнейшее раздражение. «Что такое „и школьник“?» — ну кем надо быть, чтобы такое спросить? Не нравится формулировка? Так и напиши, что ты считаешь союз «и» тут неуместным. И напиши в личку. А не засирай каменты своей псевдоязвительностью.
1. Потому что это совершенно тупая придирка ко вполне легитимной языковой конструкции. В данном контексте союз «и» вполне имеет право использоваться.
2. Потому что такие формулировки, когда человек нарочито корчит из себя идиота, пытаясь показать этим свое «превосходство» у нормальных людей вызывает страшнейшее раздражение. «Что такое „и школьник“?» — ну кем надо быть, чтобы такое спросить? Не нравится формулировка? Так и напиши, что ты считаешь союз «и» тут неуместным. И напиши в личку. А не засирай каменты своей псевдоязвительностью.
НЛО прилетело и опубликовало эту надпись здесь
1. Она может означать, теоретически, что угодно, но человеку мозг на то и дан, чтобы понимать смысл многозначных выражений в зависимости от их контекста. А уж тем более, когда в ряду стоят слова «метод» и «школьник», которые относятся к совршенно разным категориям понятий — никаких неоднозначностей тут не возникает. Что же, в таком случае, с вашим «языковым парсером» должна сделать фраза «скрипт обходит дерево»? Уж не спросите ли вы, кто такой скрипт и зачем он ходит вокруг дерева?
2. Если эта фраза действительно вызывает у вас непонимание — вам стоит обратиться к врачу, это явно что-то неврологическое.
2. Если эта фраза действительно вызывает у вас непонимание — вам стоит обратиться к врачу, это явно что-то неврологическое.
Мне не понятно вот что. Допустим вопрос идиотский, но почему же другого идиота, который на этот вопрос ответил плюсуют. Вот что мне непонятно.
Ну, отвечать на идиотские вопросы, вроде как, не преступление)
Всё-таки я ошибся, и отвечать действительно не стоило.
Наверное, не стоило быть таким самокритичным и называть себя идиотом в третьем лице. Не думаю, что многие минусовавшие ваши последние комменты в этом треде, смотрели что это отвечаете вы же, и не исключено, что один коммент (с ответом) плюсовали, а другие (с вопросами почему минуса изначальному вопросу), причем к минусам к комменту и в карму не поленились добавить.
Да мне то не жалко, я о том что человек которого я защищал и думал что он будет вести себя адекватно перешёл на личности и оскорбления.
ipfw add allow ip from any to me 80 setup limit src-addr 40
Пусть хоть уконнектятся :).
Ну и никто не отменял tcpdrop по таймеру.
Пусть хоть уконнектятся :).
Ну и никто не отменял tcpdrop по таймеру.
это несерьезно:) Огромные конторы сидят на одном внешнем IP, браузер минимум два соединения делает (favicon), дропать соединия тоже некрасиво как то, лучше в очередь поставить.
tcpdrop лучше, но тогда реально медленные клиенты, которые аплодять фотку у эйфелевой башни будут жаловаться.
iptables ом можно дропать SYN пакеты с advertised window меньше чего то. Сейчас не видел систему, посылающуью менее 65К.
tcpdrop лучше, но тогда реально медленные клиенты, которые аплодять фотку у эйфелевой башни будут жаловаться.
iptables ом можно дропать SYN пакеты с advertised window меньше чего то. Сейчас не видел систему, посылающуью менее 65К.
бред, отлично работает, никто не жалуется (на хостинге по-крайней мере), любой браузер будет ждать возможности открыть соединение (проверено на опере, загрузка идет последовательно), оно не дропается, просто к ip не делается подключение пока не закрыты предыдущие соединения, может отвалиться по таймауту.
ipfw тоже имеет и tcpdatalen и tcpwin и другие прелести.
ipfw тоже имеет и tcpdatalen и tcpwin и другие прелести.
я так понимаю ipfw посылает или RST или FIN немедленно, если условие соблюдено. логика ставить соединение в очередь там врядли есть. Но спасибо за ipfw, я про него не знал. tcpdatalen и tcpwin тоже полезны. ipwf это только BSD?
limit src-addr мне тоже кажется не совсем корректным. tcpwin тут было бы на много более правильным, но он работает только на exact match, что делает его фактически бесполезным. Надо бы добавить туда возможность range, как в tcpdatalen.
это не спасёт от DDoS, выполненной таким способом.
В debian стабильном nginx отлично справляется.
На убунту дохнет. Если у Вас есть сетап с доступом извне — можно попробовать.
И на макос дохнет. Но там еще и проблема дефолтного ограничения на кол-во файл дескрипторов, и nginx упирается в него.
В принципе, вот: delta-z.ru. Попробовал на чистом апаче проверить как работает — дохнет.
Хотя вот так вот: slowhttptest -c 1000 -r 1000 -H ложится на 15-й секунде :) В прошлый раз без дополнительных параметров проверял.
Интересный момент: запускаю проверку, в какой-то момент Service Available меняется на NO, но при открытии проверяемого хоста в браузере всё по прежнему отлично работает…
-H генерит запрос с незаконченными заголовками. Это slowloris атака, а медленное чтение — -X!
короче попробовал.
На этом сайте огромный pool одновременных соединений. Пришлось 6 экземпляров slowhttptest a запустить:
src/slowhttptest -X -w 10 -y 500 -k 3 -u delta-z.ru/images/banner.png -c 1000 -r 200
Видать машина мощная. Формула так такова: max_clients = worker_processes * worker_connections, где worker_processes обычно по числу ядер процессора.
На этом сайте огромный pool одновременных соединений. Пришлось 6 экземпляров slowhttptest a запустить:
src/slowhttptest -X -w 10 -y 500 -k 3 -u delta-z.ru/images/banner.png -c 1000 -r 200
Видать машина мощная. Формула так такова: max_clients = worker_processes * worker_connections, где worker_processes обычно по числу ядер процессора.
./slowhttptest -c 1000 -r 1000 -H пока ложит все проверяемые сайты.
З.ы.: на Хабре не испытывал и не буду, уж очень люблю жизнь :)
З.ы.: на Хабре не испытывал и не буду, уж очень люблю жизнь :)
-H это старо! -H посылает медленные запросы! slowloris атака это, slow read запускается как -X.
Лимит в 1000 соединений изза того, что использую select(), нехочется скрипткидям жизнь облегчать, на и на epoll() переписывать лень.
Лимит в 1000 соединений изза того, что использую select(), нехочется скрипткидям жизнь облегчать, на и на epoll() переписывать лень.
можно на пайтоне за минуту написать более злобного буратина :)
И не надо non-posix epoll(). И так не собирается на BSD из за того, что sys/socket.h не заинклюжен и из за print_call_stack().
Тфу! Спасибо огромное. Поставлю щас BSD. На маке все писал, думал на BSD заработает. print_call_stack() я вроде даже и не использую… Убери нафиг.
конечно убрал уже :)
B execinfo.h туда же. Собралось нормально и вроде работает. Особо не проверял.
void
print_call_stack() {
#ifdef __linux__
...
#else
return;
#endif
}
B execinfo.h туда же. Собралось нормально и вроде работает. Особо не проверял.
хм… Тэг code какой то странный…
Пардон, имел ввиду «уберу нафиг». Мучаюсь с BSD.
Поставил, проверил. Зачекинил в svn, обновил вики для BSD пользователей.
П.С. Мучался с svn ом на BSD, 21 век, а он https не поддерживал.
П.С. Мучался с svn ом на BSD, 21 век, а он https не поддерживал.
Хабр явно более 1000 соединений одновременно обслуживает.
Ох чую сейчас будет обратный хаброэффект, организованный не на сторонник ресурс, а на сам хабр. :)
[1046041.052385] TCP: Peer 89.86.4.24:29269/35882 unexpectedly shrunk window 625419684:625424028 (repaired)
Это не «оно»? В смысле, не борьба с оным?
Это не «оно»? В смысле, не борьба с оным?
а чей это лог?
$ grep -m 1 shrunk /var/log/kernel.log.1
Jan 1 22:11:55 localhost kernel: [2573135.119374] TCP: Peer 85.242.201.187:62704/51413 unexpectedly shrunk window 109853464:109856304 (repaired)
Jan 1 22:11:55 localhost kernel: [2573135.119374] TCP: Peer 85.242.201.187:62704/51413 unexpectedly shrunk window 109853464:109856304 (repaired)
О, так это ядро поймало, что кто-то (торрент? ) находу уменьшил window намного, т.е. клиент в начале соединения объявил, что он может принимать одним куском (грубо говоря) 1Кб например, принял 20 байт и сказал что у него осталось места на 100 байт, заместо 1Кб минус 20 байт.
Интересно как сервер может это пофиксить: считать что тот ему врет и продолжать посылать куски большего размера? В любом случае slowhttptest не ведет себя так; он в самом начале говорит что он может принимать мелкие кусками данные, принимает первый кусок, и говорит стоп, места нет.
Интересно как сервер может это пофиксить: считать что тот ему врет и продолжать посылать куски большего размера? В любом случае slowhttptest не ведет себя так; он в самом начале говорит что он может принимать мелкие кусками данные, принимает первый кусок, и говорит стоп, места нет.
Это dmesg, оно (ядро) постоянно таким срёт, когда торренты запущены.
Спасибо за интересную статью. Проверил свои сервера.
Бинарником для OSX никто не поделится?
Не ясно, почему падает nginx. Разве там не асинхронные сокеты?
Мы это делали в 2005 г., зачем было палить вот так?!
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Уязвимости серверов к медленному чтению