208 lines
No EOL
5.3 KiB
Markdown
208 lines
No EOL
5.3 KiB
Markdown
# 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": "Описание ошибки"
|
||
} |