← Cloudflare One / cloudflare-one / tutorials
Zero Trust GitLab SSH & HTTP
Pomocí Cloudflare Access můžete přidat pravidla Zero Trust k vlastní instanci GitLab. V kombinaci s Cloudflare Tunnel se tak uživatelé mohou připojovat přes HTTP i SSH a ověřovat se u poskytovatele identity vašeho týmu.
Tento postup popisuje, jak:
- Nasaďte instanci GitLab
- Zablokujte veškerá příchozí připojení k dané instanci a pomocí Cloudflare Tunnel nastavte odchozí připojení do Cloudflare
- Sestavit zásady s Cloudflare Access pro kontrolu, kdo se může připojit ke GitLab
- Připojení přes HTTP a SSH prostřednictvím Cloudflare
Doba dokončení:
1 hodina
Nasazení GitLab
Tato část vás provede nasazením GitLabu na DigitalOcean. Pokud jste GitLab už nasadili, tuto část můžete přeskočit.
Vytvořte Droplet se 16 GB RAM a 6 CPU. To by mělo umožnit podporu 500 uživatelů na základě Doporučené nároky GitLabu na zdroje ↗.
GitLab poskytne externí IP adresu, která je prozatím vystavena internetu. Pro počáteční konfiguraci se budete muset k nasazenému serveru připojit pomocí této externí IP adresy. Připojení k této IP adrese můžete zabezpečit pomocí přidávání klíčů SSH ↗ do vašeho účtu DigitalOcean.
Tento příklad používá počítač s macOS ke konfiguraci Droplet. Zkopírujte IP adresu přiřazenou počítači z DigitalOcean.
Otevřete Terminal a spusťte následující příkaz, přičemž IP adresu nahraďte IP adresou přidělenou službou DigitalOcean.
Dále nainstalujte GitLab. Tento příklad používá Balíček Ubuntu ↗ a postupujte podle kroků v dokumentaci GitLab, s několika výjimkami uvedenými níže.
Pro začátek spusťte následující příkazy.
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bashVýše uvedené příkazy stáhnou software GitLab do tohoto počítače. Nyní jej musíte nainstalovat. Zde se tento návod poprvé odchyluje od postupu popsaného v dokumentaci GitLabu. Další krok v návodu od GitLabu nastavuje externí název hostitele, vy ale software rovnou nainstalujete.
sudo apt-get install gitlab-eePřibližně po minutě bude GitLab nainstalován.
Aplikace však ještě neběží. To můžete ověřit kontrolou naslouchajících portů pomocí ss.
sudo ss -lntupVýsledkem by měly být pouze služby, které jsou na počítači aktuálně aktivní:
sudo ss -lntupNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 *:9094 *:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=29,fd=3))
tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=29,fd=4))Chcete-li spustit GitLab, spusťte příkaz reconfigure tohoto softwaru.
sudo gitlab-ctl reconfigureGitLab spustí své komponentní služby. Po dokončení ověřte, že GitLab běží a naslouchá na portech 22 i 80.
sudo ss -lntupNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 *:9094 *:*
tcp LISTEN 0 4096 127.0.0.1:9236 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.1:8150 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=29,fd=3))
tcp LISTEN 0 4096 127.0.0.1:8151 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.1:3000 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.1:8153 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.1:8154 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.1:8155 0.0.0.0:*
tcp LISTEN 0 511 0.0.0.0:8060 0.0.0.0:* users:(("nginx",pid=324,fd=8))
tcp LISTEN 0 4096 127.0.0.1:9121 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.1:9090 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.1:9187 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.1:9093 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.1:9229 0.0.0.0:*
tcp LISTEN 0 1024 127.0.0.1:8080 0.0.0.0:*
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=324,fd=7))
tcp LISTEN 0 4096 127.0.0.1:9168 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.1:8082 0.0.0.0:*
tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=29,fd=4))
tcp LISTEN 0 4096 *:9094 *:*Uživatelé se ke GitLabu připojují přes SSH (zde port 22) a k webové aplikaci přes HTTP (port 80). V dalším kroku umožníte uživatelům vyzkoušet obojí přes Cloudflare Access. Necháme to běžet a přejdeme do Cloudflare dashboardu.
Zabezpečení GitLabu pomocí pravidel Zero Trust
Sestavování zásad Zero Trust
Pomocí Cloudflare Access můžete vytvořit pravidla Zero Trust, která určují, kdo se může připojit k webové aplikaci GitLab (HTTP) a kdo přes SSH.
Když uživatel odešle požadavek na web chráněný Access, tento požadavek nejprve dorazí do sítě Cloudflare. Access pak může zkontrolovat, zda má uživatel k aplikaci povolený přístup. Při integraci s Cloudflare Tunnel vypadá architektura Zero Trust takto:
Cloudflare Access zjišťuje, kdo se k aplikaci může dostat, prostřednictvím integrace s poskytovateli identity, jako je Okta, Microsoft Entra ID nebo Google, kteří vydávají identifikační karty kontrolované u dveří. Zatímco VPN umožňuje uživatelům volný pohyb po privátní síti, dokud proti tomu někdo aktivně nezasáhne pravidlem, Access provádí kontrolu identity při každém požadavku, a to s libovolnou nakonfigurovanou granularitou.
U GitLabu začněte vytvořením dvou zásad. Uživatelé se ke GitLabu připojují dvěma způsoby: přes webovou aplikaci a přes SSH. Pro každý z nich vytvořte zásadu zabezpečující příslušnou subdoménu. Nejprve webovou aplikaci.
Než pravidlo vytvoříte, musíte postupovat podle tyto pokyny k nastavení Cloudflare Access ve vašem účtu.
Po povolení přejděte do Aplikace na stránce v Zero Trust. Vyberte Vytvořit novou aplikaci.
Vyberte Vlastní hosting a soukromé.
Zobrazí se výzva k přidání subdomény, která bude zdroj reprezentovat. Musí jít o subdoménu domény ve vašem účtu Cloudflare. Pro tok webové aplikace a tok SSH budete potřebovat samostatné subdomény.
Tento příklad používá gitlab.widgetcorp.tech pro webovou aplikaci a gitlab-ssh.widgetcorp.tech pro připojení SSH.
Můžete rozhodnout, kteří poskytovatelé identity budou moci provádět ověřování. Ve výchozím nastavení jsou povoleni všichni nakonfigurovaní poskytovatelé. Přidejte pravidla, která určí, kdo se na stránku dostane.
Vyberte Vytvořit a publikovat aplikaci. Tyto kroky zopakujte pro druhou aplikaci, gitlab-ssh.widgetcorp.tech.
Cloudflare Tunnel
Cloudflare Tunnel vytváří zabezpečené odchozí spojení mezi tímto počítačem a sítí Cloudflare. Díky modelu pouze odchozích spojení můžete zamezit jakémukoli přímému přístupu k tomuto počítači a uzavřít veškeré externě vystavené vstupní body. Výsledkem jsou žádné otevřené porty firewallu.
Cloudflare Tunnel funguje díky odlehčenému daemonu od Cloudflare s názvem cloudflared. Stáhněte a nainstalujte cloudflared na počítači DigitalOcean podle pokynů uvedených na Ke stažení stránce.
Po instalaci ověřte instanci cloudflared s následujícím příkazem.
cloudflared loginPříkaz vypíše adresu URL, kterou musíte navštívit a přihlásit se pomocí svého účtu Cloudflare.
Zvolte web, který jste přidali do svého účtu.
Jakmile ve svém účtu vyberete jednu z poboček, Cloudflare stáhne soubor certifikátu k ověření této instance cloudflared. Nyní můžete použít cloudflared řídit připojení Cloudflare Tunnel ve vašem účtu Cloudflare.
Připojování ke Cloudflare
Nyní můžete připojit GitLab ke Cloudflare pomocí Cloudflare Tunnel.
- Vytvořte nový Tunnel spuštěním následujícího příkazu.
cloudflared tunnel create gitlabcloudflared vygeneruje jedinečné ID pro tento Tunnel, například 6ff42ae2-765d-4adf-8112-31c55c1551ef. Tento Tunnel můžete použít jak pro provoz SSH, tak HTTP.
- Budete muset nakonfigurovat Cloudflare Tunnel tak, aby proxoval provoz do obou cílů. Níže uvedená konfigurace zachytí provoz směřující na DNS záznam vytvořený pro webovou aplikaci a na DNS záznam reprezentující provoz SSH na příslušný port.
Konfigurační soubor upravujete v textovém editoru dle vlastního výběru. Příklad vychází z Vi.
vim ~/.cloudflared/config.yml- Nakonfigurujte Tunnel tak, aby obsluhoval provoz.
tunnel: 6ff42ae2-765d-4adf-8112-31c55c1551ef
credentials-file: /root/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json
ingress:
- hostname: gitlab.widgetcorp.tech
service: http://localhost:80
- hostname: gitlab-ssh.widgetcorp.tech
service: ssh://localhost:22
# Catch-all rule, which just responds with 404 if traffic doesn't match any of
# the earlier rules
- service: http_status:404
- Správnost nastavení konfiguračního souboru můžete ověřit následujícím příkazem:
cloudflared tunnel ingress validatecloudflared by měl ukazovat, že Tunnel je v pořádku. Nyní můžete Tunnel spustit.
cloudflared tunnel run
Nakonfigurujte záznamy DNS
Nyní můžete v Cloudflare dashboardu vytvořit DNS záznamy pro GitLab. Nezapomeňte, že stále potřebujete dva záznamy: jeden pro webovou aplikaci a jeden pro provoz SSH.
-
Přihlaste se do Cloudflare dashboard ↗ a přejděte do DNS záznamy stránku vaší domény.
Přejděte na Záznamy ↗ -
Vyberte Přidat záznam. Vyberte
CNAMEjako typ záznamu. -
V Název pole zadejte
gitlab. -
V Cíl pole zadejte ID vytvořeného tunelu následované
cfargotunnel.com. V tomto příkladu je tato hodnota:
6ff42ae2-765d-4adf-8112-31c55c1551ef.cfargotunnel.com- Vyberte Save.
- Opakujte tento postup a vytvořte další
CNAMEzáznam se stejným Cíl, ale zadejtegitlab-sshpro Název. Poté by se měly zobrazit oba záznamy, které míří na stejný Tunnel. Ingress pravidla definovaná ve výše uvedeném konfiguračním souboru nasměrují provoz na příslušný port.
Připojování k webové aplikaci
Nyní můžete otestovat kompletní konfiguraci webové aplikace. Otevřete subdoménu vytvořenou pro tuto webovou aplikaci. Cloudflare Access vás vyzve k ověření. Přihlaste se u svého poskytovatele.
Po ověření byste měli vidět webovou aplikaci GitLab.
Zaregistrujte si vlastní účet a v dalším kroku vytvořte projekt Blank pro otestování SSH.
GitLab vytvoří nový projekt a repozitář.
Konfigurace SSH
Chcete-li odesílat a stahovat kód přes SSH, budete muset nainstalovat cloudflared i na klientském počítači. Tento příklad používá notebook s macOS. Na macOS můžete nainstalovat cloudflared s následujícím příkazem.
brew install cloudflaredZatímco je nutné nainstalovat cloudflared, nemusíte příkazy SSH nijak zvlášť zabalovat. Místo toho stačí provést jednorázovou změnu konfiguračního souboru SSH.
vim /Users/samrhea/.ssh/configZadejte následující hodnoty a nahraďte gitlab-ssh.widgetcorp.tech s hostname, který jste vytvořili.
Host gitlab-ssh.widgetcorp.tech
ProxyCommand /usr/local/bin/cloudflared access ssh --hostname %hNyní můžete otestovat tok SSH tím, že se pokusíte naklonovat dříve vytvořený projekt.
git clone [email protected]:samrhea/democloudflared vás vyzve k přihlášení pomocí mého poskytovatele identity a po úspěšném ověření vydá token vašemu zařízení, abyste se mohli ověřit.
Zablokujte odkryté porty
Nyní můžete nakonfigurovat firewall DigitalOcean jediným pravidlem, které zablokuje veškerý příchozí provoz a zabrání přímému přístupu.
Cloudflare Tunnel bude i nadále provozovat pouze odchozí spojení, takže se tento počítač nemůže stát součástí těžby kryptoměn ani něčeho horšího.
Zobrazit protokoly
Můžete také zobrazit protokoly povolených a blokovaných událostí. Otevřete Access stránka Logs sekci v Zero Trust.
Řešení potíží
Pokud používáte Git Large File Storage (LFS), mějte na paměti, že Git LFS není automaticky podporován cloudflared. Chcete-li přistupovat k repozitářům chráněným Cloudflare Access, musíte se ověřit ručně spuštěním:
cloudflared access login <your-git-access-url>Nahraďte <your-git-access-url> s adresou URL chráněnou Cloudflare Access.