Инициализация в новом репозитории

This commit is contained in:
commit eb1f18f53e
374 changed files with 226678 additions and 0 deletions

208
SRV/docs/ufw.md Normal file
View file

@ -0,0 +1,208 @@
# UFW API Documentation
## Overview
API для управления файрволом UFW (Uncomplicated Firewall) в Linux. Позволяет добавлять, удалять и просматривать правила межсетевого экрана.
## Архитектура
### Модели данных
#### Protocol (Протокол)
```python
class Protocol(str, Enum):
TCP = "tcp" # Только TCP протокол
UDP = "udp" # Только UDP протокол
BOTH = "both" # Оба протокола (TCP и UDP)
```
При указании `BOTH`, система автоматически создает правила для обоих протоколов, используя `proto tcp/udp` в команде UFW.
#### Action (Действие)
```python
class Action(str, Enum):
ALLOW = "allow" # Разрешить трафик
DENY = "deny" # Запретить трафик без уведомления
REJECT = "reject" # Запретить трафик с уведомлением отправителю
```
#### Direction (Направление)
```python
class Direction(str, Enum):
IN = "in" # Входящий трафик
OUT = "out" # Исходящий трафик
```
#### UFWRule (Правило UFW)
```python
class UFWRule(BaseModel):
action: Action # Действие (allow/deny/reject)
direction: Direction # Направление трафика (in/out)
from_ip: str # IP-адрес источника
to_ip: str # IP-адрес назначения
port: Union[int, str] # Порт или диапазон портов
protocol: Protocol # Протокол
comment: Optional[str] # Комментарий к правилу
```
Модель выполняет следующие проверки:
1. Валидация IP адресов:
- Проверяет корректность IPv4/IPv6 адресов
- Поддерживает CIDR нотацию
- Проверяет совместимость версий IP (IPv4/IPv6)
2. Валидация портов:
- Одиночный порт: число от 1 до 65535
- Диапазон портов: строка вида "3000:4000"
- Проверяет корректность диапазона (start <= end)
## API Endpoints
### Получение правил
#### GET /ufw/rules
Получает список всех правил UFW.
**Response:**
```json
{
"enabled": true,
"rules": [
{
"action": "allow",
"direction": "in",
"from_ip": "0.0.0.0/0",
"to_ip": "0.0.0.0/0",
"port": 80,
"protocol": "tcp",
"comment": "Allow HTTP"
}
]
}
```
### Добавление правил
#### POST /ufw/rules/in
Добавляет входящие правила UFW.
**Request:**
```json
{
"rules": [
{
"action": "allow",
"from_ip": "0.0.0.0/0",
"to_ip": "0.0.0.0/0",
"port": 80,
"protocol": "tcp",
"comment": "Allow HTTP"
}
]
}
```
**Response:**
```json
{
"status": "success",
"message": "Входящие правила UFW успешно добавлены"
}
```
#### POST /ufw/rules/out
Добавляет исходящие правила UFW.
**Request:**
```json
{
"rules": [
{
"action": "allow",
"from_ip": "192.168.1.0/24",
"to_ip": "0.0.0.0/0",
"port": 443,
"protocol": "tcp",
"comment": "Allow HTTPS outbound"
}
]
}
```
**Response:**
```json
{
"status": "success",
"message": "Исходящие правила UFW успешно добавлены"
}
```
### Удаление правил
#### DELETE /ufw/rules
Удаляет правила UFW по их номерам.
**Request:**
```json
{
"numbers": [1, 2, 3]
}
```
**Response:**
```json
{
"status": "success",
"message": "Правила UFW успешно удалены"
}
```
### Управление состоянием
#### POST /ufw/enable
Включает UFW.
**Response:**
```json
{
"status": "success",
"message": "UFW успешно включен"
}
```
#### POST /ufw/disable
Выключает UFW.
**Response:**
```json
{
"status": "success",
"message": "UFW успешно выключен"
}
```
## Обработка ошибок
### HTTP Status Codes
1. Успешные операции (200):
- Получение списка правил
- Успешное добавление/удаление правил
- Включение/выключение UFW
2. Ошибки клиента (400):
- UFW отключен при попытке добавления правил
- Некорректный IP адрес или CIDR
- Неверный номер порта или диапазон
- Несовместимые версии IP (IPv4/IPv6)
- Неверные значения enum (action/protocol/direction)
3. Ошибки сервера (500):
- Ошибки выполнения команд UFW
- Внутренние ошибки сервера
### Формат ошибок
```json
{
"detail": "Описание ошибки"
}