Twoja Cyfrowa Twierdza: Jak Ukryć Aplikacje Przed Internetem Dzięki Tailscale

Tailscale Tunnel

W dzisiejszym cyfrowym świecie wystawienie jakiejkolwiek usługi na publiczny adres IP jest jak zaproszenie dla nieproszonych gości. Automatyczne skanery, boty próbujące odgadnąć hasła i napastnicy szukający luk w zabezpieczeniach działają bez przerwy. Co jednak, jeśli moglibyśmy sprawić, że nasze najważniejsze aplikacje – menedżer haseł jak Vaultwarden czy system monitorowania bezpieczeństwa Wazuh – staną się całkowicie niewidoczne dla publicznego Internetu, a jednocześnie pozostaaną w pełni dostępne dla nas, z dowolnego miejsca na świecie? Gdy ktokolwiek inny spróbuje wejść na adres domeny którejkolwiek z naszych zabezpieczonych aplikacji lub witryn zobaczy błąd:

Blad polaczenia ze strona

Wystarczy że jesteśmy podłączeni do naszej sieci Tailscale i wszystko działa poprawnie.

Polaczenie przez Tailscale

Brzmi jak magia? To prostsze, niż myślisz. W tym artykule przeprowadzimy Cię przez proces budowy osobistej, pancernej sieci, która ukryje Twoje cyfrowe skarby przed wzrokiem ciekawskich. Zbudujemy rozwiązanie oparte na serwerze VPS, technologii Tailscale i kilku sprytnych konfiguracjach, które zapewnią Ci spokój ducha.

Architektura Naszej Twierdzy

Nasz cel jest prosty: uzyskać dostęp do naszych usług pod standardowymi, łatwymi do zapamiętania domenami (np. vaultwarden.mojadomena.pl), ale tylko wtedy, gdy jesteśmy połączeni z naszą prywatną, bezpieczną siecią.

Oto elementy naszej układanki:

  • Serwer VPS: Centralny punkt, na którym zainstalowane są nasze krytyczne aplikacje: Wazuh, Vaultwarden i AdGuard Home, który będzie pełnił kluczową rolę jako nasz wewnętrzny serwer DNS.
  • Tailscale: Sekretny składnik. To darmowa usługa oparta na protokole WireGuard, która tworzy wirtualną, płaską sieć prywatną (tzw. „tailnet”) pomiędzy wszystkimi naszymi urządzeniami – serwerem VPS, domowym serwerem TrueNAS Scale, laptopem czy smartfonem.
  • Nginx: Niezawodny reverse proxy, który będzie pełnił rolę inteligentnego recepcjonisty, kierując ruch do odpowiednich aplikacji.
  • Let’s Encrypt z Cloudflare: Zautomatyzowany system certyfikatów SSL, który zabezpieczy nasze połączenia, nawet jeśli serwer jest ukryty przed światem.

Krok 1: Niewidzialność Dzięki Nginx i Nietypowemu Portowi

Pierwszym krokiem jest sprawienie, aby Nginx przestał nasłuchiwać na publicznym adresie IP serwera. Zamiast tego, każemy mu nasłuchiwać wyłącznie na prywatnym adresie IP, który serwer otrzymał w sieci Tailscale (zazwyczaj zaczynającym się od 100.x.x.x).

Podczas naszych testów odkryliśmy kluczowy fakt: demon Tailscale na serwerze rezerwuje dla swoich wewnętrznych funkcji standardowy port HTTPS 443. Walka z nim jest bezcelowa. Zamiast tego, omijamy problem, przenosząc nasze prywatne usługi na inny, wysoki port – w naszym przypadku 4443.

Oto jak wygląda ostateczna, uproszczona konfiguracja dla jednej z naszych usług, np. Vaultwarden:

# /etc/nginx/sites-available/vaultwarden

# Ten blok przechwytuje ruch na porcie 80 i od razu przekierowuje go
# na nasz bezpieczny, niestandardowy port HTTPS.
server {
    listen 100.98.14.29:80;
    server_name vaultwarden.solutionsinc-it.co.uk;
    return 301 https://$host:4443$request_uri;
}

# Główny blok obsługujący naszą usługę
server {
    # Nasłuchuj tylko na IP Tailscale i niestandardowym porcie 4443 z włączonym SSL
    listen 100.98.14.29:4443 ssl http2;
    server_name vaultwarden.solutionsinc-it.co.uk;

    # Standardowa konfiguracja certyfikatów Let's Encrypt
    ssl_certificate /etc/letsencrypt/live/vaultwarden.solutionsinc-it.co.uk/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vaultwarden.solutionsinc-it.co.uk/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    
    location / {
        proxy_pass [http://127.0.0.1:8080](http://127.0.0.1:8080); # Przekaż ruch do lokalnej aplikacji
        # ... dodatkowe nagłówki proxy ...
    }

    # ... inne potrzebne bloki, np. dla WebSocketów ...
}

Tę samą strukturę stosujemy dla Wazuha, AdGuarda i każdej innej aplikacji, którą chcemy ukryć.

Krok 2: Magia DNS, czyli Jak Trafić Do Celu

Skoro serwer jest niewidoczny, skąd nasze komputery mają wiedzieć, że vaultwarden.solutionsinc-it.co.uk znajduje się pod prywatnym adresem 100.98.14.29? Tutaj wkracza potęga połączonych sił Tailscale i AdGuard Home.

  1. Split DNS w Tailscale: W panelu DNS Tailscale używamy funkcji „Split DNS”. Tworzymy reguły, które mówią: „Dla domeny vaultwarden.solutionsinc-it.co.uk (i innych naszych prywatnych domen), prawidłowym adresem IP jest 100.98.14.29”.
  2. Centralny DNS AdGuard: W panelu Tailscale, jako jedyny „Global nameserver” dla całej naszej sieci, ustawiamy adres IP naszego AdGuarda na serwerze VPS (100.98.14.29). To sprawia, że wszystkie zapytania DNS z naszych urządzeń trafiają najpierw do niego.
  3. Przepisywanie DNS w AdGuard: To jest ostatni, kluczowy element. W panelu AdGuard Home, w sekcji Filtry -> Przepisywanie DNS, tworzymy proste reguły:
    • vaultwarden.solutionsinc-it.co.uk -> 100.98.14.29
    • security.solutionsinc-it.co.uk -> 100.98.14.29
    • Itd.

Dzięki temu, gdy wpisujesz w przeglądarce vaultwarden.solutionsinc-it.co.uk, zapytanie trafia do Twojego AdGuarda, który, zamiast pytać publiczny internet, od razu odpowiada poprawnym, prywatnym adresem IP.

Krok 3: Niewidzialny Strażnik Certyfikatów

Pozostał ostatni problem: jak automatycznie odnawiać certyfikaty Let’s Encrypt dla serwera, który jest niewidoczny dla publicznego internetu? Standardowa metoda weryfikacji przez HTTP nie zadziała.

Rozwiązaniem jest weryfikacja przez DNS-01. Używamy do tego wtyczki certbot-dns-cloudflare. Po jednorazowej konfiguracji, która polega na wygenerowaniu tokenu API w Cloudflare i zapisaniu go na serwerze, certbot podczas odnawiania certyfikatu będzie automatycznie dodawał i usuwał specjalny rekord TXT w naszej strefie DNS. Let’s Encrypt weryfikuje ten rekord, potwierdzając naszą własność domeny bez potrzeby łączenia się z naszym serwerem. To sprawia, że cała konfiguracja jest w 100% bezobsługowa.

Podsumowanie: Spokój Ducha w Cenie Numeru Portu

Po wdrożeniu tej konfiguracji osiągnęliśmy coś niezwykłego. Nasze najważniejsze aplikacje nie są już tylko chronione hasłem – one po prostu nie istnieją dla nikogo spoza naszej prywatnej sieci. Atakujący nie mogą nawet sprawdzić, czy na naszym serwerze działa jakakolwiek usługa. Powierzchnia ataku została zredukowana niemal do zera.

Jedyną ceną za ten poziom bezpieczeństwa jest konieczność dopisania :4443 na końcu adresu. To niewielka niedogodność w zamian za spokój ducha i pewność, że nasza cyfrowa twierdza pozostaje niewidzialna dla reszty świata.

Andre Selfie
Andrzej Majewski

Moja fascynacja technologią zaczęła się podczas studiów informatycznych na Uniwersytecie Zielonogórskim. Od czasu przeprowadzki do Wielkiej Brytanii w 2015 roku i osiedlenia się na stałe w Bournemouth, przekułem tę pasję w karierę zawodową poświęconą infrastrukturze o wysokiej wydajności.W głębi duszy jestem entuzjastą Linuxa – to zaangażowanie wykracza poza moją pracę zawodową w SolutionsInc i obejmuje również mój rozbudowany, prywatny homelab. Niezależnie od tego, czy zarządzam złożonymi architekturami serwerowymi przez ISPConfig, buduję systemy VoIP w ramach Phones Rescue, czy tworzę narzędzia do automatyzacji w Pythonie, najlepiej czuję się, podejmując wyzwania związane z projektowaniem wydajnych rozwiązań open-source

Komentarze

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *