{"id":32007,"date":"2026-07-06T13:22:00","date_gmt":"2026-07-06T11:22:00","guid":{"rendered":"https:\/\/contabo.com\/blog\/?p=32007"},"modified":"2026-07-08T12:47:27","modified_gmt":"2026-07-08T10:47:27","slug":"pangolin-vps-selbst-hosten","status":"publish","type":"post","link":"https:\/\/contabo.com\/blog\/de\/pangolin-vps-selbst-hosten\/","title":{"rendered":"Pangolin auf einem VPS selbst hosten (Cloudflare Tunnels ersetzen)"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"630\" src=\"https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps-.webp\" alt=\"Pangolin auf einem VPS selbst hosten (Cloudflare Tunnels ersetzen)\" class=\"wp-image-31996\" srcset=\"https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps-.webp 1200w, https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps--600x315.webp 600w, https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps--768x403.webp 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/figure>\n\n\n\n<p><strong>Kurz gesagt.<\/strong> Pangolin ist eine m\u00f6gliche Alternative zu Cloudflare Tunnels oder Tailscale. Du betreibst den Pangolin-Server auf einem VPS mit \u00f6ffentlicher IP, installierst den Newt-Client in deinem privaten Netz und leitest Traffic sicher \u00fcber WireGuard-Tunnel. Am heimischen Router musst du keine Ports \u00f6ffnen. Die Einrichtung dauert mit Docker Compose unter 30 Minuten. Pangolin verwaltet SSL-Zertifikate, Reverse Proxying und identit\u00e4tsbewusste Zugriffskontrolle \u00fcber ein einziges Dashboard.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-voraussetzungen\">Voraussetzungen<\/h2>\n\n\n\n<p>Bevor du mit der Pangolin-Installation startest, stelle sicher, dass folgendes bereitsteht:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ein VPS mit \u00f6ffentlicher IP. Ein Contabo VPS der Einstiegsklasse bew\u00e4ltigt den gesamten Stack ohne Probleme und hat noch Kapazit\u00e4t f\u00fcr weitere Dienste daneben.<\/li>\n\n\n\n<li>Ubuntu 22.04, 24.04 oder 26.04 (Neuinstallation empfohlen).<\/li>\n\n\n\n<li>Docker und das Docker-Compose-Plugin installiert.<\/li>\n\n\n\n<li>Eine Domain oder Subdomain mit einem A-Record, der auf die VPS-IP zeigt. Du ben\u00f6tigst Zugriff auf die DNS-Zonenverwaltung deiner Domain.<\/li>\n\n\n\n<li>Die Ports 22\/TCP, 80\/TCP, 443\/TCP, 51820\/UDP und 21820\/UDP in deiner Firewall ge\u00f6ffnet. Das l\u00e4sst sich einfach \u00fcber die <a href=\"https:\/\/contabo.com\/de\/firewall\/\">Contabo Firewall<\/a> einrichten.<\/li>\n<\/ul>\n\n\n\n<p>Auf der Seite deines privaten Netzes \u2013 also dein Heimserver, B\u00fcrorechner oder ein sonstiges Remote-Ger\u00e4t \u2013 brauchst du Docker oder die Newt-Bin\u00e4rdatei. Keine offenen Ports, keine Port-Weiterleitung, keine \u00f6ffentliche IP auf dieser Maschine erforderlich.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-schritt-1-den-vps-vorbereiten\">Schritt 1: Den VPS vorbereiten<\/h2>\n\n\n\n<p>Melde dich per SSH als root an und aktualisiere das System, bevor du weitermachst.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Verbinden: <code>ssh root@&lt;deine-vps-ip><\/code><\/li>\n\n\n\n<li>Aktualisieren: <code>apt update &amp;&amp; apt upgrade -y<\/code><\/li>\n\n\n\n<li>Docker und das Compose-Plugin aus dem offiziellen Docker-apt-Repository installieren:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>apt install -y ca-certificates curl gnupg\n\ninstall -m 0755 -d \/etc\/apt\/keyrings\n\ncurl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg \\\n  -o \/etc\/apt\/keyrings\/docker.asc\n\nchmod a+r \/etc\/apt\/keyrings\/docker.asc\n\necho \\\n  \"deb &#91;arch=$(dpkg --print-architecture) signed-by=\/etc\/apt\/keyrings\/docker.asc] \\\n  https:\/\/download.docker.com\/linux\/ubuntu \\\n  $(. \/etc\/os-release &amp;&amp; echo \"$VERSION_CODENAME\") stable\" \\\n  | tee \/etc\/apt\/sources.list.d\/docker.list &gt; \/dev\/null\n\napt update\n\napt install -y docker-ce docker-ce-cli containerd.io \\\n  docker-buildx-plugin docker-compose-plugin<\/code><\/pre>\n\n\n\n<p>Pr\u00fcfe die Installation mit <code>docker compose version<\/code>. Du solltest eine 2.x-Versionsangabe sehen.<\/p>\n\n\n\n<p>\u00d6ffne als N\u00e4chstes die Ports, die Pangolin ben\u00f6tigt. Jeder Contabo VPS und VDS kommt mit einer <a href=\"https:\/\/contabo.com\/de\/firewall\/\">kostenlosen integrierten Firewall<\/a>, die du direkt aus dem Customer Control Panel verwaltest \u2013 ohne zus\u00e4tzliche Software zu installieren. \u00d6ffne die <a href=\"https:\/\/help.contabo.com\/de\/support\/solutions\/articles\/103000390430-was-ist-contabo-firewall-und-wie-sch\u00fctzt-sie-meinen-vps-vds-\">Contabo-Firewall-Anleitung<\/a> und lege eingehende Erlaubnisregeln f\u00fcr folgende Ports an: 22\/TCP, 80\/TCP, 443\/TCP, 51820\/UDP und 21820\/UDP.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-schritt-2-pangolin-mit-docker-compose-installieren\">Schritt 2: Pangolin mit Docker Compose installieren<\/h2>\n\n\n\n<p>Der Pangolin-Server-Stack l\u00e4uft als drei Container. <strong>Pangolin<\/strong> \u00fcbernimmt Dashboard, API und Zugriffskontrolle. <strong>Gerbil<\/strong> verwaltet das WireGuard-Interface auf der VPS-Seite und belegt die exponierten Ports. Traefik l\u00e4uft im Netzwerk-Namespace von Gerbil, nicht direkt auf dem Host. <strong>Traefik<\/strong> terminiert TLS, stellt Let&#8217;s-Encrypt-Zertifikate automatisch bereit und leitet HTTP-Traffic an das richtige Ziel weiter. CrowdSec l\u00e4sst sich sp\u00e4ter als optionales Traefik-Plugin f\u00fcr reputationsbasiertes Blocking hinzuf\u00fcgen.<\/p>\n\n\n\n<p>Lege das Projektverzeichnis und die erforderlichen Unterverzeichnisse an:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p \/opt\/pangolin\/config\/db \\\n         \/opt\/pangolin\/config\/letsencrypt \\\n         \/opt\/pangolin\/config\/traefik\/logs\n\ncd \/opt\/pangolin<\/code><\/pre>\n\n\n\n<p>Generiere ein Secret f\u00fcr die Session-Signierung von Pangolin. Du brauchst die Ausgabe in <code>config.yml<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl rand -hex 32<\/code><\/pre>\n\n\n\n<p>Erstelle jetzt die vier Konfigurationsdateien. Schreibe jede in den angegebenen Pfad, bevor du mit der n\u00e4chsten weitermachst.<\/p>\n\n\n\n<p><strong><code>docker-compose.yml<\/code><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>name: pangolin\n\nservices:\n\n  pangolin:\n    image: docker.io\/fosrl\/pangolin:latest\n    container_name: pangolin\n    restart: unless-stopped\n    volumes:\n      - .\/config:\/app\/config\n    healthcheck:\n      test: &#91;\"CMD\", \"curl\", \"-f\", \"http:\/\/localhost:3001\/api\/v1\/\"]\n      interval: \"10s\"\n      timeout: \"10s\"\n      retries: 15\n\n  gerbil:\n    image: docker.io\/fosrl\/gerbil:latest\n    container_name: gerbil\n    restart: unless-stopped\n    depends_on:\n      pangolin:\n        condition: service_healthy\n    command:\n      - --reachableAt=http:\/\/gerbil:3004\n      - --generateAndSaveKeyTo=\/var\/config\/key\n      - --remoteConfig=http:\/\/pangolin:3001\/api\/v1\/\n    volumes:\n      - .\/config\/:\/var\/config\n    cap_add:\n      - NET_ADMIN\n      - SYS_MODULE\n    ports:\n      - 51820:51820\/udp\n      - 21820:21820\/udp\n      - 443:443\n      - 80:80\n      - 22:22\n\n  traefik:\n    image: docker.io\/traefik:v3.6\n    container_name: traefik\n    restart: unless-stopped\n    network_mode: service:gerbil\n    depends_on:\n      pangolin:\n        condition: service_healthy\n    command:\n      - --configFile=\/etc\/traefik\/traefik_config.yml\n    volumes:\n      - .\/config\/traefik:\/etc\/traefik:ro\n      - .\/config\/letsencrypt:\/letsencrypt\n      - .\/config\/traefik\/logs:\/var\/log\/traefik\n\nnetworks:\n  default:\n    driver: bridge\n    name: pangolin<\/code><\/pre>\n\n\n\n<p><strong><code>config\/traefik\/traefik_config.yml<\/code><\/strong> \u2013 ersetze <code>admin@example.com<\/code> durch deine echte E-Mail-Adresse:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>api:\n  insecure: true\n  dashboard: true\n\nproviders:\n  http:\n    endpoint: \"http:\/\/pangolin:3001\/api\/v1\/traefik-config\"\n    pollInterval: \"5s\"\n  file:\n    filename: \"\/etc\/traefik\/dynamic_config.yml\"\n\nexperimental:\n  plugins:\n    badger:\n      moduleName: \"github.com\/fosrl\/badger\"\n      version: \"v1.4.0\"\n\nlog:\n  level: \"INFO\"\n  format: \"common\"\n  maxSize: 100\n  maxBackups: 3\n  maxAge: 3\n  compress: true\n\ncertificatesResolvers:\n  letsencrypt:\n    acme:\n      httpChallenge:\n        entryPoint: web\n      email: \"admin@example.com\"\n      storage: \"\/letsencrypt\/acme.json\"\n      caServer: \"https:\/\/acme-v02.api.letsencrypt.org\/directory\"\n\nentryPoints:\n  web:\n    address: \":80\"\n  websecure:\n    address: \":443\"\n    transport:\n      respondingTimeouts:\n        readTimeout: \"30m\"\n    http:\n      tls:\n        certResolver: \"letsencrypt\"\n      encodedCharacters:\n        allowEncodedSlash: true\n        allowEncodedQuestionMark: true\n\nserversTransport:\n  insecureSkipVerify: true\n\nping:\n  entryPoint: \"web\"<\/code><\/pre>\n\n\n\n<p><strong><code>config\/traefik\/dynamic_config.yml<\/code><\/strong> \u2013 ersetze jeden Eintrag <code>pangolin.example.com<\/code> durch deinen Dashboard-Hostnamen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>http:\n  middlewares:\n    badger:\n      plugin:\n        badger:\n          disableForwardAuth: true\n    redirect-to-https:\n      redirectScheme:\n        scheme: https\n\n  routers:\n    main-app-router-redirect:\n      rule: \"Host(`pangolin.example.com`)\"\n      service: next-service\n      entryPoints:\n        - web\n      middlewares:\n        - redirect-to-https\n        - badger\n\n    next-router:\n      rule: \"Host(`pangolin.example.com`) &amp;&amp; !PathPrefix(`\/api\/v1`)\"\n      service: next-service\n      entryPoints:\n        - websecure\n      middlewares:\n        - badger\n      tls:\n        certResolver: letsencrypt\n\n    api-router:\n      rule: \"Host(`pangolin.example.com`) &amp;&amp; PathPrefix(`\/api\/v1`)\"\n      service: api-service\n      entryPoints:\n        - websecure\n      middlewares:\n        - badger\n      tls:\n        certResolver: letsencrypt\n\n    ws-router:\n      rule: \"Host(`pangolin.example.com`)\"\n      service: api-service\n      entryPoints:\n        - websecure\n      middlewares:\n        - badger\n      tls:\n        certResolver: letsencrypt\n\n  services:\n    next-service:\n      loadBalancer:\n        servers:\n          - url: \"http:\/\/pangolin:3002\"\n    api-service:\n      loadBalancer:\n        servers:\n          - url: \"http:\/\/pangolin:3000\"\n\ntcp:\n  serversTransports:\n    pp-transport-v1:\n      proxyProtocol:\n        version: 1\n    pp-transport-v2:\n      proxyProtocol:\n        version: 2<\/code><\/pre>\n\n\n\n<p><strong><code>config\/config.yml<\/code><\/strong> \u2013 ersetze alle drei Platzhalter-Domains und f\u00fcge das mit <code>openssl<\/code> generierte Secret ein:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gerbil:\n    start_port: 51820\n    base_endpoint: \"pangolin.example.com\"\n\napp:\n    dashboard_url: \"https:\/\/pangolin.example.com\"\n    log_level: \"info\"\n    telemetry:\n        anonymous_usage: true\n\ndomains:\n    domain1:\n        base_domain: \"example.com\"\n\nserver:\n    secret: \"paste-your-openssl-output-here\"\n    cors:\n        origins: &#91;\"https:\/\/pangolin.example.com\"]\n        methods: &#91;\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\"]\n        allowed_headers: &#91;\"X-CSRF-Token\", \"Content-Type\"]\n        credentials: false\n\nflags:\n    require_email_verification: false\n    disable_signup_without_invite: false\n    disable_user_create_org: false\n    allow_raw_resources: true<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-schritt-3-pangolin-starten-und-aufs-dashboard-zugreifen\">Schritt 3: Pangolin starten und aufs Dashboard zugreifen<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Stack starten: <code>docker compose up -d<\/code><\/li>\n\n\n\n<li>Pr\u00fcfen, ob alle drei Container laufen: <code>docker compose ps<\/code>. Gerbil und Traefik warten darauf, dass der Healthcheck von Pangolin erfolgreich durchl\u00e4uft, bevor sie starten \u2013 gib dem Ganzen etwa 30 Sekunden.<\/li>\n\n\n\n<li>Das Einmal-Setup-Token aus den Pangolin-Logs abrufen:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose logs pangolin<\/code><\/pre>\n\n\n\n<p>Suche nach dem Block <code>=== SETUP TOKEN GENERATED ===<\/code> und kopiere das Token.<\/p>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>\u00d6ffne <code>https:\/\/pangolin.example.com\/auth\/initial-setup<\/code> im Browser. Die erste Let&#8217;s-Encrypt-Zertifikatsanfrage kann bis zu 60 Sekunden dauern. Falls beim ersten Aufruf eine Zertifikatswarnung erscheint, warte eine Minute und lade die Seite neu.<\/li>\n\n\n\n<li>F\u00fcge das Setup-Token ein, lege deine Admin-E-Mail-Adresse und dein Passwort fest und erstelle dann deine erste Organisation.<\/li>\n<\/ol>\n\n\n\n<p>Kann Traefik kein Zertifikat beziehen, pr\u00fcfe, ob dein DNS-A-Record propagiert ist und ob nichts anderes die Ports 80 oder 443 auf dem Host belegt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-schritt-4-eine-private-site-per-newt-uber-wireguard-verbinden\">Schritt 4: Eine private Site per Newt \u00fcber WireGuard verbinden<\/h2>\n\n\n\n<p>Newt ist der Site-Connector-Agent von Pangolin. Er l\u00e4uft in deinem privaten Netz, baut eine ausgehende WireGuard-Verbindung zum Pangolin-Hub auf und leitet Traffic an deine lokalen Dienste weiter. Da Newt die Verbindung ausgehend initiiert, muss dein Heimrouter keine Ports \u00f6ffnen, keine Port-Weiterleitung einrichten und keine \u00f6ffentliche IP haben.<\/p>\n\n\n\n<p>Im Pangolin-Dashboard gehst du zu <strong>Sites<\/strong>, klickst auf <strong>Add Site<\/strong>, w\u00e4hlst <strong>Newt Tunnel<\/strong> und gibst der Site einen Namen. Pangolin zeigt dir drei Zugangsdaten: die Endpoint-URL, die Newt-ID und das Newt-Secret. Kopiere alle drei. Sie werden nur einmal angezeigt.<\/p>\n\n\n\n<p>Auf deinem Heimserver deployst du Newt per Docker Compose:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>services:\n  newt:\n    image: fosrl\/newt\n    container_name: newt\n    restart: unless-stopped\n    environment:\n      - PANGOLIN_ENDPOINT=https:\/\/pangolin.example.com\n      - NEWT_ID=&lt;deine-newt-id&gt;\n      - NEWT_SECRET=&lt;dein-newt-secret&gt;<\/code><\/pre>\n\n\n\n<p>Starte ihn mit <code>docker compose up -d<\/code>. Innerhalb weniger Sekunden wechselt der Site-Indikator im Dashboard deiner Pangolin-Instanz auf gr\u00fcn und zeigt <strong>Online<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-schritt-5-deinen-ersten-dienst-per-reverse-proxy-freigeben\">Schritt 5: Deinen ersten Dienst per Reverse Proxy freigeben<\/h2>\n\n\n\n<p>Sobald der Newt-Tunnel aktiv ist, braucht es keine Konfigurationsdatei-\u00c4nderungen, um einen Dienst freizugeben. Alles l\u00e4uft \u00fcber das Pangolin-Dashboard:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00d6ffne deine Site und klicke auf <strong>Add Resource<\/strong>.<\/li>\n\n\n\n<li>Vergib einen Namen f\u00fcr die Ressource und w\u00e4hle eine Subdomain.<\/li>\n\n\n\n<li>Gib unter <strong>Target Configuration<\/strong> die interne Adresse des Dienstes so ein, wie Newt ihn sieht. F\u00fcr einen Dienst unter 192.168.1.10:3000 in deinem Heimnetz tr\u00e4gst du <code>http:\/\/192.168.1.10:3000<\/code> ein. F\u00fcr einen Dienst im selben Docker-Netzwerk wie Newt verwendest du Containername und Port.<\/li>\n\n\n\n<li>Aktiviere HTTPS. Traefik stellt das Zertifikat automatisch bereit.<\/li>\n\n\n\n<li>Lege eine Zugriffsrichtlinie fest: \u00f6ffentlich, passwortgesch\u00fctzt oder auf bestimmte Nutzer oder E-Mail-Domains beschr\u00e4nkt.<\/li>\n<\/ul>\n\n\n\n<p>Die Ressource ist innerhalb von Sekunden unter ihrer Subdomain erreichbar. Wenn du einen Wildcard-A-Record hinzuf\u00fcgst (*.pangolin.example.com, der auf die VPS-IP zeigt), ist jede neue Ressource sofort erreichbar \u2013 ohne einen separaten DNS-Eintrag pro Dienst.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-schritt-6-browser-basierten-ssh-rdp-zugriff-einrichten-ab-v1-19\">Schritt 6: Browser-basierten SSH-\/RDP-Zugriff einrichten (ab v1.19)<\/h2>\n\n\n\n<p>Ab Pangolin 1.19 sind SSH, RDP und VNC als vollwertige \u00f6ffentliche Ressourcentypen neben HTTP verf\u00fcgbar. Ein Nutzer \u00f6ffnet die Ressource-URL, authentifiziert sich \u00fcber Pangolin und erh\u00e4lt eine vollst\u00e4ndige interaktive Session im Browser. Ein separater SSH-Client, eine <a href=\"https:\/\/contabo.com\/en\/remote-desktop\/\">Remote-Desktop<\/a>-App oder ein VNC-Viewer ist nicht erforderlich.<\/p>\n\n\n\n<p>Um Browser-SSH f\u00fcr einen VPS zu aktivieren, klickst du auf <strong>Add Resource<\/strong>, w\u00e4hlst <strong>SSH<\/strong> als Protokoll und den Modus <strong>Pangolin SSH<\/strong>. Dieser Modus setzt lediglich voraus, dass Newt als root auf dem Zielrechner l\u00e4uft. \u00c4nderungen an <code>sshd_config<\/code> oder PAM-Konfiguration sind nicht n\u00f6tig. Vergib eine Subdomain und eine Zugriffsrichtlinie \u2013 das Terminal ist dann live im Browser.<\/p>\n\n\n\n<p>F\u00fcr RDP w\u00e4hlst du <strong>RDP<\/strong> als Protokoll, tr\u00e4gst die IP des Windows-Hosts und Port 3389 als Ziel ein und vergibst eine Domain. Die Session wird im Browser gerendert, mit vollst\u00e4ndiger Zwischenablage und Dateitransfer-Unterst\u00fctzung.<\/p>\n\n\n\n<p>Browser-basiertes SSH, RDP und VNC erfordern Newt 1.13.0 oder neuer. F\u00fchre <code>docker compose pull &amp;&amp; docker compose up -d<\/code> auf deinem Heimserver aus, bevor du diese Ressourcentypen aktivierst.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-sicherheits-checkliste\">Sicherheits-Checkliste<\/h2>\n\n\n\n<p>Bevor du etwas Sensibles freigibst, arbeite diese Liste durch:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Setze ein starkes Admin-Passwort und \u00e4ndere es sofort, falls du bei der Ersteinrichtung ein schwaches verwendet hast.<\/li>\n\n\n\n<li>Beschr\u00e4nke den Dashboard-Zugriff auf bekannte IP-Adressen \u00fcber eine Pangolin-Zugriffsrichtlinie.<\/li>\n\n\n\n<li>Halte die Pangolin-, Gerbil- und Traefik-Images aktuell. F\u00fchre <code>docker compose pull &amp;&amp; docker compose up -d<\/code> aus <code>\/opt\/pangolin<\/code> regelm\u00e4\u00dfig aus. Ab Pangolin 1.19 gibt es optionale automatische Newt-Updates, die du im Dashboard pro Site aktivieren kannst.<\/li>\n\n\n\n<li>Pr\u00fcfe, ob deine <a href=\"https:\/\/help.contabo.com\/de\/support\/solutions\/articles\/103000390430-was-ist-contabo-firewall-und-wie-sch\u00fctzt-sie-meinen-vps-vds-\">Contabo-Firewall<\/a>-Regeln nur die Ports freigeben, die du wirklich brauchst.<\/li>\n\n\n\n<li>Aktiviere CrowdSec als optionales Traefik-Plugin, wenn deine Ressourcen \u00f6ffentlichem Traffic ausgesetzt sind. Es blockiert bekannte sch\u00e4dliche IPs am Eingang, bevor Anfragen deine Dienste erreichen.<\/li>\n\n\n\n<li>Sichere das <code>config\/<\/code>-Verzeichnis auf dem VPS regelm\u00e4\u00dfig. Es enth\u00e4lt die SQLite-Datenbank, TLS-Zertifikate und die gesamte Ressourcenkonfiguration.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-faq-pangolin-selbst-hosten\">FAQ: Pangolin selbst hosten<\/h2>\n\n\n\n<div class=\"schema-faq wp-block-yoast-faq-block\"><div class=\"schema-faq-section\" id=\"faq-question-1783507576017\"><strong class=\"schema-faq-question\">Wie viel RAM braucht Pangolin auf einem VPS?<\/strong> <p class=\"schema-faq-answer\">Die Container Pangolin, Gerbil und Traefik verbrauchen im Leerlauf zusammen nur wenige Hundert MB RAM. Ein VPS mit 4 GB RAM deckt den Stack komfortabel ab und hat noch Puffer f\u00fcr mehrere aktive Tunnel. Planst du, weitere Dienste auf demselben VPS zu betreiben \u2013 einen Monitoring-Stack, ein Wiki oder eine Datenbank \u2013 steig auf 8 GB oder mehr auf, damit sich die Dienste unter Last nicht gegenseitig behindern.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1783507590883\"><strong class=\"schema-faq-question\">Kann ich Pangolin ohne eigene Domain selbst hosten?<\/strong> <p class=\"schema-faq-answer\">Mit dem Standard-Setup nicht. Traefik verwendet den Let&#8217;s-Encrypt-HTTP-01-Challenge, um Zertifikate auszustellen. Das erfordert eine Domain mit einem g\u00fcltigen A-Record, der auf den VPS zeigt. Eine Domain kostet nur wenige Euro im Jahr und lohnt sich f\u00fcr jedes dauerhafte Remote-Access-Setup. Pangolin Cloud ist eine Alternative, wenn du die Steuerungsebene ohne eigenen VPS verwaltet haben m\u00f6chtest.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1783507600160\"><strong class=\"schema-faq-question\">Was ist der Newt-Client in Pangolin?<\/strong> <p class=\"schema-faq-answer\">Newt ist der Site-Connector von Pangolin: ein WireGuard-Tunnel-Client im Userspace, der in deinem privaten Netz l\u00e4uft und eine verschl\u00fcsselte ausgehende Verbindung zum Pangolin-Server aufbaut. Da Newt die Verbindung ausgehend initiiert, muss dein Heimrouter keine Ports \u00f6ffnen \u2013 nicht einmal WireGuards Standard-UDP-Port 51820. Newt fungiert au\u00dferdem als TCP\/UDP-Proxy und leitet Traffic vom Pangolin-Reverse-Proxy an Dienste in deinem lokalen Netz weiter.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1783507613892\"><strong class=\"schema-faq-question\">Wie aktualisiere ich Pangolin?<\/strong> <p class=\"schema-faq-answer\">Wechsle in das Verzeichnis <code>\/opt\/pangolin<\/code> und f\u00fchre <code>docker compose pull &amp;&amp; docker compose up -d<\/code> aus. Sichere vorher immer das <code>config\/<\/code>-Verzeichnis. Es enth\u00e4lt die SQLite-Datenbank und TLS-Zertifikate \u2013 einen einfachen Downgrade-Pfad gibt es nicht, sobald Migrationen gelaufen sind. F\u00fcr Newt auf deinem Heimserver gilt dasselbe Vorgehen. Ab Pangolin 1.19 gibt es optionale automatische Newt-Updates: Aktiviere sie im Dashboard auf Organisations- oder Site-Ebene, um Edge-Ger\u00e4te ohne manuellen Eingriff aktuell zu halten.<\/p> <\/div> <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Pangolin auf einem VPS selbst hosten bedeutet: WireGuard-Tunnel statt Cloudflare, kein Port-Forwarding am Heimrouter und vollst\u00e4ndige Kontrolle \u00fcber deinen Stack. Mit Docker Compose, automatischen SSL-Zertifikaten und dem Newt-Client bist du in unter 30 Minuten startklar.<\/p>\n","protected":false},"author":65,"featured_media":31996,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":"","_members_access_role":[],"_members_access_error":""},"categories":[1399],"tags":[],"ppma_author":[1489],"class_list":["post-32007","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials"],"uagb_featured_image_src":{"full":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps-.webp",1200,630,false],"thumbnail":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps--150x150.webp",150,150,true],"medium":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps--600x315.webp",600,315,true],"medium_large":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps--768x403.webp",768,403,true],"large":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps-.webp",1200,630,false],"1536x1536":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps-.webp",1200,630,false],"2048x2048":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps-.webp",1200,630,false]},"uagb_author_info":{"display_name":"Julia Mink","author_link":"https:\/\/contabo.com\/blog\/de\/author\/julia-mink\/"},"uagb_comment_info":0,"uagb_excerpt":"Pangolin auf einem VPS selbst hosten bedeutet: WireGuard-Tunnel statt Cloudflare, kein Port-Forwarding am Heimrouter und vollst\u00e4ndige Kontrolle \u00fcber deinen Stack. Mit Docker Compose, automatischen SSL-Zertifikaten und dem Newt-Client bist du in unter 30 Minuten startklar.","authors":[{"term_id":1489,"user_id":65,"is_guest":0,"slug":"julia-mink","display_name":"Julia Mink","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/26ce5d4ae17d160425d842da4ea00c56716ffb5d4c58ee0cfb73de57b1de5272?s=96&d=mm&r=g","author_category":"","user_url":"","last_name":"Mink","first_name":"Julia","job_title":"","description":""}],"_links":{"self":[{"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/posts\/32007","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/users\/65"}],"replies":[{"embeddable":true,"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/comments?post=32007"}],"version-history":[{"count":3,"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/posts\/32007\/revisions"}],"predecessor-version":[{"id":32047,"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/posts\/32007\/revisions\/32047"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/media\/31996"}],"wp:attachment":[{"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/media?parent=32007"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/categories?post=32007"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/tags?post=32007"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/ppma_author?post=32007"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}