← Cloudflare One / cloudflare-one / networks / connectors / cloudflare-tunnel / use-cases / ssh
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
- A Organizace Cloudflare Zero Trust
- Cloudflare One Client nainstalováno na uživatelských zařízeních.
- Zařízení zaregistrováno ve vaší organizaci Zero Trust
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.
-
Otevřete terminál a zadejte následující příkaz:
ssh-keygen -t rsa -f ~/.ssh/gcp_ssh -C <username in GCP> -
Po zobrazení výzvy zadejte přístupovou frázi. Budete ji muset zadat dvakrát.
Budou vygenerovány dva soubory:
gcp_sshkterý obsahuje soukromý klíč, agcp_ssh.pubobsahující veřejný klíč. -
Na příkazovém řádku zadejte:
cat ~/.ssh/gcp_ssh.pub -
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.
- Ve vašem Google Cloud Console ↗, vytvořit nový projekt ↗.
- Přejděte na Compute Engine > Instance VM.
- Vyberte Vytvořit instanci.
- Pojmenujte instanci VM, například
ssh-server. - Přejděte níže na Pokročilé možnosti > Security > Spravovat Access.
- 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.
- Vyberte Vytvořit.
- 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.
-
Přihlaste se do Cloudflare dashboardu a přejděte na Sítě > Tunnels.
Přejděte na Tunnels ↗ -
Vyberte Vytvořit tunel.
-
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). -
Vyberte Create Tunnel.
-
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.
-
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:
- Uživatelé se připojují přes SSH k vašemu privátnímu hostname (například
ssh [email protected]). - Gateway přeloží hostname na počáteční přeložená IP adresa.
- Provoz je směrován přes tunel WARP do Cloudflare.
- Síťové zásady Gateway vyhodnocují připojení.
- 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:
-
Přejděte na Sítě > Tunnels a vyberte svůj tunel.
-
Na Trasy kartě vyberte Přidat trasu, pak vyberte Privátní hostname.
-
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.localnebodev-*.internal.local. - Zástupné znaky uprostřed, například
foo*bar.internal.localnebofoo.*.internal.local. - Více zástupných znaků v hostname, například
*.*.internal.local.
- Částečné zástupné znaky, jako například
- 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.localse uloží jakointernal.localale bude odpovídat všem subdoménám na úrovni zástupného znaku (pokrýváfoo.internal.localale nefoo.bar.internal.local). - Odstranění teček: Počáteční a koncové tečky (
.) jsou povoleny, ale jsou oříznuty.
-
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.localServer: 127.0.2.2
Address: 127.0.2.2#53
Non-authoritative answer:
Name: ssh.internal.local
Address: 10.2.0.3Výstup by měl obsahovat privátní IP adresu serveru ( Interní IP GCP VM). Pokud se hostname nepodaří přeložit:
- Ujistěte se, že váš privátní DNS resolver obsahuje záznam, který odkazuje na
ssh.internal.localna privátní IP adresu serveru. - V GCP možná budete muset přidejte privátní zónu do Cloud DNS ↗ tak, aby
internal.localse překládá pomocí vašeho privátního DNS resolveru.
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.
-
Chcete-li vytvořit trasu IP/CIDR pro server DNS:
-
Přejděte na Sítě > Trasy.
Přejděte na Trasy ↗ -
Vyberte Přidání trasy CIDR.
-
Zadejte soukromou IP adresu interního DNS překladače.
-
Vyberte Cloudflare Tunnel, který se připojuje k síti, ve které se tento server DNS nachází.
-
Vyberte Vytvořit.
-
-
Chcete-li vytvořit zásadu resolveru:
- Přejděte na Zásady provozu > Zásady resolveru.
- Vyberte Vytvořit zásadu.
- Vytvořte výraz, který odpovídá privátnímu hostname:
Selektor Operátor Hodnota Host v ssh.internal.local - V části Nakonfigurujte vlastní DNS resolvery, zadejte privátní IP adresu svého interního serveru DNS.
- V rozbalovací nabídce vyberte
- Privatemožnost směrování a virtuální síť přiřazené tunelu, který jste vybrali v předchozím kroku. - 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:
- Počáteční přeložené IP adresy:
- IPv4:
172.64.128.0/20 - IPv6:
2606:4700:0cf1:4000::/64
Toto je výchozí rozsah. Můžete nakonfigurovat vlastní počáteční přeložený rozsah IP adres pro IPv4, pokud je v konfliktu s vaší stávající sítí.
- IPv4:
- DNS dotazy pro váš soukromý hostname
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:
- Režim vyloučení: Odstranit
100.64.0.0/10ze seznamu Split Tunnels. Doporučujeme opětovné přidání rozsahů IP adres které nejsou výslovně používány pro služby Cloudflare One. Tím se snižuje riziko konfliktu se stávajícími konfiguracemi privátní sítě, které mohou využívat adresní prostor CGNAT. - Režim Include: Přidejte položky Split Tunnel pro následující IP adresy:
- IPv4:
172.64.128.0/20 - IPv6:
2606:4700:0cf1:4000::/64
Toto je výchozí rozsah. Můžete nakonfigurovat vlastní počáteční přeložený rozsah IP adres pro IPv4, pokud je v konfliktu s vaší stávající sítí.
- IPv4:
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.
-
Nejprve zkontrolujte, zda váš Režim Split Tunnels je nastaveno na Vyloučit nebo Include režimu.
-
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žte172.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, a172.30.0.0/16. Tím se zajistí, že pouze provoz na172.31.0.0/16tras 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
- V Base CIDR, zadejte rozsah RFC 1918, který jste odstranili ze Split Tunnels.
- V Odečtené rozsahy CIDR, zadejte rozsah IP/CIDR používaný vaší privátní sítí.
- 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:
- Přidejte požadované Domény Zero Trust nebo IP adresy do seznamu Split Tunnel include.
- 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í.
- Přejděte na Zásady provozu > Nastavení provozu.
- V Proxy a kontrola, zapněte Povolit předávání provozu přes Secure Web Gateway.
- Vyberte TCP.
- Vyberte UDP (vyžadováno pro směrování provozu přes proxy na interní DNS resolvery).
- (Doporučeno) Chcete-li proxovat provoz pro diagnostické nástroje, jako je
pingatraceroute, vyberte ICMP. Také možná budete muset aktualizovat systém a umožněte provoz ICMP přescloudflared.
-
Přidejte následující oprávnění do svého
cloudflare_api_token↗:Zero Trust Write
-
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ů
-
Přejděte na Zásady provozu > Zásady brány firewall > Síť.
-
Vyberte Vytvořit zásadu.
-
Pojmenujte zásadu (například
Allow SSH to internal server). -
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.localUser Email v [email protected],[email protected] -
V Akce, vyberte Allow.
-
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:
-
Přejděte na Zásady provozu > Zásady brány firewall > DNS.
-
Vyberte Vytvořit zásadu.
-
Pojmenujte zásadu (například
Allow SSH hostname resolution). -
Vytvořte výraz:
Selektor Operátor Hodnota Host v ssh.internal.localUser Email v [email protected],[email protected] -
V Akce, vyberte Allow.
-
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.localCloudflare 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í:
-
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.localServer: 127.0.2.2 Address: 127.0.2.2#53 Non-authoritative answer: Name: ssh.internal.local Address: 172.64.128.48Dotaz 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.
-
Zkontrolujte protokoly Gateway: Zkontrolujte své Síťové protokoly Gateway a zjistit, zda připojení neblokuje nějaká zásada.
-
Ověřit stav tunelu: Ověřte, že je váš tunel funkční a připojený, a to kontrolou stav tunelu.
-
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.