SSD Nodes Learn Hosting plans →
கல்வி வழிகாட்டிகள் Matt Connorஆல் Matt Connor · புதுப்பிக்கப்பட்டது 2026-08-30

VPS-ல் Vaultwarden நிறுவுவது எப்படி? முழுமையான வழிகாட்டி

Docker மூலம் VPS-ல் Vaultwarden-ஐ நிறுவி உங்கள் கடவுச்சொற்களைப் பாதுகாப்பாக நிர்வகிக்கவும். HTTPS கட்டமைப்பு, Admin token பாதுகாப்பு மற்றும் தரவு காப்புப்பிரதி குறித்த முக்கிய

நீங்கள் உருவாக்குவது என்ன

நீங்கள் முழுமையாகக் கட்டுப்படுத்தும் ஒரு password manager: HTTPS-ஐ முடிவுக்குக் கொண்டுவரும் (terminate) ஒரு reverse proxy-க்கு பின்னால், ஒரு சிறிய container-ல் இயங்கும் Vaultwarden. உங்கள் phone, laptop மற்றும் browser-ல் உள்ள அதிகாரப்பூர்வ Bitwarden செயலிகளை இதனுடன் இணைக்கலாம். Vaultwarden, Bitwarden server API-ஐ Rust மொழியில் மீண்டும் உருவாக்கியுள்ளது. இது bitwarden.com பயன்படுத்தும் அதே protocol-ஐப் பயன்படுத்துவதால், அனைத்து அதிகாரப்பூர்வ client-களும் எந்த மாற்றமும் இன்றி இதனுடன் வேலை செய்யும். ஆனால், அதிகாரப்பூர்வ stack-ஐப் போலன்றி, இது சுமார் 100 MB RAM-ல் இயங்கிவிடும்.

இதன் நிறுவல் என்பது ஒரு டஜன் வரிகளைக் கொண்ட Compose கோப்பு மட்டுமே. இதில் முக்கியமானவை மற்றும் அடிக்கடி சிக்கல்களைத் தரக்கூடியவை மூன்று விஷயங்கள்: web vault-ஐத் திறக்கும் முன்பே TLS சான்றிதழ் தயாராக இருக்க வேண்டும்; உங்கள் கணக்கை உருவாக்கியவுடன் public signups வசதியை உடனடியாக முடக்க வேண்டும்; data volume-ஐத் தொடர்ந்து backup எடுத்து, அதை அவ்வப்போது restore செய்து சோதிக்க வேண்டும். ஏனெனில், அந்த ஒரு directory-ல் தான் உங்கள் அனைத்து கடவுச்சொற்களும் உள்ளன.

Prerequisites and the honest gotchas

  • A VPS with Docker Engine and the Compose plugin, on a fresh Ubuntu 24.04 KVM box with root or sudo. 512 MB of RAM is genuinely enough; 1 GB is comfortable. This is one of the lightest things you can run, it sits near the top of the shortlist of services worth self-hosting. Size the box for whatever else shares it, though: putting a self-hosted photo library like PhotoPrism or Immich on the same VPS pushes your RAM floor into the gigabytes, while Vaultwarden barely moves it. The same arithmetic applies to media front ends you bolt on later, since dressing a Jellyfin library up as a walkable 90s rental store means another always-on container plus transcoding headroom on the same budget.
  • A domain with an A record (and AAAA if you have IPv6) pointing vault.example.com at the VPS. The TLS certificate is issued for this exact name, so DNS must resolve before you start.
  • Ports 80 and 443 open to the internet, terminated by your reverse proxy, never by Vaultwarden directly. Port 80 is used only for the ACME certificate challenge and an HTTP-to-HTTPS redirect.
  • The biggest gotcha up front: the Bitwarden clients refuse to talk to a server that is not HTTPS. There is no "test it over http first", that path does not work, for a concrete reason covered next.

அதிகாரப்பூர்வ Bitwarden stack-க்கு பதிலாக ஏன் Vaultwarden-ஐ தேர்ந்தெடுக்க வேண்டும்

ஒரே மாதிரியான clients, ஆனால் மிகக்குறைந்த resource பயன்பாடு. அதிகாரப்பூர்வ Bitwarden self-hosted பதிப்பு பல containers-களின் தொகுப்பாக (MSSQL, Nginx, Identity, Api, Admin மற்றும் பல) வருகிறது, இதற்கு சுமார் 2 GB RAM தேவைப்படுகிறது. Vaultwarden என்பது ஒரே ஒரு binary கோப்பு மட்டுமே; இது இயல்பாகவே SQLite database-ல் தரவுகளைச் சேமிக்கிறது மற்றும் சில பத்து megabytes RAM-ல் இயங்கக்கூடியது. ஒரு தனிநபர், குடும்பம் அல்லது சிறிய குழுவிற்கு இதுவே சிறந்த தேர்வாகும். இது Bitwarden API-ஐ அப்படியே பின்பற்றுவதால், உங்கள் தரவுகளை இதற்கும் bitwarden.com-க்கும் இடையே எளிதாக மாற்றிக்கொள்ள முடியும்.

இதில் நீங்கள் இழப்பது enterprise வசதிகளை மட்டுமே: SCIM provisioning வசதி இல்லை (இருப்பினும் 1.35.0 பதிப்பில் சோதனை முறையில் OpenID Connect SSO சேர்க்கப்பட்டுள்ளது). மேலும், நீங்களே இதை நிர்வகிப்பதால், patching, HTTPS மற்றும் backups ஆகியவற்றைச் செய்வது உங்கள் பொறுப்பாகும். இந்த வழிகாட்டி அந்த மூன்று பணிகளைப் பற்றியது.

HTTPS ஏன் கட்டாயமானது

Bitwarden web vault மற்றும் browser extensions ஆகியவை Web Crypto API (window.crypto.subtle)-ஐப் பயன்படுத்தி browser-லேயே உங்கள் encryption keys-ஐ உருவாக்குகின்றன. Browser-கள் 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')

பக்கம் இயங்காமல் நின்றுவிடும் அல்லது பொதுவான 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-ஐ அமைக்க வேண்டும். ஒருமுறை கூட http வழியாக vault-ஐத் திறக்கக்கூடாது, விரைவான சரிபார்ப்பிற்குக்கூட இது பொருந்தாது.

படி 1, DNS மற்றும் reverse proxy (முதலில் TLS)

உங்கள் VPS-ஐ நோக்கி record-ஐ point செய்து, அது சரியான முகவரிக்கு resolve ஆகிறதா என்பதை உறுதிப்படுத்தவும்:

dig +short vault.example.com

அது அச்சிடும் வரி உங்கள் VPS IP-ஆக இருக்க வேண்டும். அது காலியாகவோ அல்லது தவறாகவோ இருந்தால், DNS-ஐச் சரிசெய்து TTL முடியும் வரை காத்திருக்கவும்; resolve ஆகாத பெயருக்கு certificate வழங்குவது தோல்வியடையும்.

HTTPS front end-க்காக இந்த வழிகாட்டி Traefik-ஐப் பயன்படுத்துகிறது. இது Let's Encrypt certificates-ஐத் தானாகவே வழங்கி புதுப்பிக்கும் மற்றும் Compose-ல் நேரடியாகப் பொருந்தும். நீங்கள் ஏற்கனவே இதைப் பயன்படுத்தவில்லை என்றால், முதலில் Traefik reverse proxy மற்றும் தானியங்கி TLS அமைப்பு-ஐப் பின்பற்றவும்; இது ஒரு external Docker network-ஐ (கீழே உள்ள proxy) மற்றும் ACME resolver-ஐ (letsencrypt) உருவாக்கும், அதனுடன் Vaultwarden service இணையும். கையால் வழங்கப்பட்ட certificate கொண்ட சாதாரண nginx, Vaultwarden-ன் பக்கத்தில் அதேபோலவே செயல்படும்.

Traefik-க்கு பதிலாக nginx மற்றும் Certbot-ஐ விரும்புகிறீர்களா? Vaultwarden-ஐ 127.0.0.1:8080-ல் வைக்கவும் (service-ல் ports: ["127.0.0.1:8080:80"]-ஐச் சேர்த்து, Traefik labels-ஐ நீக்கவும்), பின்னர் ஒரு certificate-ஐ வழங்கி அதற்கு proxy செய்யவும். Certificate பகுதி Certbot மற்றும் nginx மூலம் Let's Encrypt certificates வழங்குதல்-ல் விவரிக்கப்பட்டுள்ளது. 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 எது முன்னால் இருந்தாலும், இந்த வழிகாட்டியில் உள்ள மற்ற அனைத்தும் ஒரே மாதிரியானவை.

படி 2, Compose கோப்பு

முதலில் project directory-ஐ உருவாக்கவும். இந்த வழிகாட்டி /opt/vaultwarden-ஐப் பயன்படுத்துகிறது. இது Compose project பெயரையும், அதன் விளைவாக data volume-ஐ vaultwarden_vw-data என்றும் கணிக்கக்கூடியதாக மாற்றுகிறது; கீழே உள்ள Fail2ban மற்றும் backup செயல்பாடுகள் அந்த குறிப்பிட்ட பெயரையே சார்ந்துள்ளன.

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

அந்த directory-க்குள் admin secret மற்றும் Compose கோப்பிற்காக ஒரு .env-ஐ உருவாக்கவும்.

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

openssl rand -base64 48 மூலம் அந்த token-ஐ உருவாக்கி உள்ளே பதிவிடவும். (இதன் வலுவான 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-ஐ வெளியிடுவதுதான், மக்கள் தவறுதலாக http வழியாக vault-ஐ வழங்கக் காரணமாகிறது. மேலும் DOMAIN என்பது முழுமையான public HTTPS URL-ஆக இருக்க வேண்டும்: இது attachment links, WebAuthn 2FA மற்றும் notifications endpoint ஆகியவற்றில் உட்பொதிக்கப்பட்டுள்ளது. எனவே, தவறான அல்லது http மதிப்பு இருந்தால், தளம் சரியாகத் தெரிந்தாலும் இந்த வசதிகள் வேலை செய்யாது. latest tag என்பது வழக்கமான "never-latest" விதிக்கு ஒரு திட்டமிட்ட விதிவிலக்காகும். Vaultwarden அதன் stable releases-ஐ ஒரே rolling image-ஆக வெளியிடுகிறது, :testing என்பது தனி pre-release channel ஆகும். எனவே, கவனமாக update செய்யவும் மற்றும் pull செய்வதற்கு முன் release notes-ஐப் பார்க்கவும். இருப்பினும், இந்த விதிவிலக்கு குறுகியது: நீண்ட காலம் இயங்கும் பெரும்பாலான containers-ஐ ஒரு குறிப்பிட்ட tag-ல் வைத்திருப்பதே சிறந்தது. இதுதான் ஒரே VPS-ல் இயங்கும் always-on agent reboot மற்றும் pull-களுக்குப் பிறகும் சீராக இயங்க உதவுகிறது.

இதை இயக்கி log-ஐக் கவனிக்கவும்:

docker compose up -d
docker compose logs -f vaultwarden

சரியான தொடக்கம் Rocket has launched from http://0.0.0.0:80 போன்ற ஒரு வரியுடன் முடிவடையும். Traefik certificate-ஐப் பெற சில நொடிகள் அவகாசம் அளித்துவிட்டு, https://vault.example.com-ஐத் திறக்கவும். இப்போது நீங்கள் Bitwarden web vault-ஐச் சரியான padlock குறியீட்டுடன், certificate எச்சரிக்கை ஏதுமின்றிப் பார்க்கலாம்.

படி 3, வலுவான ADMIN_TOKEN, மற்றும் $$ சிக்கல்

ADMIN_TOKEN என்பது /admin-ஐப் பாதுகாக்கிறது. இது உங்கள் instance-ல் உள்ள ஒவ்வொரு பயனர் மற்றும் அமைப்பையும் வாசிக்கக்கூடிய ஒரு panel ஆகும், எனவே இதை 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

இது இரண்டு முறை கேட்கும் மற்றும் $argon2id$v=19$... எனத் தொடங்கும் ஒரு string-ஐ வெளியிடும். இங்கேதான் பலருக்கு ஒரு மணிநேரம் வீணாகும் சிக்கல் உள்ளது: Docker Compose $-ஐ variable interpolation-ஆகக் கருதுகிறது. எனவே, நீங்கள் hash-ஐ Compose file-ல் ஒட்டும்போது (paste), ஒவ்வொரு $-ஐயும் $$ என மாற்ற வேண்டும். இதை 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 கோப்பைத் திருத்தவும்:

      SIGNUPS_ALLOWED: "false"

docker compose up -d மூலம் மீண்டும் நடைமுறைப்படுத்தவும். இதைத் தள்ளிப்போடக்கூடிய பாதுகாப்பு நடவடிக்கை என்று கருத வேண்டாம். இதைத் திறந்து வைத்தால், உங்கள் URL-ஐக் கண்டறியும் எவரும் (crawlers உட்பட) உங்கள் server-ல் கணக்கை உருவாக்க முடியும். அவர்களால் உங்கள் vault-ஐப் படிக்க முடியாது, ஆனால் அவர்கள் உங்கள் server-ன் வளங்களைப் பயன்படுத்துவார்கள் மற்றும் உங்கள் தனிப்பட்ட instance-ஐ ஒரு பொதுச் சேவையாக மாற்றிவிடுவார்கள். நீங்கள் இதைத் திறந்து வைத்துள்ளீர்கள் என்பதற்கான அறிகுறி: /admin கட்டளையானது நீங்கள் உருவாக்காத கணக்குகளைப் பட்டியலிடும்.

பின்னர் குடும்பத்தினர் அல்லது குழு உறுப்பினர்களைச் சேர்க்க, பொது signups-ஐ மீண்டும் திறக்க வேண்டிய அவசியமில்லை; /admin-ல் உள்ள Invite User பொத்தானைப் பயன்படுத்தவும். அந்தப் பாதையில் அழைப்பு பெறுபவர் தனது இணைப்பைப் பெற SMTP கட்டமைக்கப்பட்டிருக்க வேண்டும்.

படி 5, /admin பக்கத்தை அணுகுதல்

https://vault.example.com/admin முகவரிக்குச் சென்று, plaintext admin token-ஐ உள்ளிடவும் (இது நீங்கள் உருவாக்கிய random string அல்லது நீங்கள் hash செய்த கடவுச்சொல்; hash-ஐ உள்ளிட வேண்டாம்). உள்ளே சென்றதும், நீங்கள் பயனர்களைப் பட்டியலிடலாம், அமைப்புகளை மாற்றலாம், சோதனை மின்னஞ்சல் அனுப்பலாம் மற்றும் database snapshot எடுக்கலாம்.

பக்கம் 404 Not Found பிழையைக் காட்டினால், ADMIN_TOKEN காலியாகவோ அல்லது அமைக்கப்படாமலோ உள்ளது என்று அர்த்தம். இது admin panel-ஐ முழுமையாக முடக்கிவிடும்; உங்களுக்கு அது தேவையில்லை என்றால் இது ஒரு சரியான அமைப்பாகும். பக்கம் ஏற்றப்பட்டு, ஆனால் உங்கள் token நிராகரிக்கப்பட்டால், கீழே உள்ள தோல்விப் பட்டியலில் உள்ள $$ escaping சிக்கலைப் பார்க்கவும். Token-ஐ மறந்துவிட்டீர்களா? அதை மீட்டெடுக்க வழி இல்லை; .env கோப்பையோ அல்லது Compose கோப்பையோ திருத்தி, புதிய token-ஐ அமைத்து, பின் docker compose up -d செய்யவும்.

படி 6, Bitwarden clients-ஐ இணைத்தல்

அனைத்து அதிகாரப்பூர்வ client-களும் self-hosted server-உடன் இணைய முடியும். எனவே, Bitwarden desktop, mobile அல்லது browser client-களை வழக்கமான store-களில் இருந்து நிறுவவும்; இதற்கு பிரத்யேகமான Vaultwarden build தேவையில்லை.

Login திரையில் உள்ள settings gear icon-ஐ கிளிக் செய்யவும் (இது Self-hosted அல்லது Region → Self-hosted என்று குறிப்பிடப்பட்டிருக்கும்). Server URL என்பதில் https://vault.example.com என்பதை உள்ளிட்டு save செய்யவும். பின்னர் நீங்கள் பதிவு செய்த email மற்றும் master password கொண்டு login செய்யவும்; client உடனடியாக இணைக்கப்பட்டு, credentials-ஐ சேமிக்க அல்லது நிரப்ப அனுமதி கேட்கும்.

ஒரு client This is not a recognized Bitwarden server. You may need to check with your provider or update your server. என்ற பிழையைக் காட்டினால், URL தவறாக இருக்கலாம், http பயன்படுத்தப்பட்டிருக்கலாம் அல்லது certificate நம்பகத்தன்மையற்றதாக இருக்கலாம். முதலில் https://vault.example.com ஒரு browser-ல் சரியாகத் திறக்கிறதா என்பதைச் சரிபார்க்கவும். பிற சாதனங்களில் update தாமதமானால், அது WebSocket push தொடர்பான சிக்கலாக இருக்கலாம்; இது கீழே விளக்கப்பட்டுள்ளது.

படி 7, login endpoint-க்கான Fail2ban jail

Vaultwarden ஒவ்வொரு தோல்வியுற்ற login முயற்சியையும் LOG_FILE-ல் குறிப்பிடப்பட்டுள்ள கோப்பில் பதிவு செய்கிறது; இது brute-force தாக்குதல்களைத் தடுக்கத் தேவையான ஒன்றாகும். நீங்கள் ஏற்கனவே Fail2ban பயன்படுத்தவில்லை என்றால், அதன் நிறுவல் மற்றும் அடிப்படை விவரங்களை Fail2ban SSH பாதுகாப்பு வழிகாட்டி-ல் காணலாம்; இங்கே நாம் vault-க்காக ஒரு jail-ஐச் சேர்க்கிறோம்.

முதலில், host-ல் named volume எங்கே உள்ளது என்பதைக் கண்டறியவும், அப்போதுதான் Fail2ban-ஆல் log-ஐ வாசிக்க முடியும்:

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

இது /var/lib/docker/volumes/vaultwarden_vw-data/_data போன்ற ஒரு வெளியீட்டைக் காட்டும்; 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-ன் முகவரி தெரிந்தால், Vaultwarden அந்த proxy-யையே ban செய்கிறது என்று அர்த்தம். எனவே, உங்கள் proxy அனுப்பும் header-க்கு ஏற்ப IP_HEADER-ஐ அமைக்கவும் (Traefik-க்கு X-Forwarded-For, மேலே உள்ள nginx block-க்கு X-Real-IP, Cloudflare-க்கு பின்னால் இருந்தால் CF-Connecting-IP). இரண்டாவதாக, சரியான iptables chain உங்கள் proxy-ஐப் பொறுத்தது: Traefik ஒரு container-ஆக இயங்கி ports-ஐ வெளியிட்டால், traffic Docker-ன் FORWARD பாதை வழியாகச் செல்லும், எனவே ban மேலே குறிப்பிட்டது போல DOCKER-USER-ல் இருக்க வேண்டும். ஆனால், நீங்கள் படி 1-ல் host-nginx விருப்பத்தைத் தேர்ந்தெடுத்திருந்தால், இணைப்புகள் host-ன் INPUT chain-ல் உள்ள nginx-ல் முடிவடையும், அப்போது DOCKER-USER ban அவற்றை கவனிக்காது. அந்தச் சூழலில் chain = DOCKER-USER வரியை நீக்கிவிடவும், அப்போது Fail2ban இயல்புநிலையான INPUT chain-ஐப் பயன்படுத்தும். மூன்றாவதாக, port-அடிப்படையிலான இயல்புநிலைக்குப் பதிலாக banaction = iptables-allports-ஐப் பயன்படுத்தவும்; இந்த jail எந்த port-ஐயும் வரையறுக்கவில்லை. DOCKER-USER-ல் உள்ள all-ports ban, அந்தத் தாக்குதல் நடத்துபவரை box-ல் உள்ள அனைத்து சேவைகளிலிருந்தும் முழுமையாகத் தடுக்கும்.

படி 8, vault-ஐ பேக்கப் எடுத்து, பின் அதை மீட்டமைத்தல்

vw-data volume தான் உங்கள் password manager. இதில் db.sqlite3 (ஒவ்வொரு entry-யும்), attachments/ மற்றும் sends/ கோப்பகங்கள், login sessions-ஐ sign செய்யும் rsa_key.* கோப்புகள், மற்றும் admin panel-லிருந்து வரும் config.json ஆகியவை உள்ளன. இவற்றில் எதையாவது விடுபடும் பேக்கப், தேவைப்படும்போது தோல்வியடையும்.

Vaultwarden எழுதிக்கொண்டிருக்கும்போது db.sqlite3-ஐ நகலெடுத்தால், அது பாதியிலேயே எழுதப்பட்ட, சிதைந்த கோப்பாக மாறக்கூடும். எனவே, ஒரு cold snapshot எடுக்கவும்; இதற்கு சில நொடிகள் மட்டுமே downtime தேவைப்படும்:

#!/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-ஐ server-க்கு வெளியே நகர்த்தவும். நீங்கள் பாதுகாக்கும் server-லேயே இருக்கும் பேக்கப், உண்மையான பேக்கப் ஆகாது. இதைச் சரியாகச் செய்ய மற்றொரு server அல்லது object storage-க்கு nightly restic backup எடுப்பதே சிறந்த வழி. இது archive-ஐ encrypt செய்து, மீண்டும் மீண்டும் வரும் snapshots-ஐ deduplicate செய்யும். Admin panel-ல் உள்ள Backup Database பொத்தான் SQLite கோப்பை மட்டும் எடுக்க உதவும் ஒரு hot snapshot ஆகும், ஆனால் அது attachments மற்றும் keys-ஐத் தவிர்த்துவிடும்.

இப்போது, ஒரு நம்பிக்கையான பேக்கப்பிற்கும் உண்மையான பேக்கப்பிற்கும் உள்ள வித்தியாசத்தை அறிய, அதை ஒருமுறை மீட்டமைத்துச் சரிபார்க்கவும்:

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 கொண்டு login செய்து, உங்கள் entries இருப்பதை உறுதிப்படுத்தவும்: அவை இருந்தால், உங்கள் database, RSA keys மற்றும் master password அனைத்தும் சரியாகச் செயல்படுகின்றன என்று அர்த்தம். புதிய VPS-ல் உங்களால் சில நிமிடங்களில் மீண்டும் கட்டமைக்க முடியும். Ctrl-C மூலம் container-ஐ நிறுத்திவிட்டு /tmp/vw-restore-ஐ நீக்கவும். இணையத்தில் வெளிப்படக்கூடாத எந்தவொரு admin UI-க்கும் இந்த tunnel முறையையே பயன்படுத்தவும்; இதே முறையில்தான் நீங்கள் port 5173-ல் உள்ள self-hosted open-kritt security scanner-ஐயும் அணுக முடியும்.

தோல்வி முறைகள் மற்றும் நீங்கள் காணும் செய்திகள்

browser console-ல் Cannot read properties of undefined (reading 'importKey'). Vault-ஆனது http வழியாக ஏற்றப்பட்டது, எனவே crypto.subtle வரையறுக்கப்படவில்லை; இதை https:// வழியாக மட்டுமே அணுகவும் மற்றும் proxy-ல் HTTP-to-HTTPS redirect-ஐச் சேர்க்கவும்.

client-ல் This is not a recognized Bitwarden server.... Server URL http-ஆக உள்ளது, தவறாகத் தட்டச்சு செய்யப்பட்டுள்ளது அல்லது certificate நம்பகத்தன்மையற்றது; https://vault.example.com-ல் சரியான padlock குறியீடு உள்ளதா என்பதை உறுதிப்படுத்தவும், பின்னர் client-ன் self-hosted அமைப்புகளில் அதை மீண்டும் உள்ளிடவும்.

/admin சரியான கடவுச்சொல்லை நிராகரிக்கிறது. Argon2 hash-ன் escaping விடுபட்டுள்ளது, Compose-ல் ஒவ்வொரு $-ம் $$-ஆக இருக்க வேண்டும், அல்லது நீங்கள் plaintext-க்கு பதிலாக hash-ஐ உள்ளிட்டுள்ளீர்கள்.

சாதனங்களுக்கு இடையிலான மெதுவான sync; console-ல் WebSocket connection to 'wss://vault.example.com/notifications/hub' failed காட்டுகிறது. Proxy ஆனது Upgrade/Connection headers-ஐ forward செய்யவில்லை; Traefik இதைத் தானாகவே செய்கிறது, nginx-க்கு Step 1-ல் உள்ள இரண்டு upgrade வரிகள் தேவை. Vault தொடர்ந்து இயங்கும், ஆனால் திறக்கும்போது மட்டுமே sync ஆகும். v1.31.0 முதல் பழைய பிரத்யேக port 3012 நீக்கப்பட்டுவிட்டது, எனவே தனி WebSocket route தேவையில்லை.

Fail2ban ஒரு ban-ஐப் பதிவு செய்கிறது ஆனால் தாக்குபவர் தொடர்ந்து இணைக்கிறார். IP_HEADER தவறாக இருப்பதால் அது 127.0.0.1-ஐ ban செய்கிறது, அல்லது ban தவறான iptables chain-ல் உள்ளது, chain = DOCKER-USER மற்றும் banaction = iptables-allports-ஐ அமைக்கவும்.

மேம்படுத்தல்கள் (Upgrades)

புதிய image-ஐ pull செய்து, container-ஐ மீண்டும் உருவாக்கவும்; named volume மற்றும் உங்கள் தரவுகள் அனைத்தும் அப்படியே இருக்கும்:

docker compose pull
docker compose up -d

Vaultwarden அடிக்கடி புதிய releases-களை வெளியிடுகிறது. சில releases-களில் migration குறிப்புகள் இருப்பதால், ஒரு குறிப்பிட்ட patch version-ஐ மட்டும் பயன்படுத்தாமல், project-ன் release notes-ஐத் தொடர்ந்து கவனிக்கவும். எந்தவொரு பெரிய மாற்றத்திற்கும் (major bump) முன் புதிய backup ஒன்றை எடுக்கவும்; ஒரு புதிய volume-ல் tarball-ஐ restore செய்வதன் மூலம் நீங்கள் பழைய நிலைக்குத் திரும்ப (roll back) முடியும்.

FAQ

Vaultwarden மற்றும் Bitwarden இரண்டும் ஒன்றா?

இல்லை, இது Bitwarden-ன் அதிகாரப்பூர்வமான server அல்ல; இது அதனுடன் இணக்கமான ஒரு சுதந்திரமான server ஆகும். Vaultwarden, Bitwarden server API-ஐ Rust மொழியில் மீண்டும் உருவாக்கியுள்ளது. எனவே, அதிகாரப்பூர்வ desktop, mobile, browser மற்றும் CLI clients அனைத்தும் இதில் வேலை செய்யும். அதிகாரப்பூர்வ stack-ஐ விட மிகக் குறைந்த வளங்களையே இது பயன்படுத்தும். Vault வடிவம் ஒன்றாக இருப்பதால், தரவுகளை export மற்றும் import செய்வதன் மூலம் நீங்கள் எந்தப் பக்கமும் எளிதாக மாறலாம்.

எனக்கு HTTPS கட்டாயமா, அல்லது LAN-ல் http மூலம் இயக்கலாமா?

localhost சோதனை தவிர மற்ற அனைத்து பயன்பாடுகளுக்கும் HTTPS கட்டாயம். Bitwarden web vault மற்றும் extensions ஆகியவை browser-ன் Web Crypto API-ஐப் பயன்படுத்துகின்றன. இது பாதுகாப்பான சூழலில் மட்டுமே இயங்கும் என்பதால், சாதாரண http-ல் client Cannot read properties of undefined பிழையைக் காட்டும், உங்களால் login செய்ய முடியாது. http://localhost என்ற முகவரி மட்டுமே http-ல் வேலை செய்யும்; இதனால்தான் Step 8-ல் உள்ள restore சோதனைக்கு SSH tunnel பயன்படுத்தப்படுகிறது.

எனது server-ல் அந்நியர்கள் பதிவு செய்வதை எப்படித் தடுப்பது?

உங்கள் கணக்கை உருவாக்கிய உடனேயே, Compose file-ல் SIGNUPS_ALLOWED: "false"-ஐ அமைத்து, docker compose up -d கட்டளையை இயக்கவும். அதன் பிறகு, /admin-ல் உள்ள Invite User பொத்தானைப் பயன்படுத்தி புதிய நபர்களைச் சேர்க்கவும். இதற்கு SMTP சரியாக அமைக்கப்பட்டிருக்க வேண்டும், அப்போதுதான் அவர்களுக்கு அழைப்பு இணைப்பு (invitation link) செல்லும். எதிர்பாராத கணக்குகள் ஏதும் உருவாகவில்லை என்பதை உறுதிப்படுத்த, அவ்வப்போது admin user பட்டியலைச் சரிபார்க்கவும்.

எனது Vaultwarden vault-ஐ எப்படி backup எடுப்பது?

Container-ஐச் சிறிது நேரம் நிறுத்திவிட்டு, முழு vw-data volume, db.sqlite3, attachments/, sends/, config.json மற்றும் rsa_key.* கோப்புகளை archive செய்யவும். பின்னர் அந்த archive-ஐ server-லிருந்து வெளியே நகர்த்தவும்; இதை nightly cron மூலம் செய்வது சிறந்தது. Server இயங்கிக்கொண்டிருக்கும்போது SQLite கோப்பை நகலெடுப்பது தரவு சிதைவுக்கு (corrupt) வழிவகுக்கும், எனவே server-ஐ நிறுத்திவிட்டு (cold backup) எடுக்கவும். மிக முக்கியமாக, ஒருமுறை தற்காலிக container-ல் அதை restore செய்து login செய்து பார்க்கவும்; அப்போதுதான் உங்கள் backup உண்மையானது மற்றும் நம்பகமானது என்பது உறுதிப்படும்.

கடவுச்சொற்களைத் தாங்களே host செய்வது பாதுகாப்பானதா?

ஆம், இந்த வழிகாட்டியில் உள்ள மூன்று விஷயங்களைச் சரியாகச் செய்தால் இது பாதுகாப்பானது: முறையான HTTPS, signups முடக்கம் மற்றும் வலுவான admin token, மற்றும் சோதிக்கப்பட்ட backups. உங்கள் vault, master password மூலம் client-side-லேயே encrypt செய்யப்படுகிறது. எனவே, server-ல் உங்கள் கடவுச்சொற்கள் தெளிவாகத் தெரியாது; திருடப்பட்ட db.sqlite3 கோப்பு கூட master password இல்லாமல் பயனற்றது. இதில் உள்ள சவால் என்னவென்றால், patching மற்றும் backups உங்கள் பொறுப்பு. இதனால்தான் Fail2ban மற்றும் restore முறைகள் இங்கு கட்டாயமாக்கப்பட்டுள்ளன. இவை அமைக்கப்பட்ட பிறகு, self-hosted vault எங்கு தாக்கப்படலாம் என்பது குறித்த விரிவான பார்வை அடுத்த பயனுள்ள படியாகும். ஏனெனில், தரவுகள் client-லேயே encrypt செய்யப்படுவதால், admin token மற்றும் backup archive ஆகியவற்றை மட்டுமே நீங்கள் பாதுகாக்க வேண்டியிருக்கும்.