Jak mikroHUB chroni Twoją infrastrukturę sieciową
Wersja dokumentu: 2026-03-22 · Pytania: [email protected]
INTERNET
┌────────────────────┬──────────────────────┐
│ HTTPS/443 │ WSS/443 │ WG/UDP 51820
│ (TLS 1.2+) │ (WebSocket) │ (WireGuard)
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────┐
│ NGINX REVERSE PROXY (mikrohub.io) │
│ ┌──────────────┐ ┌──────────────┐ ┌────────────────────────┐ │
│ │ Let's Encrypt │ │ HSTS Preload │ │ CSP + Security Headers │ │
│ │ ECDSA cert │ │ max-age=2yr │ │ X-Frame, X-Content │ │
│ └──────────────┘ └──────────────┘ └────────────────────────┘ │
│ Ports open : 80 (→301), 443, 51820/UDP │
│ Ports BLOCKED: 3001 (API), 6379 (Redis) │
└──────────┬──────────────────────┬───────────────────┬───────────┘
│ :3001 │ :3001/ws │ :51820
▼ ▼ ▼
┌──────────────────┐ ┌──────────────┐ ┌──────────────────────────┐
│ EXPRESS API │ │ WebSocket │ │ WireGuard (wg0) │
│ (Node.js) │ │ Server │ │ 10.99.0.1/16 │
│ │ │ One-time │ │ Per-device /32 peer │
│ JWT validation │ │ ticket auth │ │ No split tunnel │
│ 60s session cache│ │ (no JWT │ │ │
│ 1h max token age │ │ in URL) │ │ Devices: 10.99.x.y │
└────────┬─────────┘ └──────────────┘ └──────────────────────────┘
│
┌─────┴──────┐
▼ ▼
┌────────┐ ┌────────┐
│Supabase│ │ Redis │
│Postgres│ │ TLS │
│(cloud) │ │(local) │
│RLS on │ │ Auth │
│all tbl │ │ reqd │
└────────┘ └────────┘Cały ruch zewnętrzny kończy się na Nginx z TLS 1.2+. Wewnętrzne usługi (API port 3001, Redis port 6379) są zablokowane na poziomie firewalla i nigdy nie są wystawione do internetu.
| Warstwa | Mechanizm |
|---|---|
Uwierzytelnianie użytkownikaPKCE | Supabase Auth z przepływem PKCE (nie implicit) |
Przechowywanie tokenówCOOKIE | Cookies Secure + SameSite=Lax (nie localStorage) |
Czas życia tokenuTTL | Maks. 1 godzina, cache 60 s, wymuszone odświeżanie |
Unieważnianie sesjiREVOKE | Unieważnianie w pamięci + blacklist tokenów |
Uwierzytelnianie WebSocketTICKET | Jednorazowy ticket (JWT nigdy w URL) |
Uwierzytelnianie kluczem APISHA-256 | Hash SHA-256, scope per-zasób, wymuszane wygasanie |
Uwierzytelnianie agenta urządzeniaAGENT | Hash SHA-256 tokenu, rate-limit (2 zap./30 s) |
MFAMFA | TOTP (aplikacja) + WebAuthn/FIDO2 (passkeys, YubiKey) |
AES-256-GCM z losowym IV dla każdego wpisu, walidowany auth tag
Zapisane jako iv:tag:ciphertext w Supabase (nigdy plaintext)
Deszyfrowane wyłącznie przy odpytywaniu, w pamięci, nigdy nie logowane
RouterOS API-SSL z szyfrowanym połączeniem TLS
Bezpośrednie połączenie TLS przez API-SSL (port 8729). Pełny dostęp zarządczy.
Szyfrowany tunel — zero otwartych portów na routerze.
Bezpośrednie połączenie TLS tylko do odczytu. Brak dostępu do zapisu.
Urządzenie wysyła dane przez HTTPS. Brak ruchu przychodzącego.
| Komponent | Zabezpieczenie |
|---|---|
| ✓TLS | TLSv1.2 + TLSv1.3, szyfry ECDHE, HSTS preload |
| ✓Firewall (UFW) | Otwarte tylko 80, 443, 51820/UDP. API (3001) i Redis (6379) — DENY |
| ✓Redis | TLS włączone, hasło wymagane, bind tylko na localhost |
| ✓Nagłówki Nginx | HSTS, X-Frame-Options, X-Content-Type-Options, CSP, Permissions-Policy |
| ✓Rate limiting | Globalnie 300/15 min, Auth 5/min, Admin 30/15 min, Agent 2/30 s |
| ✓Parametry DH | 2048-bit dhparam dla forward secrecy |
| Standard | Status |
|---|---|
| HTTPS wszędzie | ✅Wymuszane |
| Szyfrowanie w spoczynku | ✅AES-256-GCM dla poświadczeń |
| Szyfrowanie w tranzycie | ✅TLS + WireGuard |
| Uwierzytelnianie | ✅JWT + MFA + PKCE |
| Autoryzacja | ✅RBAC + RLS |
| Ścieżka audytu | ✅Pełny log audytu z śledzeniem IP |
| Usuwanie danych (RODO) | ✅Endpoint usuwania konta |
| Zarządzanie sesjami | ✅Blacklist tokenów + wymuszone odświeżanie |
Chętnie odpowiemy na pytania potencjalnych klientów i audytorów.