Процитирую себя, писал как-то уже в другом месте:
Цитата
Отбиться от DDoS далеко не простая задача, и зачастую отличить атакующего, от обычного пользователя, оказывается весьма сложно. То есть профессиональная атака будет подстроена под множество нормальных обращений, при чем нормальных обращений с разных IP.
Соответственно, первое, что мы должны сделать, это создать максимальный запас по "мощности". Путей тут 2, это тупое увеличение производительности железа/каналов и тщательное конфигурирование системы и приложений. Например системными средствами закрыть все лишние порты правилом DROP (речь идет о Linux) или DENY, если мы хотим делать вид, что на этом порту ничего не висит, во время атаки правило DROP можно сменить на TARPIT. Conntrack желательно выключить, для IP находящегося в зоне риска (разумеется NAT на этом IP перестанет работать). Приложения тоже тщательно оттюнить, выставив минимально необходимые значения timeout. Тот же apache по возможности прикрыть при помощи nginx. Почту распределить на несколько MX серверов и в случае атаки принимать ее только от свободных на данный момент узлов.
Если атака началась и запаса "мощности" не хватило, начинать анализировать структуру атаки. В силу причин указанных вначале, универсальных средств здесь нет. tcpdump+мозг помогут понять, что происходит и заткнуть проблему.
Собственно есть еще метод, далеко не всегда применимый, но упомянуть стоит. Делаем наоборот, не врагов ищем, а закрываем доступ всем и открываем, только определенной группе, разумеется у вас должно быть средство, как эту группу вычленить.