Django Axes

django-axes отслеживает неудачные попытки входа и блокирует подозрительную активность.

Установка

1# Установка пакета
2pip install django-axes
1# Или через Poetry
2poetry add django-axes

Настройка

 1# settings.py
 2INSTALLED_APPS = [
 3    'axes',
 4]
 5
 6MIDDLEWARE = [
 7    'axes.middleware.AxesMiddleware',
 8]
 9
10AUTHENTICATION_BACKENDS = [
11    'axes.backends.AxesBackend',
12    'django.contrib.auth.backends.ModelBackend',
13]
14
15# Настройки Axes
16AXES_FAILURE_LIMIT = 5
17AXES_COOLOFF_TIME = 1  # час
18AXES_LOCK_OUT_BY_COMBINATION_USER_AND_IP = True

Дополнительные настройки

 1# settings.py
 2# Блокировка по IP
 3AXES_LOCK_OUT_BY_IP = True
 4
 5# Блокировка по username
 6AXES_LOCK_OUT_BY_USER_OR_IP = True
 7
 8# Время блокировки в часах
 9AXES_COOLOFF_TIME = 2
10
11# Количество попыток
12AXES_FAILURE_LIMIT = 3
13
14# Исключения
15AXES_NEVER_LOCKOUT_GET = True
16AXES_NEVER_LOCKOUT_WHITELIST = True

Команды управления

1# Просмотр заблокированных попыток
2python manage.py axes_list_attempts
3
4# Сброс блокировок
5python manage.py axes_reset
6
7# Сброс блокировки для конкретного IP
8python manage.py axes_reset_ip 192.168.1.1

Кастомизация блокировки

1# settings.py
2AXES_LOCKOUT_TEMPLATE = 'axes/lockout.html'
3AXES_LOCKOUT_URL = '/locked-out/'
4
5# Кастомная логика блокировки
6AXES_LOCKOUT_CALLABLE = 'myapp.utils.custom_lockout'

FAQ

Q: Как исключить IP из проверки?
A: Используй AXES_IP_WHITELIST в настройках.

Q: Можно ли настроить уведомления о блокировках?
A: Да, используй сигналы Django для отправки уведомлений.