У меня есть веб-приложение 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
относительно легкой в вашем опыте, или вы несете значительные расходы? Предположим, это единственная политика, которую я реализую. Обсуждение здесь, кажется, предполагает, что это может быть дорого в оперативной памяти?