6.1 KiB
6.1 KiB
Руководство по безопасности
TLS/SSL шифрование
BaraDB поддерживает TLS 1.3 для всех протоколов (бинарный, HTTP, WebSocket). Если сертификат не предоставлен, сервер автоматически генерирует самоподписанный сертификат при запуске для шифрования без конфигурации.
Использование пользовательских сертификатов
# Предоставьте существующие сертификаты
BARADB_TLS_ENABLED=true \
BARADB_CERT_FILE=/etc/baradb/server.crt \
BARADB_KEY_FILE=/etc/baradb/server.key \
./build/baradadb
Генерация самоподписанных сертификатов
openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt \
-days 365 -nodes -subj "/CN=localhost"
Let's Encrypt (Производство)
Используйте certbot и укажите BaraDB на сгенерированные файлы:
sudo certbot certonly --standalone -d db.example.com
BARADB_CERT_FILE=/etc/letsencrypt/live/db.example.com/fullchain.pem \
BARADB_KEY_FILE=/etc/letsencrypt/live/db.example.com/privkey.pem \
./build/baradadb
TLS на стороне клиента
from baradb import Client
client = Client("localhost", 9472, tls=True, tls_verify=True)
client.connect()
Аутентификация
JWT-аутентификация
BaraDB использует JWT (JSON Web Tokens) с подписью HMAC-SHA256.
Включение аутентификации
BARADB_AUTH_ENABLED=true \
BARADB_JWT_SECRET="$(openssl rand -hex 32)" \
./build/baradadb
Создание токенов
import barabadb/protocol/auth
var am = newAuthManager("your-secret-key")
let token = am.createToken(JWTClaims(
sub: "user1",
role: "admin",
exp: getTime() + 24.hours
))
Контроль доступа на основе ролей
| Роль | Разрешения |
|---|---|
admin |
Полный доступ |
write |
Чтение + запись |
read |
Только чтение |
monitor |
Только метрики и здоровье |
Использование токенов
curl -H "Authorization: Bearer $TOKEN" \
http://localhost:9470/api/query \
-d '{"query": "SELECT * FROM users"}'
from baradb import Client
client = Client("localhost", 9472)
client.connect()
client.authenticate("eyJhbGciOiJIUzI1NiIs...")
Многофакторная аутентификация (MFA)
import barabadb/protocol/auth
var am = newAuthManager("secret-key")
# MFA на основе TOTP
let mfaCode = am.generateTOTP("user1")
let valid = am.validateTOTP("user1", mfaCode)
Ограничение скорости
Token-bucket ограничение скорости предотвращает злоупотребления:
import barabadb/protocol/ratelimit
var rl = newRateLimiter(
rlaTokenBucket,
globalRate = 10000, # 10K req/s глобально
perClientRate = 1000, # 1K req/s на клиент
burstSize = 100 # Позволить burst 100 req
)
if not rl.allowRequest("client-ip"):
return error("Rate limit exceeded")
Сетевая безопасность
Адрес привязки
По умолчанию BaraDB привязывается к 127.0.0.1 (только localhost). Для производства:
# Привязать ко всем интерфейсам (за файрволом или обратным прокси)
BARADB_ADDRESS=0.0.0.0 ./build/baradadb
# Привязать к конкретному внутреннему интерфейсу
BARADB_ADDRESS=10.0.0.5 ./build/baradadb
Правила файрвола
# Разрешить только серверам приложений
sudo ufw allow from 10.0.0.0/8 to any port 9472
sudo ufw allow from 10.0.0.0/8 to any port 9470
# Заблокировать внешний доступ к портам управления
sudo ufw deny 9471 # WebSocket (только внутреннее использование)
Шифрование данных в покое
Шифрование на уровне ОС
Используйте LUKS для полнодискового шифрования:
cryptsetup luksFormat /dev/nvme0n1p2
cryptsetup open /dev/nvme0n1p2 baradb-crypt
mkfs.ext4 /dev/mapper/baradb-crypt
mount /dev/mapper/baradb-crypt /var/lib/baradb
Шифрование на уровне приложения
BaraDB поддерживает прозрачное шифрование SSTable файлов:
BARADB_STORAGE_ENCRYPTION_KEY="$(openssl rand -hex 32)" \
./build/baradadb
Аудитлог
Все запросы и административные действия логируются:
{
"timestamp": "2025-01-15T10:30:00Z",
"level": "info",
"event": "query_executed",
"client_ip": "10.0.0.15",
"user": "app_user",
"query": "SELECT * FROM users WHERE id = ?",
"duration_ms": 12,
"rows_returned": 1
}
Включите аудитлог:
BARADB_LOG_LEVEL=info \
BARADB_LOG_FORMAT=json \
BARADB_LOG_FILE=/var/log/baradb/audit.log \
./build/baradadb
Чеклист безопасности
- Изменить секрет JWT по умолчанию
- Включить TLS с валидными сертификатами
- Привязать к конкретным интерфейсам
- Включить аутентификацию в производстве
- Настроить ограничение скорости
- Включить аудитлог
- Шифровать данные в покое (LUKS или на уровне приложения)
- Запускать BaraDB от не-root пользователя
- Поддерживать файрвол в строгом режиме
- Регулярно менять секреты JWT