Self-Hosting TODO β eagleserver
Whatβs done, whatβs missing, and what to do next.
β Already Completed
- [x] Ubuntu server installed and updated
- [x] nginx landing page live (
eaglehub.dev,/var/www/landing/) β hub with links to Vaultwarden, Uptime Kuma, 2nd Brain - [x] HTTPS via Letβs Encrypt / Certbot
- [x] SSH hardened: port
2222,PermitRootLogin no,PasswordAuthentication no - [x] UFW enabled: allows
2222/tcp,80/tcp,443/tcp, default deny incoming - [x] fail2ban active for
sshd - [x]
unattended-upgradesenabled for automatic security patches - [x] ssh.service enabled (replaced socket activation)
- [x] Hermes running natively (not Docker) on eagleserver
- [x] Obsidian vault at
~/ObsidianVaults/2nd-brain/ - [x] nginx reverse proxy
/brain/β127.0.0.1:8080(uvicorn) - [x] EaglePi at
192.168.1.13: key-only SSH, ports22/53/3001open - [x] Tailscale VPN installed and mesh verified (eagleserver + other devices)
- [x] Restic backups installed, initialized on
/mnt/backup(RAID10) - [x] Automated daily backup via systemd timer (
restic-backup.timer) - [x] Local backup targets: vault, nginx, ssh, landing page
- [x] Eagleserver port scan clean (only 2222, 80, 443, 8080, 53)
- [x] Vaultwarden deployed at https://vault.eaglehub.dev (self-hosted Bitwarden)
- [x] Uptime Kuma on eagleserver via Docker at http://192.168.1.7:3001
- [x] Unused services disabled: ModemManager, xrdp, udisks2, upower, wpa_supplicant
π΄ High Priority
1. Add Uptime Kuma monitors on EaglePi
- [x] Reinstalled Uptime Kuma on EaglePi with correct systemd user service
- [x] Service running on
http://192.168.1.13:3001 - [ ] Create admin account and add monitors:
https://eaglehub.devhttps://eaglehub.dev/brain/ssh://eaglehub.dev:2222- [ ] Set up notifications (Discord webhook, email, Telegram, etc.)
2. Add nginx security headers
- [x] Added to landing page and
/brain/proxy config: Strict-Transport-Security: max-age=63072000; includeSubDomains; preloadX-Content-Type-Options: nosniffX-Frame-Options: DENYReferrer-Policy: strict-origin-when-cross-origin- [x] Verified with
curl -sI https://eaglehub.dev
3. SSH config hardening
- [x] Added to
/etc/ssh/sshd_config: ClientAliveInterval 300ClientAliveCountMax 2MaxAuthTries 3AllowUsers eagleX11Forwarding noTCPKeepAlive noAllowTcpForwarding no- [x] Restarted sshd and verified access
4. System hardening
- [x] Apply sysctl hardening:
rp_filter=1,accept_redirects=0,log_martians=1- [x] Disable unused services:
- ModemManager, xrdp, udisks2, upower, wpa_supplicant, open-vm-tools, vgauth
5. Offsite backup (complete 3-2-1)
- [x] Signed up for Backblaze B2 (10 GB free tier)
- [x] Offsite repo initialized at
b2:eagleserver-backups - [x] First offsite backup completed
- [x] Offsite backup automated in
backup.shwith B2 credentials
π‘ Medium Priority
6. Service inventory
- [x] Documented services in
service-inventory.md - [ ] Review and update quarterly
7. Security verification
- [ ] Run Lynis audit:
bash sudo apt install lynis sudo lynis audit systemTarget score > 70. - [ ] Review firewall rules quarterly
8. Password manager
- [x] Vaultwarden deployed at https://vault.eaglehub.dev
- [ ] Generate unique passwords for every service and import into Vaultwarden
- [ ] Enable 2FA everywhere
9. Secrets hygiene
- [ ] Move any plaintext creds to
.envfiles with600perms - [ ] Add
.envand*.keyto.gitignore - [ ] Consider
sops+agefor encrypted secrets in git
10. Compiler hardening
- [x] Removed build-essential, gcc, g++, make
- [x] Retained gcc-16-base/libgcc because system libraries depend on it
11. DNS hardening
- [ ] Enable DNSSEC on domain registrar
- [ ] Use encrypted DNS (DoH/DoT) on server and clients
π’ Low Priority / Nice to Have
11. Intrusion detection
- [x] Installed auditd and loaded critical file watch rules
/etc/passwd,/etc/group,/etc/sudoers/root/.ssh,/home/eagle/.ssh/etc/ssh/sshd_config,/etc/fail2ban/jail.local- [ ] Review audit logs periodically for unauthorized changes
13. Network segmentation
- [ ] Put IoT devices on a separate VLAN
- [ ] Isolate servers from personal devices
14. Cloudflare proxy
- [ ] Consider proxying
eaglehub.devthrough Cloudflare for DDoS protection and IP hiding
π Maintenance Cadence
| Frequency | Task |
|---|---|
| Daily | Security updates run automatically, backups execute |
| Weekly | sudo apt update && sudo apt upgrade -y, review auth logs |
| Monthly | Fail2ban stats, port scan, Lynis audit, backup restore test |
| Quarterly | Service inventory review, update runbooks, DR test |
| Annually | Major OS upgrade, hardware health check |
Next Immediate Steps
- AIDE file integrity β baseline critical files
- Generate unique passwords β import all service passwords into Vaultwarden
- Enable 2FA β everywhere itβs supported (SSH, Vaultwarden, etc.)
- DNSSEC + encrypted DNS β on domain registrar and server/clients
- auditd rules β watch
/etc/passwd,/etc/sudoers,.ssh/