Ахтунк! Сайт опасносте!

Колхознеке отаке! Пыщь-пыщь!

Сегодня ночью какие-то идиоты пытались DDoS-ить сайт. Не придумали ничего умнее, чем слать много запросов страничек с полусотни компьютеров. Ну это зафильтровалось, естессна. Заодно была возможность потестировать, какие конфигурации скриптов веселее работают.

Пока остановился на комбинации iptables hashlimit + recent. По идее надо бы вместо recent привернуть ipset, но там непонятно, как систить устаревшие записи. У меня пока конечный автомат получился вот такой (это не все правила, только кусок для примера):

iptables -A fw-input -m recent --rcheck --seconds 250 --rttl -j DROP
iptables -A fw-input -m recent --update --seconds 300 --rttl -j DROP
iptables -A fw-input -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A fw-input -p tcp --dport 80 -m state --state NEW -m hashlimit --hashlimit-name blackhole --hashlimit-mode srcip --hashlimit-above 10/sec --hashlimit-burst 100 -j blackhole
iptables -A blackhole -m recent --set -j DROP

Логика простая - если с какого-то IP поступает слишком много коннектов, то ставим флажок, и для этого этого адреса начинаем прибивать вообще все пакеты, чтобы разорвать установленные соединения тоже.

Но надо модуль recent перегрузить, потому что по умолчанию там только 100 записей вмещается. Идеально было бы как-то напрямую проверять состояние таблицы hashlimit при фильтрации установившихся соединений, но это я еще не додумал.

  • 1210
Comments
andres24

а я думал, чего за хре…ночью была! на форум не мог зайти!)

evgenyl

Попробуй “-j REJECT --reject-with icmp-host-prohibited” заместо DROP, у меня намного эффективней работает.

fff-z

Благодаря этому похоже теперь новый рекорд посещаемости сегодня был в 02,39 в 5566 человек, а до этого в районе 1200 было.

Vitaly
evgenyl;bt47198

Попробуй “-j REJECT --reject-with icmp-host-prohibited” заместо DROP, у меня намного эффективней работает.

А почему? По идее на tcp-флуде лишний траффик.

evgenyl

дроп просто проглатывает трафик и все, но доставляет, а так циска сверху говорит, rc-design - не … не знаю …

Vitaly

Какая разница что ответят, если пакеты все равно мне на интерфейс попадут? Атакующая сторона ведь не прекратит попытки новые соединения делать. А доступа к BGP и т.п. чтобы траффиком рулить, у меня нет.

evgenyl

А ты сравни как пингуется с забаненного IP твой хост при DROP и REJECT

Vitaly

Это не избавляет магическим образом от забивки канала исходящими ICMP-пакетами. Ну выглядеть будет иначе, толку-то…

evgenyl

Второй выглядит так, как будто хост не существует, таблица маршрутизации на время кэшируется и атакующая сторона просто долбит свой кэш 2-3 сек, а не шлет тебе запросы на соединения

Vitaly

На спуфинге-то не сработает, а проблем создаст вагон. Я ж не под конкретную атаку тюню.

Хотя у меня там проверка TTL стоит, чтобы фильтровать спуфинг. Надо подумать. А где почитать про кеширование таблиц роутинга на клиентах и как надолго там фейк застрянет?