Вот уже 5 дней на сайт идет ddos атака, первым делом, после того как мне его передали, настроил nginx (req_limit и т.д.), поставил fail2ban и настроил его на мониторинг лога ошибок nginx, сайт ожил и работал нормально, пока не пришли другие ребятки ддосить… Этот ботнет оказался посерьезнее, и эта схема уже не работала, было принято решение накатить geoip для nginx, и кэшировать всё им же, после этого серверу полегчало. Но, эти гады засрали весь порт, поэтому сайт открывается через раз, поэтому вопрос:
1. Как же прикрутить geoip к iptables, дабы рубить их накорню! (все инструкции по установке этого модуля к iptables не подходят)
2. Почему при выполнении команды iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 -j REJECT
получаю: iptables: No chain/target/match by that name
цепочка INPUT есть.
Вы наркоманством занимаетесь. Вместо того, чтобы наугад ставить разные модули, надо сидеть читать логи, выявлять паттерны, используемые атакующим и банить собранные IP через iptables + ipset.
А с nochain lsmid | grep connlimit наверно ничего не выводит? Нужно подгружать модуль, только в 5 дебиане не скажу есть ли он нативно, т.к. везде перешли на 6 уже.
Ядро какое на оси? Если модуль не встает, то это из-за старого ядра.
Так как Вы хотите зарезать лимиты в файрволе, не делаеться.
Если у Вас старое ядро и модуль не встает, то можно сгенероривать сети конкретной страны на которую открыть, а остальное все закрыть, но правила iptables будут тогда громоздкие, и лучше выделить в отдельную цепочку.
Попробуйте настроить fail2ban более агрессивным способом, или, если у атакующих есть какой-то паттерн — юзерагент, кука, заголовок, урл запроса (tcpdump вам в помощь), то фильтруйте их сразу на файрволле — см модуль string. Так вы снизите загрузку канала на сервере. Но, скорее всего, это не поможет. Ботнет из пары тысяч машин сможет забить 100 мбит канал. А из десяти тысяч — забьет его одними SYN-запросами. Провайдер в фильтрации атаки бывает редко заинтересован (российские провайдеры наоборот, заинтересованы отжать побольше денег за трафик в результате атаки), а гигабитный канал стоит не совсем бюджетных денег.
Если сайт почти статичный (или может быть закэширован на длительное время, по крайней мере атакуемый урл), можно перевести отдачу сайта на CDNы — так решается проблема полосы канала. Ну и специализированные сервисы по защите от ддоса тоже никто не отменял, встречаются довольно бюджетные решения, но в основном не у нас
Аккуратнее с iptables. Сервер с на FreeBSD с pf под 200k SYN-флуда ложится. Если выключить pf и отбиваться силами nginx, серверу становится сразу легче.
nginx лучше всего справляется с ddos, но при атак более 100 000 pps сервер не будет успевать банить адреса и он будет перегружен в следствии чего ресурс будет недоступен. И при таких атаках нужно пускать трафик домена через А-запись на IP защищенного прокси сервера по типу Simply Proxy