SSD Nodes Learn Hosting plans →
मार्गदर्शक Matt Connorद्वारे Matt Connor · अपडेटेड 2026-08-30

VPS वर Vaultwarden: स्वतःचा password manager

Docker सह VPS वर Bitwarden-सुसंगत Vaultwarden चालवा. HTTPS आधी सक्षम करा, admin token वापरा, Fail2ban लावा आणि backup restore करून तपासा. 512 MB RAM पुरेशी आहे.

तुम्ही काय तयार करणार आहात

तुमच्या पूर्ण नियंत्रणाखाली असलेला password manager: HTTPS termination करणाऱ्या reverse proxy च्या मागे एका छोट्या container मध्ये चालणारा Vaultwarden. तुमच्या phone, laptop आणि browser वरील अधिकृत Bitwarden apps त्याच्याकडे निर्देशित केलेले असतील. Vaultwarden Rust मध्ये Bitwarden server API ची पुनर्रचना करते आणि bitwarden.com प्रमाणेच protocol वापरते. त्यामुळे प्रत्येक अधिकृत client मध्ये कोणताही बदल न करता तो याच्याशी कार्य करतो. मात्र अधिकृत multi-container stack साठी लागणाऱ्या RAM ऐवजी यासाठी सुमारे 100 MB RAM पुरते.

प्रत्यक्ष install साठी Compose च्या सुमारे डझन ओळी पुरतात. प्रत्यक्षात महत्त्वाच्या असलेल्या आणि बिघाड घडवणाऱ्या तीन गोष्टी या आहेत: web vault प्रथमच उघडण्यापूर्वी TLS उपलब्ध असणे आवश्यक आहे; तुमचे खाते तयार होताच public signups बंद करणे आवश्यक आहे; आणि data volume चा backup घेऊन त्यातून restore करून चाचणी करणे आवश्यक आहे. कारण त्या एकाच directory मध्ये तुमच्या मालकीचे प्रत्येक password साठवलेले असते.

पूर्वतयारी आणि महत्त्वाच्या अडचणी

  • Docker Engine आणि Compose plugin असलेला VPS, root किंवा sudo प्रवेशासह नव्याने तयार केलेला Ubuntu 24.04 KVM box. 512 MB RAM प्रत्यक्षात पुरेशी आहे; 1 GB अधिक आरामदायक आहे. तुम्ही चालवू शकता अशा सर्वात कमी संसाधन वापरणाऱ्या सेवांपैकी ही एक सेवा आहे. ती स्वतः होस्ट करण्यास उपयुक्त सेवांच्या यादीत वरच्या क्रमांकांवर येते. मात्र, त्याच VPS वर चालणाऱ्या इतर सेवांचा विचार करून box चा आकार ठरवा: PhotoPrism किंवा Immich सारखी self-hosted photo library त्याच VPS वर ठेवल्यास किमान RAM गरज gigabytes पर्यंत वाढते, तर Vaultwarden मुळे ती जवळजवळ वाढत नाही. नंतर जोडलेल्या media front ends साठीही हेच गणित लागू होते. कारण Jellyfin library ला 90s मधील फिरून पाहता येणाऱ्या rental store सारखे रूप देणे म्हणजे त्याच संसाधन मर्यादेत आणखी एक नेहमी सुरू असलेला container आणि transcoding साठी अतिरिक्त RAM ठेवणे.
  • VPS कडे निर्देश करणारा A record असलेले domain. IPv6 असल्यास AAAA record देखील असावा. vault.example.com साठी TLS certificate जारी केले जाईल. त्यामुळे सुरू करण्यापूर्वी DNS resolution झालेले असणे आवश्यक आहे.
  • इंटरनेटसाठी खुले असलेले ports 80 आणि 443 हे तुमच्या reverse proxy कडून terminate झाले पाहिजेत; Vaultwarden कडून थेट कधीही नाही. Port 80 चा वापर फक्त ACME certificate challenge आणि HTTP-to-HTTPS redirect साठी केला जातो.
  • सुरुवातीपासून लक्षात ठेवण्यासारखी सर्वात मोठी अडचण म्हणजे HTTPS नसलेल्या server शी Bitwarden clients संवाद साधत नाहीत. "आधी http वर चाचणी करू" असा पर्याय नाही. तो मार्ग कार्य करत नाही; त्याचे ठोस कारण पुढील भागात दिले आहे.

Vaultwarden, अधिकृत Bitwarden stack का नाही

समान clients, पण संसाधनांचा वापर अत्यल्प. अधिकृत self-hosted Bitwarden अनेक containers च्या संचाच्या स्वरूपात releases केले जाते. त्यात MSSQL, Nginx, Identity, Api, Admin आणि इतर घटक असतात. त्याला साधारण 2 GB RAM आवश्यक असते. Vaultwarden हे single binary आहे. ते default नुसार सर्व डेटा SQLite database मध्ये साठवते आणि निष्क्रिय स्थितीत काही दहा megabytes RAM वापरते. एका व्यक्तीसाठी, कुटुंबासाठी किंवा छोट्या team साठी हा स्पष्ट पर्याय आहे. तसेच ते Bitwarden API ची अचूक अंमलबजावणी करत असल्यामुळे तुमचा डेटा Vaultwarden आणि bitwarden.com यांच्यामध्ये portable राहतो.

याबदल्यात enterprise मधील बहुतेक सुविधा उपलब्ध नसतात. SCIM provisioning उपलब्ध नाही. मात्र experimental OpenID Connect SSO हे 1.35.0 मध्ये उपलब्ध झाले आहे. तसेच तुम्हीच operator असल्यामुळे patching, HTTPS आणि backups ही तुमची जबाबदारी आहे. या मार्गदर्शकात या तीन कामांवर लक्ष केंद्रित केले आहे.

HTTPS ऐच्छिक का नाही

Bitwarden web vault आणि browser extensions Web Crypto API (window.crypto.subtle) वापरून browser मध्ये encryption keys तयार करतात. Browsers crypto.subtle फक्त secure context, म्हणजे HTTPS, किंवा http://localhost या विशेष प्रकरणातच उपलब्ध करून देतात. साध्या http://vault.example.com वर ते undefined असते. त्यामुळे app key तयार करण्याचा प्रयत्न करताच त्रुटी निर्माण होते आणि console मध्ये हे दिसते:

Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'importKey')

Page अडकून राहते किंवा सामान्य crypto त्रुटी दाखवते. कोणताही login होत नाही. Desktop, mobile आणि browser clients self-hosted URL विरुद्ध स्वतःची पडताळणी करतात. http किंवा पोहोचता न येणाऱ्या endpoint विरुद्ध ते खालील त्रुटीसह विनंती नाकारतात:

This is not a recognized Bitwarden server. You may need to check with your provider or update your server.

दोन्ही समस्यांचे कारण एकच आहे: वैध HTTPS उपलब्ध नाही. म्हणून आधी TLS उभे करतो आणि vault कधीही http वर उघडत नाही. झटपट पाहण्यासाठीसुद्धा एकदाही नाही.

पायरी 1, DNS आणि reverse proxy (प्रथम TLS)

record तुमच्या VPS कडे निर्देशित करा आणि तो योग्य पत्त्यावर resolve होतो याची खात्री करा:

dig +short vault.example.com

यातून दिसणारी ओळ तुमच्या VPS चा IP असणे आवश्यक आहे. ती रिकामी किंवा चुकीची असल्यास DNS दुरुस्त करा आणि TTL संपेपर्यंत प्रतीक्षा करा. resolve न होणाऱ्या नावासाठी certificate issuance अपयशी ठरते.

HTTPS front end साठी या मार्गदर्शकात Traefik वापरले आहे. ते Let's Encrypt certificates आपोआप issue आणि renew करते आणि Compose मध्ये थेट समाकलित होते. तुम्ही ते आधीपासून चालवत नसल्यास, प्रथम Traefik reverse proxy आणि automatic TLS setup चे अनुसरण करा. यामुळे external Docker network (खालील proxy) आणि ACME resolver (letsencrypt) तयार होतो. Vaultwarden service या दोन्हींशी जोडली जाते. हाताने issue केलेल्या certificate सह plain nginx वापरल्यास Vaultwarden च्या बाजूने कार्यपद्धती समान राहते.

Traefik ऐवजी nginx आणि Certbot वापरण्यास प्राधान्य आहे? Vaultwarden ला 127.0.0.1:8080 वर ठेवा (service मध्ये ports: ["127.0.0.1:8080:80"] जोडा आणि Traefik labels काढा), त्यानंतर certificate issue करून त्याकडे proxy करा. Certificate संबंधी भाग Certbot आणि nginx वापरून Let's Encrypt certificates issue करणे येथे दिला आहे. महत्त्वाचा अतिरिक्त भाग म्हणजे notifications path वरील WebSocket upgrade:

server {
    listen 443 ssl;
    server_name vault.example.com;

    client_max_body_size 525M;

    location / {
        proxy_pass http://127.0.0.1:8080;
        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;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

X-Real-IP ओळ लक्षात घ्या. त्यामुळे Fail2ban ला 127.0.0.1 ऐवजी वास्तविक आक्रमणकर्ता दिसतो. Traefik किंवा nginx पैकी कोणतेही front end म्हणून वापरले तरी या मार्गदर्शकातील इतर सर्व भाग समान राहतात.

पायरी 2, Compose फाइल

प्रथम प्रकल्पाची directory तयार करा. या मार्गदर्शकात /opt/vaultwarden वापरले आहे. त्यामुळे Compose प्रकल्पाचे नाव आणि परिणामी data volume vaultwarden_vw-data निश्चित राहते. खालील Fail2ban आणि backup पायऱ्या याच नावावर अवलंबून आहेत.

sudo mkdir -p /opt/vaultwarden
cd /opt/vaultwarden

त्या directory मध्ये admin secret साठी .env आणि Compose फाइल तयार करा.

# .env
ADMIN_TOKEN=paste-a-strong-token-here

openssl rand -base64 48 वापरून हे token तयार करा आणि तेथे paste करा. (यापुढे अधिक मजबूत hashed स्वरूप दिले आहे; सुरुवातीस लांब random string पुरेशी आहे.)

# docker-compose.yml
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      DOMAIN: "https://vault.example.com"
      SIGNUPS_ALLOWED: "true"          # closed in Step 4, keep true just to register
      ADMIN_TOKEN: "${ADMIN_TOKEN}"
      IP_HEADER: "X-Forwarded-For"     # X-Real-IP if your proxy sends that instead
      LOG_FILE: "/data/vaultwarden.log"
      LOG_LEVEL: "warn"
    volumes:
      - vw-data:/data
    networks:
      - proxy
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.vw.rule=Host(`vault.example.com`)"
      - "traefik.http.routers.vw.entrypoints=websecure"
      - "traefik.http.routers.vw.tls.certresolver=letsencrypt"
      - "traefik.http.services.vw.loadbalancer.server.port=80"

volumes:
  vw-data:

networks:
  proxy:
    external: true

या फाइलमधील दोन गोष्टी संपूर्ण रचनेचा आधार आहेत. येथे ports: mapping नाही, त्यामुळे Vaultwarden पर्यंत पोहोचण्यासाठी Traefik आणि त्याचे TLS यांचाच वापर होतो. Host वर त्याचा port publish केल्यास vault चुकून http द्वारे उपलब्ध होऊ शकतो. तसेच DOMAIN ही पूर्ण public HTTPS URL असणे आवश्यक आहे. ती attachment links, WebAuthn 2FA आणि notifications endpoint मध्ये वापरली जाते. त्यामुळे चुकीची किंवा http URL असल्यास site लोड झाली तरी या सुविधा काम करणार नाहीत. latest tag हा नेहमीच्या never-latest नियमाला जाणीवपूर्वक केलेला अपवाद आहे. Vaultwarden stable releases एकाच rolling image म्हणून उपलब्ध करते आणि :testing हा स्वतंत्र pre-release channel आहे. त्यामुळे update जाणीवपूर्वक करा आणि image pull करण्यापूर्वी release notes वर थोडक्यात नजर टाका. हा अपवाद मर्यादित आहे. दीर्घकाळ चालणारे बहुतेक containers exact tag वर pin करणे अधिक योग्य असते. त्यामुळे त्याच VPS वर self-hosted असलेला नेहमी सुरू agent reboot आणि pull नंतरही निश्चित पद्धतीने चालतो.

ते सुरू करा आणि log monitor करा:

docker compose up -d
docker compose logs -f vaultwarden

सुरुवात योग्य झाल्यास शेवटी Rocket has launched from http://0.0.0.0:80 सारखी ओळ दिसते. प्रमाणपत्र मिळवण्यासाठी Traefik ला काही सेकंद द्या. त्यानंतर https://vault.example.com उघडा. वैध padlock आणि कोणतीही certificate warning नसलेले Bitwarden web vault दिसले पाहिजे.

पायरी 3, मजबूत ADMIN_TOKEN आणि $$ trap

ADMIN_TOKEN तुमच्या instance मधील प्रत्येक वापरकर्ता आणि setting वाचू शकणाऱ्या /admin चे संरक्षण करते. त्यामुळे त्याकडे root password प्रमाणे पाहा. दोन पद्धती वापरता येतात.

सोप्या पद्धतीत तुम्ही openssl rand -base64 48 वापरून आधीच तयार केलेली random string वापरता. base64 मध्ये $ कधीही येत नसल्यामुळे ती कोणतेही escaping न करता थेट .env मध्ये ठेवता येते.

अधिक सुरक्षित पद्धतीत Argon2 PHC hash वापरला जातो. त्यामुळे plaintext token disk वर साठवला जात नाही. त्याच image विरुद्ध तो तयार करा:

docker run --rm -it vaultwarden/server /vaultwarden hash --preset owasp

हा command दोनदा input मागतो आणि $argon2id$v=19$... ने सुरू होणारी string दाखवतो. येथे एक महत्त्वाचा trap आहे. Docker Compose $ ला variable interpolation म्हणून हाताळते. त्यामुळे Compose file मध्ये hash paste करताना प्रत्येक $ चे $$ असे double करणे आवश्यक आहे. ते थेट environment: खाली ठेवा. .env मार्गे देऊ नका आणि त्याला quotes मध्ये ठेवू नका:

    environment:
      ADMIN_TOKEN: $$argon2id$$v=19$$m=19456,t=2,p=1$$c29tZXNhbHQ$$RdescudvJCsgt3ub+b+dWRWJTmaaJObG

तुम्ही एकच $ चिन्हे ठेवली, तर Compose The "argon2id" variable is not set दाखवते आणि token रिकामा करते. त्यानंतर /admin तुमचा योग्य password नाकारते. docker compose up -d चालवा आणि prompt वर तुम्ही टाइप केलेला plaintext तुमच्या स्वतःच्या password store मध्ये जतन करा.

पायरी 4, तुमचे खाते नोंदवा आणि नंतर प्रवेश बंद करा

SIGNUPS_ALLOWED: "true" वापरून https://vault.example.com उघडा. Create account वर क्लिक करा आणि तुमच्या ईमेल पत्त्यासह मजबूत master password वापरून नोंदणी करा. हा master password पुनर्प्राप्त करता येत नाही आणि तो reset करण्याची सुविधाही नाही. त्यामुळे आधी तो सुरक्षित आणि दीर्घकाळ उपलब्ध राहील अशा ठिकाणी साठवा.

आता प्रवेश बंद करा. Signups बंद करण्यासाठी Compose file संपादित करा:

      SIGNUPS_ALLOWED: "false"

docker compose up -d वापरून बदल पुन्हा लागू करा. हे hardening नंतर करता येईल असे काम नाही. Signups सुरू राहिल्यास URL शोधणारी कोणतीही व्यक्ती, तसेच crawlers, तुमच्या server वर खाते तयार करू शकतात. त्यांना तुमचा vault वाचता येणार नाही. मात्र ते resources वापरतात आणि तुमचे private instance open service मध्ये रूपांतरित करतात. Signups सुरू राहिल्याचे संकेत म्हणजे /admin मध्ये तुम्ही तयार न केलेली खाती दिसतात.

नंतर कुटुंबातील सदस्य किंवा सहकाऱ्यांना जोडायचे असल्यास public signups पुन्हा सुरू करू नका. त्याऐवजी /admin मधील Invite User बटण वापरा. या प्रक्रियेसाठी SMTP configured असणे आवश्यक आहे, जेणेकरून आमंत्रित व्यक्तीला तिची link मिळेल.

पायरी 5, /admin वर प्रवेश

https://vault.example.com/admin येथे जा आणि साधा admin token प्रविष्ट करा. हा random string किंवा तुम्ही hash केलेला password असावा; hash स्वतः प्रविष्ट करू नका. या पॅनेलमध्ये users ची यादी पाहता येते, settings समायोजित करता येतात, test email पाठवता येतो आणि database snapshot घेता येतो.

पृष्ठ 404 Not Found दाखवत असल्यास, ADMIN_TOKEN रिकामे किंवा unset आहे. त्यामुळे panel पूर्णपणे disable होते. तुम्हाला त्याची कधीही गरज नसल्यास हा योग्य पर्याय आहे. पॅनेल उघडते पण token नाकारते, तर खालील failure list मधील $$ escaping trap पहा. Token विसरलात? recovery prompt उपलब्ध नाही. .env किंवा Compose file संपादित करा, नवीन token सेट करा आणि docker compose up -d.

पायरी 6, Bitwarden क्लायंट कनेक्ट करा

प्रत्येक अधिकृत क्लायंट self-hosted सर्व्हरकडे निर्देशित करता येतो. त्यामुळे नेहमीच्या store मधून Bitwarden desktop, mobile किंवा browser क्लायंट install करा. विशेष Vaultwarden build आवश्यक नाही.

Login करण्यापूर्वी login screen वरील settings gear उघडा. त्यावर Self-hosted किंवा Region → Self-hosted असे लेबल असते. Server URL मध्ये https://vault.example.com सेट करा आणि save करा. त्यानंतर नोंदणी करताना वापरलेला email आणि master password देऊन login करा. क्लायंटने त्वरित कनेक्ट होऊन credentials fill आणि save करण्याचा पर्याय द्यायला हवा.

क्लायंटमध्ये This is not a recognized Bitwarden server. You may need to check with your provider or update your server. दिसत असल्यास URL चुकीचा आहे, त्यात http वापरले आहे किंवा certificate विश्वसनीय नाही. प्रथम browser मध्ये https://vault.example.com कोणत्याही त्रुटीशिवाय लोड होते का ते पुन्हा तपासा. इतर devices वरील updates उशिरा मिळत असल्यास ते WebSocket push शी संबंधित आहे. त्याचे स्पष्टीकरण पुढे दिले आहे.

लॉगिन endpoint साठी Fail2ban jail

Vaultwarden LOG_FILE ने निश्चित केलेल्या फाइलमध्ये प्रत्येक अयशस्वी login ची नोंद करतो. Brute-force हल्ल्यांपासून संरक्षणासाठी हीच माहिती आवश्यक असते. तुम्ही Fail2ban आधीपासून चालवत नसल्यास, त्याची installation आणि मूलभूत माहिती Fail2ban SSH hardening मार्गदर्शकात दिली आहे. येथे vault साठी एक jail जोडू.

Fail2ban ला log वाचता यावा यासाठी named volume host वर कुठे आहे ते प्रथम शोधा:

docker volume inspect vaultwarden_vw-data --format '{{ .Mountpoint }}'

यातून /var/lib/docker/volumes/vaultwarden_vw-data/_data सारखे output मिळते. त्यामधील log vaultwarden.log येथे आहे. Filter तयार करा:

# /etc/fail2ban/filter.d/vaultwarden.conf
[Definition]
failregex = ^.*Username or password is incorrect\. Try again\. IP: <ADDR>\. Username:.*$
ignoreregex =

आणि jail तयार करा:

# /etc/fail2ban/jail.d/vaultwarden.local
[vaultwarden]
enabled   = true
filter    = vaultwarden
logpath   = /var/lib/docker/volumes/vaultwarden_vw-data/_data/vaultwarden.log
banaction = iptables-allports
chain     = DOCKER-USER
maxretry  = 5
findtime  = 600
bantime   = 3600

sudo systemctl restart fail2ban वापरून reload करा आणि sudo fail2ban-client status vaultwarden वापरून पडताळा.

हे संरक्षण प्रत्यक्षात लागू होईल की नाही हे Docker संबंधी तीन बाबींवर अवलंबून आहे. प्रथम, प्रत्येक अयशस्वी प्रयत्नासाठी log मध्ये IP: 127.0.0.1 किंवा तुमच्या proxy चा address दिसत असल्यास, Vaultwarden proxy ला ban करत आहे. IP_HEADER मध्ये proxy प्रत्यक्षात पाठवत असलेला header द्या: Traefik साठी X-Forwarded-For, वरील nginx block साठी X-Real-IP आणि Cloudflare मागे असल्यास CF-Connecting-IP.

दुसरे, योग्य iptables chain तुमच्या proxy वर अवलंबून असते. Published ports असलेल्या container म्हणून Traefik चालत असल्यास, traffic Docker च्या FORWARD path मधून जाते. त्यामुळे ban DOCKER-USER मध्ये असणे आवश्यक आहे. पण Step 1 मधील host-nginx पर्याय निवडल्यास, connections host वरील nginx च्या INPUT chain मध्ये terminate होतात आणि DOCKER-USER ban त्यांना पाहू शकत नाही. अशा वेळी chain = DOCKER-USER line काढून टाका, म्हणजे Fail2ban default INPUT chain वापरेल.

तिसरे, port-based default ऐवजी banaction = iptables-allports वापरा. या jail मध्ये कोणताही port निश्चित केलेला नाही. DOCKER-USER मधील all-ports ban त्या आक्रमकाला host वरील सर्व published services पासून प्रभावीपणे अवरोधित करतो.

स्टेप 8, vault चा बॅकअप घ्या आणि तो प्रत्यक्षात restore करा

vw-data volume म्हणजे तुमचा password manager आहे. त्यात db.sqlite3 (प्रत्येक entry), attachments/ आणि sends/ directories, login sessions वर स्वाक्षरी करणाऱ्या rsa_key.* files आणि admin panel मधील config.json असतात. यापैकी कोणतीही गोष्ट वगळणारा बॅकअप आवश्यकतेच्या वेळी अपयशी ठरतो.

Vaultwarden db.sqlite3 लिहित असताना त्याची प्रत काढल्यास अर्धवट लिहिलेली आणि corrupt file मिळू शकते. त्यामुळे cold snapshot घ्या. Downtime काही seconds इतकाच असेल:

#!/usr/bin/env bash
set -euo pipefail
STAMP=$(date +%F)
DEST=/root/vw-backups
VOL=$(docker volume inspect vaultwarden_vw-data --format '{{ .Mountpoint }}')
mkdir -p "$DEST"
docker compose -f /opt/vaultwarden/docker-compose.yml stop vaultwarden
tar czf "$DEST/vw-$STAMP.tgz" -C "$VOL" .
docker compose -f /opt/vaultwarden/docker-compose.yml start vaultwarden

ही प्रक्रिया nightly cron मधून चालवा आणि .tgz box च्या बाहेर कॉपी करा. तुम्ही सुरक्षित ठेवत असलेल्या server वरच असलेला बॅकअप हा बॅकअप नाही. तो दुसऱ्या server किंवा object storage वर पाठवण्यासाठी nightly restic backup वापरणे योग्य पद्धत आहे. त्यामुळे archive encrypt होते आणि repeated snapshots साठी deduplication आपोआप होते. Admin panel मधील Backup Database button हा केवळ SQLite file चा तात्पुरता snapshot घेण्यासाठी उपयुक्त आहे. मात्र त्यात attachments आणि keys समाविष्ट नसतात.

आता खरा बॅकअप आणि केवळ आशावादी प्रत यांतील फरक दाखवणारी प्रक्रिया करा: तो एकदा restore करून कार्यरत असल्याचे सिद्ध करा:

mkdir -p /tmp/vw-restore
tar xzf /root/vw-backups/vw-2026-07-15.tgz -C /tmp/vw-restore
docker run --rm -p 127.0.0.1:8888:80 -v /tmp/vw-restore:/data vaultwarden/server

तुमच्या laptop वरून ssh -L 8888:127.0.0.1:8888 you@your-vps वापरून tunnel तयार करा आणि http://localhost:8888 उघडा. localhost हा secure context असल्यामुळे crypto.subtle उपलब्ध आहे आणि येथे vault plain http वर decrypt होते. ही परवानगी असलेली एकमेव जागा आहे. तुमच्या master password ने log in करा आणि तुमच्या entries उपलब्ध आहेत याची खात्री करा. त्या उपलब्ध असल्यास तुमचा database, RSA keys आणि master password यशस्वीपणे restore होतात. त्यामुळे fresh VPS वर काही minutes मध्ये पुन्हा उभारणी करता येते. Ctrl-C दाबून container थांबवा आणि /tmp/vw-restore delete करा. Box वरील internet-facing नसाव्या अशा इतर admin UI साठीही ही tunnel पद्धत वापरा. याच पद्धतीने port 5173 वरील self-hosted open-kritt security scanner पर्यंतही पोहोचता येते.

अपयशाची कारणे आणि दिसणारे संदेश

ब्राउझर कन्सोलमध्ये Cannot read properties of undefined (reading 'importKey'). Vault http वर लोड झाला आहे. त्यामुळे crypto.subtle undefined आहे. त्याला फक्त https:// द्वारे उपलब्ध करा आणि proxy वर HTTP-to-HTTPS redirect जोडा.

client मध्ये This is not a recognized Bitwarden server.... Server URL http आहे, चुकीचा टाइप केला आहे किंवा प्रमाणपत्र अविश्वसनीय आहे. https://vault.example.com मध्ये वैध padlock दिसतो का ते तपासा. त्यानंतर client च्या self-hosted settings मध्ये URL पुन्हा प्रविष्ट करा.

/admin योग्य password नाकारते. Argon2 hash मधील escaping नष्ट झाली आहे. Compose मध्ये प्रत्येक $ हे $$ असणे आवश्यक आहे. किंवा तुम्ही hash ने दर्शविलेला plaintext ऐवजी hash प्रविष्ट केला आहे.

उपकरणांमधील sync मंद आहे; कन्सोलमध्ये WebSocket connection to 'wss://vault.example.com/notifications/hub' failed दिसते. Proxy Upgrade/Connection headers forward करत नाही. Traefik हे आपोआप करते. nginx साठी Step 1 मधील दोन upgrade lines आवश्यक आहेत. Vault अद्याप कार्यरत राहतो, परंतु उघडल्यावरच sync होतो. v1.31.0 पासून जुना dedicated port 3012 काढून टाकला आहे. त्यामुळे स्वतंत्र WebSocket route आवश्यक नाही.

Fail2ban ban दाखवते, परंतु attacker जोडला जात राहतो. IP_HEADER चुकीचे असल्यामुळे ते 127.0.0.1 ला ban करत आहे. किंवा ban चुकीच्या iptables chain मध्ये लागू झाला आहे. chain = DOCKER-USER आणि banaction = iptables-allports सेट करा.

अपग्रेड

नवीन image pull करून कंटेनर पुन्हा तयार करा; named volume आणि तुमचा सर्व data कायम राहतो:

docker compose pull
docker compose up -d

Vaultwarden चे releases वारंवार प्रकाशित होतात. patch version pin करण्याऐवजी project च्या release notes monitor करा, कारण काही releases मध्ये migration notes असतात. कोणतेही major upgrade करण्यापूर्वी नवीन backup घ्या; tarball नवीन volume मध्ये restore करून rollback करता येतो.

FAQ

Vaultwarden हे Bitwarden सारखेच आहे का?

हे अधिकृत server नसून compatible, स्वतंत्र server आहे. Vaultwarden, Bitwarden server API ची Rust मध्ये पुनर्रचना करते. त्यामुळे अधिकृत desktop, mobile, browser आणि CLI clients या server सोबत कार्य करतात. अधिकृत stack च्या तुलनेत यासाठी अतिशय कमी resources लागतात. Vault format समान आहे. त्यामुळे export आणि import करून दोन्ही दिशांनी migration करता येते.

HTTPS खरोखर आवश्यक आहे का, की माझ्या LAN वर ते http द्वारे चालवता येईल?

localhost test वगळता इतर कोणत्याही वापरासाठी HTTPS आवश्यक आहे. Bitwarden web vault आणि extensions browser च्या Web Crypto API चा वापर करतात. हे API फक्त secure context मध्ये उपलब्ध असते. त्यामुळे साध्या http वर client Cannot read properties of undefined दाखवतो आणि login करत नाही. कार्य करणारा एकमेव http address http://localhost आहे. म्हणून Step 8 मधील restore test SSH tunnel वापरतो.

माझ्या server वर अनोळखी व्यक्तींना registration करण्यापासून कसे रोखू?

Compose file मध्ये SIGNUPS_ALLOWED: "false" सेट करा आणि स्वतःचे account तयार केल्यानंतर लगेच docker compose up -d चालवा. त्यानंतर /admin मधील Invite User button वापरून नवीन लोकांना जोडा. त्यासाठी SMTP configure केलेले असणे आवश्यक आहे, जेणेकरून त्यांना invitation link मिळेल. अनपेक्षित accounts तयार झालेले नाहीत याची खात्री करण्यासाठी admin user list अधूनमधून तपासा.

माझ्या Vaultwarden vault चा backup कसा घ्यावा?

Container थोड्या वेळासाठी थांबवा आणि संपूर्ण vw-data volume, db.sqlite3, attachments/, sends/, config.json तसेच rsa_key.* files archive करा. त्यानंतर archive server च्या बाहेर copy करा. शक्य असल्यास हे nightly cron द्वारे करा. Server चालू असताना live SQLite file copy केल्यास corrupt snapshot तयार होण्याचा धोका असतो. त्यामुळे backup घेण्यापूर्वी server थांबवा. सर्वात महत्त्वाचे म्हणजे तो backup एकदा throwaway container वर restore करून login करा. त्यामुळे त्यावर अवलंबून राहण्यापूर्वी backup खरोखर वापरता येतो याची खात्री होते.

स्वतःचे passwords host करणे प्रत्यक्षात सुरक्षित आहे का?

होय. या मार्गदर्शिकेत सांगितलेल्या तीन गोष्टी केल्यास ते सुरक्षित आहे: प्रत्यक्ष HTTPS, बंद signups आणि मजबूत admin token, तसेच तपासलेले backups. तुमचा vault client-side वर master password ने encrypted असतो. त्यामुळे server ला देखील तुमचे passwords स्पष्ट स्वरूपात दिसत नाहीत. चोरलेला db.sqlite3 त्याशिवाय निरुपयोगी ठरतो. मात्र patching आणि backups ची जबाबदारी आता तुमची असते. म्हणून Fail2ban आणि restore प्रक्रिया येथे ऐच्छिक नाहीत. हे उपाय लागू केल्यानंतर, self-hosted vault वर प्रत्यक्षात कोणत्या ठिकाणी हल्ला होऊ शकतो याचा अधिक जवळून आढावा घेणे हा पुढील उपयुक्त टप्पा आहे. कारण entries स्वतः client वर encrypted असल्याने, आता admin token आणि backup archive यांचे संरक्षण करणे बाकी राहते.