Corp/docs/guides/IP_RESTRICTIONS_README.md
Игорь Надеин 48631f43fd Реорганизация документации и скриптов проекта
- Создана структура docs/ с категориями: completed, guides, architecture, diagnostic, in-progress, reports
- Перемещено 47+ MD файлов из корня проекта в docs/
- Удалено 6 устаревших/дублирующихся файлов
- Создана структура backend/scripts/ для тестов и утилит
- Перемещено 35 Python скриптов в backend/scripts/
- Создана структура backend/docs/ для технической документации
- Перемещено 12 MD файлов backend в backend/docs/
- Перемещены LDAP тестовые данные в backend/tests/fixtures/
- Добавлены README файлы для навигации
- Добавлены правила в .github/copilot-instructions.md для размещения документации

Результат:
- Корень проекта: только README.md
- Корень backend/: только manage.py и Django приложения
- Вся документация организована в структурированные папки
2025-12-26 13:49:51 +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