CallMeTechie
EN Anmelden
Home Produkte Blog Über mich Kontakt

Zugriffskontrolle

v1.x · Updated vor 1 Monat

Was macht ACL?

Jede Route in GateControl ist standardmäßig über ihre Domain öffentlich erreichbar. Jeder im Internet kann nas.example.com aufrufen. ACL ändert das:

Ohne ACL:

Internet (jede IP)  →  Caddy  →  nas.example.com  →  Backend  ✓
VPN-Peer 10.8.0.3  →  Caddy  →  nas.example.com  →  Backend  ✓
VPN-Peer 10.8.0.5  →  Caddy  →  nas.example.com  →  Backend  ✓

Mit ACL (nur Peer "Laptop" erlaubt):

Internet (jede IP)  →  Caddy  →  nas.example.com  →  BLOCKIERT ✕
VPN-Peer 10.8.0.3  →  Caddy  →  nas.example.com  →  Backend  ✓  (Laptop)
VPN-Peer 10.8.0.5  →  Caddy  →  nas.example.com  →  BLOCKIERT ✕  (iPhone)

ACL macht die Route effektiv nur über VPN erreichbar und zusätzlich nur für ausgewählte Peers.

Wie funktioniert es technisch?

Caddy prüft bei jeder Anfrage die IP-Adresse des Clients mit dem remote_ip Matcher (src/services/caddyConfig.js, acl_enabled-Block):

  • Anfragen über das VPN haben eine WireGuard-IP (z.B. 10.8.0.3)
  • Anfragen aus dem Internet haben eine öffentliche IP (z.B. 203.0.113.50)
  • Für jeden ausgewählten Peer wird die erste IP aus peers.allowed_ips genommen und als /32-Range in den Matcher geschrieben (z. B. 10.8.0.3/32)
  • Öffentliche IPs sind nie in der Liste → werden immer blockiert

Die ACL-Konfiguration wird automatisch in die Caddy JSON-Config geschrieben. Es gibt keine manuelle Konfiguration.

Use Case: Admin-Panel nur für den Laptop

Ausgangssituation:

Du betreibst ein Synology NAS Zuhause. GateControl erstellt die Route nas.example.com die auf Port 5001 (DSM Web UI) zeigt. Ohne weitere Einschränkung kann jeder im Internet die Login-Seite deines NAS sehen.

Ziel:

Nur dein Arbeits-Laptop soll auf nas.example.com zugreifen können. Nicht dein Smartphone, nicht das Internet.

Einrichtung:

  1. Öffne die Route nas.example.com im Edit-Modal
  2. Aktiviere Peer-Zugriffskontrolle
  3. In der Peer-Checkliste: Nur "Laptop Büro" (10.8.0.3) auswählen
  4. Speichern

Ergebnis:

Quelle IP bei Caddy Zugriff
Laptop Büro (VPN aktiv) 10.8.0.3 Erlaubt
iPhone (VPN aktiv) 10.8.0.5 Blockiert
Beliebiger Internet-User 203.0.113.x Blockiert
Hacker / Bot 45.33.x.x Blockiert

Dein NAS Admin-Panel ist jetzt nur erreichbar wenn du am Laptop sitzt und der VPN-Tunnel aktiv ist.

Weitere Use Cases

Entwicklungsserver nur für das Dev-Team

Route staging.example.com → Dev-Server auf Port 3000

ACL: Nur Peers "Dev-Laptop-1", "Dev-Laptop-2", "Dev-Laptop-3" erlaubt. QA-Team und Management können die Staging-Umgebung nicht sehen.

Monitoring-Dashboard nur vom Office

Route grafana.example.com → Grafana auf Port 3000

ACL: Nur Peer "Office-Server" erlaubt. Mitarbeiter im Home-Office haben keinen Zugriff auf das Monitoring.

Verschiedene Dienste für verschiedene Gruppen

Route Erlaubte Peers Zweck
nas.example.com Laptop, Smartphone Dateizugriff für den Admin
admin.example.com Nur Laptop Sensibles Admin-Panel
public-api.example.com Keine ACL Öffentliche API ohne Einschränkung

Kombination mit anderen Features

ACL lässt sich mit anderen Sicherheits-Features kombinieren:

Kombination Wirkung
ACL + Route Auth Erst VPN-IP prüfen, dann Login mit Passwort/2FA
ACL + Rate Limiting VPN-only Zugang mit Anfragen-Begrenzung
ACL + IP Access Control ACL für VPN-Peers + IP-Filter für zusätzliche Einschränkung
ACL allein Einfachste Variante: nur ausgewählte VPN-Geräte kommen durch

Wichtige Hinweise

  • ACL blockiert nur den Zugriff über Caddy (HTTP/HTTPS Routen). Der direkte VPN-Zugang zwischen Peers wird nicht eingeschränkt.
  • Wenn ein Peer deaktiviert oder gelöscht wird, wird er automatisch aus der ACL entfernt.
  • ACL funktioniert nur für HTTP-Routen, nicht für L4 (TCP/UDP) Routen.
  • Die ACL-Prüfung ist die erste Prüfung die Caddy durchführt — noch vor Auth, Rate Limiting oder anderen Handlern.

Was macht es?

IP Access Control filtert Anfragen basierend auf der IP-Adresse des Clients, bevor sie das Backend erreichen. Im Gegensatz zur Peer ACL (die nur VPN-Peer-IPs filtert) arbeitet der IP-Filter mit jeder IP-Adresse — aus dem Internet, VPN oder lokalen Netzwerk.

Whitelist-Modus (nur diese IPs erlauben):

203.0.113.50 (Büro-IP)     →  Caddy  →  Backend  ✓  (in Whitelist)
198.51.100.10 (Home-IP)    →  Caddy  →  BLOCKIERT ✕  (nicht in Whitelist)
45.33.32.1 (Bot)           →  Caddy  →  BLOCKIERT ✕  (nicht in Whitelist)

Blacklist-Modus (diese IPs blockieren):

203.0.113.50 (Büro-IP)     →  Caddy  →  Backend  ✓  (nicht in Blacklist)
198.51.100.10 (Angreifer)  →  Caddy  →  BLOCKIERT ✕  (in Blacklist)
45.33.32.1 (CN-Bot)        →  Caddy  →  BLOCKIERT ✕  (Land CN in Blacklist)

Wie funktioniert es technisch?

Die IP-Filterung erfolgt über eine Forward-Auth-Subrequest an GateControl (Node.js), die vor dem Reverse Proxy ausgeführt wird.

Drei Regeltypen:

Typ Beispiel Prüfung
Einzelne IP 203.0.113.50 Exakter Vergleich
CIDR-Bereich 10.0.0.0/8 Bitmaske: (clientIP & mask) === (rangeIP & mask)
Ländercode DE, US, CN GeoIP-Lookup via ip2location.io API

Ablauf bei jeder Anfrage:

  1. Caddy leitet Anfrage an GateControl Forward-Auth weiter
  2. GateControl extrahiert die Client-IP (strippt ::ffff: IPv6-Prefix)
  3. Prüft jede Regel sequentiell (IP → CIDR → Country)
  4. Country-Lookup: API-Call zu ip2location.io mit 24h Cache (max 10.000 Einträge)
  5. Whitelist: Match → erlaubt, kein Match → blockiert
  6. Blacklist: Match → blockiert, kein Match → erlaubt

Regeln werden als JSON in der Datenbank gespeichert:

[
  { "type": "ip", "value": "203.0.113.50" },
  { "type": "cidr", "value": "10.0.0.0/8" },
  { "type": "country", "value": "CN" }
]

Use Cases

Nur Büro-Netzwerk erlauben

Route internal.example.com → Interne App. Whitelist mit CIDR 185.10.20.0/24 (Büro-IP-Range). Nur Mitarbeiter im Büro (oder über Büro-VPN) können zugreifen.

Bot-Traffic aus bestimmten Ländern blockieren

Route shop.example.com → Webshop. Blacklist mit Ländercodes CN, RU, KP. Reduziert automatisierten Spam und Brute-Force-Versuche erheblich.

Bekannte Angreifer-IPs blockieren

Route api.example.com → API. Blacklist mit einzelnen IPs die in Logs als Angreifer aufgefallen sind. Schnelle Reaktion ohne Firewall-Zugang.

Kombination mit anderen Features

Kombination Wirkung
IP-Filter + Peer ACL Doppelte Filterung: ACL für VPN-Peers, IP-Filter für zusätzliche Internet-IPs
IP-Filter + Rate Limiting Erlaubte IPs werden zusätzlich rate-limited
IP-Filter + Route Auth IP-Prüfung vor Login — blockierte IPs sehen nicht mal die Login-Seite
IP-Filter + Basic Auth IP-Filter wird über Forward Auth geprüft (funktioniert nicht mit Basic Auth)

Wichtige Hinweise

  • Unterschied zu Peer ACL: ACL filtert nur WireGuard-Peer-IPs (10.8.0.x). IP Access Control filtert jede beliebige IP-Adresse.
  • Country-Lookup erfordert einen ip2location.io API Key. Ohne Key werden Country-Regeln ignoriert.
  • Der GeoIP-Cache speichert bis zu 10.000 Einträge für 24 Stunden. Bei Cache-Miss wird ein API-Call ausgeführt (max 5 Sekunden Timeout).
  • IPv6-mapped IPv4-Adressen (::ffff:192.168.1.1) werden automatisch auf IPv4 reduziert.
  • IP Access Control funktioniert nur mit Route Auth oder als eigenständiger Forward-Auth-Check. Bei Basic Auth ist der IP-Filter nicht verfügbar.
  • Eine leere Whitelist erlaubt niemanden. Eine leere Blacklist blockiert niemanden.
  • IP-Filter ist nur für HTTP-Routen verfügbar, nicht für L4 (TCP/UDP).

Cookie Settings

Wir verwenden Cookies, um Ihre Erfahrung zu verbessern. Essentielle Cookies sind immer aktiv.

Datenschutzerklärung
ESC
↑↓ navigate open esc close