120 lines
3.1 KiB
Markdown
120 lines
3.1 KiB
Markdown
# راهنمای امنیت
|
|
|
|
## رمزنگاری TLS/SSL
|
|
|
|
BaraDB از TLS 1.3 برای تمام پروتکلها (باینری، HTTP، WebSocket) پشتیبانی میکند. اگر گواهی ارائه نشود، سرور در هنگام راهاندازی یک گواهی خودامضا تولید میکند.
|
|
|
|
### استفاده از گواهیهای سفارشی
|
|
|
|
```bash
|
|
BARADB_TLS_ENABLED=true \
|
|
BARADB_CERT_FILE=/etc/baradb/server.crt \
|
|
BARADB_KEY_FILE=/etc/baradb/server.key \
|
|
./build/baradadb
|
|
```
|
|
|
|
### تولید گواهیهای خودامضا
|
|
|
|
```bash
|
|
openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt \
|
|
-days 365 -nodes -subj "/CN=localhost"
|
|
```
|
|
|
|
### Let's Encrypt (تولید)
|
|
|
|
از certbot استفاده کنید و BaraDB را به فایلهای تولیدشده هدایت کنید:
|
|
|
|
```bash
|
|
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
|
|
```
|
|
|
|
## احراز هویت
|
|
|
|
### احراز هویت مبتنی بر JWT
|
|
|
|
BaraDB از JWT با امضای HMAC-SHA256 استفاده میکند.
|
|
|
|
#### فعالسازی احراز هویت
|
|
|
|
```bash
|
|
BARADB_AUTH_ENABLED=true \
|
|
BARADB_JWT_SECRET="$(openssl rand -hex 32)" \
|
|
./build/baradadb
|
|
```
|
|
|
|
#### ایجاد توکنها
|
|
|
|
```nim
|
|
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` | فقط معیارها و سلامت |
|
|
|
|
### احراز هویت چندعاملی (MFA)
|
|
|
|
```nim
|
|
import barabadb/protocol/auth
|
|
|
|
var am = newAuthManager("secret-key")
|
|
let mfaCode = am.generateTOTP("user1")
|
|
let valid = am.validateTOTP("user1", mfaCode)
|
|
```
|
|
|
|
## محدودیت نرخ
|
|
|
|
محدودیت نرخ token-bucket از سوءاستفاده جلوگیری میکند:
|
|
|
|
```nim
|
|
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` متصل میشود. برای تولید:
|
|
|
|
```bash
|
|
BARADB_ADDRESS=0.0.0.0 ./build/baradadb
|
|
```
|
|
|
|
## چکلیست امنیتی
|
|
|
|
- [ ] تغییر رمز JWT پیشفرض
|
|
- [ ] فعالسازی TLS با گواهیهای معتبر
|
|
- [ ] اتصال به رابطهای خاص
|
|
- [ ] فعالسازی احراز هویت در تولید
|
|
- [ ] پیکربندی محدودیت نرخ
|
|
- [ ] فعالسازی لاگ حسابرسی
|
|
- [ ] رمزنگاری داده در حالت سکون
|
|
- [ ] اجرای BaraDB بهعنوان کاربر غیرroot
|
|
- [ ] محدود نگهداشتن قوانین فایروال
|
|
- [ ] چرخش منظم رمزهای JWT |