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
- Bitwarden eklentisini yükleyin (Chrome, Firefox, Edge vs.)
- Ayarlar ikonuna tıklayın
- "Server URL" kısmına
https://vault.example.comyazın - Giriş yapın
Mobil Uygulama
- Bitwarden mobil uygulamasını indirin
- Giriş ekranında ⚙️ ikonuna tıklayın
- Sunucu adresi olarak
https://vault.example.comgirin - 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:
- Bitwarden web vault'unuza giriş yapın
- Tools → Export Vault
- .json formatında export edin
- Vaultwarden'a giriş yapın
- Tools → Import Data
- .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.