{"id":30,"date":"2022-07-17T00:00:00","date_gmt":"2022-07-17T00:00:00","guid":{"rendered":"https:\/\/wonderful-bull.pikapod.net\/?p=30"},"modified":"2023-05-05T15:38:57","modified_gmt":"2023-05-05T15:38:57","slug":"cloudflare-tunnel","status":"publish","type":"post","link":"https:\/\/serginho.dev\/cloudflare-tunnel\/","title":{"rendered":"Cloudflare Tunnel: O sistema de “Proxy Reverso” da Cloudflare"},"content":{"rendered":"\n
\"\"<\/figure>\n\n\n\n

A Cloudflare trabalha para proteger de invasores que gostam de derrubar os sistemas da Internet. E um dos servi\u00e7os \u00e9 o sistema de Proxys que faz uma rota do dom\u00ednio para o servidor sem disponibilizar o IP real do servi\u00e7o! Como referido em outra publica\u00e7\u00e3o que ensinei a configurar a Firewall para s\u00f3 permitir o acesso pela Cloudflare<\/a> se uma pessoa com m\u00e1s inten\u00e7\u00f5es descobrir IP real ela pode tentar aceder o servidor desprotegido!<\/p>\n\n\n

\n
\"\"<\/figure><\/div>\n\n\n

Mas al\u00e9m da Firewall a Cloudflare tem um sistema de “Proxy Reverso” chamado Cloudflare Tunnel que um sistema de rotas diretamente pela Cloudflare e que n\u00e3o necessita nem uma porta aberta no firewall ou roteador (sim, esse sistema \u00e9 valido para servidor de casa \ud83d\ude05)!<\/p>\n\n\n\n

<\/div>\n\n\n\n

Por onde come\u00e7ar?<\/h2>\n\n\n\n

Para come\u00e7ar temos de entrar na nossa conta Cloudflare e na Dashboard clicar em “Zero Trust”<\/p>\n\n\n

\n
\"\"
Dashboard da Cloudflare<\/figcaption><\/figure><\/div>\n\n\n

Caso nunca tenha entrado na Zero Trust<\/strong> ela vai pedir algumas informa\u00e7\u00f5es e uma delas \u00e9 o Cart\u00e3o de Cr\u00e9dito ou o PayPal\u2063, mas n\u00e3o vai cobrar nada (a n\u00e3o ser queira ter mais fun\u00e7\u00f5es l\u00e1)!<\/p><\/blockquote>\n\n\n\n

Agora temos de ir em Access > Tunnels<\/strong> e clicar em Create a Tunne<\/strong>l<\/p>\n\n\n

\n
\"\"
Access Tunnel<\/figcaption><\/figure><\/div>\n\n\n

Ap\u00f3s clicar ir\u00e1 aparecer uma tela a pedir um nome para o seu tunnel (para saber o que vamos trabalhar).<\/p>\n\n\n

\n
\"\"<\/figure><\/div>\n\n\n

Agora com um nome definido, ele ir\u00e1 apresentar uma como instalar o “cloudflared” (o aplicativo que ger\u00eancia a conex\u00e3o do tunnel) no servidor e como setar um token dele para se conectar ao tunnel.<\/p>\n\n\n

\n
\"\"<\/figure><\/div>\n\n\n

Por fim depois do t\u00fanel configurado vamos criar uma rota no proxy reverso!<\/p>\n\n\n

\n
\"\"<\/figure><\/div>\n\n\n

E por fim vamos salvar! Agora o “exemplo.serginho.dev”<\/em> foi criado no DNS conectado ao http:\/\/localhost:3000<\/em>“<\/em> que est\u00e1 na m\u00e1quina que o cloudflared conectado est\u00e1 instalado!<\/p>\n\n\n

\n
\"\"<\/figure><\/div>\n\n\n

Se quiser adicionar mais rotas clique em Configure<\/strong> depois Public Hostname<\/strong> que ter\u00e1 um bot\u00e3o para adicionar, mas tamb\u00e9m para configurar mais coisas! Como se por acaso houver outro dom\u00ednio n\u00e3o configurado.<\/p>\n\n\n

\n
\"\"<\/figure><\/div>\n\n\n

Agora vem a parte complicada… \ud83d\ude12<\/h2>\n\n\n\n

As rotas que n\u00e3o s\u00e3o servi\u00e7os, n\u00e3o s\u00e3o Websites ser\u00e3o um pouco diferentes e se pensava abrir um servidor de Minecraft (por exemplo) (depois posso fazer uma postagem especial para isso) protegido pela Cloudflare gratuito ser\u00e1 um pouco diferente.<\/p>\n\n\n\n

Para isso funcionar \u00e9 preciso instalar o cloudflared nas m\u00e1quinas que ir\u00e3o conectar ao servi\u00e7o.<\/p>\n\n\n\n

\n
Caso tenha perdido o link de download<\/a><\/div>\n<\/div>\n\n\n\n

Ap\u00f3s instalar na m\u00e1quina ir\u00e1 conectar ir\u00e1 abrir o terminal ou cmd do seu sistema e ir\u00e1 escrever para conectar ao servi\u00e7o:<\/p>\n\n\n\n

## Linux\/Mac\n$ cloudflared access tcp --hostname testmc.serginho.dev --url localhost:25565\n\n## Windows\nC:\\Cloudflared\\bin\\cloudflared.exe access tcp --hostname testmc.serginho.dev --url localhost:25565<\/code><\/pre>\n\n\n\n

Contexto:<\/p>

\u2013 \u201ccloudflared\u201d\/\u201dcloudflared.exe\u201d \u00e9 o programa que faz o tunnel<\/p>

\u2013 \u201caccess\u201d significa que queremos aceder alguma coisa<\/p>

\u2013 \u201ctcp\u201d ou \u201crdp\u201d, \u201cssh\u201d, \u201csmb\u201d \u00e9 tipo de servi\u00e7o que queremos conectar<\/p>

\u2013 \u201c\u2013hostname <domain>\u201d \u00e9 o dom\u00ednio que queremos aceder (no meu caso de exemplo \u00e9 \u201ctestmc.serginho.dev\u201d)<\/p>

\u2013 \u201c\u2013url localhost:<porta>\u201d \u00e9 onde vamos abrir uma porta de acesso na nossa m\u00e1quina (de maneira simples: o aplicativo que est\u00e1 setado no tal dom\u00ednio vai estar na nossa localhost) (em caso que seja um ssh n\u00e3o precisa de usar)<\/strong><\/p><\/blockquote>\n\n\n\n

Sim para caso n\u00e3o tenha percebido eu fiz um exemplo num servidor de Minecraft<\/p><\/blockquote>\n\n\n\n

Agora com o comando em execu\u00e7\u00e3o vamos tentar abrir o servi\u00e7o que abrimos onde n\u00f3s definimos para abri.<\/p>\n\n\n

\n
\"\"
E pronto agora temos acesso ao servidor na localhost pela cloudflared<\/figcaption><\/figure><\/div>\n\n\n

Mas S\u00e9rgio, o meu servi\u00e7o \u00e9 SSH e n\u00e3o quero fazer um comando gigante s\u00f3 para aceder!<\/h2>\n\n\n\n

Sem problema basta escrever:<\/p>\n\n\n\n

cloudflared access ssh-config --hostname ssh.exemplo.com<\/code><\/pre>\n\n\n\n

Que ir\u00e1 retornar a configura\u00e7\u00e3o para colocar no config do ssh:<\/p>\n\n\n\n

Add to your \/home\/user\/.ssh\/config:\n\nHost ssh.exemplo.com\n  ProxyCommand \/usr\/local\/bin\/cloudflared access ssh --hostname %h<\/code><\/pre>\n\n\n\n

Ap\u00f3s configurar \u00e9 s\u00f3 usar:<\/p>\n\n\n\n

ssh user@ssh.exemplo.com<\/code><\/pre>\n\n\n
\n
\"\"
E pronto, agora tem o seu bom e velho SSH de m\u00e3o! \ud83d\ude02<\/figcaption><\/figure><\/div>\n\n\n

Talvez agora queira fechar a porta do SSH no firewall, j\u00e1 que a cloudflared faz o servi\u00e7o de conex\u00e3o<\/p><\/blockquote>\n\n\n\n

Se gosta de usar o SFTP recomendo voc\u00ea abrir uma porta com o modo TCP no seu em vez do usar o SSH (o aplicativo de servi\u00e7o pode n\u00e3o querer funcionar)<\/p><\/blockquote>\n\n\n\n

Dica B\u00f3nus: como adicionar autentica\u00e7\u00e3o extra para a pessoa que tente entrar no servi\u00e7o<\/h2>\n\n\n\n

Quando falamos de T\u00faneis Cloudflare pode ser que queira que s\u00f3 terminadas pessoas conseguem s\u00f3 a aceder alguma rota ou dom\u00ednio.<\/p>\n\n\n

\n
\"\"
Tela de login de exemplo<\/figcaption><\/figure><\/div>\n\n\n

Isso at\u00e9 \u00e9 \u00fatil quando quer deixar uma \u00e1rea n\u00e3o exposta para o p\u00fablico numa maneira f\u00e1cil.<\/p>\n\n\n\n

Lembrando que o plano free do Zero Trust<\/strong> s\u00f3 permite 50 pessoas diferentes registas<\/p><\/blockquote>\n\n\n\n

Se quiser ativar basta seguir:<\/p>\n\n\n\n

  • No Zero Trust vamos em: Access > Applications<\/strong> e clicar em Add an Application<\/strong><\/li><\/ul>\n\n\n
    \n
    \"\"<\/figure><\/div>\n\n\n
    • Selecionar: Self-hosted<\/strong><\/li><\/ul>\n\n\n
      \n
      \"\"<\/figure><\/div>\n\n\n
      • Agora \u00e9 hora de configurar<\/li><\/ul>\n\n\n
        \n
        \"\"<\/figure><\/div>\n\n\n
        1. Application name<\/strong>: \u00e9 o nome da que vamos dar essa autentica\u00e7\u00e3o<\/li>
        2. Session Duration<\/strong>: \u00e9 a dura\u00e7\u00e3o que o navegador fica autenticado sem pedir login<\/li>
        3. Application domain<\/strong>: \u00e9 a rota e o dom\u00ednio que ser\u00e1 autenticado, lembrando se voc\u00ea escrever algo no path tudo que vir a seguir a ele ser\u00e1 bloqueado<\/li>
        4. Application Appearance<\/strong>: se quiser mudar a aparecia da autentica\u00e7\u00e3o (nada de importante<\/li>
        5. Identity providers<\/strong>: Configura\u00e7\u00e3o dos autenticadores da rota<\/li><\/ol>\n\n\n\n
          • Ap\u00f3s configurar, vamos clicar em Next<\/strong><\/li>
          • Agora temos de adicionar uma pol\u00edtica de autentica\u00e7\u00e3o que basicamente \u00e9 as regras de quem pode entrar no servi\u00e7o<\/li><\/ul>\n\n\n
            \n
            \"\"
            exemplo<\/figcaption><\/figure><\/div>\n\n\n
            • Agora, temos mais algumas configura\u00e7\u00f5es (n\u00e3o vou falar muito delas)<\/li><\/ul>\n\n\n
              \n
              \"\"<\/figure><\/div>\n\n\n

              Mas vou falar numa interessante que \u00e9 a Browser rendering. Que basicamente se voc\u00ea usa tem uma aplica\u00e7\u00e3o SSH ou VNC, a Cloudflare vai renderizar no navegador o terminal ou a interface do servidor.<\/p>\n\n\n

              \n
              \"\"
              SSH<\/figcaption><\/figure><\/div>\n\n\n

              Agora s\u00f3 confirmar e pronto a sua rota aplica\u00e7\u00e3o est\u00e1 protegida.<\/p>\n\n\n

              \n
              \"\"\/<\/figure><\/div>\n\n\n

              Conclus\u00e3o<\/h2>\n\n\n\n

              As vezes pode ser algumas coisas mais chatas para configurar, mas sempre \u00e9 importante estarmos de olho nas configura\u00e7\u00f5es.<\/p>\n","protected":false},"excerpt":{"rendered":"

              Para quem mexe com v\u00e1rios site na mesma maquina e est\u00e1 farto do cl\u00e1ssicos Proxys Reversos, a Cloudflare tamb\u00e9m o seu pr\u00f3prio!<\/p>\n","protected":false},"author":1,"featured_media":32,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21],"tags":[50,49,51,48,52],"_links":{"self":[{"href":"https:\/\/serginho.dev\/wp-json\/wp\/v2\/posts\/30"}],"collection":[{"href":"https:\/\/serginho.dev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/serginho.dev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/serginho.dev\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/serginho.dev\/wp-json\/wp\/v2\/comments?post=30"}],"version-history":[{"count":0,"href":"https:\/\/serginho.dev\/wp-json\/wp\/v2\/posts\/30\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/serginho.dev\/wp-json\/wp\/v2\/media\/32"}],"wp:attachment":[{"href":"https:\/\/serginho.dev\/wp-json\/wp\/v2\/media?parent=30"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/serginho.dev\/wp-json\/wp\/v2\/categories?post=30"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/serginho.dev\/wp-json\/wp\/v2\/tags?post=30"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}