Кем лучше банить?

Привет, комрады.
Интересует следующий вопрос: Как вы справляетесь с http флудом на сервера?
Я нашел для себя несколько способов:
1) Анализ логов nginx и блокировка самых "назойливых" посетителей(ботов). Минус - нагрузка при чтении логов и, все равно, остается нагрузка, ибо продолжает бомбить сервер даже в ошибку.
2) Ограничение на количество соединений с одного IP на уровне nginx. Минус - продолжают бомбить сервер и какая-никакая, а нагрузка есть. Даже от заглушек и ошибки 444.
3) Ограничение на количество соединений с одного IP на уровне iptables. Минус - нагрузка на сервер файерволлом.
4) Анализ netstat и дальнейшая блокировка ботов с большим количеством коннектов. Минус - нагрузка на сервер файерволлом.
5) Ограничение стран в nginx/iptables. Минусы те же, что и выше.

В общем, вопрос. Кем лучше банить так, чтобы нагрузка была поменьше?
Предложите интересные варианты, пожалуйста. Напишите, как боретесь с подобными атаками вы?
  • Вопрос задан
  • 3649 просмотров
Пригласить эксперта
Ответы на вопрос 7
AloneCoder
@AloneCoder
[object Object]
Поднимаете tarantool, и считайте в реальном времени по сессяим
Разбейте на группы, те кто парсят в тупую без таймаута - банить за N реквестов в минуту,
те кто парсят с таймаутом - банить за M реквестов в час например
Так вы не забаните провайдера например или мобильного оператора

Ну или не баньте, а капчу показывайте на отдельной странице

UPD. На тостере видимо отвалились комментарии к ответу)
Да, это nosql база от mail.ru
https://github.com/tarantool/tarantool
tarantool.org/doc/user_guide - доки
Ответ написан
IlyaEvseev
@IlyaEvseev
Opensource geek
1) И обнаруживать, и банить можно и нужно на нескольких уровнях.
Грубые атаки обнаруживать командой ss (не netsat!).
Безусловную блокировку делать через ipset (не iptables!).
Через nginx обнаруживать хитрые атаки, блокировать подозрительные.

2) В качестве отправной точки ищите в Гугле "site:habrahabr.ru nginx ipset".
Особо рекомендую habrahabr.ru/post/139931

3) Не пытайтесь сразу построить идеальную защиту.
Начните с простейшей и постепенно совершенствуйте.

4) Если вы не крутой спец по антиддосу, абсолютная защищенность недостижима. Можно только повысить порог пробития.
Ответ написан
Ernillew
@Ernillew
Администрирую *nix-системы с 1997 года
> Ограничение стран в nginx/iptables. Минусы те же, что и выше.

А вы не загоняйте страны в iptables, вам ipset умные люди для чего придумали?
Ответ написан
Комментировать
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
Банить лучше всего на шлюзе (на сетевом, в смысле). Экономичнее так.
Ответ написан
Комментировать
@IPv4 Автор вопроса
AloneCoder : А документация есть? И что это, вообще? А то натыкаюсь на СУДБ от майл.ру.
Извиняюсь, что не под Вашим комментом. Что то под комментами вообще не пишет.
Ответ написан
Fader
@Fader
использую fail2ban
Ответ написан
Комментировать
@metajiji
1. логи анализировать через fail2ban, производительность будет удовлетворительная.
2,3,4,5 нагрузка на сервер может быть гораздо сильно снижена при использовании ipset

Если ip адреса или сети (банить лучше сразу целые сети - нагрузка меньше) заведомо известны и меняться не будет длительное время, есть смысл использовать route blackhole:
Например:
ip route add blackhole 127.0.0.1/32
Так же этот вариант приемлем, если фаерволл недоступен. Можно вообще использовать только этот вариант, без ipset+iptables. Естественно было бы неплохо сделать некий скирпт для суммаризации добавленных Ip.

Так же хочу отметить про netstat, вместо него лучше используйте ss он так же покажет лучшие результаты, чем netstat.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы