3.5 KiB
3.5 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 使用 HMAC-SHA256 签名的 JWT。
启用认证
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")
let mfaCode = am.generateTOTP("user1")
let valid = am.validateTOTP("user1", mfaCode)
限流
Token-bucket 限流防止滥用:
import barabadb/protocol/ratelimit
var rl = newRateLimiter(
rlaTokenBucket,
globalRate = 10000,
perClientRate = 1000,
burstSize = 100
)
if not rl.allowRequest("client-ip"):
return error("超出限流")
网络安全
绑定地址
默认 BaraDB 绑定到 127.0.0.1(仅本地)。生产环境:
BARADB_ADDRESS=0.0.0.0 ./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
静态数据加密
操作系统级加密
使用 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_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
}
安全检查清单
- 更改默认 JWT 密钥
- 使用有效证书启用 TLS
- 绑定到特定接口
- 生产环境启用认证
- 配置限流
- 启用审计日志
- 静态数据加密
- 以非 root 用户运行
- 保持防火墙规则严格
- 定期轮换 JWT 密钥