Реализация fail2ban правильным способом

707
Hassan Baig

У меня есть веб-приложение Django, где люди пишут комментарии и комментарии других пользователей. Веб-сервер Gunicorn + nginx (обратный прокси). БД является postgresql. БД и веб-приложение находятся на двух разных компьютерах на основе Ubuntu.

Некоторые злоумышленники начали злоупотреблять функцией голосования, отдавая себе тысячи голосов в течение нескольких минут (или понижая голосование других). Мои серверы эффективно получают DDOS при запуске такого скрипта. Некоторые из этих людей также выдают себя за других пользователей, крадя их куки!

Я хочу обнаружить это поведение рано, на уровне nginx. Я думал, что я установлю fail2banи напишу политику. Политика может быть такой: если более 10 голосов исходят от IP-адреса в течение 15 секунд, отправьте этот IP-адрес в тюрьму (т. Е. Перенаправьте на URL-адрес тюрьмы) на 30 минут.

Теперь по моему access.log, голосование (вверх или вниз) создает следующее: 31.13.113.83 - - [14/Feb/2016:06:51:10 +0000] "POST /vote/ HTTP/1.1" 302 5 "http://example.com/?sorg_service_id_internal=373234912870626%3BAfq3$.

Будучи новичком в этом, мне нужна помощь в реализации моей политики. Будет ли это failregex = ^ \vote\в .confфайле [Definition]и в следующем jail.local:

[nginx-votefraud]  enabled = true port = http,https filter = nginx-votefraud logpath = /var/log/nginx/access.log maxretry = 10 findtime = 15 bantime = 3600 banurl = /banned/ 

Это оно?

Примечание. Меня также интересует, как это может повлиять на производительность веб-приложения. Внедряется ли fail2banотносительно легкая реализация в вашем опыте или вы несете значительные расходы? Предположим, это единственная политика, которую я реализую. Обсуждение здесь, кажется, предполагает, что это может быть дорого в оперативной памяти?

1
потому что это вопрос конфигурации, я перехожу на SuperUser schroeder 8 лет назад 1
Похоже, у вас есть более серьезные проблемы, чем просто DoS, если злоумышленники могут сделать все это. multithr3at3d 8 лет назад 0
@ korockinout13 мы исследуем проблему XSS отдельно (не стесняйтесь предлагать что-то не по себе), но что касается фальсификаций голосования, я чувствую, что `fail2ban` может уловить это на уровне веб-сервера и эффективно сделать поведение слишком наказывающим делать. Таким образом, `fail2ban` является критической частью стратегии. Если вы видели мой вопрос, не стесняйтесь предложить ответ. Hassan Baig 8 лет назад 0

1 ответ на вопрос

0
unNamed

Вы должны взглянуть на эти два модуля nginx:
http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html

Это помогает вам ограничивать запросы и / или соединения, что предотвращает перегрузку вашего бэкенда. Затем я добавил бы проверку, если пользователь уже проголосовал за определенный пост, и отказал бы во втором голосовании, если так.
Затем вы все равно можете проверить журнал 503 (Service Temporarily Unavailable)и использовать fail2ban, чтобы не пускать тех, кто запускает ограничения nginx (слишком часто).

Я не получил бит о "503 (служба временно недоступна)". Вы можете уточнить это на примере? Hassan Baig 7 лет назад 0
Вы устанавливаете лимит с одним из этих модулей. Предел срабатывает. Запрашивающая сторона получает 503. Это также зарегистрировано в access.log. Вы можете использовать это для fail2ban, чтобы заблокировать IP-адрес запрашивающих, когда nginx обнаруживает удар. Таким образом, ваш бэкэнд защищен с помощью nginx, а nginx защищен с помощью fail2ban, который использует iptables (брандмауэр, удаление пакетов). unNamed 7 лет назад 0

Похожие вопросы