Homelab an toàn hơn với reverse proxy, SSO, 2FA, firewall

29/05/2026 · P T P · Chung

Homelab bảo mật hơn: bộ app self-hosted kèm reverse proxy, SSO, 2FA, firewall

Homelab rất hấp dẫn: dữ liệu nằm trong tay bạn, dịch vụ chạy theo ý bạn, không lệ thuộc cloud. Nhưng càng mở nhiều app ra Internet, rủi ro càng tăng: mật khẩu yếu, dịch vụ lỗi thời, port lộ, bot quét 24/7, cấu hình sai → bị chiếm quyền.

Tin tốt: homelab không cần “enterprise-grade” mới an toàn. Chỉ cần thiết kế đúng lớp: reverse proxy → SSO → 2FA → firewall → backup → giám sát. Bài này đề xuất một mô hình thực tế, dễ triển khai, phù hợp server tại nhà/VPS mini/NAS.


Kiến trúc tổng quan

Mô hình khuyến nghị:

Router/firewall: chặn mặc định, chỉ mở port cần thiết.
Reverse proxy: Caddy / Traefik / Nginx Proxy Manager.
SSO/Identity Provider: Authentik / Authelia / Keycloak.
2FA: TOTP, WebAuthn/passkey nếu được.
App self-hosted: Nextcloud, Vaultwarden, Gitea, Jellyfin, Uptime Kuma…
VPN tùy chọn: WireGuard/Tailscale/Headscale cho app nhạy cảm.
Logging/monitoring: Uptime Kuma, Prometheus/Grafana, CrowdSec/Fail2ban.
Backup: restic/borg + backup ngoài máy.

Luồng truy cập lý tưởng:

Internet → Firewall → Reverse proxy HTTPS → SSO/2FA → App nội bộ

App không trực tiếp expose port. Reverse proxy là cửa chính. SSO kiểm tra danh tính. Firewall giới hạn bề mặt tấn công.


Chọn bộ app self-hosted hợp lý

Không nên cài quá nhiều ngay từ đầu. Mỗi app = thêm rủi ro, thêm update, thêm backup. Bắt đầu bằng nhóm lõi:

Nhóm hạ tầng

Caddy: reverse proxy đơn giản, tự cấp TLS.
Traefik: mạnh với Docker labels, phù hợp nhiều container.
Nginx Proxy Manager: GUI dễ dùng, hợp người mới.
Authentik: SSO hiện đại, đẹp, hỗ trợ OAuth2/OIDC, SAML, proxy auth.
Authelia: nhẹ, phổ biến, mạnh với forward auth.
Vaultwarden: password manager tự host, rất hữu ích nhưng cực kỳ nhạy cảm.
Uptime Kuma: giám sát uptime, cảnh báo Telegram/Email/Discord.
Watchtower/Renovate: hỗ trợ update container, dùng cẩn thận.

Nhóm dữ liệu/cá nhân

Nextcloud: file, calendar, contact.
Immich: ảnh, video cá nhân.
Paperless-ngx: quản lý tài liệu scan.
Syncthing: đồng bộ file P2P.
Jellyfin: media server.

Nhóm dev/nội bộ

Gitea/Forgejo: Git server.
Woodpecker CI: CI nhẹ.
Miniflux/FreshRSS: RSS reader.
Linkding/Wallabag: bookmark/read-it-later.

Ưu tiên app có:
– image Docker chính thức/maintained
– update đều
– hỗ trợ proxy headers
– hỗ trợ OIDC/OAuth2
– backup dễ
– không bắt buộc chạy privileged


Reverse proxy: cổng vào duy nhất

Reverse proxy giúp:

– gom nhiều app sau 1 IP
– cấp HTTPS tự động
– route theo domain: nextcloud.example.com, git.example.com
– thêm security headers
– chặn truy cập trực tiếp app backend
– tích hợp SSO/forward auth

Caddy: lựa chọn tối giản

Ví dụ:

nextcloud.example.com {
  reverse_proxy nextcloud:80
}

vault.example.com { reverse_proxy vaultwarden:80 }

Caddy tự lấy chứng chỉ Let’s Encrypt. Ít config. Rất hợp homelab.

Traefik: hợp Docker

Traefik đọc Docker labels → app tự đăng ký route. Mạnh, động, hợp nhiều container. Nhưng phức tạp hơn Caddy.

Nginx Proxy Manager: GUI tiện

Nếu chưa quen config file, NPM giúp tạo host qua giao diện. Tuy nhiên nên backup DB/config kỹ.

Nguyên tắc reverse proxy

– Chỉ expose reverse proxy ra Internet: 80/443.
– App backend chỉ nằm trong Docker network nội bộ.
– Bật HTTPS bắt buộc.
– Thêm security headers:
Strict-Transport-Security
X-Frame-Options
X-Content-Type-Options
Referrer-Policy
– Không expose dashboard proxy nếu không cần.
– Dashboard quản trị → chỉ qua VPN/SSO.


SSO: một cửa đăng nhập

SSO giúp giảm tình trạng mỗi app một mật khẩu. Người dùng đăng nhập một lần qua Identity Provider, app nhận danh tính qua OIDC/SAML/proxy auth.

Authentik

Phù hợp homelab hiện đại:

– UI tốt
– hỗ trợ OIDC/OAuth2/SAML/LDAP
– có proxy provider cho app không hỗ trợ SSO
– policy linh hoạt
– hỗ trợ MFA/WebAuthn

Dùng Authentik cho:

– Gitea qua OIDC
– Grafana qua OAuth
– Nextcloud qua OIDC app
– Jellyfin có plugin/OIDC tùy cấu hình
– app cũ qua forward auth/proxy auth

Authelia

Nhẹ, cấu hình YAML, thường dùng với Traefik/Nginx. Rất tốt cho mô hình:

User → Reverse proxy → Authelia check → App

Authelia hợp nếu cần:
– bảo vệ app không có login
– policy theo domain/path
– 2FA TOTP/WebAuthn
– LDAP/file user backend

Keycloak

Mạnh, chuẩn enterprise, nhưng nặng hơn. Dùng nếu cần federation/phân quyền phức tạp.

Lưu ý SSO

– Không phải app nào cũng hợp SSO.
– Với app cực nhạy cảm như Vaultwarden: cân nhắc không đặt sau proxy auth phá luồng client, thay vào đó dùng 2FA native + giới hạn IP/VPN.
– Tài khoản admin IdP phải có mật khẩu mạnh + 2FA.
– Có tài khoản break-glass offline, lưu an toàn.


2FA: bắt buộc cho tài khoản quan trọng

Mật khẩu bị lộ là chuyện thường. 2FA giảm thiểu thiệt hại.

Nên dùng

TOTP: Aegis, 2FAS, Bitwarden Authenticator.
WebAuthn/passkey/security key: YubiKey, SoloKey, passkey thiết bị.
Backup codes: in/ghi ra nơi an toàn.

Không nên phụ thuộc

– SMS OTP: dễ bị SIM swap.
– Email OTP duy nhất: nếu email bị chiếm → mất tất cả.

Chính sách gợi ý

– Admin: bắt buộc WebAuthn hoặc TOTP.
– User thường: TOTP tối thiểu.
– App nhạy cảm: 2FA native nếu có.
– SSH: dùng key, tắt password login.
– Root login SSH: tắt.

SSH hardening cơ bản:

PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes

Sau khi đổi SSH config, luôn giữ 1 session đang mở để rollback nếu lỗi.


Firewall: chặn mặc định, mở tối thiểu

Firewall là lớp giảm rủi ro lớn nhất.

Port nên mở public

Thông thường chỉ cần:

80/tcp: HTTP challenge/redirect
443/tcp: HTTPS
– WireGuard nếu dùng: ví dụ 51820/udp

Không public:

22/tcp SSH nếu có thể
– DB: PostgreSQL/MySQL/Redis
– Docker socket
– admin dashboard
– app backend port
– metrics endpoint

UFW mẫu

ufw default deny incoming
ufw default allow outgoing
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 51820/udp
ufw enable

Nếu cần SSH, giới hạn IP:

ufw allow from 1.2.3.4 to any port 22 proto tcp

Tách mạng

Nếu có khả năng, chia VLAN/network:

– LAN tin cậy
– IoT
– Guest
– Server
– Management

Server không nên tự do truy cập mọi thiết bị LAN. IoT càng không được chạm server.


VPN: không phải app nào cũng cần public

Một sai lầm phổ biến: đưa tất cả app ra Internet. Không cần.

Chia app theo mức expose:

Public được

– blog cá nhân
– status page
– service cho nhiều người dùng
– app đã có SSO/2FA tốt

Nên qua VPN

– dashboard quản trị
– Proxmox
– Portainer
– Grafana admin
– router UI
– NAS admin
– database UI
– monitoring nội bộ

WireGuard rất nhẹ. Tailscale dễ dùng. Headscale tự host control server nếu muốn độc lập hơn.

Mô hình an toàn:

Public: 443 reverse proxy
Private: VPN → admin apps


Docker security: đừng chạy container như root nếu không cần

Docker tiện nhưng không mặc định an toàn tuyệt đối.

Checklist:

– Không mount /var/run/docker.sock bừa bãi.
– Tránh privileged: true.
– Dùng read_only: true nếu app hỗ trợ.
– Chỉ mount volume cần thiết.
– Dùng Docker network riêng.
– Không publish port backend ra host.
– Pin version image, tránh latest cho app quan trọng.
– Update định kỳ.
– Scan image nếu có thể.

Ví dụ nguyên tắc network:

networks:
  proxy:
    external: true
  internal:
    internal: true

Reverse proxy nằm ở proxy. App + DB nằm ở internal. DB không ra Internet.


Backup: bảo mật mà không backup = chưa đủ

Homelab chết vì lỗi disk, update hỏng, xóa nhầm, ransomware. Backup là bắt buộc.

Chiến lược 3-2-1:

– 3 bản dữ liệu
– 2 loại lưu trữ
– 1 bản offsite

Công cụ:

restic: mã hóa, nhanh, tốt cho cloud storage.
borgbackup: mạnh, dedupe tốt.
rclone: sync tới S3/Backblaze/Drive.
ZFS snapshot: rollback nhanh.

Cần backup:

– Docker compose files
.env
– app data volumes
– DB dump
– reverse proxy config
– Authentik/Authelia config
– password manager export mã hóa
– SSH keys/certificates nếu cần

Quan trọng: test restore. Backup chưa test = giả định.


Logging, cảnh báo, chống brute force

Bạn không thể bảo vệ thứ bạn không quan sát.

Tối thiểu nên có

– Uptime Kuma: app down → báo ngay.
– Log reverse proxy: xem IP, path, status code.
– Fail2ban/CrowdSec: chặn brute force, scanner.
– Notification: Telegram/Signal/Email.

CrowdSec

CrowdSec phân tích log, nhận diện hành vi xấu, dùng bouncer để chặn ở firewall/reverse proxy. Rất hợp homelab expose public.

Cảnh báo cần nhận

– login admin thất bại nhiều lần
– certificate sắp hết hạn
– disk gần đầy
– backup fail
– service restart liên tục
– update security quan trọng


Cấu hình DNS và TLS

DNS nên rõ ràng:

app.example.com
auth.example.com
status.example.com
vpn.example.com

Dùng wildcard nếu cần:

*.home.example.com

TLS:

– Let’s Encrypt đủ tốt.
– DNS challenge tốt nếu không muốn mở port 80.
– Bật auto-renew.
– Theo dõi cert expiry.

Không dùng self-signed cho app public nếu không có lý do.


Quy trình vận hành an toàn

Bảo mật không phải cấu hình một lần. Cần thói quen.

Checklist hàng tuần:

– kiểm tra update container
– xem log bất thường
– xác nhận backup chạy
– kiểm tra dung lượng disk
– cập nhật OS security patches

Checklist hàng tháng:

– test restore mẫu
– rà soát user/token/API key
– xóa app không dùng
– kiểm tra port public bằng scan ngoài
– đổi/thu hồi secret nghi ngờ

Lệnh kiểm tra port từ ngoài có thể dùng VPS khác:

nmap -Pn example.com

Mục tiêu: chỉ thấy 80, 443, có thể thêm VPN port.


Kết luận thực tế

Homelab an toàn hơn không đến từ một công cụ duy nhất. Nó đến từ thiết kế nhiều lớp:

Reverse proxy làm cửa vào.
SSO gom định danh.
2FA chặn mất mật khẩu.
Firewall giảm bề mặt tấn công.
VPN giữ app nhạy cảm ở riêng.
Backup cứu khi mọi thứ hỏng.
Monitoring giúp phát hiện sớm.

Bắt đầu nhỏ: Caddy + Authentik/Authelia + UFW + WireGuard + restic. Public ít app nhất có thể. App quản trị để sau VPN. Tài khoản admin bật 2FA. Backup test được.

Homelab tốt không phải homelab nhiều app nhất. Homelab tốt là homelab bạn hiểu, cập nhật được, khôi phục được, bị tấn công vẫn không sụp toàn bộ.

#firewall #homelab #proxy #reverse #toan
Chia sẻ:
← Trước
Bộ app self-hosted giúp gia đình quản lý mọi thứ tại nhà

Bài viết tương tự

Bình luận

Chưa có bình luận. Hãy là người đầu tiên!