>А есть примеры решения на ipfw или еще чем. ограничение кол-ва соединений, вычисление атакующих ip, занесение их в таблицу и блокировка.
>Есть ли решения на аппаратном уровне?
Есть, но вместо хорошей железки я бы лучше купил автомобиль :) - это образно.
>Атака сейчас примерно на 10 мбит. IP с которых идут запросы на
>веб сервер постоянно меняются.
Это и называется DDOS (distributed DOS). Иначе было бы слишком просто.
>Соединений на nginx примерно 5 000. Апач
>создает много процессов и система виснет.
Выставьте ограничения в конфиге апача поменьше, MaxSpareServers, MaxClients, MaxRequestPerChild. Обязательно KeepAlive off.
Куда именно атака идет? Просто на установление соединения? Запрос страницы? Оформление гигантской корзины (чтобы нагнуть базу)?
Поглядите на http-заголовки, сравните с rfc2616, возможно в заголовках явные ошибки есть.
Может быть какие-нить модуля для апача помогут:
mod_limitconn - http://dominia.org/djao/limitipconn.html
mod_vhost_limit - http://apache.ivn.cl/
mod_ifier - http://www.steve.org.uk/Software/mod_ifier/
mod_security - http://www.modsecurity.org/
mod_evasive -
mod_ipdrop - http://miksir.pp.ru/?r=65
Этот список относительно старый и я не ручаюсь за то, что модули до сих пор актуальны или их функционал не реализован чем-нибудь другим. Так, поглядите...
>Что можно предпринять чтоб сайт хоть как то работал, если можно приведите
>примеры?
Вычислять атакующие ip, блокировать - худо-бедно может и выберете большую часть бот-нета (но никто не убережет от второй, третьей,..., волны), блокируйте иностранный (или по конкретным странам) трафик файрволом.
Списки сетей (ссылки из загашника, могут быть устаревшими или не очень актуальными; но хоть что-то)
http://noc.zenon.net/nets/current - рус
http://www.completewhois.com/statistics/data/ips-bycountry/r.../ - остальное
Если есть в запасе завалявшийся в углу сервер - часть трафика можно перевести на него и заюзать его мощности.
Ну и глядите статистику сети - может у вас ресурсов для сетевой подсистемы выделяется по-умолчанию мало, оттого вы не можете сервером обработать достаточно много вход. соединений:
netstat -m
netstat -s -p tcp
netstat -Lan
sysctl vm.zone