On Thu, 21 Feb 2002, Sergey Gershtein wrote:
> Вопрос вот какой. Под FreeBSD собран apache с httpready. Судя по
> ощущениям, никакого таймаута у httpready не предусмотрено, т.е. любой
> может установить соединение на 80-й порт и ничего не передавать. Ядро
> со своей стороны будет молча и неограниченно долго ждать. Это так?
Автор написал, что таймаутов нет, но DoS быть не должно -
эти соединения остаются в incomplete очереди и если очередь
переполняется, то действует стандартный механизм удаления
из очереди, как если бы не было бы никаких фильтров.
Насколько я понимаю, обычно удаление происходит в порядке FIFO, но
когда входящих соединений много, то в некоторый момент начинается
псевдо-случайное удаление. Подробности - функция sodropablereq() в
/usr/src/sys/kern/uipc_socket2.c
> Спрашиваю потому, что сегодня нас, похоже, по такой схеме успешно
> атаковали. netstat -an показывал несколько сотен соединений в
> состоянии ESTABLISHED с одного московского IP-адреса на различные
> виртуальные сервера (IP-based) нашей машины. В логах серверов никаких
> упоминаний об этом адресе. Зайти ни на один сервер невозможно.
> Видимо, достигнут лимит соединений в ядре.
Как невозможно зайти - по HTTP или вообще ?
По идее фильтр на одном listen не может держать в ESTABLISHED
больше сокетов, чем указано в sysctl kern.ipc.somaxconnш - должно
начаться вышеописаное дропание.
Игорь Сысоев
=============================================================================
= Apache-Talk@lists.lexa.ru mailing list =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =