INTEGRITY Dokumentace

Připojení pomocí vlastních klíčů SSH

Pokud chcete spravovat vlastní klíče SSH, můžete pomocí Cloudflare Tunnel vytvořit zabezpečené, výhradně odchozí spojení ze svého serveru do globální sítě Cloudflare. To vyžaduje spuštění cloudflared démon na serveru (nebo na jakémkoli jiném hostitelském počítači v privátní síti). Uživatelé, jejichž klíčům SSH server SSH důvěřuje, se k serveru mohou připojit po instalaci Cloudflare One Client na svém zařízení a zaregistrují se do vaší organizace Zero Trust. Uživatelé se pak mohou připojit přes SSH přímo na privátní hostname serveru (například ssh.internal.local). Přístup k serveru řídíte pomocí zásad Gateway na úrovni sítě místo zásad Access na úrovni aplikace.

Předpoklady

1. Vytvořte ukázkový server SSH

Tento příklad krok za krokem popisuje, jak nastavit server SSH na virtuálním počítači (VM) Google Cloud Platform (GCP), ale použít můžete jakýkoli počítač, který podporuje připojení SSH. Pokud už máte server SSH nakonfigurovaný, můžete přeskočit na Krok 2.

1.1 Vytvořte pár klíčů SSH

Před vytvořením instance VM budete muset vytvořit pár klíčů SSH.

  1. Otevřete terminál a zadejte následující příkaz:

    ssh-keygen -t rsa -f ~/.ssh/gcp_ssh -C <username in GCP>
  2. Po zobrazení výzvy zadejte přístupovou frázi. Budete ji muset zadat dvakrát.

    Budou vygenerovány dva soubory: gcp_ssh který obsahuje soukromý klíč, a gcp_ssh.pub obsahující veřejný klíč.

  3. Na příkazovém řádku zadejte:

    cat ~/.ssh/gcp_ssh.pub
  4. Zkopírujte výstup, budete ho potřebovat při vytváření instance VM v GCP.

1.2 Vytvořte instanci VM v GCP

Jakmile je pár SSH klíčů vytvořen, můžete vytvořit instanci VM.

  1. Ve vašem Google Cloud Console, vytvořit nový projekt.
  2. Přejděte na Compute Engine > Instance VM.
  3. Vyberte Vytvořit instanci.
  4. Pojmenujte instanci VM, například ssh-server.
  5. Přejděte níže na Pokročilé možnosti > Security > Spravovat Access.
  6. V části Přidat ručně vygenerované SSH klíče, vyberte Přidat položku a vložte veřejný klíč, který jste vytvořili.
  7. Vyberte Vytvořit.
  8. Jakmile vaše instance VM běží, otevřete rozbalovací nabídku vedle SSH a vyberte Otevřít v okně prohlížeče.

2. Připojte server k Cloudflare

Tato část se zabývá tím, jak vytvořit nový Cloudflare Tunnel pro váš server SSH. Stejný tunel můžete znovu použít pro všechny služby v privátní síti, které jsou dostupné z cloudflared hostitele.

  1. Přihlaste se do Cloudflare dashboardu a přejděte na Sítě > Tunnels.

    Přejděte na Tunnels ↗
  2. Vyberte Vytvořit tunel.

  3. Zadejte název tunelu. Doporučujeme zvolit název, který vystihuje typ prostředků, jež chcete přes tento tunel připojit (například enterprise-VPC-01).

  4. Vyberte Create Tunnel.

  5. Zvolte svůj operační systém, poté zkopírujte instalační příkaz a spusťte jej v terminálu na svém origin serveru.

  6. Počkejte, až se tunel připojí. Jakmile bude spojení navázáno, vyberte Pokračovat.

3. Použijte trasy podle názvu hostitele

Trasy hostname umožňují přímé připojení SSH k ssh.internal.local aniž byste museli spravovat statické směrování IP. Směrování podle názvu hostitele je užitečné zejména tehdy, když má váš server SSH neznámou nebo dočasnou IP adresu, například u dynamické infrastruktury od cloudových poskytovatelů.

Jak funguje směrování na základě hostname

Když v Cloudflare Tunnel vytvoříte hostname route:

  1. Uživatelé se připojují přes SSH k vašemu privátnímu hostname (například ssh [email protected]).
  2. Gateway přeloží hostname na počáteční přeložená IP adresa.
  3. Provoz je směrován přes tunel WARP do Cloudflare.
  4. Síťové zásady Gateway vyhodnocují připojení.
  5. Cloudflared proxuje připojení na privátní IP adresu vašeho SSH serveru.

Pokud nemáte nakonfigurovaný soukromý DNS resolver nebo se chcete připojit přes SSH rovnou na IP adresu, přeskočte na Krok 4.

3.1 Přidejte trasu podle názvu hostitele

Přidání trasy hostname do tunelu:

  1. Přejděte na Sítě > Tunnels a vyberte svůj tunel.

  2. Na Trasy kartě vyberte Přidat trasu, pak vyberte Privátní hostname.

  3. Zadejte hostname SSH serveru (například ssh.internal.local).

    Omezení formátu hostname

    • Limit znaků: Musí mít méně než 255 znaků.
    • Podporované zástupné znaky: Jeden zástupný znak (*) je povolen a musí představovat úplný DNS label. Příklad: *.internal.local
    • Nepodporované zástupné znaky: Následující formáty zástupných znaků nejsou podporované:
      • Částečné zástupné znaky, jako například *-dev.internal.local nebo dev-*.internal.local.
      • Zástupné znaky uprostřed, například foo*bar.internal.local nebo foo.*.internal.local.
      • Více zástupných znaků v hostname, například *.*.internal.local.
    • Ořezávání zástupných znaků: Zástupné znaky na začátku (*) jsou oříznuty a je předpokládána implicitní tečka (.) se předpokládá. Například *.internal.local se uloží jako internal.local ale bude odpovídat všem subdoménám na úrovni zástupného znaku (pokrývá foo.internal.local ale ne foo.bar.internal.local).
    • Odstranění teček: Počáteční a koncové tečky (.) jsou povoleny, ale jsou oříznuty.
  4. Vyberte Save.

3.2 Nakonfigurujte překlad DNS

Když Gateway přijme požadavek na váš privátní hostname, musí tento hostname přeložit na privátní IP adresu vašeho SSH serveru.

Scénář A: Použít systémový resolver (výchozí)

Standardně cloudflared používá privátní překladač DNS nakonfigurovaný na svém hostitelském počítači (například v /etc/resolv.conf na Linuxu). Pokud počítač, na kterém běží cloudflared už dokáže přeložit ssh.internal.local na jeho privátní IP adresu pomocí místního systémového resolveru, není nutná žádná další konfigurace. Můžete přeskočit na Krok 3.3.

Ověřte místní překlad DNS

Chcete-li zkontrolovat, zda cloudflared dokáže úspěšně přeložit ssh.internal.local, spusťte následující příkaz z cloudflared hostitele:

nslookup ssh.internal.local
Server:		127.0.2.2
Address:	127.0.2.2#53

Non-authoritative answer:
Name:	ssh.internal.local
Address: 10.2.0.3

Výstup by měl obsahovat privátní IP adresu serveru ( Interní IP GCP VM). Pokud se hostname nepodaří přeložit:

Scénář B: Použít konkrétní privátní DNS server (pokročilé)

Pokud potřebujete cloudflared použít konkrétní interní server DNS odlišný od výchozího resolveru hostitele, musíte tento server DNS výslovně připojit ke Cloudflare přes Trasa IP/CIDR. Také budete muset nakonfigurovat Zásada resolveru Gateway a směrovat dotazy na tento konkrétní privátní DNS server.

  1. Chcete-li vytvořit trasu IP/CIDR pro server DNS:

    1. Přejděte na Sítě > Trasy.

      Přejděte na Trasy ↗
    2. Vyberte Přidání trasy CIDR.

    3. Zadejte soukromou IP adresu interního DNS překladače.

    4. Vyberte Cloudflare Tunnel, který se připojuje k síti, ve které se tento server DNS nachází.

    5. Vyberte Vytvořit.

  2. Chcete-li vytvořit zásadu resolveru:

    1. Přejděte na Zásady provozu > Zásady resolveru.
    2. Vyberte Vytvořit zásadu.
    3. Vytvořte výraz, který odpovídá privátnímu hostname:
      SelektorOperátorHodnota
      Hostvssh.internal.local
    4. V části Nakonfigurujte vlastní DNS resolvery, zadejte privátní IP adresu svého interního serveru DNS.
    5. V rozbalovací nabídce vyberte - Private možnost směrování a virtuální síť přiřazené tunelu, který jste vybrali v předchozím kroku.
    6. Vyberte Vytvořit zásadu.

3.3 Nakonfigurujte Cloudflare One Clients

Chcete-li se připojit k privátním hostname, musí být Cloudflare One Clients nakonfigurováni tak, aby přesměrovávali následující provoz na Cloudflare:

3.3.1 Nakonfigurujte Split Tunnels

Ve svém WARP profil zařízení, nakonfigurujte Split Tunnels tak, aby počáteční přeložené IP adresy procházejí tunelem WARP. Konfigurace závisí na vašem Režim Split Tunnels:

3.3.2 Nakonfigurujte Local Domain Fallback

V Local Domain Fallback, smažte doménu nejvyšší úrovně pro svůj soukromý hostname. Tím nastavíte WARP tak, aby DNS dotaz k překladu odesílal do Cloudflare Gateway.

Pokud je například váš název hostitele SSH ssh.internal.local, odeberte internal.local z Local Domain Fallback.

4. (Volitelné) Použijte trasy IP

4.1 Přidejte trasu IP

Chcete-li se připojit k serveru SSH pomocí jeho IP adresy (namísto název hostitele), přidat trasu CIDR která obsahuje privátní IP adresu serveru.

4.2 Nakonfigurujte Cloudflare One Clients

WARP ve výchozím nastavení vylučuje provoz směřující na Prostor RFC 1918, což jsou IP adresy, které se obvykle používají v privátních sítích a nejsou dostupné z internetu. Aby mohl Cloudflare One Client odesílat provoz do vaší privátní sítě, musíte nakonfigurovat Split Tunnels tak, aby IP/CIDR vaší privátní sítě směrovala přes Cloudflare One Client.

  1. Nejprve zkontrolujte, zda váš Režim Split Tunnels je nastaveno na Vyloučit nebo Include režimu.

  2. Upravte trasy Split Tunnel podle režimu:

    Pokud používáte Vyloučit režimu:

    a. Odstraňte trasu obsahující rozsah IP/CIDR vaší privátní sítě. Pokud například vaše síť používá výchozí rozsah AWS 172.31.0.0/16, smažte 172.16.0.0/12.

    b. Znovu přidat rozsahy IP/CIDR které vaše privátní síť výslovně nepoužívá. Pro výše uvedený příklad AWS byste přidali nové položky pro 172.16.0.0/13, 172.24.0.0/14, 172.28.0.0/15, a 172.30.0.0/16. Tím se zajistí, že pouze provoz na 172.31.0.0/16 tras přes Cloudflare One Client.

    K určení, které IP adresy je třeba znovu přidat, můžete použít následující kalkulačku:

    Pokyny ke kalkulačce

    1. V Base CIDR, zadejte rozsah RFC 1918, který jste odstranili ze Split Tunnels.
    2. V Odečtené rozsahy CIDR, zadejte rozsah IP/CIDR používaný vaší privátní sítí.
    3. Znovu přidejte výsledky kalkulačky do seznamu režimu Split Tunnel Exclude.

    Zúžením rozsahu privátních IP adres zahrnutých v Cloudflare One Client snížíte riziko narušení uživatelova přístup k místním prostředkům.

    Pokud používáte Include režimu:

    1. Přidejte požadované Domény Zero Trust nebo IP adresy do seznamu Split Tunnel include.
    2. Přidejte trasu tak, aby to zahrnovalo rozsah IP/CIDR vaší privátní sítě.

5. (Volitelné) Vytvořte síťové zásady Gateway

Všechna zařízení zaregistrovaná ve vaší organizaci se mohou ve výchozím nastavení k serveru připojit přes SSH, pokud nevytvoříte síťové zásady Gateway, které konkrétním uživatelům přístup povolí nebo zablokují. Zásady lze vytvářet na základě identity uživatele, stavu zařízení, polohy a dalších kritérií.

  1. Přejděte na Zásady provozu > Nastavení provozu.
  2. V Proxy a kontrola, zapněte Povolit předávání provozu přes Secure Web Gateway.
  3. Vyberte TCP.
  4. Vyberte UDP (vyžadováno pro směrování provozu přes proxy na interní DNS resolvery).
  5. (Doporučeno) Chcete-li proxovat provoz pro diagnostické nástroje, jako je ping a traceroute, vyberte ICMP. Také možná budete muset aktualizovat systém a umožněte provoz ICMP přes cloudflared.
  1. Přidejte následující oprávnění do svého cloudflare_api_token:

    • Zero Trust Write
  2. Zapněte proxy TCP a/nebo UDP pomocí cloudflare_zero_trust_device_settings prostředek:

    resource "cloudflare_zero_trust_device_settings "global_warp_settings" {
    	account_id            = var.cloudflare_account_id
      gateway_proxy_enabled = true
    	gateway_udp_proxy_enabled = true
    }

Cloudflare nyní bude proxovat provoz ze zaregistrovaných zařízení, s výjimkou provozu vyloučeného ve vašem nastavení split tunelu. Další informace o tom, jak Gateway předává provoz, najdete v Proxy Gateway.

Příklady zásad

Následující příklad se skládá ze dvou zásad: první umožňuje vybraným uživatelům přístup k vašemu serveru SSH, druhá blokuje veškerý ostatní provoz.

Zásada 1: Allow autorizovaných uživatelů

  1. Přejděte na Zásady provozu > Zásady brány firewall > Síť.

  2. Vyberte Vytvořit zásadu.

  3. Pojmenujte zásadu (například Allow SSH to internal server).

  4. Vytvořte výraz, který odpovídá vašemu SSH hostname a autorizovaným uživatelům:

    Selektor Operátor Hodnota
    SNI v ssh.internal.local
    User Email v [email protected], [email protected]
  5. V Akce, vyberte Allow.

  6. Vyberte Vytvořit zásadu.

Zásada 2: Obecné blokování

Abyste uživatelům Cloudflare One Client zabránili v přístupu k celé vaší privátní síti, doporučujeme vytvořit obecná bloková zásada Gateway pro váš soukromý IP prostor. Poté můžete přidat zásady Povolit s vyšší prioritou (v Access nebo Gateway), které uživatelům udělí přístup ke konkrétním aplikacím nebo IP adresám.

Další zabezpečení pomocí zásad DNS

Pro další vrstvu ochrany vytvořte zásadu Gateway DNS, která bude řídit překlad DNS:

  1. Přejděte na Zásady provozu > Zásady brány firewall > DNS.

  2. Vyberte Vytvořit zásadu.

  3. Pojmenujte zásadu (například Allow SSH hostname resolution).

  4. Vytvořte výraz:

    Selektor Operátor Hodnota
    Host v ssh.internal.local
    User Email v [email protected], [email protected]
  5. V Akce, vyberte Allow.

  6. Vyberte Vytvořit zásadu.

6. Připojte se jako uživatel

Jakmile nastavíte trasu tunelu a zařízení uživatele, může se uživatel k počítači připojit přes SSH. Pokud váš SSH server vyžaduje klíč SSH, musí být tento klíč součástí příkazu SSH.

ssh -i ~/.ssh/gcp_ssh <username>@ssh.internal.local

Cloudflare One Client musí být připojen k vaší organizaci Zero Trust. Uživatelé se budou moci připojit, pokud odpovídají síťovým zásadám Gateway, které jste vytvořili.

Řešení potíží

Pokud se nemůžete připojit, ověřte následující:

  1. Potvrzení překladu DNS: Ze zařízení ověřte, že se vám daří úspěšně přeložit privátní název hostitele:

    nslookup ssh.internal.local
    Server:		127.0.2.2
    Address:	127.0.2.2#53
    
    Non-authoritative answer:
    Name:	ssh.internal.local
    Address: 172.64.128.48

    Dotaz by se měl přeložit pomocí DNS proxy WARP a vrátí Gateway počáteční přeloženou IP adresu. Pokud se dotaz nepodaří přeložit nebo vrátí jinou IP adresu, zkontrolujte své Local Domain Fallback konfigurace a Zásady resolveru Gateway.

  2. Zkontrolujte protokoly Gateway: Zkontrolujte své Síťové protokoly Gateway a zjistit, zda připojení neblokuje nějaká zásada.

  3. Ověřit stav tunelu: Ověřte, že je váš tunel funkční a připojený, a to kontrolou stav tunelu.

  4. Otestovat konektivitu k počáteční přeložené IP adrese: Když se připojujete k serveru SSH pomocí jeho privátního názvu hostitele, mělo by zařízení navázat připojení k počáteční přeložená IP adresa:

    ssh -v <username>@ssh.internal.local
    ...
    Authenticated to ssh.internal.local ([172.64.128.48]:22) using "publickey".
    ...

    Vyhledejte řádek zobrazující připojení k IP adrese v rozsahu IP adres vašeho účtu rozsah počáteční přeložené IP adresy. Pokud požadavek selže, ověřte, že počáteční přeložená IP adresa směruje přes tunel WARP. Můžete si také zkontrolovat protokoly tunelu potvrdit, že se požadavky směrují na privátní IP adresu serveru.