Django的黑名单用户和主机。自动将ratelimited客户端列入黑名单。基于djangoblacklist
django-axiioss-blacklist的Python项目详细描述
Django黑名单
Django的黑名单用户和主机。自动黑名单费率有限的客户。基于django-blacklist
概述
Django黑名单允许您阻止特定用户和IP地址/网络访问您的应用程序。 可以从管理界面手动阻止客户端,也可以在超过请求速率限制后自动阻止客户端。 黑名单规则适用于特定的持续时间。 黑名单具有很强的可伸缩性,并且在应用时不会对大量规则造成明显的开销。在
安装
要安装软件包,请运行:
$ pip install django-axiioss-blacklist
将blacklist
应用程序添加到INSTALLED_APPS
:
在AuthenticationMiddleware
之后添加blacklist_middleware
中间件:
MIDDLEWARE = [
...
'django.contrib.auth.middleware.AuthenticationMiddleware',
'blacklist.middleware.blacklist_middleware',
...
]
应用黑名单数据库迁移:
$ python manage.py migrate blacklist
使用
您可以从管理员管理黑名单规则。 更改在可配置的时间后生效,或在服务器重新启动时生效。 规则可以针对用户或IP地址。 您还可以通过指定可选的prefixlen字段(网络前缀位的数目)来定位IP网络(范围)。 每个规则都有特定的持续时间。在这个期限过后,规则将自动过期。 当请求因匹配规则而被阻止时:
- 返回状态400(错误请求)。在
- 将呈现错误模板。 您可以指定一个自定义的(见下文),也可以将其用于状态400。在
- 记录一条消息
(对于自定义模板,来自记录器
blacklist.middleware
的警告,否则来自记录器django.security
的错误)。在
正在删除过期的规则
过期的规则不会自动从数据库中删除。
可以使用包含的管理命令trim_blacklist
清理它们:
$ python manage.py trim_blacklist [-c <created_days>] [-e <expired_days>]
选项-c
和{
自动黑名单
超过指定的请求速率限制后,客户端可以自动被列入黑名单。 此功能需要django-ratelimit。在
首先,通过应用@ratelimit
修饰符对视图进行速率限制。确保设置block=False
。
然后,通过添加@blacklist_ratelimited
修饰符将速率受限的客户端列入黑名单。指定黑名单持续时间。
例如:
from datetime import timedelta
from ratelimit.decorators import ratelimit
from blacklist.ratelimit import blacklist_ratelimited
@ratelimit(key='user_or_ip', rate='50/m', block=False)
@blacklist_ratelimited(timedelta(minutes=30))
def index(request):
...
自动规则立即生效。 如果请求来自经过身份验证的用户,则规则将针对该用户。 否则,它将以他们的IP地址为目标。在
注意:客户机IP地址取自REMOTE_ADDR
值的request.META
。
如果应用程序位于一个或多个反向代理之后,则默认情况下,
始终是最近代理的地址。
为了避免将所有客户机列入黑名单,可以从中间件中的X-Forwarded-For
头设置REMOTE_ADDR
。
但是,请记住,可以伪造此标头以绕过速率限制。
为此,您可以使用该头中的最后一个地址。
如果您在两个代理后面,请使用倒数第二个代理,等等
@blacklist_ratelimited
接受两个参数:(duration, block=True)
。在
duration
可以是timedelta
对象,也可以是两个独立持续时间的元组 (对于基于用户和基于IP的规则)。在block
指定是立即阻止请求,还是传递给视图。在
自动规则将有一个注释,其中包含请求的ID,该ID触发了规则的创建, 以及“请求热线”。 只有在可用时才添加请求ID。Django不生成请求id。 为此,您可以安装django-log-request-id。在
设置
BLACKLIST_ENABLE
-是否应阻止列入黑名单的客户端, 并且速率受限的客户端应该被列入黑名单;默认值:True
BLACKLIST_RELOAD_PERIOD
-重新加载黑名单的频率,以秒为单位;默认值:60
BLACKLIST_RATELIMITED_ENABLE
-是否应自动将速率限制的客户列入黑名单; 需要BLACKLIST_ENABLE
;默认值:True
BLACKLIST_TEMPLATE
-要呈现给被阻止的客户端的自定义错误模板的名称; 它的上下文将包含request
和exception
; 设置为None
将模板用于状态400;默认值:None
- 项目
标签: