- Vaultwarden SMTP configured and tested - Holly and Meg invited to Vaultwarden - Firefrost Gaming organization created - LuckPerms MySQL database ready (credentials stored in Vaultwarden) - 11 web services added to Cloudflare proxy for DDoS protection - vault.firefrostgaming.com SSL warning resolved - Comprehensive troubleshooting guides included All services documented and operational. Ready for Holly's mod deployment.
435 lines
11 KiB
Markdown
435 lines
11 KiB
Markdown
# Vaultwarden Configuration
|
|
|
|
**Service:** Vaultwarden (self-hosted password manager)
|
|
**URL:** https://vault.firefrostgaming.com
|
|
**Admin Panel:** https://vault.firefrostgaming.com/admin
|
|
**Server:** Command Center (63.143.34.217)
|
|
**Container:** Docker (vaultwarden/server:latest v1.35.3)
|
|
**Port:** 8001 → 80 (proxied via Nginx)
|
|
**SSL:** Let's Encrypt (expires May 14, 2026)
|
|
**Cloudflare Proxy:** Enabled (orange cloud) as of 2026-03-27
|
|
|
|
---
|
|
|
|
## Admin Access
|
|
|
|
**Admin Token:**
|
|
```
|
|
kSUhysq6Y9yDs9mk4KW+2N6qUzJn2AP6tCJnhdm1g2HCqcEse+rOzteIFyPRL5VW
|
|
```
|
|
|
|
**Note:** This is a plain text token (not Argon2 hashed). Should be hashed for better security using:
|
|
```bash
|
|
docker exec vaultwarden /vaultwarden hash
|
|
```
|
|
|
|
---
|
|
|
|
## SMTP Email Configuration
|
|
|
|
**Configured:** 2026-03-27
|
|
**Status:** ✅ Working (test email successful)
|
|
|
|
### Settings
|
|
|
|
- **Enabled:** true
|
|
- **Host:** mail.firefrostgaming.com
|
|
- **Port:** 587
|
|
- **Secure SMTP:** STARTTLS
|
|
- **From Address:** michael@firefrostgaming.com
|
|
- **From Name:** Vaultwarden
|
|
- **Username:** michael@firefrostgaming.com
|
|
- **Password:** [Stored in Vaultwarden - michael@firefrostgaming.com mailbox password]
|
|
- **Auth Mechanism:** (default)
|
|
- **Connection Timeout:** 15 seconds
|
|
|
|
### Future Improvement
|
|
|
|
**Create dedicated vault@ mailbox:**
|
|
1. Create `vault@firefrostgaming.com` in Mailcow
|
|
2. Update Vaultwarden SMTP settings to use vault@ instead of michael@
|
|
3. Provides better separation of concerns
|
|
|
|
---
|
|
|
|
## General Settings
|
|
|
|
### Security Settings
|
|
|
|
- **Domain URL:** https://vault.firefrostgaming.com ✅
|
|
- **Allow new signups:** false ✅ (prevents random registrations)
|
|
- **Allow invitations:** true ✅ (required for inviting team members)
|
|
- **Password iterations:** 600,000 ✅ (OWASP recommended)
|
|
- **Enable emergency access:** true ✅
|
|
- **Allow email change:** true ✅
|
|
- **Show password hint:** false ✅
|
|
- **HIBP API Key:** Configured ✅ (Have I Been Pwned integration)
|
|
|
|
### Storage Limits
|
|
|
|
- **Per-user attachment storage:** Unlimited (empty)
|
|
- **Per-organization attachment storage:** Unlimited (empty)
|
|
- **Per-user send storage:** Unlimited (empty)
|
|
- **Trash auto-delete days:** Not configured (recommended: 30)
|
|
|
|
### Email Verification
|
|
|
|
- **Require email verification on signups:** false ✅ (signups disabled anyway)
|
|
- **Auto-resend verification email after:** 3600 seconds (1 hour) ✅
|
|
- **Email auto-send limit:** 6 emails ✅
|
|
|
|
---
|
|
|
|
## Advanced Settings
|
|
|
|
- **Client IP header:** X-Real-IP ✅ (correct for Nginx proxy)
|
|
- **Icon redirect code:** 302 ✅
|
|
- **Icon cache expiry (positive):** 2592000 seconds ✅
|
|
- **Icon cache expiry (negative):** 259200 seconds ✅
|
|
- **Icon download timeout:** 10 seconds ✅
|
|
- **Block non-global IPs:** true ✅ (security)
|
|
- **Disable Two-Factor remember:** false ✅
|
|
- **Disable authenticator time drift:** false ✅
|
|
- **Require new device emails:** false ✅
|
|
- **Allowed iframe ancestors:** Empty ✅ (prevents clickjacking)
|
|
- **Allowed connect-src:** Empty ✅
|
|
|
|
---
|
|
|
|
## SSO Settings
|
|
|
|
- **OpenID Connect:** Disabled (not configured)
|
|
- **Yubikey:** Not configured
|
|
- **Global Duo:** Not configured
|
|
|
|
---
|
|
|
|
## Organizations
|
|
|
|
### Firefrost Gaming Organization
|
|
|
|
**Created:** 2026-03-27
|
|
**Owner:** Michael Krause (mkrause612@gmail.com)
|
|
**Billing Email:** michael@firefrostgaming.com
|
|
**Plan:** Free (self-hosted)
|
|
|
|
**Collections:**
|
|
- Default collection (auto-created)
|
|
- Unassigned (items not in any collection)
|
|
|
|
**Future Collections (Recommended):**
|
|
- Infrastructure (MySQL credentials, SSH keys, server root passwords)
|
|
- Services (Mailcow, Pterodactyl, Paymenter, n8n, etc.)
|
|
- Game Servers (per-server credentials)
|
|
- Discord (bot tokens, webhook URLs)
|
|
|
|
**Members:**
|
|
- Michael Krause (Owner) ✅
|
|
- Holly (unicorn20089@firefrostgaming.com) - Invitation sent 2026-03-27 ⏳
|
|
- Meg (GingerFury) - Invitation sent 2026-03-27 ⏳
|
|
|
|
---
|
|
|
|
## Users
|
|
|
|
### Registered Users
|
|
|
|
1. **Michael Krause**
|
|
- Email: mkrause612@gmail.com
|
|
- Role: Owner/Admin
|
|
- Status: Active ✅
|
|
|
|
2. **Holly (unicorn20089)**
|
|
- Email: unicorn20089@firefrostgaming.com
|
|
- Status: Invitation sent 2026-03-27 ⏳
|
|
- Pending account creation
|
|
|
|
3. **Meg (GingerFury)**
|
|
- Status: Invitation sent 2026-03-27 ⏳
|
|
- Pending account creation
|
|
|
|
---
|
|
|
|
## Diagnostics (System Health)
|
|
|
|
**Last checked:** 2026-03-27
|
|
|
|
### Versions
|
|
|
|
- **Server Installed:** 1.35.3
|
|
- **Server Latest:** 1.35.4 (update available, not urgent)
|
|
- **Web Installed:** 2026.1.1 ✅ (current)
|
|
- **Web Latest:** 2026.1.1 ✅
|
|
- **Database:** SQLite 3.50.2 ✅
|
|
|
|
### System Checks
|
|
|
|
- **OS/Arch:** Linux x86_64 ✅
|
|
- **Running in Docker:** Yes (Debian base) ✅
|
|
- **Uses config.json:** Yes ✅
|
|
- **Reverse proxy detected:** Yes ✅
|
|
- **IP header match:** Config/Server: X-Real-IP ✅
|
|
- **Internet access:** Yes ✅
|
|
- **DNS (github.com):** 140.82.112.3 ✅
|
|
- **NTP sync:** Server/Browser OK ✅
|
|
- **Domain configuration:** Match, HTTPS ✅
|
|
- **HTTP response validation:** OK ✅
|
|
|
|
### Warnings
|
|
|
|
- **Websocket enabled:** Error ⚠️
|
|
- Known issue with reverse proxies
|
|
- Not critical - only affects real-time sync
|
|
- Can be fixed later if needed
|
|
|
|
---
|
|
|
|
## Nginx Configuration
|
|
|
|
**Location:** `/etc/nginx/sites-enabled/vault*`
|
|
|
|
**SSL Certificate:**
|
|
- **Type:** Let's Encrypt
|
|
- **Path:** `/etc/letsencrypt/live/vault.firefrostgaming.com/`
|
|
- **Valid Until:** May 14, 2026
|
|
- **Auto-renewal:** Certbot (should renew automatically)
|
|
|
|
**Proxy Configuration:**
|
|
- **Backend:** http://127.0.0.1:8001
|
|
- **Headers Set:**
|
|
- `Host $host`
|
|
- `X-Real-IP $remote_addr`
|
|
- Standard proxy headers
|
|
|
|
---
|
|
|
|
## Cloudflare Configuration
|
|
|
|
**DNS Record:**
|
|
- **Type:** A
|
|
- **Name:** vault
|
|
- **Value:** 63.143.34.217 (Command Center)
|
|
- **Proxy Status:** Proxied (orange cloud) ✅
|
|
- **TTL:** Auto
|
|
|
|
**SSL/TLS Mode:** Full (strict)
|
|
|
|
**Benefits:**
|
|
- DDoS protection
|
|
- Global CDN
|
|
- SSL managed by Cloudflare
|
|
- Hides origin server IP
|
|
|
|
**Changed:** 2026-03-27 (was DNS-only, now proxied)
|
|
|
|
---
|
|
|
|
## Docker Configuration
|
|
|
|
**Container Name:** vaultwarden
|
|
**Image:** vaultwarden/server:latest
|
|
**Version:** 1.35.3
|
|
**Restart Policy:** Always (confirmed healthy)
|
|
|
|
**Key Environment Variables:**
|
|
- `ADMIN_TOKEN=kSUhysq6Y9yDs9mk4KW+2N6qUzJn2AP6tCJnhdm1g2HCqcEse+rOzteIFyPRL5VW`
|
|
- SMTP settings configured via admin panel (persisted in data volume)
|
|
|
|
**Volumes:**
|
|
- Data directory: (check with `docker inspect vaultwarden`)
|
|
|
|
---
|
|
|
|
## Stored Credentials
|
|
|
|
### Current Vault Items
|
|
|
|
1. **LuckPerms MySQL Credentials**
|
|
- **Host:** 63.143.34.217
|
|
- **Port:** 3306
|
|
- **Database:** luckperms
|
|
- **Username:** luckperms
|
|
- **Password:** Firefrost1234!!
|
|
- **Notes:** Used by all 13 game servers for permission sync
|
|
- **Location:** Personal vault (should be moved to Infrastructure collection)
|
|
|
|
---
|
|
|
|
## Common Tasks
|
|
|
|
### Invite a User
|
|
|
|
1. Go to Admin Panel: https://vault.firefrostgaming.com/admin
|
|
2. Enter admin token
|
|
3. Click **Users** tab
|
|
4. Click **Invite User**
|
|
5. Enter email address
|
|
6. User receives invitation email
|
|
|
|
**OR (if SMTP not configured):**
|
|
- User goes to https://vault.firefrostgaming.com
|
|
- User clicks "Create Account" (if signups are enabled)
|
|
- User registers with email
|
|
|
|
### Add User to Organization
|
|
|
|
1. Organization owner logs into vault
|
|
2. Go to Organizations → Firefrost Gaming
|
|
3. Click **Members**
|
|
4. Click **Invite**
|
|
5. Enter user's email
|
|
6. Select role (User, Admin, Owner)
|
|
7. User accepts invitation
|
|
|
|
### Share a Credential
|
|
|
|
**Method 1: Organization Collection**
|
|
1. Move item to an Organization Collection
|
|
2. Grant user access to that Collection
|
|
|
|
**Method 2: Individual Share**
|
|
1. Click on vault item
|
|
2. Click Share (three-dot menu)
|
|
3. Enter user's email
|
|
4. User gets access to that specific item
|
|
|
|
### Update SMTP Settings
|
|
|
|
1. Go to Admin Panel: https://vault.firefrostgaming.com/admin
|
|
2. Click **Settings** tab
|
|
3. Expand **SMTP Email Settings**
|
|
4. Update configuration
|
|
5. Click **Save**
|
|
6. Test with **Send test email** button
|
|
|
|
### Backup Vaultwarden Data
|
|
|
|
```bash
|
|
# On Command Center
|
|
docker exec vaultwarden sqlite3 /data/db.sqlite3 ".backup '/data/backup.sqlite3'"
|
|
docker cp vaultwarden:/data/backup.sqlite3 ~/vaultwarden-backup-$(date +%Y%m%d).sqlite3
|
|
```
|
|
|
|
### Update Vaultwarden
|
|
|
|
```bash
|
|
# On Command Center
|
|
docker pull vaultwarden/server:latest
|
|
docker stop vaultwarden
|
|
docker rm vaultwarden
|
|
# Re-create container with same settings (check docker inspect for exact command)
|
|
docker start vaultwarden
|
|
```
|
|
|
|
---
|
|
|
|
## Security Best Practices
|
|
|
|
### Implemented ✅
|
|
|
|
- HTTPS enforced (Let's Encrypt + Cloudflare)
|
|
- Admin panel requires token
|
|
- Signups disabled (invitation-only)
|
|
- Strong password iterations (600,000)
|
|
- HIBP integration for compromised password detection
|
|
- Emergency access enabled
|
|
- Cloudflare proxy for DDoS protection
|
|
|
|
### Recommended Improvements
|
|
|
|
1. **Hash admin token with Argon2**
|
|
```bash
|
|
docker exec vaultwarden /vaultwarden hash
|
|
# Update ADMIN_TOKEN environment variable with hashed output
|
|
```
|
|
|
|
2. **Create dedicated vault@ email address**
|
|
- Separate from michael@firefrostgaming.com
|
|
- Better audit trail for system emails
|
|
|
|
3. **Enable 2FA for all users**
|
|
- Require TOTP or hardware key
|
|
- Set in organization policies
|
|
|
|
4. **Configure automated backups**
|
|
- Daily SQLite backups
|
|
- Store offsite (Ghost VPS, Billing VPS, or cloud storage)
|
|
|
|
5. **Set trash auto-delete to 30 days**
|
|
- Prevents vault bloat
|
|
- Automatic cleanup
|
|
|
|
6. **Monitor failed login attempts**
|
|
- Check Vaultwarden logs regularly
|
|
- Set up alerts for suspicious activity
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### "Dangerous Site" Warning in Chrome
|
|
|
|
**Problem:** Chrome shows SSL warning when accessing vault.firefrostgaming.com
|
|
|
|
**Cause:** Subdomain not proxied through Cloudflare (gray cloud)
|
|
|
|
**Solution:**
|
|
1. Go to Cloudflare DNS settings
|
|
2. Find `vault` A record
|
|
3. Click gray cloud to enable proxy (turn orange)
|
|
4. Wait for DNS propagation (~5 minutes)
|
|
|
|
### SMTP Test Fails
|
|
|
|
**Error:** `Sender address rejected: not owned by user`
|
|
|
|
**Cause:** From Address doesn't match Username
|
|
|
|
**Solution:**
|
|
- Set **From Address** to match **Username** exactly
|
|
- Example: Both should be `michael@firefrostgaming.com`
|
|
|
|
### Can't Create Organization
|
|
|
|
**Problem:** No "New Organization" button visible
|
|
|
|
**Cause:** Looking at Admin Panel instead of personal vault
|
|
|
|
**Solution:**
|
|
1. Go to https://vault.firefrostgaming.com (NOT /admin)
|
|
2. Click **Organizations** in sidebar
|
|
3. Click **New Organization**
|
|
|
|
### Websocket Error in Diagnostics
|
|
|
|
**Status:** Known issue, not critical
|
|
|
|
**Impact:** Real-time sync between devices may be delayed
|
|
|
|
**Fix (optional):**
|
|
1. Configure Nginx to proxy WebSocket connections
|
|
2. Add to Nginx config:
|
|
```nginx
|
|
location /notifications/hub {
|
|
proxy_pass http://127.0.0.1:8001;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection "upgrade";
|
|
}
|
|
```
|
|
3. Reload Nginx: `nginx -s reload`
|
|
|
|
---
|
|
|
|
## Related Documentation
|
|
|
|
- [Vaultwarden Official Wiki](https://github.com/dani-garcia/vaultwarden/wiki)
|
|
- [Mailcow Configuration](mailcow-configuration.md)
|
|
- [Cloudflare DNS Setup](../infrastructure/cloudflare-dns.md)
|
|
- [Nginx Reverse Proxy](../infrastructure/nginx-proxy-configuration.md)
|
|
|
|
---
|
|
|
|
**Last Updated:** 2026-03-27
|
|
**Documented By:** The Verifier (Chronicler #42)
|
|
**Status:** ✅ Production - Fully configured and operational
|