VPS-ல் Vaultwarden: கடவுச்சொற்களை self-host செய்வது
Vaultwarden மற்றும் Docker கொண்டு VPS-ல் Bitwarden-compatible கடவுச்சொல் மேலாளரை self-host செய்ய முழு வழிகாட்டி. HTTPS, admin token, Fail2ban, backup சோதனை அனைத்தும் உள்ளடக்கம்.
நீங்கள் உருவாக்குவது என்ன
நீங்களே முழுமையாக வைத்திருக்கும் ஒரு கடவுச்சொல் மேலாளர்: HTTPS இணைப்பை முடிக்கும் ஒரு reverse proxy க்குப் பின்னால், ஒரு சிறிய container இல் இயங்கும் Vaultwarden. உங்கள் தொலைபேசி, மடிக்கணினி மற்றும் உலாவியில் உள்ள அதிகாரப்பூர்வ Bitwarden செயலிகள் இதனோடு இணைக்கப்படும். Vaultwarden, Bitwarden server API ஐ Rust இல் மீண்டும் உருவாக்குகிறது. இது bitwarden.com பயன்படுத்தும் அதே நெறிமுறையைப் பயன்படுத்துவதால், ஒவ்வொரு அதிகாரப்பூர்வ client உம் மாற்றமின்றி இதனுடன் வேலை செய்யும். ஆனால், பல container கொண்ட அதிகாரப்பூர்வ stack க்குப் பதிலாக, இது சுமார் 100 MB RAM இல் இயங்கும்.
நிறுவல் சுமார் ஒரு டஜன் Compose வரிகளை மட்டுமே கொண்டது. உண்மையில் முக்கியமான — மேலும் பழுதடையக்கூடிய — மூன்று விஷயங்கள் இவை: நீங்கள் web vault ஐ திறக்கும் முன்பே TLS கட்டமைக்கப்பட்டிருக்க வேண்டும். உங்கள் சொந்த கணக்கு உருவாக்கப்பட்டதும் பொதுப் பதிவுகள் மூடப்பட வேண்டும். தரவு volume கட்டாயம் காப்புப் பிரதி எடுக்கப்பட்டு, மீட்டெடுப்பு சோதனை செய்யப்பட வேண்டும். ஏனெனில் அந்த ஒரு directory தான் உங்கள் கட்டுப்பாட்டில் உள்ள ஒவ்வொரு கடவுச்சொல்லையும் கொண்டிருக்கிறது.
முன்தேவைகள் மற்றும் நேர்மையான சிக்கல்கள்
- root அல்லது sudo அணுகலுடன், புதிய Ubuntu 24.04 KVM பெட்டியில் Docker Engine மற்றும் Compose plugin கொண்ட ஒரு VPS. 512 MB RAM உண்மையில் போதுமானது; 1 GB வசதியானது. இது நீங்கள் இயக்கக்கூடிய மிக இலகுவான சேவைகளில் ஒன்றாகும் — இது சுயமாக ஹோஸ்ட் செய்வதற்குரிய சேவைகளின் சுருக்கப்பட்ட பட்டியலில் முதலிடத்திற்கு அருகில் உள்ளது.
- VPS-ஐ சுட்டிக்காட்ட,
vault.example.com-இல் ஒரு A record (மற்றும் IPv6 இருந்தால் AAAA) கொண்ட ஒரு domain. TLS சான்றிதழ் இந்த சரியான பெயருக்காக வழங்கப்படுகிறது, எனவே நீங்கள் தொடங்குவதற்கு முன்பு DNS தீர்க்கப்பட வேண்டும். - இணையத்திற்கு திறந்த 80 மற்றும் 443 போர்ட்டுகள், உங்கள் reverse proxy மூலம் முடிக்கப்படுகிறது — ஒருபோதும் Vaultwarden மூலம் நேரடியாக அல்ல. 80 போர்ட் ACME சான்றிதழ் சவாலுக்கும் HTTP-இலிருந்து HTTPS-க்கு திருப்பியனுப்புவதற்கும் மட்டுமே பயன்படுத்தப்படுகிறது.
- முன்னதாகவே இருக்கும் பெரிய சிக்கல்: HTTPS அல்லாத சர்வருடன் பேச Bitwarden கிளையன்டுகள் மறுக்கின்றன. "முதலில் http மூலம் சோதிக்கவும்" என்பது இல்லை — அந்த பாதை வேலை செய்யாது, அடுத்ததாக கூறப்பட்டுள்ள ஒரு குறிப்பிட்ட காரணத்தால்.
Vaultwarden ஏன், அதிகாரப்பூர்வ Bitwarden stack இல்லை
ஒரே clients. எடையில் ஒரு பகுதி மட்டுமே. அதிகாரப்பூர்வ self-hosted Bitwarden பல containers இன் தொகுப்பாக வருகிறது (MSSQL, Nginx, Identity, Api, Admin மற்றும் பல). இதற்கு தோராயமாக 2 GB RAM தேவை. Vaultwarden ஒரு single binary. இயல்பாக எல்லாவற்றையும் SQLite database இல் சேமிக்கிறது. ஓய்வில் சில பத்து megabytes மட்டுமே பயன்படுத்துகிறது. ஒருவருக்கு, ஒரு குடும்பத்திற்கு அல்லது சிறிய குழுவிற்கு இதுதான் சரியான தேர்வு. Bitwarden API ஐ நம்பகத்தன்மையுடன் செயல்படுத்துவதால், உங்கள் தரவு இதற்கும் bitwarden.com க்கும் இடையே எளிதில் மாற்றக்கூடியதாக இருக்கும்.
நீங்கள் இழப்பது enterprise அம்சங்களின் பெரும்பகுதி: SCIM provisioning கிடையாது (ஆனால் சோதனை நிலை OpenID Connect SSO 1.35.0 இல் வந்தது). நீங்கள்தான் operator. எனவே patching, HTTPS மற்றும் backups உங்கள் பொறுப்பு. இந்த வழிகாட்டி இந்த மூன்று வேலைகளைப் பற்றியது.
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-ஐ அந்த DNS ரெக்கார்டு சுட்டிக்கொள்ளட்டும். அது சரியான முகவரிக்கு தீர்க்கப்படுகிறதா என்பதை உறுதிப்படுத்தவும்:
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 மற்றும் அறிவிப்புகள் endpoint ஆகியவற்றில் உட்பொதிக்கப்படுகிறது, ஆகையால் தவறான அல்லது http மதிப்பு தளம் ஏற்றப்படும்போதும் அவற்றைச் செயலிழக்கச் செய்கிறது. latest குறிச்சொல் வழக்கமான never-latest விதிக்கான வேண்டுமென்றே எடுக்கப்பட்ட விதிவிலக்கு — Vaultwarden அதன் நிலையான வெளியீடுகளை ஒரு ஒற்றை rolling இமேஜாக வெளியிடுகிறது, :testing தனியான pre-release சேனலாக உள்ளது — எனவே வேண்டுமென்றே புதுப்பிக்கவும், pull செய்வதற்கு முன் வெளியீட்டுக் குறிப்புகளை உறுத்துப் பார்க்கவும்.
அதை எழுப்பி பதிவைக் கவனிக்கவும்:
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 உங்கள் instance-ல் உள்ள ஒவ்வொரு பயனர் மற்றும் அமைப்பையும் படிக்கக்கூடிய panel-ஆன /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இது இரண்டு முறை கேட்கும். மேலும் $argon2id$v=19$... உடன் தொடங்கும் ஒரு string-ஐ அச்சிடும். இதுதான் மக்களுக்கு ஒரு மணிநேரத்தை விழச் செய்யும் தொலைவு: Docker Compose, $-ஐ variable interpolation ஆக கருதுகிறது. எனவே hash-ஐ Compose file-ல் ஒட்டும்போது ஒவ்வொரு $-ஐயும் $$-ஆக இரட்டிப்பாக்க வேண்டும். இதை .env வழியாக அனுப்பாமல் நேரடியாக environment:-க்கு கீழே வைக்கவும். மேலும் இதை 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 ஐக் கிளிக் செய்யவும். உங்கள் மின்னஞ்சல் மற்றும் ஒரு வலுவான முதன்மை கடவுச்சொல்லைக் கொண்டு பதிவுசெய்யவும். இந்த முதன்மை கடவுச்சொல்லை மீட்டெடுக்க முடியாது. மீளமைப்பு ஏதும் இல்லை. எனவே, முதலில் அதை நிலையான இடத்தில் சேமிக்கவும்.
இப்போது கதவை மூடவும். Compose கோப்பைத் திருத்தி பதிவுகளை முடக்கவும்:
SIGNUPS_ALLOWED: "false"docker compose up -d உடன் மீண்டும் பயன்படுத்தவும். இது ஒரு பாதுகாப்பு நடவடிக்கை; இதைத் தள்ளிப்போட முடியாது. கதவு திறந்திருந்தால், URL ஐக் கண்டுபிடிப்பவர் யாரும் உங்கள் சேவையகத்தில் கணக்கை உருவாக்கலாம். ஊரடங்கு இணையத்தளங்களும் இதைக் கண்டுபிடிக்கும். அவர்களால் உங்கள் பெட்டகத்தைப் படிக்க முடியாது. ஆனால் அவர்கள் வளங்களைப் பயன்படுத்துவார்கள். உங்கள் தனிப்பட்ட நிகழ்வை ஒரு பொதுச் சேவையாக மாற்றிவிடுவார்கள். நீங்கள் பதிவைத் திறந்தே வைத்திருந்தீர்கள் என்பதற்கான அறிகுறி: /admin நீங்கள் உருவாக்காத கணக்குகளைப் பட்டியலிடும்.
பொதுப் பதிவை மீண்டும் திறக்காமல் குடும்பத்தினரையோ குழுவினரையோ பின்னர் சேர்க்க, /admin இல் உள்ள Invite User பொத்தானைப் பயன்படுத்தவும். அந்தப் பாதைக்கு SMTP உள்ளமைக்கப்பட்டிருக்க வேண்டும். அப்போதுதான் அழைக்கப்பட்டவர் தங்கள் இணைப்பைப் பெறுவார்.
படி 5 — /admin ஐ அணுகுதல்
https://vault.example.com/admin க்குச் சென்று நேரடி உரை admin token ஐ உள்ளிடவும் (அந்த சீரற்ற சரம், அல்லது நீங்கள் hash செய்த கடவுச்சொல் — hash அல்ல). உள்ளே நீங்கள் பயனர்களைப் பட்டியலிடலாம், அமைப்புகளை சரிசெய்யலாம், ஒரு சோதனை மின்னஞ்சல் அனுப்பலாம் மற்றும் ஒரு database snapshot எடுக்கலாம்.
பக்கம் 404 Not Found என வழங்கினால், ADMIN_TOKEN வெறுமையாக உள்ளது அல்லது அமைக்கப்படவில்லை; இது பேனலை முற்றிலும் முடக்குகிறது — நீங்கள் அதை ஒருபோதும் தேவைப்படாவிட்டால், இதுவே சரியான தேர்வு. அது ஏற்றப்பட்டாலும் உங்கள் token ஐ நிராகரித்தால், கீழே உள்ள தோல்வி பட்டியலில் உள்ள $$ escaping சிக்கலைப் பார்க்கவும். 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 jail
Vaultwarden ஒவ்வொரு தோல்வியுற்ற உள்நுழைவையும் LOG_FILE என்பதால் அமைக்கப்பட்ட கோப்பில் பதிவு செய்கிறது — இது ஒரு brute-force பாதுகாப்பு அமைப்புக்குத் தேவையானது அப்படியே. நீங்கள் ஏற்கனவே Fail2ban இயக்கவில்லை என்றால், நிறுவல் மற்றும் அடிப்படைகள் Fail2ban SSH பாதுகாப்பு வழிகாட்டியில் உள்ளன; இங்கே நாம் 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 அல்லது உங்கள் proxy-ன் முகவரியைக் காட்டினால், Vaultwarden அந்த proxy-ஐ தடுக்கிறது — உங்கள் proxy உண்மையில் அனுப்பும் header-க்கு IP_HEADER ஐ அமைக்கவும் (Traefik-க்கு X-Forwarded-For, மேலே உள்ள nginx block-க்கு X-Real-IP, Cloudflare-க்குப் பின்னால் CF-Connecting-IP). இரண்டாவதாக, சரியான iptables chain உங்கள் proxy-ஐப் பொறுத்தது: வெளியிடப்பட்ட port-களுடன் ஒரு container ஆக Traefik இயங்கினால், போக்குவரத்து Docker-ன் FORWARD பாதை வழியாகச் செல்கிறது, எனவே தடை மேலே உள்ளபடி DOCKER-USER இல் இருக்க வேண்டும்; ஆனால் நீங்கள் படி 1 இல் இருந்து host-nginx விருப்பத்தைத் தேர்ந்தெடுத்தீர்கள் என்றால், இணைப்புகள் ஹோஸ்டின் INPUT chain-ல் nginx-ல் முடிகின்றன மற்றும் ஒரு DOCKER-USER தடை அவற்றை ஒருபோதும் பார்க்க முடியாது — அந்த நிலையில் Fail2ban இயல்புநிலை INPUT chain-ஐப் பயன்படுத்துவதற்கு chain = DOCKER-USER வரியை நீக்கவும். மூன்றாவதாக, port அடிப்படையிலான இயல்புநிலைக்குப் பதிலாக banaction = iptables-allports ஐப் பயன்படுத்தவும் — இந்த jail எந்த port-ஐயும் வரையறுக்கவில்லை, மேலும் DOCKER-USER இல் அனைத்து port-களின் தடையும் குற்றவாளியை பெட்டியில் உள்ள ஒவ்வொரு வெளியிடப்பட்ட சேவையிலிருந்தும் சுத்தமாகத் தடுக்கிறது.
படி 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 கிடைக்கிறது. மேலும் வால்ட் இங்கே plain http வழியாக மறைநீக்கம் ஆகிறது — இது அனுமதிக்கப்படும் ஒரே இடம். உங்கள் முதன்மை கடவுச்சொல்லால் உள்நுழையவும். உங்கள் உள்ளீடுகள் இருப்பதை உறுதி செய்யவும்: அவை இருந்தால், உங்கள் தரவுத்தளம், RSA விசைகள் மற்றும் முதன்மை கடவுச்சொல் அனைத்தும் சரியாக மீட்டமைக்கப்படுகின்றன. புதிய VPS-ல் நீங்கள் சில நிமிடங்களில் மீண்டும் கட்டமைக்கலாம். Ctrl-C மூலம் கன்டெய்னரை நிறுத்தி /tmp/vw-restore-ஐ நீக்கவும்.
பிழை நிலைகள், நீங்கள் காணும் சரங்களுடன்
உலாவி கன்சோலில் Cannot read properties of undefined (reading 'importKey'). vault, http வழியாக ஏற்றப்பட்டது, எனவே crypto.subtle வரையறுக்கப்படவில்லை; அதை https:// வழியாக மட்டுமே அணுகவும், மேலும் ப்ராக்ஸியில் HTTP-இலிருந்து HTTPS-க்கு ரீடைரக்டைச் சேர்க்கவும்.
கிளையன்டில் This is not a recognized Bitwarden server.... Server URL, http ஆக உள்ளது, தவறாக தட்டச்சு செய்யப்பட்டுள்ளது, அல்லது சான்றிதழ் நம்பகமற்றது; https://vault.example.com சரியான பேட்லாக்கைக் காட்டுகிறதா என உறுதி செய்து, பின் கிளையன்டின் self-hosted அமைப்புகளில் அதை மீண்டும் உள்ளிடவும்.
/admin சரியான கடவுச்சொல்லை நிராகரிக்கிறது. Argon2 hash தப்பிக்கும் குறியீட்டை இழந்துவிட்டது — ஒவ்வொரு $-ம் Compose-ல் $$ ஆக இருக்க வேண்டும் — அல்லது நீங்கள் hash-ஐ அதன் பிரதிநிதித்துவம் செய்யும் plaintext-க்கு பதிலாக உள்ளிட்டுள்ளீர்கள்.
மெதுவான குறுக்கு-சாதன ஒத்திசைவு; கன்சோல் WebSocket connection to 'wss://vault.example.com/notifications/hub' failed-ஐ காட்டுகிறது. ப்ராக்ஸி Upgrade/Connection தலைப்புகளை அனுப்பவில்லை; Traefik இதை தானாகச் செய்கிறது, nginx-க்கு Step 1-ல் உள்ள இரண்டு upgrade வரிகள் தேவை. vault இன்னும் வேலை செய்கிறது, திறக்கும்போது மட்டுமே ஒத்திசைகிறது. 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-ஐ அமைக்கவும்.
மேம்படுத்தல்கள்
புதிய படத்தை இழுத்து மீண்டும் உருவாக்கவும்; பெயரிடப்பட்ட volume மற்றும் உங்கள் எல்லா தரவும் நிலைத்திருக்கும்:
docker compose pull
docker compose up -dVaultwarden அடிக்கடி வெளியீடுகளை வழங்குகிறது. சில வெளியீடுகள் இடம்பெயர்வு குறிப்புகளைக் கொண்டிருப்பதால், ஒரு patch பதிப்பை பிடித்து வைப்பதை விட திட்டத்தின் வெளியீட்டுக் குறிப்புகளை கவனியுங்கள். எந்தவொரு பெரிய பதிப்பு உயர்வுக்கும் முன்பு ஒரு புதிய காப்புப்பிரதியை எடுக்கவும்; புதிய volume இல் tarball ஐ மீட்டெடுப்பதன் மூலம் நீங்கள் பின்செல்ல முடியும்.
FAQ
Vaultwarden மற்றும் Bitwarden ஒன்றா?
இது அதிகாரப்பூர்வ சேவையகம் அல்ல. இது இணக்கமான, தனித்த சேவையகம் ஆகும். Vaultwarden என்பது Bitwarden சேவையக API ஐ Rust இல் மீண்டும் உருவாக்குகிறது. எனவே அதிகாரப்பூர்வ desktop, mobile, browser மற்றும் CLI கிளையண்டுகள் அனைத்தும் இதனுடன் இணைந்து வேலை செய்யும். இதற்கு அதிகாரப்பூர்வ ஸ்டாக்கின் ஒரு பகுதி வளங்கள் மட்டுமே தேவை. vault வடிவமைப்பு ஒன்றே. எனவே நீங்கள் export மற்றும் import செய்து இரு திசைகளிலும் இடம்பெயரலாம்.
HTTPS உண்மையில் தேவையா, அல்லது எனது LAN இல் http வழியாக இயக்கலாமா?
localhost சோதனையைத் தவிர மற்ற அனைத்திற்கும் HTTPS தேவை. Bitwarden web vault மற்றும் நீட்சிகள் உலாவியின் Web Crypto API ஐப் பயன்படுத்துகின்றன. இது பாதுகாப்பான சூழலில் மட்டுமே கிடைக்கும். எனவே plain http வழியாக கிளையண்ட் Cannot read properties of undefined ஐ வெளியிடுகிறது. அது ஒருபோதும் உள்நுழையாது. வேலை செய்யும் ஒரே http முகவரி http://localhost ஆகும். இதனால்தான் படி 8 இல் உள்ள மீட்டெடுப்பு சோதனை SSH டனலைப் பயன்படுத்துகிறது.
அந்நியர்கள் எனது சேவையகத்தில் பதிவு செய்வதை எப்படி தடுப்பது?
உங்கள் சொந்த கணக்கை உருவாக்கியவுடன், Compose கோப்பில் SIGNUPS_ALLOWED: "false" ஐ அமைத்து docker compose up -d ஐ இயக்கவும். அதன்பிறகு, /admin இல் உள்ள Invite User பொத்தான் வழியாக புதியவர்களைச் சேர்க்கவும். இதற்கு SMTP உள்ளமைக்கப்பட்டிருக்க வேண்டும். அப்போதுதான் அவர்கள் அழைப்பு இணைப்பைப் பெறுவார்கள். எதிர்பாராத கணக்குகள் எதுவும் வந்துவிடவில்லை என்பதை உறுதி செய்ய அவ்வப்போது admin பயனர் பட்டியலைச் சரிபார்க்கவும்.
எனது Vaultwarden vault ஐ எப்படி காப்புப் பிரதி எடுப்பது?
கொள்கலனை சிறிது நேரம் நிறுத்தவும். பின்னர் முழு vw-data தொகுதியையும் காப்பகப்படுத்தவும் — db.sqlite3, attachments/, sends/, config.json மற்றும் rsa_key.* கோப்புகள். பின்னர் அந்த காப்பகத்தை சேவையகத்திலிருந்து வெளியே நகலெடுக்கவும். இதை குறிப்பாக ஒவ்வொரு இரவும் இயங்கும் cron வழியாகச் செய்யவும். சேவையகம் இயங்கும்போது நேரடி SQLite கோப்பை நகலெடுத்தால் சிதைந்த ஸ்னாப்ஷாட் ஏற்படும். எனவே அதை நிறுத்திய நிலையில் எடுக்கவும். மிக முக்கியமாக, அதை ஒருமுறை தற்காலிக கொள்கலனுக்கு மீட்டெடுத்து உள்நுழையவும். அப்போதுதான் நீங்கள் அதனை நம்புவதற்கு முன்பே காப்புப் பிரதி உண்மையானது என்பதை அறிந்துகொள்வீர்கள்.
எனது கடவுச்சொற்களை சுயமாக ஹோஸ்ட் செய்வது உண்மையில் பாதுகாப்பானதா?
ஆம், இந்த வழிகாட்டி கூறும் மூன்று விஷயங்களை நீங்கள் செய்தால்: உண்மையான HTTPS, மூடப்பட்ட பதிவுகள் மற்றும் வலிமையான admin token, மற்றும் சோதிக்கப்பட்ட காப்புப் பிரதிகள். உங்கள் vault கிளையண்ட் பக்கத்தில் உங்கள் master password உடன் மறைகுறியாக்கப்படுகிறது. எனவே சேவையகம் கூட உங்கள் கடவுச்சொற்களை தெளிவாக ஒருபோதும் பார்ப்பதில்லை — திருடப்பட்ட db.sqlite3 அது இல்லாமல் பயனற்றது. இதன் பரிமாற்றம் என்னவென்றால், இப்போது திட்டுதல் மற்றும் காப்புப் பிரதி எடுத்தல் ஆகியவை உங்கள் பொறுப்பு. இதனால்தான் Fail2ban மற்றும் மீட்டெடுப்பு சடங்கு இங்கே விருப்பமற்றவை அல்ல.