VPS పై Vaultwarden సెటప్ చేయడం ఎలా
VPS పై Docker తో Vaultwarden ని స్వయంగా హోస్ట్ చేయడం ఎలా? HTTPS, admin token, Fail2ban మరియు టెస్ట్ చేసిన బ్యాకప్ సెటప్ పూర్తి గైడ్. దాదాపు 100 MB RAM సరిపోతుంది.
మీరు నిర్మించేది ఏమిటి
మీకు పూర్తిగా స్వంతమైన ఒక పాస్వర్డ్ మేనేజర్: ఒక చిన్న కంటైనర్లో నడుస్తున్న Vaultwarden, దాని ముందు HTTPS ని ముగించే ఒక రివర్స్ ప్రాక్సీ ఉంటుంది, మీ ఫోన్, ల్యాప్టాప్ మరియు బ్రౌజర్లోని అధికారిక Bitwarden యాప్లు దానివైపు చూపబడతాయి. Vaultwarden అనేది Bitwarden సర్వర్ API ని Rust లో మళ్లీ నిర్మిస్తుంది. ఇది bitwarden.com మాదిరిగానే అదే ప్రొటోకాల్ను మాట్లాడుతుంది. కాబట్టి ప్రతి అధికారిక క్లయింట్ దానితో మార్పు లేకుండా పనిచేస్తుంది — అయితే అధికారిక మల్టీ-కంటైనర్ స్టాక్కు బదులుగా ఇది దాదాపు 100 MB RAM లో అమరుతుంది.
సంస్థాపన అనేది కేవలం పన్నెండు పంక్తుల Compose. వాస్తవానికి ముఖ్యమైనవి — మరియు పాడైపోయేవి — ఈ మూడు: మీరు వెబ్ వాల్ట్ను లోడ్ చేయడానికి ముందే TLS ఉండాలి, మీ స్వంత ఖాత ఉనికిలోకి వచ్చిన క్షణంలోనే పబ్లిక్ సైనప్లు మూసివేయాలి, మరియు డేటా వాల్యూమ్ను బ్యాకప్ చేసి టెస్ట్-రెస్టోర్ చేయాలి, ఎందుకంటే ఆ ఒక్క డైరెక్టరీలో మీకు ఉన్న ప్రతి పాస్వర్డ్ ఉంటుంది.
ముందస్తు అవసరాలు మరియు వాస్తవ సమస్యలు
- root లేదా sudo యాక్సెస్తో కూడిన కొత్త Ubuntu 24.04 KVM సర్వర్పై Docker Engine మరియు Compose ప్లగిన్ ఉన్న VPS. 512 MB RAM తగినంత. 1 GB సౌకర్యవంతం. ఇది మీరు నడపగలిగే అత్యంత తేలికైన సేవలలో ఒకటి — ఇది స్వయంగా హోస్ట్ చేయడానికి విలువైన సేవల జాబితాలో పై స్థానంలో ఉంటుంది.
- VPSని సూచిస్తూ
vault.example.comవైపు A రికార్డ్ (మరియు IPv6 ఉంటే AAAA) కలిగిన డొమైన్. TLS సర్టిఫికేట్ ఈ ఖచ్చితమైన పేరుకు జారీ చేయబడుతుంది. కాబట్టి మీరు ప్రారంభించే ముందు DNS పరిష్కరించబడాలి. - ఇంటర్నెట్కి పోర్టులు 80 మరియు 443 తెరిచి ఉండాలి. వీటిని మీ రివర్స్ ప్రాక్సీ ముగిస్తుంది — ఎప్పుడూ Vaultwarden నేరుగా కాదు. పోర్ట్ 80 ACME సర్టిఫికేట్ ఛాలెంజ్ మరియు HTTP నుండి HTTPS కు రీడైరెక్ట్ కోసం మాత్రమే ఉపయోగించబడుతుంది.
- ముందుగా తెలుసుకోవాల్సిన అతిపెద్ద సమస్య: Bitwarden క్లయింట్లు HTTPS కాని సర్వర్తో మాట్లాడటాన్ని తిరస్కరిస్తాయి. "ముందు http ద్వారా పరీక్షించండి" అనే దానికి అవకాశం లేదు — ఆ మార్గం పనిచేయదు. దీనికి కారణం తర్వాత వివరించబడింది.
Vaultwarden ఎందుకు, అధికారిక Bitwarden స్టాక్ కాదు
అదే క్లయింట్లు, బరువులో కొంత భాగం మాత్రమే. అధికారిక self-hosted Bitwarden కంటైనర్ల సమితిగా వస్తుంది (MSSQL, Nginx, Identity, Api, Admin మరియు మరిన్ని) మరియు దాదాపు 2 GB RAM అవసరం. Vaultwarden ఒకే ఒక్క బైనరీ. ఇది అన్ని డేటాను డిఫాల్ట్గా SQLite డేటాబేస్లో నిల్వ చేస్తుంది. నిష్క్రియ స్థితిలో ఇది కొన్ని పదుల మెగాబైట్లను ఉపయోగిస్తుంది. ఒక వ్యక్తి, కుటుంబం లేదా చిన్న బృందానికి ఇది సరైన ఎంపిక. ఇది Bitwarden APIని కచ్చితంగా అమలు చేస్తుంది కాబట్టి, మీ డేటా దీనికి మరియు bitwarden.comకి మధ్య పోర్టబుల్గా ఉంటుంది.
మీరు వదులుకునేది ఎంటర్ప్రైజ్ ఫీచర్లలో ఎక్కువ భాగం: SCIM ప్రొవిజనింగ్ లేదు (అయినప్పటికీ ప్రయోగాత్మక OpenID Connect SSO 1.35.0లో వచ్చింది). మీరే ఆపరేటర్ కాబట్టి, ప్యాచింగ్, HTTPS మరియు బ్యాకప్లు మీ బాధ్యత. ఈ గైడ్ ఆ మూడు పనుల గురించి.
HTTPS ఎందుకు ఐచ్ఛికం కాదు
Bitwarden వెబ్ వాల్ట్ మరియు బ్రౌజర్ పొడిగింతలు Web Crypto API (window.crypto.subtle) ఉపయోగించి బ్రౌజర్లో మీ ఎన్క్రిప్షన్ కీలను ఉత్పన్నం చేస్తాయి. బ్రౌజర్లు crypto.subtle ను కేవలం ఒక సురక్షిత సందర్భంలో మాత్రమే అందిస్తాయి — అది HTTPS, లేదా http://localhost యొక్క ప్రత్యేక సందర్భం. సాధారణ http://vault.example.com పై ఇది undefined, కాబట్టి యాప్ కీని ఉత్పన్నం చేసిన వెంటనే అది ఎర్రర్ విసురుతుంది, మరియు కన్సోల్ ఇది చూపుతుంది:
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'importKey')పేజీ స్తంభిస్తుంది లేదా సాధారణ క్రిప్టో ఎర్రర్ను చూపుతుంది, మరియు ఏదీ లాగిన్ అవ్వదు. డెస్క్టాప్, మొబైల్ మరియు బ్రౌజర్ క్లయింట్లు స్వయం-హోస్ట్ చేసిన 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-hereఆ టోకెన్ను openssl 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 ద్వారా మాత్రమే చేరుకోవచ్చు — దాని పోర్ట్ను హోస్ట్పై ప్రచురించడమే ప్రజలు అనుకోకుండా వాల్ట్ను http ద్వారా అందించడానికి కారణం. మరియు DOMAIN పూర్తి పబ్లిక్ HTTPS URL అయి ఉండాలి: అది అటాచ్మెంట్ లింకులు, WebAuthn 2FA మరియు నోటిఫికేషన్ ఎండ్పాయింట్లో అంతర్గతంగా చేర్చబడుతుంది, కాబట్టి సైట్ లోడ్ అయినప్పటికీ, తప్పు లేదా http విలువ వాటిని విచ్ఛిన్నం చేస్తుంది. latest ట్యాగ్ అనేది సాధారణ never-latest నియమానికి ఉద్దేశపూర్వక మినహాయింపు — Vaultwarden దాని స్థిరమైన విడుదలలను ఒకే రోలింగ్ ఇమేజ్గా అందిస్తుంది, :testing ప్రత్యేక ప్రీ-రిలీజ్ ఛానెల్గా ఉంటుంది — కాబట్టి ఉద్దేశపూర్వకంగా అప్డేట్ చేయండి మరియు మీరు పుల్ చేయడానికి ముందు విడుదల గమనికలను పరిశీలించండి.
దాన్ని ప్రారంభించండి మరియు లాగ్ను పరిశీలించండి:
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 వెబ్ వాల్ట్ లభించాలి.
దశ 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 ద్వారా కాదు. దాన్ని కోట్స్లో చుట్టవద్దు:
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 ను నొక్కండి, మరియు మీ ఇమెయిల్ మరియు బలమైన ప్రధాన పాస్వర్డ్తో నమోదు చేయండి. ఈ ప్రధాన పాస్వర్డ్ను ఎప్పటికీ పునరుద్ధరించలేరు — రీసెట్ చేసే సౌకర్యం లేదు — కాబట్టి దాన్ని ముందుగా ఎక్కడైనా సురక్షితంగా నిల్వ చేయండి.
ఇప్పుడు తలుపు వేయండి. సైనప్అప్లు ఆపివేసేలా Compose ఫైల్ను సవరించండి:
SIGNUPS_ALLOWED: "false"docker compose up -d తో మళ్లీ వర్తింపజేయండి. ఇది వాయిదా వేయగలిగే హార్డెనింగ్ కాదు. తెరిచి వదిలితే, URL కనుగొన్న ఎవరైనా — క్రాలర్లు కూడా — మీ సర్వర్లో ఖాతా సృష్టించవచ్చు. వారు మీ వాల్ట్ ను చదవలేరు, అయితే వారు వనరులను వినియోగిస్తారు మరియు మీ ప్రైవేట్ ఇన్స్టాన్స్ను బహిరంగ సేవగా మారుస్తారు. మీరు దాన్ని తెరిచే వదిలారనే సంకేతం: /admin మీరు ఎన్నడూ సృష్టించని ఖాతాలను చూపిస్తుంది.
పబ్లిక్ సైనప్లను మళ్లీ తెరవకుండా తర్వాత కుటుంబ సభ్యులను లేదా సహచరులను జోడించడానికి, /admin లో Invite User బటన్ను ఉపయోగించండి; ఆ మార్గానికి SMTP ఆకృతీకరించబడి ఉండాలి తద్వారా ఆహ్వానితుడు వారి లింక్ను స్వీకరిస్తారు.
దశ 5 — /admin ని చేరుకోవడం
https://vault.example.com/admin కు వెళ్లి స్పష్టమైన అడ్మిన్ టోకెన్ను ప్రవేశపెట్టండి (ఆ యాదృచ్ఛిక స్ట్రింగ్, లేదా మీరు హాష్ చేసిన పాస్వర్డ్ — హాష్ కాదు). లోపల మీరు వినియోగదారులను జాబితా చేయవచ్చు, సెట్టింగులను సర్దుబాటు చేయవచ్చు, పరీక్ష ఇమెయిల్ పంపవచ్చు మరియు డేటాబేస్ స్నాప్షాట్ తీసుకోవచ్చు.
పేజీ 404 Not Found ని అందిస్తే, ADMIN_TOKEN ఖాళీగా ఉంది లేదా సెట్ చేయబడలేదు, అది ప్యానెల్ను పూర్తిగా అచేతనం చేస్తుంది — మీకు ఎప్పటికీ అవసరం లేకపోతే అదే సరైన ఎంపిక. అది లోడ్ అయినా మీ టోకెన్ను తిరస్కరిస్తే, దిగువ వైఫల్య జాబితాలో ఉన్న $$ ఎస్కేపింగ్ సమస్యను చూడండి. టోకెన్ మర్చిపోయారా? దానికి పునరుద్ధరణ ప్రాంప్ట్ లేదు; .env లేదా Compose ఫైలును సవరించండి, కొత్తది సెట్ చేయండి, మరియు docker compose up -d.
దశ 6 — Bitwarden క్లయింట్లను కనెక్ట్ చేయండి
ప్రతి అధికారిక క్లయింట్ సెల్ఫ్-హోస్టెడ్ సర్వర్ను చూపగలదు. కాబట్టి సాధారణ స్టోర్ల నుండి 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 పుష్ కారణంగా జరుగుతాయి. దీని గురించి కింద వివరించబడింది.
దశ 7 — లాగిన్ ఎండ్పాయింట్ కోసం ఒక Fail2ban జెయిల్
Vaultwarden ప్రతి విఫల లాగిన్ను LOG_FILE ద్వారా సెట్ చేయబడిన ఫైలుకి లాగ్ చేస్తుంది — ఇది ఒక బ్రూట్-ఫోర్స్ గార్డ్కు అవసరమైనదే. మీరు ఇప్పటికే Fail2ban నడుపుతుంటే, ఇన్స్టాలేషన్ మరియు ప్రాథమికాంశాలు Fail2ban SSH హార్డెనింగ్ గైడ్లో ఉన్నాయి; ఇక్కడ మేము వాల్ట్ కోసం ఒక జెయిల్ని జోడిస్తాము.
ముందుగా హోస్ట్పై నేమ్డ్ వాల్యూమ్ ఎక్కడ ఉందో కనుగొనండి, తద్వారా 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 =మరియు జెయిల్:
# /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 చైన్ మీ ప్రాక్సీపై ఆధారపడి ఉంటుంది: పబ్లిష్ చేసిన పోర్టులతో ఒక కంటైనర్గా Traefik నడుస్తుంటే, ట్రాఫిక్ Docker యొక్క FORWARD మార్గం గుండా వెళుతుంది, కాబట్టి బహిష్కరణ పైన పేర్కొన్నట్లుగా DOCKER-USER లో ఉండాలి; కానీ మీరు దశ 1 నుండి host-nginx ఎంపికను ఎంచుకుంటే, కనెక్షన్లు హోస్ట్ యొక్క INPUT చైన్పై ఉన్న nginx వద్ద అంతమవుతాయి మరియు DOCKER-USER బహిష్కరణ వాటిని ఎప్పటికీ చూడదు — అలాంటి పరిస్థితిలో Fail2ban డిఫాల్ట్ INPUT చైన్ని ఉపయోగించేలా chain = DOCKER-USER లైన్ని తొలగించండి. మూడవది, పోర్ట్ ఆధారిత డిఫాల్ట్ కంటే banaction = iptables-allports ని ఉపయోగించండి — ఈ జెయిల్ ఏ పోర్ట్ను నిర్వచించదు, మరియు DOCKER-USER లో అన్ని-పోర్టుల బహిష్కరణ ప్రతిన్నియాత్ను బాక్స్లోని ప్రతి పబ్లిష్ చేసిన సర్వీస్ నుండి స్పష్టంగా నిరోధిస్తుంది.
దశ 8 — వాల్ట్ను బ్యాకప్ చేయండి, తర్వాత దాన్ని వాస్తవంగా పునరుద్ధరించండి
vw-data వాల్యూమ్ మీ పాస్వర్డ్ మేనేజర్. ఇది db.sqlite3 (ప్రతి ఎంట్రీ), attachments/ మరియు sends/ డైరెక్టరీలు, లాగిన్ సెషన్లను సైన్ చేసే rsa_key.* ఫైళ్లు, మరియు అడ్మిన్ ప్యానెల్ నుండి config.json కలిగి ఉంటుంది. వీటిలో దేనినైనా వదిలివేసే బ్యాకప్ అవసరం వచ్చినప్పుడు విఫలమవుతుంది.
Vaultwarden రాస్తున్నప్పుడు db.sqlite3 కాపీ చేయడం సగం రాసిన, పాడైన ఫైల్ను క్యాప్చర్ చేస్తుంది. కాబట్టి కోల్డ్ స్నాప్షాట్ తీసుకోండి — డౌన్టైమ్ కొన్ని సెకన్లు మాత్రమే:
#!/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 బ్యాకప్, ఇది ఆర్కైవ్ను ఎన్క్రిప్ట్ చేస్తుంది మరియు పునరావృత స్నాప్షాట్లను డిడప్లికేట్ చేస్తుంది. అడ్మిన్ ప్యానెల్లోని 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 ఒక సురక్షిత కాంటెక్స్ట్ కాబట్టి, crypto.subtle అందుబాటులో ఉంటుంది మరియు వాల్ట్ ఇక్కడ ప్లెయిన్ http పై డీక్రిప్ట్ అవుతుంది — ఇది అనుమతించబడిన ఒకే ఒక ప్రదేశం. మీ మాస్టర్ పాస్వర్డ్తో లాగిన్ చేయండి మరియు మీ ఎంట్రీలు ఉన్నాయని నిర్ధారించుకోండి: అవి ఉంటే, మీ డేటాబేస్, RSA కీలు మరియు మాస్టర్ పాస్వర్డ్ అన్నీ రౌండ్-ట్రిప్ అవుతాయి, మరియు మీరు నిమిషాల్లో కొత్త VPSపై పునర్నిర్మాణం చేయవచ్చు. Ctrl-C తో కంటైనర్ను ఆపండి మరియు /tmp/vw-restore ను తొలగించండి.
వైఫల్య రకాలు, మీరు చూసే స్ట్రింగ్లతో
బ్రౌజర్ కన్సోల్లో Cannot read properties of undefined (reading 'importKey'). వాల్ట్ http ద్వారా లోడ్ చేయబడింది, కాబట్టి crypto.subtle అనిశ్చితంగా ఉంది; దాన్ని https:// ద్వారా మాత్రమే చేరుకోండి మరియు ప్రాక్సీ వద్ద HTTP నుండి HTTPS రీడైరెక్ట్ను జోడించండి.
క్లయింట్లో This is not a recognized Bitwarden server.... సర్వర్ URL http గా ఉంది, తప్పుగా టైప్ చేయబడింది, లేదా సర్టిఫికేట్ విశ్వసనీయం కాదు; https://vault.example.com చెల్లుబాటు అయ్యే పాడ్లాక్ను చూపుతుందని నిర్ధారించుకోండి, తర్వాత దాన్ని క్లయింట్ సెల్ఫ్-హోస్టెడ్ సెట్టింగులలో మళ్లీ నమోదు చేయండి.
/admin సరైన పాస్వర్డ్ను తిరస్కరిస్తుంది. Argon2 హాష్ దాని ఎస్కేపింగ్ను కోల్పోయింది — ప్రతి $ అనేది Compose లో $$ అయి ఉండాలి — లేదా మీరు హాష్ను అది సూచించే ప్లెయిన్టెక్స్ట్ బదులుగా నమోదు చేశారు.
క్రాస్-డివైస్ సింక్ నెమ్మదిగా ఉంది; కన్సోల్ WebSocket connection to 'wss://vault.example.com/notifications/hub' failed చూపిస్తుంది. ప్రాక్సీ Upgrade/Connection హెడర్లను ఫార్వర్డ్ చేయడం లేదు; Traefik ఇది స్వయంచాలకంగా చేస్తుంది, nginx కు Step 1 నుండి రెండు అప్గ్రేడ్ లైన్లు అవసరం. వాల్ట్ ఇప్పటికీ పని చేస్తుంది, ఓపెన్ చేసినప్పుడు మాత్రమే సింక్ అవుతుంది. పాత ప్రత్యేక పోర్ట్ 3012 అనేది v1.31.0 నుండి పోయింది, కాబట్టి ప్రత్యేక WebSocket రూట్ అవసరం లేదు.
Fail2ban ఒక బ్యాన్ను నివేదిస్తుంది కానీ దాడి చేసేవాడు అనుసంధానం కొనసాగిస్తున్నాడు. అది 127.0.0.1 ను బ్యాన్ చేస్తోంది ఎందుకంటే IP_HEADER తప్పు, లేదా బ్యాన్ తప్పు iptables చెయిన్లో ఉంది — chain = DOCKER-USER మరియు banaction = iptables-allports సెట్ చేయండి.
నవీకరణలు
కొత్త ఇమేజ్ను పుల్ చేసి రీక్రియేట్ చేయండి. పేరున్న వాల్యూమ్ మరియు మీ డేటా అంతా నిలిచివుంటుంది:
docker compose pull
docker compose up -dVaultwarden తరచుగా విడుదలలను అందిస్తుంది. కొన్ని విడుదలలు వలస గమనికలను కలిగి ఉన్నందున, ఒక ప్యాచ్ వెర్షన్ను పిన్ చేయడం కంటే ప్రాజెక్ట్ విడుదల గమనికలను పరిశీలించండి. ఏ పెద్ద అప్గ్రేడ్కైనా ముందు ఒక కొత్త బ్యాకప్ తీసుకోండి. కొత్త వాల్యూమ్లోకి tarball రిస్టోర్ చేయడం ద్వారా మీరు రోల్ బ్యాక్ చేయవచ్చు.
FAQ
Vaultwarden అనేది Bitwarden వలె ఉంటుందా?
ఇది అధికారిక సర్వర్ కాదు, అనుకూలమైన స్వతంత్ర సర్వర్. Vaultwarden అనేది Bitwarden సర్వర్ APIని Rustలో మళ్లీ అమలు చేస్తుంది. కాబట్టి అధికారిక డెస్క్టాప్, మొబైల్, బ్రౌజర్ మరియు CLI క్లయింట్లన్నీ దానితో పనిచేస్తాయి. అధికారిక స్టాక్ వనరులలో కొంచెం భాగం మాత్రమే ఇది వాడుతుంది. వాల్ట్ ఫార్మాట్ ఒకటే, కాబట్టి ఎగుమతి మరియు దిగుమతి ద్వారా రెండు దిశలలోనూ మైగ్రేట్ చేయవచ్చు.
నాకు నిజంగా HTTPS అవసరమా, లేక నా LANలో http ద్వారా నడపవచ్చా?
localhost పరీక్ష తప్ప మరేదానికైనా HTTPS అవసరం. Bitwarden వెబ్ వాల్ట్ మరియు పొడిగింపులు బ్రౌజర్ యొక్క Web Crypto APIని వాడుతాయి. అది సురక్షిత సందర్భంలో మాత్రమే లభిస్తుంది. కాబట్టి సాధారణ http ద్వారా క్లయింట్ Cannot read properties of undefined అనే ఎర్రర్ను ఇస్తుంది మరియు ఎప్పటికీ లాగిన్ కాదు. పనిచేసే ఏకైక http చిరునామా http://localhost. అందుకే దశ 8లోని పునరుద్ధరణ పరీక్ష 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 ఫైల్ను కాపీ చేయడం పాడైన స్నాప్షాట్కు దారితీస్తుంది, కాబట్టి దాన్ని ఆపిన తర్వాత తీసుకోండి. అన్నిటికంటే ముఖ్యంగా, దాన్ని ఒక విస్మరించదగిన కంటైనర్కు ఒకసారి పునరుద్ధరించి లాగిన్ అవ్వండి. దానిపై ఆధారపడటానికి ముందు మీ బ్యాకప్ సరైనదని మీకు తెలుస్తుంది.
నా పాస్వర్డ్లను స్వయంగా హోస్ట్ చేయడం నిజంగా సురక్షితమేనా?
అవును, ఈ గైడ్లో ఉన్న మూడు పనులు చేస్తే: నిజమైన HTTPS, క్లోజ్డ్ సైనప్లు ప్లస్ బలమైన అడ్మిన్ టోకెన్, మరియు పరీక్షించిన బ్యాకప్లు. మీ వాల్ట్ క్లయింట్ వైపు మీ మాస్టర్ పాస్వర్డ్తో ఎన్క్రిప్ట్ అవుతుంది. కాబట్టి సర్వర్ కూడా మీ పాస్వర్డ్లను ఎప్పటికీ స్పష్టంగా చూడదు — దొంగిలించిన db.sqlite3 దాని లేకుండా పనికిరాదు. దీనికి ప్రతిఫలంగా, ప్యాచింగ్ మరియు బ్యాకప్లు ఇప్పుడు మీ బాధ్యత. అందుకే ఇక్కడ Fail2ban మరియు పునరుద్ధరణ ఆచారం ఐచ్ఛికం కాదు.