Files
dimgigov c55d3080cf
CI / test (push) Has been cancelled
CI / verify (push) Has been cancelled
Clients CI / build-server (push) Has been cancelled
Clients CI / test-python (push) Has been cancelled
Clients CI / test-javascript (push) Has been cancelled
Clients CI / test-nim (push) Has been cancelled
Clients CI / test-rust (push) Has been cancelled
Update documentation and clients for v1.1.0
Documentation updates:
- Fix v0.1.0 → v1.1.0 version numbers in en, ru, fa, zh docs
- Add missing Window Functions, Multi-Tenant ERP, Supported Keywords sections
  to ru, fa, zh baraql.md (~105 lines each)
- Expand Turkish and Arabic baraql.md (110 → 268 lines)
- Expand Turkish and Arabic installation.md (62 → 307 lines)
- Add new Bulgarian documentation files (18 new files)

Client updates:
- Python: Full async/await rewrite with asyncio, request queueing
- Rust: Full async/await rewrite with tokio, async examples
- Nim: Update README to v1.1.0
- All clients now support async patterns consistently
2026-05-14 23:05:47 +03:00

6.0 KiB
Raw Permalink Blame History

Ръководство за Сигурност

TLS/SSL Криптиране

BaraDB поддържа TLS 1.3 за всички протоколи (бинарен, HTTP, WebSocket). Ако не е предоставен сертификат, сървърът автоматично генерира self-signed сертификат при стартиране за криптиране без конфигурация.

Използване на Персонализирани Сертификати

# Предоставяне на съществуващи сертификати
BARADB_TLS_ENABLED=true \
BARADB_CERT_FILE=/etc/baradb/server.crt \
BARADB_KEY_FILE=/etc/baradb/server.key \
./build/baradadb

Генериране на Self-Signed Сертификати

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 Само метрики и health

Използване на Токени

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")
# TOTP-базирана MFA
let mfaCode = am.generateTOTP("user1")
let valid = am.validateTOTP("user1", mfaCode)

Rate Limiting

Token-bucket rate limiting предотвратява злоупотреби:

import barabadb/protocol/ratelimit

var rl = newRateLimiter(
  rlaTokenBucket,
  globalRate = 10000,      # 10K заявки/s глобално
  perClientRate = 1000,    # 1K заявки/s на IP/токен
  burstSize = 100          # Разрешаване на 100 заявки burst
)

if not rl.allowRequest("client-ip"):
  return error("Лимитът на заявки е надвишен")

Мрежова Сигурност

Адрес за Свързване

По подразбиране BaraDB се свързва към 127.0.0.1 (само localhost). За продукция:

# Свързване към всички интерфейси (зад защитна стена или reverse proxy)
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 secret по подразбиране
  • Включете TLS с валидни сертификати
  • Свържете се към конкретни интерфейси
  • Включете автентикация в продукция
  • Конфигурирайте rate limiting
  • Включете одитно логване
  • Криптирайте данните в покой (LUKS или на ниво приложение)
  • Стартирайте BaraDB като non-root потребител
  • Поддържайте рестриктивни правила на защитната стена
  • Ротирайте JWT secret-и редовно