VPSలో Vaultwarden ద్వారా సొంత పాస్వర్డ్ మేనేజర్ ఏర్పాటు
Docker ఉపయోగించి VPSలో Vaultwarden ఎలా ఇన్స్టాల్ చేయాలో తెలుసుకోండి. HTTPS సెటప్, అడ్మిన్ టోకెన్, Fail2ban మరియు సురక్షితమైన డేటా బ్యాకప్ పద్ధతుల గురించి పూర్తి వివరాలు ఇక్కడ ఉన్నాయి.
మీరు ఏమి నిర్మిస్తున్నారు
మీరు పూర్తిగా నియంత్రించగల ఒక పాస్వర్డ్ మేనేజర్: HTTPS ను terminate చేసే reverse proxy వెనుక ఒక చిన్న container లో నడిచే Vaultwarden, మరియు దానికి అనుసంధానించబడిన మీ ఫోన్, ల్యాప్టాప్, బ్రౌజర్లలోని అధికారిక Bitwarden యాప్లు. Vaultwarden అనేది Rust భాషలో Bitwarden సర్వర్ API ని తిరిగి అమలు చేస్తుంది మరియు bitwarden.com తో సమానమైన ప్రోటోకాల్ను ఉపయోగిస్తుంది. కాబట్టి, ప్రతి అధికారిక క్లయింట్ ఎటువంటి మార్పులు లేకుండా దీనితో పనిచేస్తుంది, కానీ ఇది అధికారిక multi-container stack లాగా కాకుండా కేవలం 100 MB RAM లోనే సరిపోతుంది.
ఈ ఇన్స్టాలేషన్ ప్రక్రియ కేవలం పన్నెండు లైన్ల Compose కోడ్తో పూర్తవుతుంది. నిజంగా ముఖ్యమైనవి మరియు విఫలమయ్యే అవకాశం ఉన్న మూడు అంశాలు ఇవే: వెబ్ వాల్ట్ను లోడ్ చేసే ముందే TLS సిద్ధంగా ఉండాలి, మీ సొంత ఖాతాను సృష్టించుకున్న వెంటనే public signups ను నిలిపివేయాలి, మరియు data volume ను తప్పనిసరిగా బ్యాకప్ చేసి, అది పనిచేస్తుందో లేదో పరీక్షించాలి; ఎందుకంటే ఆ ఒక్క డైరెక్టరీలోనే మీ పాస్వర్డ్లన్నీ భద్రపరచబడి ఉంటాయి.
ముందస్తు అవసరాలు మరియు వాస్తవిక సవాళ్లు
- Docker Engine మరియు Compose plugin కలిగిన ఒక VPS, ఇది కొత్తగా ఇన్స్టాల్ చేసిన Ubuntu 24.04 KVM బాక్స్పై root లేదా sudo అనుమతులతో ఉండాలి. 512 MB RAM దీనికి సరిపోతుంది; 1 GB RAM ఉంటే మరింత సౌకర్యవంతంగా ఉంటుంది. ఇది మీరు రన్ చేయగల అత్యంత తేలికపాటి సేవలలో ఒకటి, ఇది self-hosting కు తగిన సేవల జాబితా లో అగ్రస్థానంలో ఉంటుంది. అయితే, అదే సర్వర్లో ఇతర సేవలను కూడా నడుపుతుంటే దానికి తగినట్లుగా బాక్స్ పరిమాణాన్ని ఎంచుకోండి: PhotoPrism లేదా Immich వంటి self-hosted ఫోటో లైబ్రరీలను అదే VPSలో ఉంచితే RAM అవసరం GBలలోకి పెరుగుతుంది, కానీ Vaultwarden కు అంత అవసరం ఉండదు. మీరు తర్వాత జోడించే మీడియా ఫ్రంట్-ఎండ్లకు కూడా ఇదే లెక్క వర్తిస్తుంది, ఎందుకంటే Jellyfin లైబ్రరీని 90ల నాటి రెంటల్ స్టోర్ లాగా మార్చడం అంటే అదనంగా ఒక container ఎప్పుడూ రన్ అవ్వడమే కాకుండా, transcoding కోసం అదనపు RAM అవసరమవుతుంది.
- VPS యొక్క IPని సూచించే A record (మీకు IPv6 ఉంటే AAAA record కూడా) కలిగిన ఒక డొమైన్ ఉండాలి, ఇది
vault.example.comద్వారా VPSకి పాయింట్ చేయాలి. TLS certificate ఈ నిర్దిష్ట పేరుకే జారీ చేయబడుతుంది, కాబట్టి మీరు ప్రారంభించే ముందే DNS రిజల్యూషన్ పూర్తవ్వాలి. - 80 మరియు 443 పోర్టులు ఇంటర్నెట్కు అందుబాటులో ఉండాలి, వీటిని మీ reverse proxy ద్వారా మాత్రమే నిర్వహించాలి, ఎట్టి పరిస్థితుల్లోనూ Vaultwarden ద్వారా నేరుగా కాదు. 80వ పోర్ట్ కేవలం ACME certificate challenge మరియు HTTP-to-HTTPS redirect కోసం మాత్రమే ఉపయోగించబడుతుంది.
- ముందుగా గుర్తించాల్సిన అతిపెద్ద సవాలు: Bitwarden క్లయింట్లు HTTPS లేని సర్వర్తో కనెక్ట్ అవ్వవు. "ముందుగా http ద్వారా పరీక్షించి చూద్దాం" అనే అవకాశం లేదు, ఆ మార్గం పనిచేయదు, దీనికి గల ఖచ్చితమైన కారణం తర్వాత వివరించబడింది.
అధికారిక Bitwarden stack కు బదులుగా Vaultwarden ఎందుకు
అవే క్లయింట్లు, చాలా తక్కువ వనరుల వినియోగం. అధికారిక self-hosted Bitwarden అనేక కంటైనర్ల (MSSQL, Nginx, Identity, Api, Admin మరియు మరిన్ని) సమూహంగా విడుదలవుతుంది మరియు దీనికి సుమారు 2 GB RAM అవసరం. Vaultwarden ఒకే binary ఫైల్, ఇది డిఫాల్ట్గా SQLite డేటాబేస్లో సమాచారాన్ని భద్రపరుస్తుంది మరియు కేవలం కొన్ని పదుల మెగాబైట్ల RAM తోనే పనిచేస్తుంది. ఒక వ్యక్తికి, కుటుంబానికి లేదా చిన్న బృందానికి ఇది సరైన ఎంపిక. ఇది Bitwarden API ని ఖచ్చితంగా అనుసరిస్తుంది కాబట్టి, మీ డేటాను దీనికి మరియు bitwarden.com కు మధ్య సులభంగా మార్చుకోవచ్చు.
మీరు కోల్పోయేది ప్రధానంగా ఎంటర్ప్రైజ్ ఫీచర్లు: ఇందులో SCIM ప్రొవిజనింగ్ ఉండదు (అయితే 1.35.0 వెర్షన్లో ప్రయోగాత్మక OpenID Connect SSO అందుబాటులోకి వచ్చింది). అలాగే, మీరే ఆపరేటర్ కాబట్టి, ప్యాచింగ్, HTTPS మరియు బ్యాకప్ల బాధ్యత మీదే. ఈ గైడ్ ఆ మూడు పనుల గురించే.
HTTPS ఎందుకు తప్పనిసరి
Bitwarden వెబ్ వాల్ట్ మరియు బ్రౌజర్ ఎక్స్టెన్షన్లు మీ ఎన్క్రిప్షన్ కీలను బ్రౌజర్లోని Web Crypto API (window.crypto.subtle) ఉపయోగించి రూపొందిస్తాయి. బ్రౌజర్లు crypto.subtle ను కేవలం secure context లో మాత్రమే, అంటే HTTPS లో లేదా http://localhost వంటి ప్రత్యేక సందర్భాలలో మాత్రమే అనుమతిస్తాయి. సాధారణ http://vault.example.com ద్వారా కనెక్ట్ అయినప్పుడు ఇది undefined అవుతుంది, కాబట్టి యాప్ కీని రూపొందించిన వెంటనే అది విఫలమవుతుంది మరియు కన్సోల్లో ఇలా కనిపిస్తుంది:
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'importKey')పేజీ లోడ్ అవ్వకుండా ఆగిపోతుంది లేదా సాధారణ crypto error ను చూపిస్తుంది, ఏదీ లాగిన్ అవ్వదు. డెస్క్టాప్, మొబైల్ మరియు బ్రౌజర్ క్లయింట్లు self-hosted URL కి వ్యతిరేకంగా సొంతంగా తనిఖీని నిర్వహిస్తాయి. ఒకవేళ అది http (లేదా అందుబాటులో లేని) ఎండ్పాయింట్ అయితే, అవి ఈ క్రింది విధంగా తిరస్కరిస్తాయి:
This is not a recognized Bitwarden server. You may need to check with your provider or update your server.రెండింటికీ ఒకటే కారణం: సరైన HTTPS లేకపోవడం. కాబట్టి మనం ముందుగా TLS ను ఏర్పాటు చేసుకోవాలి. కేవలం ఒక్కసారి చూడటం కోసం కూడా వాల్ట్ను http ద్వారా ఎప్పుడూ తెరవకూడదు.
దశ 1, DNS మరియు రివర్స్ ప్రాక్సీ (ముందుగా TLS)
మీ VPS వైపు రికార్డును పాయింట్ చేయండి మరియు అది సరైన అడ్రస్కు రిజాల్వ్ అవుతుందో లేదో నిర్ధారించుకోండి:
dig +short vault.example.comఅది ప్రింట్ చేసే లైన్ మీ VPS IP అయి ఉండాలి. అది ఖాళీగా ఉన్నా లేదా తప్పుగా ఉన్నా, DNS ను సరిచేసి TTL పూర్తయ్యే వరకు వేచి ఉండండి, ఎందుకంటే రిజాల్వ్ కాని పేరుతో సర్టిఫికేట్ జారీ చేయడం విఫలమవుతుంది.
HTTPS ఫ్రంట్ ఎండ్ కోసం ఈ గైడ్ Traefik ను ఉపయోగిస్తుంది, ఇది Let's Encrypt సర్టిఫికేట్లను ఆటోమేటిక్గా జారీ చేస్తుంది మరియు పునరుద్ధరిస్తుంది, అలాగే నేరుగా Compose లోకి అమరుస్తుంది. మీరు ఇప్పటికే దీన్ని రన్ చేయకపోతే, ముందుగా Traefik రివర్స్ ప్రాక్సీ మరియు ఆటోమేటిక్ TLS సెటప్ అనుసరించండి; ఇది ఒక ఎక్స్టర్నల్ Docker నెట్వర్క్ (క్రింద ఉన్న proxy) మరియు ఒక ACME రిజాల్వర్ను (letsencrypt) సృష్టిస్తుంది, దీనికి Vaultwarden సర్వీస్ అనుసంధానించబడుతుంది. మాన్యువల్గా జారీ చేసిన సర్టిఫికేట్తో సాధారణ nginx కూడా Vaultwarden వైపు నుండి అదే విధంగా పనిచేస్తుంది.
Traefik కు బదులుగా nginx మరియు Certbot కావాలా? Vaultwarden ను 127.0.0.1:8080 పై ఉంచండి (సర్వీస్కు ports: ["127.0.0.1:8080:80"] జోడించి, Traefik లేబుల్స్ను తొలగించండి), ఆపై సర్టిఫికేట్ను జారీ చేసి దానికి ప్రాక్సీ చేయండి. సర్టిఫికేట్ భాగం Certbot మరియు nginx తో Let's Encrypt సర్టిఫికేట్లను జారీ చేయడం లో వివరించబడింది. నోటిఫికేషన్ పాత్లో WebSocket అప్గ్రేడ్ అనేది చాలా ముఖ్యమైన అదనపు అంశం:
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 లలో ఏది ముందున్నా, ఈ గైడ్లోని మిగిలినవన్నీ ఒకే విధంగా ఉంటాయి.
దశ 2, Compose ఫైల్
ముందుగా ప్రాజెక్ట్ డైరెక్టరీని సృష్టించండి. ఈ గైడ్ /opt/vaultwarden ను ఉపయోగిస్తుంది, ఇది Compose ప్రాజెక్ట్ పేరును, తద్వారా డేటా వాల్యూమ్ను vaultwarden_vw-data గా స్థిరంగా ఉంచుతుంది; కింద పేర్కొన్న Fail2ban మరియు బ్యాకప్ దశలు ఆ ఖచ్చితమైన పేరుపైనే ఆధారపడి ఉంటాయి.
sudo mkdir -p /opt/vaultwarden
cd /opt/vaultwardenఆ డైరెక్టరీలో అడ్మిన్ సీక్రెట్ మరియు Compose ఫైల్ కోసం ఒక .env ని సృష్టించండి.
# .env
ADMIN_TOKEN=paste-a-strong-token-hereopenssl rand -base64 48 తో ఆ టోకెన్ను జనరేట్ చేసి, అందులో పేస్ట్ చేయండి. (మరింత బలమైన హ్యాష్డ్ ఫార్మాట్ గురించి తర్వాత చూద్దాం; ప్రారంభానికి పొడవైన రాండమ్ స్ట్రింగ్ సరిపోతుంది.)
# 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: మ్యాపింగ్ లేదు, కాబట్టి Vaultwarden కేవలం Traefik మరియు దాని TLS ద్వారా మాత్రమే అందుబాటులో ఉంటుంది. హోస్ట్ మెషీన్పై పోర్ట్ను పబ్లిష్ చేయడం వల్లనే పొరపాటున ప్రజలు vault ను http ద్వారా సర్వ్ చేస్తుంటారు. అలాగే DOMAIN అనేది ఖచ్చితమైన పూర్తి పబ్లిక్ HTTPS URL అయి ఉండాలి: ఇది అటాచ్మెంట్ లింకులు, WebAuthn 2FA మరియు నోటిఫికేషన్ ఎండ్పాయింట్లలో అంతర్భాగంగా ఉంటుంది, కాబట్టి తప్పుగా లేదా http విలువను ఇస్తే సైట్ లోడ్ అయినప్పటికీ అవి పనిచేయవు. latest ట్యాగ్ అనేది సాధారణంగా వాడే never-latest నియమానికి ఒక ఉద్దేశపూర్వక మినహాయింపు. Vaultwarden తన stable releases ను ఒకే rolling image గా విడుదల చేస్తుంది, :testing అనేది ప్రత్యేకమైన pre-release ఛానల్. కాబట్టి, మీరు అప్డేట్ చేసే ముందు రిలీజ్ నోట్స్ను పరిశీలించి, ఉద్దేశపూర్వకంగానే pull చేయండి. అయితే ఈ మినహాయింపు చాలా పరిమితమైనది: ఎక్కువ కాలం నడిచే చాలా కంటైనర్లను ఒక ఖచ్చితమైన ట్యాగ్కు పిన్ చేయడం మంచిది. ఇదే పద్ధతి అదే VPSలో నడిచే always-on agent ను రీబూట్లు మరియు పుల్స్ తర్వాత కూడా స్థిరంగా ఉంచుతుంది.
దీనిని ప్రారంభించి లాగ్ను గమనించండి:
docker compose up -d
docker compose logs -f vaultwardenసరైన ప్రారంభం Rocket has launched from http://0.0.0.0:80 వంటి లైన్తో ముగుస్తుంది. సర్టిఫికేట్ను పొందడానికి Traefik కు కొన్ని సెకన్ల సమయం ఇవ్వండి, ఆపై https://vault.example.com ను లోడ్ చేయండి. మీకు ఎటువంటి సర్టిఫికేట్ హెచ్చరికలు లేకుండా, సరైన ప్యాడ్లాక్ గుర్తుతో Bitwarden వెబ్ వాల్ట్ కనిపిస్తుంది.
Step 3, ఒక బలమైన ADMIN_TOKEN, మరియు $$ ట్రాప్
ADMIN_TOKEN అనేది /admin ను రక్షిస్తుంది. ఇది మీ ఇన్స్టాన్స్లోని ప్రతి వినియోగదారుని మరియు సెట్టింగ్ను చదవగల ప్యానెల్, కాబట్టి దీనిని root పాస్వర్డ్ లాగానే పరిగణించండి. ఇది రెండు రూపాల్లో పనిచేస్తుంది.
సరళమైన రూపం మీరు ఇప్పటికే openssl rand -base64 48 తో రూపొందించిన రాండమ్ స్ట్రింగ్. base64 లో ఎప్పుడూ $ ఉండదు కాబట్టి, ఇది ఎస్కేపింగ్ అవసరం లేకుండా నేరుగా .env లోకి వెళ్తుంది.
మరింత సురక్షితమైన రూపం Argon2 PHC హ్యాష్, దీనివల్ల ప్లెయిన్టెక్స్ట్ టోకెన్ డిస్క్లో ఎప్పటికీ నిల్వ చేయబడదు. అదే ఇమేజ్ని ఉపయోగించి ఒకదాన్ని రూపొందించండి:
docker run --rm -it vaultwarden/server /vaultwarden hash --preset owaspఇది రెండుసార్లు అడుగుతుంది మరియు $argon2id$v=19$... తో ప్రారంభమయ్యే స్ట్రింగ్ను ప్రింట్ చేస్తుంది. ఇక్కడే చాలామంది ఒక గంట సమయాన్ని వృథా చేసుకునే ట్రాప్ ఉంది: Docker Compose లో $ అనేది వేరియబుల్ ఇంటర్పోలేషన్గా పరిగణించబడుతుంది, కాబట్టి మీరు హ్యాష్ను Compose ఫైల్లో పేస్ట్ చేసేటప్పుడు ప్రతి $ ను $$ గా డబుల్ చేయాలి. దీనిని నేరుగా 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 అని హెచ్చరిస్తుంది మరియు టోకెన్ను ఖాళీ చేస్తుంది, అప్పుడు /admin మీ సరైన పాస్వర్డ్ను తిరస్కరిస్తుంది. docker compose up -d రన్ చేయండి, మరియు ప్రాంప్ట్ వద్ద మీరు టైప్ చేసిన ప్లెయిన్టెక్స్ట్ను మీ స్వంత పాస్వర్డ్ స్టోర్లో భద్రపరుచుకోండి.
దశ 4, మీ ఖాతాను నమోదు చేయండి, ఆపై తలుపును లాక్ చేయండి
SIGNUPS_ALLOWED: "true" తో, https://vault.example.com ని తెరవండి, Create account పై క్లిక్ చేయండి, మరియు మీ ఇమెయిల్ మరియు బలమైన master password తో నమోదు చేసుకోండి. ఈ master password తిరిగి పొందడం సాధ్యం కాదు, దీనికి reset ఆప్షన్ ఉండదు, కాబట్టి ముందుగా దీన్ని సురక్షితమైన చోట భద్రపరుచుకోండి.
ఇప్పుడు తలుపును మూసివేయండి. signups ఆపివేయడానికి Compose ఫైల్ను సవరించండి:
SIGNUPS_ALLOWED: "false"docker compose up -d తో మళ్ళీ అమలు చేయండి. ఇది మీరు వాయిదా వేయదగ్గ hardening కాదు. దీన్ని తెరిచి ఉంచితే, URL తెలిసిన ఎవరైనా, మరియు crawlers కూడా, మీ సర్వర్లో ఖాతాను సృష్టించగలరు. వారు మీ vault ను చదవలేరు, కానీ వారు వనరులను వినియోగిస్తారు మరియు మీ ప్రైవేట్ instance ను బహిరంగ సేవగా మారుస్తారు. మీరు దీన్ని ఆన్ లో ఉంచారని చెప్పడానికి సంకేతం: /admin మీరు సృష్టించని ఖాతాలను జాబితా చేస్తుంది.
తరువాత కుటుంబ సభ్యులను లేదా సహోద్యోగులను చేర్చడానికి, బహిరంగ signups ను మళ్ళీ తెరవాల్సిన అవసరం లేదు, /admin లోని Invite User బటన్ను ఉపయోగించండి; ఆ పద్ధతి పని చేయాలంటే SMTP కాన్ఫిగర్ చేయబడి ఉండాలి, అప్పుడే ఆహ్వానించబడిన వారికి వారి లింక్ అందుతుంది.
Step 5, /admin ని చేరుకోవడం
https://vault.example.com/admin కి బ్రౌజ్ చేసి, plaintext admin token ను (random string లేదా మీరు hash చేసిన password, hash కాదు) నమోదు చేయండి. లోపల మీరు users ను చూడవచ్చు, settings మార్చవచ్చు, test email పంపవచ్చు మరియు database snapshot తీసుకోవచ్చు.
ఒకవేళ ఈ పేజీ 404 Not Found ని చూపిస్తే, ADMIN_TOKEN ఖాళీగా లేదా unset చేయబడిందని అర్థం. ఇది panel ను పూర్తిగా నిలిపివేస్తుంది; మీకు ఇది అవసరం లేకపోతే ఇది సరైన ఎంపికే. ఒకవేళ పేజీ లోడ్ అయ్యి మీ token ను తిరస్కరిస్తే, కింద ఉన్న failure list లోని $$ escaping trap ను చూడండి. Token మర్చిపోయారా? దీనికి recovery prompt ఉండదు; .env ని లేదా Compose file ను edit చేసి, కొత్త token ను సెట్ చేసి, docker compose up -d చేయండి.
దశ 6, Bitwarden క్లయింట్లను కనెక్ట్ చేయడం
ప్రతి అధికారిక క్లయింట్ ఒక self-hosted సర్వర్కు కనెక్ట్ అవ్వగలదు, కాబట్టి సాధారణ స్టోర్ల నుండి Bitwarden డెస్క్టాప్, మొబైల్ లేదా బ్రౌజర్ క్లయింట్ను ఇన్స్టాల్ చేయండి. మీకు ప్రత్యేకమైన Vaultwarden బిల్డ్ అవసరం లేదు.
లాగిన్ అయ్యే ముందు, లాగిన్ స్క్రీన్పై ఉన్న సెట్టింగ్స్ గేర్ ఐకాన్ను (దీనిని Self-hosted లేదా Region → Self-hosted అని లేబుల్ చేస్తారు) ఓపెన్ చేయండి. Server URL ను https://vault.example.com కి సెట్ చేసి, సేవ్ చేయండి. ఆ తర్వాత మీరు రిజిస్టర్ చేసుకున్న ఈమెయిల్ మరియు మాస్టర్ పాస్వర్డ్తో లాగిన్ అవ్వండి; క్లయింట్ వెంటనే కనెక్ట్ అయ్యి, క్రెడెన్షియల్స్ను ఫిల్ చేయడానికి మరియు సేవ్ చేయడానికి అనుమతి అడుగుతుంది.
ఒకవేళ క్లయింట్ This is not a recognized Bitwarden server. You may need to check with your provider or update your server. అని చూపిస్తే, URL తప్పుగా ఉండటం, http వాడటం లేదా సర్టిఫికేట్ నమ్మదగినది కాకపోవడం కారణం కావచ్చు. ముందుగా https://vault.example.com బ్రౌజర్లో సరిగ్గా లోడ్ అవుతుందో లేదో తనిఖీ చేయండి. ఇతర పరికరాల్లో అప్డేట్లు నెమ్మదిగా ఉంటే, అది WebSocket పుష్ సమస్య కావచ్చు, దీని గురించి కింద వివరించబడింది.
Step 7, login endpoint కోసం Fail2ban jail
Vaultwarden ప్రతి విఫలమైన లాగిన్ ప్రయత్నాన్ని LOG_FILE ద్వారా సెట్ చేసిన ఫైల్లో లాగ్ చేస్తుంది, ఇది brute-force దాడులను అడ్డుకోవడానికి సరిగ్గా సరిపోతుంది. మీరు ఇప్పటికే Fail2ban రన్ చేయకపోతే, దాని ఇన్స్టాలేషన్ మరియు ప్రాథమిక అంశాల కోసం Fail2ban SSH hardening guide చూడండి; ఇక్కడ మనం vault కోసం ఒక jail ను జోడిస్తున్నాము.
ముందుగా, హోస్ట్ మెషీన్లో named volume ఎక్కడ ఉందో కనుగొనండి, తద్వారా Fail2ban ఆ లాగ్ను చదవగలదు:
docker volume inspect vaultwarden_vw-data --format '{{ .Mountpoint }}'ఇది /var/lib/docker/volumes/vaultwarden_vw-data/_data వంటి అవుట్పుట్ను ఇస్తుంది; లాగ్ ఫైల్ దాని లోపల vaultwarden.log వద్ద ఉంటుంది. ఫిల్టర్ను సృష్టించండి:
# /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 = 3600sudo systemctl restart fail2ban తో రీలోడ్ చేయండి మరియు sudo fail2ban-client status vaultwarden తో నిర్ధారించుకోండి.
ఇది రక్షణ కల్పిస్తుందా లేదా అనేది మూడు Docker అంశాలపై ఆధారపడి ఉంటుంది. మొదటిది, లాగ్లో ప్రతి విఫల ప్రయత్నం వద్ద IP: 127.0.0.1 లేదా మీ ప్రాక్సీ అడ్రస్ కనిపిస్తుంటే, Vaultwarden ప్రాక్సీని బ్యాన్ చేస్తోంది. అప్పుడు IP_HEADER ను మీ ప్రాక్సీ పంపే సరైన హెడర్కు సెట్ చేయండి (Traefik కోసం X-Forwarded-For, పైన పేర్కొన్న nginx బ్లాక్ కోసం X-Real-IP, Cloudflare వెనుక ఉంటే CF-Connecting-IP). రెండవది, సరైన iptables chain మీ ప్రాక్సీపై ఆధారపడి ఉంటుంది: Traefik ఒక కంటైనర్గా రన్ అవుతూ పోర్ట్లను పబ్లిష్ చేస్తుంటే, ట్రాఫిక్ Docker యొక్క FORWARD పాత్ ద్వారా వెళ్తుంది, కాబట్టి పైన ఉన్నట్లుగా బ్యాన్ DOCKER-USER లో ఉండాలి. కానీ మీరు Step 1 లో host-nginx ఆప్షన్ను ఎంచుకుంటే, కనెక్షన్లు హోస్ట్ యొక్క INPUT చైన్ వద్ద nginx తో ముగుస్తాయి మరియు DOCKER-USER బ్యాన్ వాటిని చూడలేదు. ఆ సందర్భంలో chain = DOCKER-USER లైన్ను తొలగించండి, తద్వారా Fail2ban డిఫాల్ట్ INPUT చైన్ను ఉపయోగిస్తుంది. మూడవది, పోర్ట్-ఆధారిత డిఫాల్ట్కు బదులుగా banaction = iptables-allports ఉపయోగించండి. ఈ jail ఎటువంటి పోర్ట్ను నిర్వచించదు, మరియు DOCKER-USER లోని all-ports బ్యాన్ బాక్స్లోని ప్రతి పబ్లిష్డ్ సర్వీస్ నుండి దాడి చేసేవారిని సమర్థవంతంగా బ్లాక్ చేస్తుంది.
దశ 8, వాల్ట్ను బ్యాకప్ చేయండి, ఆపై దానిని పునరుద్ధరించండి
vw-data వాల్యూమ్ అనేది మీ పాస్వర్డ్ మేనేజర్. ఇది db.sqlite3 (ప్రతి ఎంట్రీ), attachments/ మరియు sends/ డైరెక్టరీలు, లాగిన్ సెషన్లను సైన్ చేసే rsa_key.* ఫైళ్లు, మరియు అడ్మిన్ ప్యానెల్ నుండి config.json సమాచారాన్ని కలిగి ఉంటుంది. వీటిలో దేనినైనా వదిలివేసే బ్యాకప్, మీకు అవసరమైనప్పుడు విఫలమవుతుంది.
Vaultwarden డేటాను రాస్తున్నప్పుడు db.sqlite3 ని కాపీ చేయడం వల్ల, సగం మాత్రమే రాసిన పాడైపోయిన ఫైల్ వచ్చే అవకాశం ఉంది. కాబట్టి, సర్వర్ను ఆపి (cold snapshot) బ్యాకప్ తీసుకోండి, దీనికి కొన్ని సెకన్ల సమయం మాత్రమే పడుతుంది:
#!/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దీనిని ప్రతి రాత్రి cron ద్వారా రన్ చేయండి మరియు .tgz ని సర్వర్ బయటకు కాపీ చేయండి. మీరు రక్షిస్తున్న సర్వర్లోనే ఉండే బ్యాకప్, అసలైన బ్యాకప్ అనిపించుకోదు. దీనిని పంపడానికి సరైన మార్గం మరొక సర్వర్కు లేదా ఆబ్జెక్ట్ స్టోరేజ్కు రెస్టిక్ (restic) బ్యాకప్, ఇది ఆర్కైవ్ను ఎన్క్రిప్ట్ చేస్తుంది మరియు పదేపదే వచ్చే స్నాప్షాట్లను డీడ్యూప్లికేట్ (deduplicate) చేస్తుంది. అడ్మిన్ ప్యానెల్లోని Backup Database బటన్ కేవలం SQLite ఫైల్ను మాత్రమే స్నాప్షాట్ చేస్తుంది, కానీ ఇది అటాచ్మెంట్లను మరియు కీలను వదిలివేస్తుంది.
ఇప్పుడు, ఒక సాధారణ బ్యాకప్ను నమ్మదగిన బ్యాకప్గా మార్చే ప్రక్రియను చేద్దాం. దానిని ఒకసారి పునరుద్ధరించి, అది పనిచేస్తుందో లేదో పరీక్షించండి:
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మీ ల్యాప్టాప్ నుండి, ssh -L 8888:127.0.0.1:8888 you@your-vps తో టన్నెల్ చేసి http://localhost:8888 ని ఓపెన్ చేయండి. localhost ఒక సురక్షితమైన సందర్భం (secure context) కాబట్టి, crypto.subtle అందుబాటులో ఉంటుంది మరియు వాల్ట్ ఇక్కడ plain http ద్వారా డీక్రిప్ట్ అవుతుంది, ఇది అనుమతించబడిన ఏకైక సందర్భం. మీ మాస్టర్ పాస్వర్డ్తో లాగిన్ అయ్యి మీ ఎంట్రీలు ఉన్నాయో లేదో నిర్ధారించుకోండి: ఒకవేళ అవి ఉంటే, మీ డేటాబేస్, RSA కీలు మరియు మాస్టర్ పాస్వర్డ్ అన్నీ సరిగ్గా పనిచేస్తున్నాయని అర్థం. దీనితో మీరు నిమిషాల్లో కొత్త VPS పై సర్వర్ను తిరిగి నిర్మించవచ్చు. Ctrl-C తో కంటైనర్ను ఆపి, /tmp/vw-restore ని తొలగించండి. ఇంటర్నెట్కు ఎప్పుడూ బహిర్గతం కాకూడని సర్వర్లోని ఇతర అడ్మిన్ UI ల కోసం కూడా ఈ టన్నెల్ పద్ధతినే వాడండి. ఉదాహరణకు, పోర్ట్ 5173 లోని సెల్ఫ్-హోస్టెడ్ ఓపెన్-క్రిట్ సెక్యూరిటీ స్కానర్ ను కూడా ఇలాగే యాక్సెస్ చేయవచ్చు.
వైఫల్య రీతులు మరియు మీరు చూసే సందేశాలు
బ్రౌజర్ కన్సోల్లో Cannot read properties of undefined (reading 'importKey'). వాల్ట్ http ద్వారా లోడ్ చేయబడింది, కాబట్టి crypto.subtle నిర్వచించబడలేదు; దీనిని కేవలం https:// ద్వారా మాత్రమే యాక్సెస్ చేయండి మరియు ప్రాక్సీ వద్ద HTTP-to-HTTPS రీడైరెక్ట్ను జోడించండి.
క్లయింట్లో This is not a recognized Bitwarden server.... సర్వర్ URL http లో ఉంది, తప్పుగా టైప్ చేయబడింది లేదా సర్టిఫికేట్ నమ్మదగినది కాదు; https://vault.example.com వద్ద సరైన ప్యాడ్లాక్ చిహ్నం కనిపిస్తుందో లేదో నిర్ధారించుకోండి, ఆపై క్లయింట్ యొక్క self-hosted సెట్టింగ్లలో దానిని మళ్లీ నమోదు చేయండి.
/admin సరైన పాస్వర్డ్ను తిరస్కరిస్తుంది. Argon2 హ్యాష్ దాని ఎస్కేపింగ్ కోల్పోయింది, Compose ఫైల్లో ప్రతి $ తప్పనిసరిగా $$ గా ఉండాలి, లేదా మీరు ప్లెయిన్టెక్స్ట్కు బదులుగా హ్యాష్ను నమోదు చేసి ఉండవచ్చు.
పరికరాల మధ్య నెమ్మదిగా సింక్ అవ్వడం; కన్సోల్లో WebSocket connection to 'wss://vault.example.com/notifications/hub' failed కనిపిస్తుంది. ప్రాక్సీ Upgrade/Connection హెడర్లను ఫార్వార్డ్ చేయడం లేదు; Traefik దీనిని ఆటోమేటిక్గా చేస్తుంది, nginx కోసం స్టెప్ 1 లోని రెండు upgrade లైన్లు అవసరం. వాల్ట్ పని చేస్తుంది, కానీ కేవలం ఓపెన్ చేసినప్పుడు మాత్రమే సింక్ అవుతుంది. v1.31.0 నుండి పాత డెడికేటెడ్ పోర్ట్ 3012 తొలగించబడింది, కాబట్టి ప్రత్యేక WebSocket రూట్ అవసరం లేదు.
Fail2ban ఒక బ్యాన్ను నివేదిస్తుంది కానీ దాడి చేసే వ్యక్తి కనెక్ట్ అవుతూనే ఉన్నాడు. ఇది 127.0.0.1 ను బ్యాన్ చేస్తోంది ఎందుకంటే IP_HEADER తప్పుగా ఉంది, లేదా బ్యాన్ తప్పు iptables చైన్లో ఉంది, chain = DOCKER-USER మరియు banaction = iptables-allports సెట్ చేయండి.
అప్గ్రేడ్లు
కొత్త image ను pull చేసి, కంటైనర్ను తిరిగి సృష్టించండి; named volume మరియు మీ డేటా మొత్తం అలాగే ఉంటాయి:
docker compose pull
docker compose up -dVaultwarden తరచుగా కొత్త వెర్షన్లను విడుదల చేస్తుంది. ప్యాచ్ వెర్షన్ను ఫిక్స్ చేసే బదులు ప్రాజెక్ట్ విడుదల నోట్స్ గమనిస్తూ ఉండండి, ఎందుకంటే కొన్ని విడుదలలలో మైగ్రేషన్ సూచనలు ఉంటాయి. ఏదైనా ప్రధాన అప్గ్రేడ్కు ముందు కొత్త బ్యాకప్ను తీసుకోండి; ఒకవేళ సమస్య వస్తే, tarball ను కొత్త volume లోకి restore చేయడం ద్వారా మీరు పాత స్థితికి వెళ్లవచ్చు.
FAQ
Vaultwarden మరియు Bitwarden ఒకటేనా?
ఇది Bitwarden కు అనుకూలమైన, స్వతంత్ర సర్వర్; ఇది అధికారికమైనది కాదు. Vaultwarden, Bitwarden సర్వర్ APIని Rust భాషలో తిరిగి నిర్మిస్తుంది. కాబట్టి, అధికారిక డెస్క్టాప్, మొబైల్, బ్రౌజర్ మరియు CLI క్లయింట్లు అన్నీ దీనితో పనిచేస్తాయి, మరియు ఇవి అధికారిక stack తో పోలిస్తే చాలా తక్కువ వనరులను వినియోగిస్తాయి. Vault ఫార్మాట్ ఒకటే కాబట్టి, మీరు డేటాను export మరియు import చేయడం ద్వారా ఏ దిశలోనైనా migrate అవ్వవచ్చు.
నాకు నిజంగా HTTPS అవసరమా, లేక నా LANలో http ద్వారా నడపవచ్చా?
localhost పరీక్ష కోసం తప్ప, మిగిలిన అన్నింటికీ మీకు HTTPS అవసరం. Bitwarden వెబ్ వాల్ట్ మరియు ఎక్స్టెన్షన్లు బ్రౌజర్ యొక్క Web Crypto APIని ఉపయోగిస్తాయి, ఇది కేవలం సురక్షితమైన context లో మాత్రమే అందుబాటులో ఉంటుంది. కాబట్టి, సాధారణ http ద్వారా క్లయింట్ Cannot read properties of undefined ని చూపిస్తుంది మరియు లాగిన్ అవ్వదు. కేవలం http://localhost అనే http అడ్రస్ మాత్రమే పనిచేస్తుంది, అందుకే Step 8 లోని restore పరీక్షలో SSH టన్నెల్ను ఉపయోగిస్తాము.
నా సర్వర్లో అపరిచితులు రిజిస్టర్ అవ్వకుండా ఎలా ఆపాలి?
మీ సొంత ఖాతాను సృష్టించిన వెంటనే, Compose ఫైల్లో SIGNUPS_ALLOWED: "false" ని సెట్ చేసి, docker compose up -d ని రన్ చేయండి. ఆ తర్వాత, /admin లోని Invite User బటన్ ద్వారా కొత్త వ్యక్తులను చేర్చుకోండి. దీని కోసం SMTP కాన్ఫిగర్ చేయబడి ఉండాలి, అప్పుడే వారికి ఆహ్వాన లింక్ అందుతుంది. అనవసరమైన ఖాతాలు ఏవీ లేవని నిర్ధారించుకోవడానికి అప్పుడప్పుడు అడ్మిన్ యూజర్ జాబితాను తనిఖీ చేయండి.
నా Vaultwarden వాల్ట్ను ఎలా బ్యాకప్ చేయాలి?
కంటైనర్ను క్లుప్తంగా ఆపి, మొత్తం vw-data వాల్యూమ్, db.sqlite3, attachments/, sends/, config.json మరియు rsa_key.* ఫైళ్లను ఆర్కైవ్ చేయండి. ఆ తర్వాత ఆ ఆర్కైవ్ను సర్వర్ నుండి కాపీ చేయండి; దీన్ని ప్రతిరోజూ రాత్రి cron ద్వారా చేయడం ఉత్తమం. సర్వర్ రన్ అవుతున్నప్పుడు లైవ్ SQLite ఫైల్ను కాపీ చేయడం వల్ల snapshot పాడయ్యే ప్రమాదం ఉంది, కాబట్టి సర్వర్ను ఆపి (cold) బ్యాకప్ తీసుకోండి. అన్నింటికంటే ముఖ్యంగా, ఒకసారి తాత్కాలిక కంటైనర్లో దీన్ని restore చేసి లాగిన్ అవ్వండి, తద్వారా మీరు బ్యాకప్పై ఆధారపడే ముందు అది నిజంగా పనిచేస్తుందని నిర్ధారించుకోవచ్చు.
నా పాస్వర్డ్లను self-host చేయడం నిజంగా సురక్షితమేనా?
అవును, ఈ గైడ్లో పేర్కొన్న మూడు పనులు చేసినప్పుడు ఇది సురక్షితం: సరైన HTTPS, క్లోజ్డ్ సైన్-అప్లు మరియు బలమైన అడ్మిన్ టోకెన్, అలాగే పరీక్షించిన బ్యాకప్లు. మీ వాల్ట్ మీ మాస్టర్ పాస్వర్డ్తో క్లయింట్-సైడ్ ఎన్క్రిప్ట్ చేయబడుతుంది, కాబట్టి సర్వర్కు కూడా మీ పాస్వర్డ్లు స్పష్టంగా కనిపించవు. ఒకవేళ db.sqlite3 దొంగిలించబడినా, మాస్టర్ పాస్వర్డ్ లేకుండా అది పనికిరాదు. దీనికి ప్రతిఫలంగా, ప్యాచింగ్ మరియు బ్యాకప్లు మీ బాధ్యత అవుతాయి, అందుకే Fail2ban మరియు restore ప్రక్రియ ఇక్కడ తప్పనిసరి. ఇవన్నీ అమర్చిన తర్వాత, self-hosted వాల్ట్పై ఎక్కడ దాడి జరగవచ్చో మరింత లోతుగా పరిశీలించడం తదుపరి ఉపయోగకరమైన అడుగు. ఎందుకంటే ఎంట్రీలు క్లయింట్లోనే ఎన్క్రిప్ట్ అవుతాయి కాబట్టి, అడ్మిన్ టోకెన్ మరియు బ్యాకప్ ఆర్కైవ్ను మాత్రమే రక్షించుకోవాల్సి ఉంటుంది.