Ограничение скорости входа администратора Django с Nginx для предотвращения атаки по словарю - PullRequest
4 голосов
/ 31 марта 2010

Я изучаю различные способы ограничения скорости входа администратора Django для предотвращения атак по словарю.

Здесь объясняется одно решение: http://simonwillison.net/2009/Jan/7/ratelimitcache/

Однако я бы предпочел ограничить скорость на стороне веб-сервера, используя Nginx.

Модуль Nginx limit_req делает именно это - позволяет вам указать максимальное количество запросов в минуту и ​​отправлять 503, если пользователь переходит: http://wiki.nginx.org/NginxHttpLimitReqModule

Отлично! Я думал, что взломал его, пока не понял, что страница входа администратора Django не находится в согласованном месте, например, / admin / blah / дает вам страницу входа по этому URL-адресу, а не переходит на стандартную страницу входа.

Так что я не могу найти совпадения по URL. Может кто-нибудь придумать другой способ узнать, что страница администратора была отображена (regexp HTML ответа?)

Ответы [ 2 ]

3 голосов
/ 31 марта 2010

в первую очередь: чтобы немного защитить администратора django, я всегда использую URL для администратора, отличного от / admin / хорошей идеей было бы развернуть администратора как второе приложение в другом домене или поддомене

Вы можете ограничить количество запросов в минуту для всего веб-приложения через IPTABLES / NETFILTER. руководство о том, как это сделать, можно найти по адресу администратор Debian . это пример того, как защитить ssh-порт, но вы можете использовать ту же технику для http.

Вы можете использовать модуль NginxHttpLimitZone, чтобы ограничить количество одновременных подключений для назначенного сеанса или, в качестве особого случая, с одного IP-адреса. Отредактируйте nginx.conf:

из www.cyberciti.biz

### Directive describes the zone, in which the session states are stored i.e. store in slimits. ###
### 1m can handle 32000 sessions with 32 bytes/session, set to 5m x 32000 session ###
       limit_zone slimits $binary_remote_addr 5m;

### Control maximum number of simultaneous connections for one session i.e. ###
### restricts the amount of connections from a single ip address ###
        limit_conn slimits 5;

Вышеуказанные ограничения будут ограничивать количество одновременных «открытых» подключений на удаленном IP-адресе не более 5 одновременно.

1 голос
/ 24 мая 2011

bmaeser прав, вы должны запускать admin в отдельном экземпляре (т.е. отдельный домен / поддомен / порт).

Возможно, вас также заинтересует django-sentinel , который выполняет динамическое создание серых списков подозрительных IP-адресов / сетей с использованием повторных нарушителей memcached и auto-blacklists.

...