/linux

Vaultwarden Kurulumu: Bitwarden'ın Hafif ve Pratik Alternatifi

Vaultwarden Nedir?

Vaultwarden, Bitwarden'ın Rust ile yazılmış alternatif bir sunucu implementasyonu. Eskiden "bitwarden_rs" ismiyle biliniyordu.

Resmi Bitwarden sunucusuyla aynı işi yapıyor ama çok daha az kaynak kullanıyor. Resmi sunucu için minimum 2GB RAM lazımken, Vaultwarden 10-20MB RAM ile çalışabiliyor. Raspberry Pi'de bile sorunsuz koşuyor.

Neden Vaultwarden?

  • Kurulumu çok basit (tek container yeterli)
  • Minimal kaynak tüketimi
  • Tüm Bitwarden uygulamaları ile uyumlu
  • Premium özellikleri ücretsiz (TOTP, dosya ekleri vs.)
  • Aktif topluluk desteği

Bitwarden'ın resmi sunucusu Microsoft SQL Server, Docker Compose ile 6-7 farklı servis gerektiriyor. Vaultwarden'da böyle dertler yok.

Önemli Güvenlik Notu

Vaultwarden mutlaka HTTPS ile çalışmalı. HTTP üzerinden çalıştırmaya kalkarsanız tarayıcı eklentileri ve mobil uygulamalar bağlanmayı reddedecektir. Bu bir bug değil, bilinçli bir güvenlik özelliği. (İlk dockerda kaldırdığımda sürekli hata alıyordu. Neyi başaramadın hıa... şeklinde bir isyanım olmuştu.)

Şifre yöneticisi HTTP üzerinden çalışmamalı çünkü:

  • Şifreleriniz düz metin olarak iletilir
  • Man-in-the-middle saldırılarına açık olursunuz
  • Bitwarden uygulamaları güvenli olmayan bağlantıları kabul etmez

O yüzen bu kurulumda SSL sertifikası ayarlamayı da göstereceğim.

Gereksinimler

  • Docker ve Docker Compose
  • Bir domain adı (subdomain de olur, örnek: vault.example.com)
  • 512MB RAM (yeterli oluyor gerçekten)
  • 5GB disk alanı

Adım 1: Dosyaları Hazırlama

Vaultwarden için bir klasör oluşturalım:

mkdir vaultwarden cd vaultwarden

.env dosyası oluşturun:

DOMAIN=https://vault.example.com WEBSOCKET_ENABLED=true SIGNUPS_ALLOWED=false

SIGNUPS_ALLOWED başlangıçta true yapın ki ilk hesabınızı oluşturabilin. Hesabınızı oluşturduktan sonra false yapıp tekrar başlatmanızı öneririm. Yoksa herkes kayıt olabilir.

docker-compose.yml dosyası:

services: vaultwarden: image: vaultwarden/server:latest restart: unless-stopped environment: DOMAIN: ${DOMAIN} WEBSOCKET_ENABLED: ${WEBSOCKET_ENABLED} SIGNUPS_ALLOWED: ${SIGNUPS_ALLOWED} volumes: - vaultwarden:/data ports: - 127.0.0.1:8000:80 volumes: vaultwarden:

Burada 127.0.0.1:8000:80 kısmına dikkat edin. Vaultwarden'ı doğrudan internete açmıyoruz. Önce Nginx ile HTTPS yapılandırması yapacağız.

Adım 2: Nginx ve SSL Kurulumu

Nginx kuralım (Ubuntu/Debian için):

sudo apt update sudo apt install nginx certbot python3-certbot-nginx

Nginx yapılandırması oluşturun: /etc/nginx/sites-available/vaultwarden

server { listen 80; server_name vault.example.com; # Certbot için gerekli location /.well-known/acme-challenge/ { root /var/www/html; } # Geçici olarak 80 portunu açık tutalım location / { return 301 https://$server_name$request_uri; } }

Aktif edelim:

sudo ln -s /etc/nginx/sites-available/vaultwarden /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx

SSL sertifikası alalım (Let's Encrypt):

sudo certbot --nginx -d vault.example.com

Certbot otomatik olarak Nginx yapılandırmasını güncelleyecek ama biz WebSocket desteği için birkaç ekleme yapacağız.

/etc/nginx/sites-available/vaultwarden dosyasını şöyle güncelleyin:

# HTTP'den HTTPS'e yönlendirme server { listen 80; server_name vault.example.com; return 301 https://$server_name$request_uri; } # HTTPS yapılandırması server { listen 443 ssl http2; server_name vault.example.com; # SSL sertifikaları (certbot bunları otomatik ekler) ssl_certificate /etc/letsencrypt/live/vault.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/vault.example.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # Güvenlik başlıkları add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; # Maksimum dosya boyutu (eklentiler için) client_max_body_size 525M; # Ana lokasyon location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # WebSocket desteği location /notifications/hub { proxy_pass http://127.0.0.1:8000; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /notifications/hub/negotiate { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }

Nginx'i yeniden yükleyin:

sudo nginx -t sudo systemctl reload nginx

Adım 3: Vaultwarden'ı Başlatma

Artık Vaultwarden'ı çalıştırabiliriz:

docker-compose up -d

Logları kontrol edin:

docker-compose logs -f

Her şey yolundaysa şöyle bir çıktı göreceksiniz:

[YYYY-MM-DD HH:MM:SS][vaultwarden::api::core][INFO] Rocket has launched from http://0.0.0.0:80

Adım 4: İlk Hesabı Oluşturma

Tarayıcınızdan https://vault.example.com adresine gidin. "Create Account" butonuna tıklayıp ilk hesabınızı oluşturun.

Önemli: İlk hesabınızı oluşturduktan sonra .env dosyasında SIGNUPS_ALLOWED=false yapıp container'ı yeniden başlatın:

docker-compose down docker-compose up -d

Bu işlemi yapmazsanız herkes sunucunuzda hesap açabilir.

Admin Panel Kurulumu

Vaultwarden'ın admin paneli var. Buradan kullanıcıları yönetebilir, ayarları değiştirebilirsiniz.

.env dosyasına ekleyin:

ADMIN_TOKEN=uzun_ve_güvenli_bir_token_buraya

Token oluşturmak için:

openssl rand -base64 48

docker-compose.yml dosyasına environment ekleyin:

environment: DOMAIN: ${DOMAIN} WEBSOCKET_ENABLED: ${WEBSOCKET_ENABLED} SIGNUPS_ALLOWED: ${SIGNUPS_ALLOWED} ADMIN_TOKEN: ${ADMIN_TOKEN}

Yeniden başlatın:

docker-compose down docker-compose up -d

Admin paneline https://vault.example.com/admin adresinden erişebilirsiniz.

Bitwarden Uygulamalarını Bağlama

Tarayıcı Eklentisi

  1. Bitwarden eklentisini yükleyin (Chrome, Firefox, Edge vs.)
  2. Ayarlar ikonuna tıklayın
  3. "Server URL" kısmına https://vault.example.com yazın
  4. Giriş yapın

Mobil Uygulama

  1. Bitwarden mobil uygulamasını indirin
  2. Giriş ekranında ⚙️ ikonuna tıklayın
  3. Sunucu adresi olarak https://vault.example.com girin
  4. Giriş yapın

Masaüstü Uygulaması

Aynı şekilde ayarlardan sunucu adresinizi belirtin.

Yedekleme

Vaultwarden verileriniz vaultwarden volume'ünde tutuluyor. Yedeklemek için:

# Volume'ün yerini bulun docker volume inspect vaultwarden # Yedeği alın docker run --rm -v vaultwarden:/data -v $(pwd):/backup alpine tar czf /backup/vaultwarden-backup-$(date +%Y%m%d).tar.gz -C /data .

Otomatik yedek için cron job kurabilirsiniz:

0 2 * * * cd /root/vaultwarden && docker run --rm -v vaultwarden:/data -v /root/backups:/backup alpine tar czf /backup/vaultwarden-backup-$(date +\%Y\%m\%d).tar.gz -C /data .

Ek Güvenlik Ayarları

Başarısız Giriş Denemelerini Sınırlama

.env dosyasına:

LOGIN_RATELIMIT_MAX_BURST=10 LOGIN_RATELIMIT_SECONDS=60

İki Faktörlü Kimlik Doğrulama

Hesabınıza giriş yapın ve ayarlardan 2FA'yı aktif edin. TOTP (Google Authenticator, Authy vs.) veya email ile çalışıyor.

Fail2ban ile Koruma

Brute force saldırılara karşı Fail2ban kurabilirsiniz. Nginx access log'larını izleyip çok fazla başarısız deneme yapan IP'leri banlar.

Güncelleme

Vaultwarden güncellemek için:

docker-compose pull docker-compose down docker-compose up -d

Sorun Giderme

"Secure connection failed" hatası

  • SSL sertifikanızı kontrol edin
  • DOMAIN değişkeninde https:// yazdığınızdan emin olun
  • Nginx yapılandırmasını kontrol edin

WebSocket çalışmıyor

  • Nginx'de WebSocket lokasyonlarını kontrol edin
  • WEBSOCKET_ENABLED=true olduğundan emin olun
  • Tarayıcı konsolunda hata var mı bakın

Admin paneline erişemiyorum

  • ADMIN_TOKEN'ı doğru girdiğinizden emin olun
  • Token'da özel karakterler varsa tırnak içine alın

Container başlamıyor

docker-compose logs

komutunu çalıştırıp hataya bakın.

Bitwarden'dan Veri Aktarımı

Bitwarden cloud hesabınız varsa veri aktarımı çok basit:

  1. Bitwarden web vault'unuza giriş yapın
  2. Tools → Export Vault
  3. .json formatında export edin
  4. Vaultwarden'a giriş yapın
  5. Tools → Import Data
  6. .json dosyanızı yükleyin

Sonuç

Vaultwarden gerçekten kullanışlı bir proje. Resmi Bitwarden sunucusunun getirdiği karmaşıklık olmadan, tüm özelliklerden faydalanabiliyorsunuz.

Ben evdeki minipc de self-hosted olarak kurguladığım yapıda çalıştırıyorum. Şu zamana kadar kurduğum opensource projelerden en stabil çalışanı buydu. Hiç sorun yaşamadım.

Şifrelerinizi bir şirketin sunucularında tutmak istemiyorsanız, Vaultwarden harika bir seçenek. Kurulumu yarım saatinizi alır ama gönül rahatlığı paha biçilmez.