2010-03-31 67 views
4

我寻找到的速率限制Django的管理员登录以防止字典攻击的各种方法。速率限制Django管理登录与Nginx的防止字典攻击

一种解决方案在此说明:http://simonwillison.net/2009/Jan/7/ratelimitcache/

不过,我宁愿做速率限制在web服务器端,使用Nginx的。

的Nginx的limit_req模块做到了这一点 - 允许你指定每分钟的请求的最大数量,如果用户越过发送503:http://wiki.nginx.org/NginxHttpLimitReqModule

完美!我想我会破解它,直到我意识到,Django管理的登录页面是不是在一致的地方,例如:/管理/胡说/给你在这个网址登录页面,而不是反弹至一个标准的登录页面。

所以我无法比拟的URL。任何人都可以想到另一种方式来知道管理页面正在显示(正则表达式的响应HTML?)

回答

3

首先:为了保护django管理员一点点,我总是使用管理员的url不同/管理员/一个好主意将部署管理员作为另一个域或子域上的第二个应用程序

您可以通过IPTABLES/NETFILTER限制每分钟的请求到整个webapp。教程如何完成可以在debian administrator找到。这是一个如何保护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

bmaeser是正确的,你应该在一个单独的实例中运行管理员(即单独的域/子域/端口)。

您可能也有兴趣django-sentinel,它使用memcached和自动黑名单屡犯的动态灰名单的可疑IP地址/网络。