- RegistrationIPRestrictionMiddleware added - Removed view decorators - All logic now in middleware - Updated docs and settings - IP utils in common/ip_restrictions.py
97 lines
3.1 KiB
Markdown
97 lines
3.1 KiB
Markdown
# 🔒 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` найдите:
|
||
|
||
```python
|
||
# IP ОГРАНИЧЕНИЯ ДЛЯ РЕГИСТРАЦИИ
|
||
REGISTRATION_ALLOWED_IPS = None # По умолчанию только локальные IP
|
||
```
|
||
|
||
### Варианты настройки:
|
||
|
||
```python
|
||
# 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
|
||
|
||
## 🔧 Отключение
|
||
|
||
### Временно (для разработки):
|
||
```python
|
||
REGISTRATION_ALLOWED_IPS = ['*']
|
||
```
|
||
|
||
### Полностью:
|
||
В `settings.py` закомментируйте строку в `MIDDLEWARE`:
|
||
```python
|
||
# "eusrr_backend.middleware.RegistrationIPRestrictionMiddleware",
|
||
```
|
||
|
||
## 🧪 Тестирование
|
||
|
||
```bash
|
||
# Из локальной сети - работает
|
||
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:
|
||
```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`
|