Corp/IP_RESTRICTIONS_README.md
Игорь Надеин 65c6d47eaa feat: centralized IP restriction for registration via middleware
- RegistrationIPRestrictionMiddleware added
- Removed view decorators
- All logic now in middleware
- Updated docs and settings
- IP utils in common/ip_restrictions.py
2025-12-05 16:18:11 +03:00

3.1 KiB
Raw Blame History

🔒 IP-ограничения для регистрации - Краткая инструкция

✅ Что сделано

Добавлен middleware для ограничения доступа к регистрации по IP-адресу.

📁 Изменённые файлы

  1. backend/eusrr_backend/middleware.py - добавлен RegistrationIPRestrictionMiddleware
  2. backend/eusrr_backend/settings.py - middleware включен в MIDDLEWARE
  3. backend/common/ip_restrictions.py - утилиты для проверки IP

⚙️ Настройка

В backend/eusrr_backend/settings.py найдите:

# IP ОГРАНИЧЕНИЯ ДЛЯ РЕГИСТРАЦИИ
REGISTRATION_ALLOWED_IPS = None  # По умолчанию только локальные IP

Варианты настройки:

# 1. Только локальные IP (по умолчанию)
REGISTRATION_ALLOWED_IPS = None

# 2. Разрешить все IP (для разработки)
REGISTRATION_ALLOWED_IPS = ['*']

# 3. Разрешить конкретные сети
REGISTRATION_ALLOWED_IPS = [
    '192.168.1.0/24',  # Локальная сеть офиса
    '10.0.0.0/8',      # Корпоративная сеть
]

# 4. Разрешить конкретные IP
REGISTRATION_ALLOWED_IPS = ['192.168.1.100', '203.0.113.42']

🎯 Как работает

По умолчанию (None):

  • ✅ Разрешены: 127.0.0.1, 192.168.x.x, 10.x.x.x, 172.16-31.x.x
  • ❌ Заблокированы: все внешние IP

Блокируемые URL:

  • /auth/register/ (веб-форма)
  • /api/v1/auth/register/ (API)

Ответ при блокировке:

  • API: {"detail": "Регистрация доступна только из локальной сети.", "client_ip": "..."}
  • Веб: Красивая страница 403 с информацией об IP

🔧 Отключение

Временно (для разработки):

REGISTRATION_ALLOWED_IPS = ['*']

Полностью:

В settings.py закомментируйте строку в MIDDLEWARE:

# "eusrr_backend.middleware.RegistrationIPRestrictionMiddleware",

🧪 Тестирование

# Из локальной сети - работает
curl http://localhost:9000/api/v1/auth/register/ \
  -H "Content-Type: application/json" \
  -d '{"email":"test@example.com",...}'

# С внешнего IP - блокируется
curl http://localhost:9000/api/v1/auth/register/ \
  -H "X-Forwarded-For: 203.0.113.50" \
  -d '{"email":"test@example.com",...}'

🌐 Работа за прокси

Middleware автоматически определяет реальный IP через заголовки X-Forwarded-For и X-Real-IP.

Настройте Nginx:

location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
}

📚 Полная документация

См. IP_REGISTRATION_RESTRICTIONS.md