Pular para o conteúdo principal

4 publicações com a etiqueta "Tutorials & Tips"

Ver todas as etiquetas

5 boas práticas de segurança no IAM

· 5 min para ler
Ludmila Silva
Cloud & DevOps Engineer

A segurança dos dados (e recursos) é uma preocupação crucial tanto a nível individual quanto para empresas, especialmente no ambiente em nuvem. E não seria exagero dizer que uma das áreas mais críticas em relação a proteção é o gerenciamento de acessos e identidades - no caso da AWS, feito pelo IAM - pois é por ele que podemos controlar quem ou que tem acesso aos recursos.

Como é melhor prevenir do que remediar, reuni aqui 5 recomendações de boas práticas de segurança para o AWS IAM:

1) Jamais compartilhe o usuário raiz

Nem com a sua conta pessoal, muito menos na empresa em que você estiver trabalhando: nunca, JAMAIS compartilhe a conta raiz (root account)!

Imagine o estrago que alguém mal intencionado pode fazer com acesso a todos os recursos da AWS? Ou ao seu cartão de crédito? Agora imagine o mesmo cenário ocorrendo para uma empresa... É verdadeiramente assustador.

Por isso, é ideal que qualquer outra ação que não necessite de privilégios do usuário raiz - e posso dizer que isso vai ocorrer em raras ocasiões - seja executada por outros usuários do IAM. Em outras palavras, crie um usuário do IAM com as permissões de acesso necessárias a ele.

Por exemplo, as políticas de acesso mais indicadas para associar ao usuário que você vai criar são a AdministratorAccess e PowerUserAccess. É claro que existem outras políticas e você mesmo pode criar as suas, mas já é um bom começo. Com isso, você não vai precisar usar a conta raiz para seus estudos ou seu trabalho.

Dessa forma, você estará seguindo o Princípio do menor privilégio (least privilege principle), que se trata de conceder ao usuário somente aquilo que é necessário para ele executar suas tarefas.

2) Habilite o MFA na sua conta

A autenticação multifator (MFA) é um recurso que solicita ao usuário seguir algumas etapas de autenticação que vão além do simples colocar o usuário e senha e logar.

Para tal, um dispositivo externo gera uma "senha" para liberar esse acesso - pode ser por SMS, e-mail, ou um app de autenticação. Isso adiciona uma camada de segurança extra, mitigando o acesso não autorizado a uma conta.

Na AWS, é muito importante que a sua conta raiz e as outras contas de usuário tenham o MFA habilitado. Você pode usar um virtual MFA device (um app como o Microsoft Authenticator, por exemplo) ou por um U2F (security key externa).

No IAM, há a opção de habilitar o MFA, no painel do usuário:

3) Crie grupos

Uma prática muito recomendada é criar grupos no IAM de acordo com as necessidades específicas de cada função ou departamento de uma empresa, atribuindo a eles as permissões por meio de políticas anexadas.

Por exemplo, você pode criar os grupos de Desenvolvedores, Suporte, DevOps, etc. Com isso, os usuários inseridos nesses grupos herdam as permissões de acesso do grupo. Ou seja, se o usuário é um desenvolvedor, ele deverá ser adicionado ao grupo Desenvolvedores e terá todas as permissões e restrições do grupo.

Além de ser uma boa prática de segurança, essa medida simplifica o gerenciamento de usuários e acessos, e garante também o princípio do menor privilégio.

4) Padronize e mude as senhas periodicamente

Nada de senhas fáceis, eternas e que nunca mudam! Por serem a primeira linha de defesa contra acessos não autorizados, nada melhor do que usar uma senha forte e robusta para assegurar esse nível inicial de segurança.

É interessante que você estabeleça uma política de senhas para os usuários do IAM, tais como:

  • Tamanho mínimo das senhas
  • Uso de letras maiúsculas, minúsculas e números
  • Uso de caracteres especiais

Além disso, você pode implementar a expiração periódica das senhas, permitindo que haja uma rotação das mesmas. No IAM, você pode especificar um período dentre 1 a 1.095 dias para que as senhas de usuário do IAM permaneçam válidas após serem definidas.

5) Monitore as atividades do IAM

Em determinadas ocasiões pode ser interessante rastrear ou identificar alguma atividade do IAM - quem nunca deletou um banco de dados sem querer, não é mesmo? Rsrs...

Na AWS, há um serviço de governança que possibilita realizar a auditoria das chamadas de API, o CloudTrail. Em poucas palavras, ele atua como um "fofoqueiro" que registra e mostra todas as atividades - ou seja, você pode saber quem deletou um Bucket S3, por exemplo.

Com ele, você pode registrar ações dos usuários do IAM. Por padrão, ele captura os eventos de gerenciamento sem custos, armazenando-os por até 90 dias para consultas rápidas.

Uma forma de fazer esse registro é criar uma trilha para capturar Eventos de gerenciamento e armazena-los em um Bucket S3. [Logo colocarei um passo a passo aqui no blog].

Depois de criar a trilha, você pode revisar regularmente os logs no CloudTrail ou ativar o Amazon CloudWatch para definir alarmes baseados em eventos críticos, de modo a garantir que qualquer comportamento suspeito seja imediatamente identificado.


Essas foram algumas dicas básicas de segurança para o AWS IAM.

Bons estudos!

Documentação

5 comandos básicos úteis para troubleshooting de redes

· 8 min para ler
Ludmila Silva
Cloud & DevOps Engineer

Na rotina profissional das diversas funções de T.I. que estão relacionadas diretamente ou não à infraestrutura, lidamos com uma série de problemas relacionados as redes. Seja desde um site ou aplicação fora do ar até a falta de comunicação entre dispositivos, esses "pequenos" inconvenientes podem se tornar uma dor de cabeça caso não sejam contornados e solucionados (principalmente se você lida com usuários).

Por isso, é sempre bom ter algumas cartas na manga para detectar, isolar e resolver problemas de maneira mais efetiva. A ideia aqui não é que você seja um analista de redes, mas que possa usar ferramentas simples para ajudar na solução ou para que você possa solucionar o problema. Muitas vezes o "feijão com arroz" nos salva bastante.

Para ajudar, reuni aqui alguns comandos básicos que são extremamente úteis no dia-a-dia:

1. Ping

O reizinho dos comandos, o ping permite testar a conectividade de rede entre dispositivos. Ele utiliza uma e_cho r_eques_t_ do protocolo ICMP, inserida em um datagrama IP, para testar essa conectividade.

Seja com um nome de domínio ou um endereço IP, o comando envia pacotes ICMP para o endereço IP do destino. Se o destino estiver acessível, serão mostradas respostas com os bytes, tempo de resposta e a medição do TTL (o tempo de vida do pacote dentro da rede). Além disso, ele informa os pacotes enviados, recebidos e perdidos.

Ping no Windows

Se o destino não estiver acessível, será mostrada na tela a mensagem "Host de destino inacessível."

Aqui estão alguns exemplos de uso do ping:

## Consulta básica do ping - com domínio de um site
ping google.com

## Consulta com IP (exemplo com DNS do Google)
ping 8.8.8.8

## No Windows: quantidade de pacotes enviados (no caso, para 6)
ping -n 6 google.com

## No Windows: tempo de espera da resposta (timeout)
ping -w 10 google.com

## Pings contínuos - sem interrupção
ping -t google.com

Para interromper o processo do ping, você deve usar o comando Ctrl+C.

Ping no Linux

Caso de uso:

  • Você pode usar o ping para identificar se uma máquina ou dispositivo na rede local, como uma impressora ou notebook, por exemplo, está conectada e respondendo. Se "pingou", isso já oferece um bom ponto de partida.

2. Traceroute

Outro comando simples e bastante útil é o traceroute no Linux, ou tracert no Windows. Ele permite validar os "saltos" (hops) até o destino - ou seja, por cada roteador que o pacote passa para chegar ao seu destino.

Exemplos do comando:

### Traceroute
traceroute google.com

### Esconder os nomes de dispositivos na tela
traceroute -n google.com

### Especificar o número de saltos
traceroute -m 10 google.com

Em alguns casos, você pode não obter a resposta mesmo sabendo que o dispostivo final está ativo. Isso pode ocorrer por causa de regras de firewall ou outros bloqueios dos equipamentos que estão no caminho.

Casos de uso:

  • Quando pessoas alegam lentidão ao acessar determinado site ou servidor, seja interno ou externo. Você pode usar o traceroute para identificar em qual trecho está ocorrendo uma alta latência ou perda de pacotes;
  • Com os resultados, você pode demonstrar que os problemas de conexão não são sua culpa ou da empresa - principalmente se o serviço acessado está fora da rede interna. É o famoso "não foi possível resolver seu problema, mas podemos fazer com que ele não seja nosso problema" =)

3. MTR

O My Traceroute, ou MTR, é um comando que funciona como uma combinação do ping e do traceroute. Ele apresenta os saltos até o destino e outras informações como latência e perda de pacotes. Isso permite ter uma ideia do que ocorre em tempo real.

Com isso, o MTR possibilita identificar conexões ruins ou a perda de pacotes com mais clareza. No Linux, ele é executado via terminal. No Windows, usa-se uma aplicação chamada WinMTR, que pode ser baixada aqui.

Sintaxe do mtr no Linux:

## Uso padrão
mtr google.com

## Limitar para endereços IPv4
mtr -4 google.com

## Usar em modo relatório
mtr -r google.com

Pode acontecer de não obter a resposta pelo fato de existir algum firewall ou regra de segurança que não permite esse acesso. Isso pode aparecer como uma omissão no tempo de resposta também.

Casos de uso:

  • Se você estiver experimentando latência ou desconexões ao jogar online ou usar um serviço na internet, pode usar o mtr para verificar a qualidade da conexão com o servidor do jogo ou serviço.
  • Em situações que poderia usar o ping e o traceroute junto, com objetivo de ter análises com mais detalhes de latência e perda de pacotes até chegar ao destino.

4. Nslookup

O nslookup permite consultas para servidores DNS. Com ele, é possível consultar qual IP responde por um domínio. Além disso, ele possibilita consultar um registro DNS (tipo A, MX, txt, entre outros) do domínio em questão.

## Consultar o IP de um domínio
nslookup google.com

## Consultar um registro DNS específico
nslookup -q=MX google.com

nslookup -q=A google.com

nslookup -q=ns google.com

nslookup -q=txt google.com

nslookup -type=mx google.com

## Pesquisa reversa
nslookup `<IP_do_servidor>`

## Consultar todos os registros
nslookup -type=any google.com

## Modo interativo - abre um prompt
nslookup

> google.com
> exit

5. Dig

Já o dig faz praticamente as mesmas funções do nslookup, mas fornece um relatório com mais detalhes.

## Retornar o registro A (IP)
dig google.com

## Retornar os registros MX, txt, e outros
dig google.com MX

dig google.com txt

dig google.com cname

dig google.com NS

dig google.com A

## Obter o máximo de informações
dig google.com any

## Respostas curtas
dig google.com +short

## Respostas detalhadas
dig google.com +noall +answer

## Pesquisa reversa
dig `<IP_do_servidor>`

Para utilizar o dig no Windows, é necessário instalar o BIND, o qual você pode encontrar aqui.

Caso de uso:

  • Quando quiser saber 0 nome de domínio associado a um endereço IP, você pode usar a pesquisa reversa (resolução de DNS reverso);
  • Em alguns casos, pode ocorrer de um site ser acessado pelo IP do servidor, mas não estar acessível pelo nome de domínio. Uma das possibilidades é que haja um problema com a resolução de nomes de domínio. Por isso, o nslookup e o dig podem ser usados para identificar quais servidores DNS respondem por determinado domínio e auxiliar na resolução do problema;
  • Uma empresa migrou seus e-mails para um serviço de hospedagem diferente do qual utilizavam. No entanto, os emails não estavam funcionando após a alteração dos registros DNS e propagação dos mesmos. Com o nslookup e o dig você pode verificar se o usuário  manteve os registros DNS de email (MX) do provedor antigo e inseriu os novos, resultando em um conflito, por exemplo (e acredite, isso é bem comum).

Menção honrosa: ipconfig

Ficou na dúvida sobre qual endereço IP está atribuído a sua máquina? Então, use o ipconfig (Windows) ou ifconfig (Linux e MacOS)! Esse comando exibe as configurações de rede

No Windows:

## Apresentar as informações de rede
ipconfig

## Apresentar mais detalhes das configurações de rede
ipconfig /all

## Limpar o cache de resolução DNS
ipconfig /flushdns

No Linux:

## Apresentar as informações de rede
ifconfig

## Apresentar todas as informações
ifconfig -a

No Linux, o ifconfig também permite configurar, ativar ou desativar as interfaces de rede, por exemplo. No final do texto, há um link com a documentação do comando para que você possa explorar mais.

Caso de uso:

  • Para saber o IP da sua máquina, basta um ipconfig ou ifconfig
  • Caso necessite saber o endereço MAC de um pc, o ipconfig /all fornecerá as informações necessárias.
  • Você está acessando um site e recebe uma página de erro como retorno. Pelo 4G, o site abre normalmente. Você já limpou o cache do navegador, mas o problema persiste. O que fazer? Bem, rodar o ipconfig /flushdns pode ser uma mão na roda.

Dicas para troubleshooting

Para finalizar, nada melhor que algumas dicas rápidas para organizar o pensamento na hora da resolução de problemas (sejam de rede ou quaisquer outros):

  1. Defina qual é o problema real - geralmente, quando um usuário ou nós mesmos relatamos o problema, na verdade está falando dos sintomas causados pelo problema real;
  2. Junte todas as informações relevantes: relatos, testes, prints. Aqui, por exemplo, cabe saber os IPs envolvidos, URLs e outras informações iniciais. O ping e o tracert podem ser muito importantes nesse momento;
  3. Analise cuidadosamente as informações runidas, de forma a eliminar opções que não se adequam ao problema, e proponha hipóteses sobre a causa e formas de solução. As hipóteses seriam os caminhos que você vai percorrer para a solução do problema;
  4. Teste a(s) hipótese(s) formuladas sobre o problema, ou seja, coloque suas ideias a prova;
  5. Se testou e resolveu, ótimo! Se não resolveu, volte a análise das informações reunidas;
  6. Por fim, documente o processo de solução - isso facilita a resolução quando o mesmo problema ocorrer novamente.

Criando sua própria VPN gratuita na nuvem

· 9 min para ler
Ludmila Silva
Cloud & DevOps Engineer

Nos dias atuais temos uma preocupação (muito válida, por sinal) sobre a privacidade em relação ao tráfego na rede. Além das questões de privacidade e segurança, há também serviços e conteúdos que somente são disponibilizados em determinadas localizações ou redes.

Para contornar isso, geralmente recorremos à serviços de VPN, sejam eles pagos ou gratuitos. Mas mesmo assim, incorremos no risco de retenção de logs e dados, "espionagem", e por aí vai...

Imagem meramente educativa

Então, que tal criar sua prória VPN? Nesse artigo, vou apresentar um passo a passo para criar uma VPN na nuvem gratuitamente.

Vamos lá?

Passo a Passo

De início, precisamos criar um servidor - que será nosso VPN server. Existem inúmeras formas de criaá-lo: seja utilizando um Raspberry Pi, usando um servidor local, contratando uma VPS, etc.

Como não há o intuito de armazenar logs, então os serviços de computação em nuvem vão atender muito bem. Nesse caso, vamos criar uma conta gratuita na Oracle Cloud Infraestructure (OCI).

O legal da Oracle Cloud é que você pode criar até duas VMs (AMD com 1/8 OCPU e 1 GB de RAM) no nível gratuito para sempre (Always Free Services) - isso mesmo, 100% grátis! Como o projeto não vai precisar de configurações tão robustas, então é o suficiente para começarmos.

1) Crie sua conta na Oracle Cloud

Se você não tem uma conta na Oracle Cloud, é a hora de criar uma. Será necessário fornecer um cartão de crédito, mas não se preocupe, pois você não será cobrado.

Só se atente que nos primeiros 30 dias a Oracle fornece $ 300 em créditos para serem utilizados nos serviços. Caso você opte por serviços que não fazem parte do nível gratuito, fique de olho para que não ocorram cobranças indesejadas. Dê uma olhada nos serviços que fazem parte do Always Free para não ter nenhuma surpresa indesejada.

Enfim, para criar o seu cadastro, clique aqui. E em seguida clique em "Teste a OCI gratuitamente":

Ao criar a sua conta, você deverá escolher uma região onde seus serviços serão provisionados. Após escolher, você não pode alterar mais:

💡

Levando em consideração a criação de uma VPN, escolha a região que melhor lhe atenda.

Se tudo ocorrer bem, você vai receber um e-mail de confirmação. Basta efetuar o login.

2) Gere um par de chaves SSH

Antes de correr para o abraço na Oracle Cloud, vamos gerar uma chave SSH localmente. Portanto, abra o terminal caso use o Linux ou Mac, ou o cmd caso esteja no Windows. E digite o comando:

ssh-keygen

Deve aparecer a seguinte saída no terminal:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):

Nesse momento, você pode nomear a sua chave digitando um nome de sua preferência e depois clicando em enter. Caso você deixa em branco e pressione o enter, será gerada uma chave padrão (default). Fica à seu critério.

Em seguida, você será solicitado a digitar uma senha para a sua chave. Recomendo pular essa parte no momento, para evitar problemas de esquecimento rsrs... Então, apenas pressione o enter duas vezes.

Created directory '/home/username/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Após isso, sua chave será gerada e também será indicado o caminho dos arquivos id_rsa (chave privada) e id_rsa.pub (chave pública).

🚨

Em alguns casos, do OpenSSH não estar habilitado no Windows.

Caso o OpenSSH não esteja habilitado, pesquise por Configurações, selecione Aplicativos -> Aplicativos e Recursos -> Recursos Opcionais

Veja se o OpenSSH está habilitado.

Caso não esteja instalado, clique em "Adicionar um Recurso". Procure pelo Cliente do OpenSSH e clique em "Instalar":

Depois, proceda com a criação da sua chave SSH, conforme descrito anteriormente.

3) Crie uma nova instância

Agora que criou sua chave, faça login no Console da Oracle Cloud. Na página inicial, role para baixo até encontrar a aba "Iniciar Recursos" e clique em "Criar uma instância de VM".

Você será redirecionado para a página "Criar instância de computação", que apresenta o workflow de criação da instância. Esse workflow vai permitir fazer diversas coisas, como:

  • Criar e instalar a instância Ubuntu;
  • Criar uma VCN (virtual cloud network) com sub-rede, com os compenentes necessários para acessar a internet;
  • Criar ou colar um par de chaves ssh.

4) Nomeie a instância e escolha a imagem Ubuntu

Nas opções iniciais, insira um nome para a sua instância e escolha um compartimento onde ela será criada.

Em Posicionamento, mantenha a opção Always Free Elegível para o domínio de disponibilidade. E em Segurança, matenha o padrão.

Já na aba Imagem e Forma, clique em "Editar":

Clique em “Alterar Imagem” e selecione Ubuntu (eu escolhi a Canonical Ubuntu 22.04) e clique em "Selecionar imagem".

Após selecionar, a imagem e forma terão essas características:

Nas Configurações de Rede, faça as seguintes alterações:

  • Clique em "Editar".
  • Em Rede Principal, selecione "Criar nova rede virtual na nuvem".
  • Em Novo nome da rede virtual na nuvem, crie o nome da VCN.
  • Criar no compartimento: escolha o compartimento onde a VCN será criada.
  • Em Sub-rede, selecione "Criar nova sub-rede pública".
  • Em Novo nome de sub-rede, insira o nome da sub-rede.
  • Criar no compartimento: escolha o compartimento.
  • Bloco CIDR: Use o valor padrão (10.0.0.0/24).
  • Endereço IPv4 público, selecione "Designar um endereço IPv4 público".

Agora, é a hora de Adicionar as chaves SSH. Selecione a opção "Colar chaves públicas".

  • Lembra que criamos uma chave SSH no começo desse tutorial, certo? Você vai abrir o local do arquivo em que sua chave foi salva, e abrir o arquivo id_rsa.pub com um editor de texto ou o bloco de notas.
  • Você vai copiar a chave e colar no campo "Chaves SSH":

Por fim, na aba Volume de inicialização:

  • Desmarque a opção "Especificar um tamanho de volume de inicialização do cliente".
  • Marque a opção "Usar criptografia em trânsito".
  • Desmarque a opção "Criptografar este volume com uma chave gerenciada por você".

Clique em Criar. Em alguns minutos, sua instância Ubuntu estará provisionada com sucesso.

Nas informações da instância, você vai encontra o Endereço IP Público. Copie e salve esse endereço, vamos precisar dele para fazer o acesso a instância pelo SSH.

5) Ativar o acesso à internet - liberar a porta UDP 1194

Com o workflow do passo anterior, nós criamos uma VCN. Agora, é necessário adicionar uma regra para permitir a conexão com a porta 1194 (padrão da VPN).

Para isso, abra o menu e clique em "Rede" -> "Redes Virtuais na nuvem":

Selecione sua VNC → clique na sua Subnet → e em seguida clique na Lista de Segurança.

Clique no botão "Adicionar Lista de Segurança":

Agora, adicione as seguintes informações:

  • Sem monitoramento de estado: Marcado
  • Tipo de Origem: CIDR
  • CIDR de Origem: 0.0.0.0/0
  • Protocolo IP: UDP
  • Intervalo de portas de origem: deixe vazio
  • Intervalo de Portas de Destino: 1194
  • Descrição: OpenVPN

E clique em "Adicionar regras de entrada".

6) Conecte-se a VM via SSH

Agora, vamos nos conectar à nossa instância via SSH. Se tudo ocorreu certo com a sua chave, basta usar o comando:

ssh -i nome_da_chave ubuntu@ip_da_vm

## Exemplo
ssh -i oracle ubuntu@ip_da_vm

Em seguida, digite:

sudo su

apt-get update && upgrade -y

7) Instale o OpenVPN

Para facilitar o processo, vamos utilizar um script para instalar o OpenVPN

## Instalar o wget - caso não venha por padrão na máquina
apt install -y wget

## Instalar e configurar o OpenVPN

wget -O openvpn.sh https://get.vpnsetup.net/ovpn && bash openvpn.sh

Alguns pontos durante a instalação e configuração do OpenVPN:

  • Protocolo (protocol): Selecione UDP (1)
  • Porta do servidor (What port?): 1194
  • Servidor DNS (DNS server): Google Public DNS (2)
  • Nome do cliente (Enter a name for the first client): crie um nome
  • Digite "y"

Pronto! Ao finalizar a instalação do OpenVPN, será informado onde o arquivo client foi criado. Copie o caminho do arquivo, pois será necessário para baixá-lo.

8) Baixe o arquivo client

O próximo passo é baixar o arquivo client na sua máquina local. Existem várias formas de fazer isso, seja com FTP, SFTP, entre outros. Nesse caso, vamos usar o protocolo SCP.

A sintaxe do comando é:

scp [other options] [source username@IP]:/[directory and file name] [destination username@IP]:/[destination directory]

Abra um terminal e siga o exemplo (o caminho da pasta destino vai depender caso esteja usando o Windows ou Linux):

scp -i nome_da_chave ubuntu@ip_da_VM:/home/ubuntu/client.ovpn D:/Downloads

O arquivo .ovpn será copiado para a sua pasta de destino. No meu caso, ele ficou na pasta "Downloads" padrão do Windows.

9) Testando a conexão

Para testar, é necessário ter o OpenVPN client instalado no seu computador. Você pode baixá-lo por este link.

Após instalado, clique no arquivo .ovpn (caso esteja no Windows), ou importe esse arquivo caso esteja usando o Linux.

Considerações finais

Nesse tutorial, criamos de forma bem básica a nossa VPN gratuita. Não abordamos questões de segurança e proteção de porta, mas isso pode ficar para outros tutoriais.

💡

Ah, existe uma forma bem mais "simples" de criar sua VPN na Oracle - com poucos cliques. Mas nada melhor do que aprender primeiro e depois buscar formas mais práticas 😆... Fica para um outro artigo também.

Bons estudos!

Referências

Como configurar um blog Ghost em uma VM Ubuntu

· 12 min para ler
Ludmila Silva
Cloud & DevOps Engineer

O objetivo deste artigo é descrever um passo a passo de como criar uma máquina virtual (VM) Linux Ubuntu na Azure, através do Portal do Azure, e configurar o CMS Ghost para criar um blog pessoal. Inclusive, o Ghost é o CMS usado neste blog 😁

O intuito aqui apresentar algumas funções básicas de criação uma máquina virtual em um provedor de serviços de computação em Nuvem, realizar o acesso à VM pelo SSH, configuração do webserver Nginx e outras ferramentas, e a instalação e configuração do CMS Ghost.

Vamos lá?

O que é o Ghost?

O Ghost é um CMS - Content Management System (Sistema de Gerenciamento de Conteúdo) que fornece ferramentas para publicar conteúdo, compartilhar e fomentar o seu negócio através de websites. Trata-se de uma alternativa open source ao Wordpress, que é o CMS mais famoso e mais utilizado atualmente.

O Ghost possui uma interface intuitiva e fácil de usar, permitindo publicar um site em poucos cliques. Baseado em NodeJS, é rápido, seguro, SEO friendly, responsivo e permite diversas integrações com várias APIs.

Para quem busca desempenho, segurança e economia, o Ghost é uma excelente opção. Há a versão paga, onde você pode hospedá-lo em uma plataforma gerenciada pelo Ghost (assim como o Wordpress), ou auto-hospedar em um servidor próprio, como em um VPS, por exemplo.

Se você é outsider e gosta de usar ferramentas "diferentonas", o Ghost é uma boa ideia. 😅

Especificações do Ghost

De acordo com a documentação do Ghost, esses são os requisitos mínimos para a instalação do CMS:

  • Sistema operacional: Ubuntu 16.04, Ubuntu 18.04, Ubuntu 20.04 ou Ubuntu 22.04
  • Nginx (mínimo versão 1.9.5 para SSL)
  • Versão suportada do Node.js (a recomendada é a v16)
  • MySQL 8
  • Systemd
  • Um servidor com no mínimo 1GB de memória RAM
  • Um domínio registrado

Passo a passo

1) Criar uma conta no Portal Azure

Caso você já tenha uma conta criada no Azure, pule essa etapa. Caso você não tenha uma conta, será necessário criá-la no Portal do Azure.

No Azure, ao criar uma conta nova você vai receber um crédito de $200 para usar e testar os serviços por 30 dias. Além disso, após os 30 dias você pode utilizar serviços populares por 12 meses gratuitamente, tais como:

  • VMs Linux: 750 horas de máquinas virtuais com capacidade de intermitência B1s;
  • Banco de dados SQL: 250 GB de instância S0 com dez unidades de transação de banco de dados;
  • Armazenamento de Blobs do Azure;
  • Azure Functions: 1 milhão de solicitações;
  • Entre outros serviços.

Você pode conferir os serviços gratuitos clicando aqui.

No meu caso, eu já utilizo uma conta de estudante da Microsoft vinculada ao Azure, que disponibiliza $100 em créditos para uso.

2) Criar uma VM na Azure

Após ter criado a sua conta no Azure, você vai criar a máquina virtual (VM). No portal do Azure, clique em “Criar um recurso”, conforme imagem:

Há também a opção “Máquina virtual” que vai seguir o mesmo caminho.

3) Configurar a VM

Em seguida, vamos configurar a nossa máquina virtual para atender as especificações do Ghost.

Primeiramente: No Azure, nada se cria se você não tiver um grupo de recursos na sua assinatura. Dessa forma, caso você não tenha um Grupo de recursos, clique em “Criar novo” e forneça um nome para o seu grupo.

Na opção Detalhes da instância, são solicitados alguns dados de configuração da máquina virtual. Eu optei pelas seguintes configurações:

  • Nome da máquina virtual: vm-ghost (fique livre para escolher o nome da vm)
  • Região: (US) East US
  • Opções de disponibilidade: Zona 1
  • Tipo de Segurança: Padrão
  • Imagem: Ubuntu Server 20.04 LTS
  • Tamanho: Standard B1ms (1 vcpus, 2 GiB de memória)

🚨

Optei por uma instância com 2GiB de memória. Até poderia usar a padrão B1 com 1GiB, mas pode ocorrer um gargalo durante a instalação do Ghost, alegando falta de memória. Há como contornar isso, mas fica para outro post. 

Vamos seguir com o passo a passo:

Conta de administrador

Aqui vamos escolher gerar um par de chaves SSH para acessar a máquina virtual. As configurações foram:

  • Tipo de autenticação: Chave pública de SSH
  • Nome de usuário: azureuser (fique livre para escolher o nome)
  • Origem de chave SSH pública: Gerar um novo par de chaves
  • Nome do par de chaves: myKey (fique livre para escolher o nome das chaves)

Regras de portas de entrada

  • Portas de entrada públicas: Permitir portas selecionadas
  • Selecione as portas de entrada: SSH (22), HTTP (80) e HTTPS (443)

Na aba DISCOS, optei pelo Tipo de Disco de SO como SSD Standard com redundância local. A partir daí, você pode avançar com as opções até chegar em “Revisar + criar”.

4) Gere a chave privada

Após clicar em “criar” para criar a sua VM, será exibido na tela um aviso para gerar um par de chaves SSH. Clique em “Baixar chave privada e criar recurso”. Será baixado um arquivo em formato .pem.

E voilá! A VM foi criada!

Clique em “Ir para o recurso” para visualizar as informações da sua VM.

5) Conectar à VM

Depois de acessar as informações da VM, você vai copiar o endereço de IP público da máquina:

Caso você esteja no Linux ou MacOs, você deve alterar a permissão do arquivo de chave .pem para 400, com o comando:

## Alterar permissões da chave .pem
chmod 400 nome_da_chave.pem

Para se conectar à VM, use o comando:

ssh -i nome_da_chave.pem nome-do-usuário@ip-publico-da-VM

Caso esteja no Windows, abra um terminal - pode ser o CMD ou o PowerShell. Você vai usar o seguinte comando - lembrando de substituir o caminho para onde está localizada a sua chave .pem e o IP para o IP público da sua VM:

ssh -i ~/Downloads/myKey.pem azureuser@ip-publico-da-VM

Caso você tenha feito o acesso com sucesso, você receberá uma mensagem similar da imagem abaixo:

6) Crie um novo usuário

Após se conectar à VM, entre no usuário root e crie um novo usuário, que será nosso user padrão para configurar as intalações e gerenciar o Ghost:

## Acessar usuário root
sudo su

## Criar um novo usuário
adduser nome_do_usuário

Agora, dê privilégios de superuser para o novo usuário criado, e alterne seu acesso para o usuário:

## Privilégios de superuser
usermod -aG sudo nome_do_usuário

## Alternar para o user criado
su - nome_do_usuário

7) Instalar o Nginx

Agora, faça um update e um upgrade dos pacotes no Linux:

sudo apt-get update && sudo apt-get upgrade -y

Em seguida, instale o Nginx com os comandos:

sudo apt-get install nginx -y

## Opcional
sudo ufw allow 'Nginx Full'

Se tudo ocorreu bem com a instalação do Nginx, ao acessar o IP público da VM no seu navegador você vai ver a mensagem:

8) Instalar o MySQL

Agora, entre com o seguinte comando no terminal para instalar o MySQL:

sudo apt-get install mysql-server -y

9) Instalar o Node.Js

Em sequência, vamos instalar o Node.Js com os comandos:

# Fazer curl na versão recomendada do node
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash

# Instalando o node
sudo apt-get install nodejs -y

10) Abrir as portas do webserver

O Iptables é um firewall importante no Linux e, muitas vezes, por definição o acesso à determinadas portas não é permitido. Portanto, use os comandos a seguir para abrir as portas 80 e 443, caso seja necessário:

sudo apt-get install iptables-persistent

# HTTP :80
sudo iptables -I INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT

# HTTPS : 443
sudo iptables -I INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

# Salve as configurações
sudo netfilter-persistent save

11) Instalando o Ghost

Agora, vamos criar um usuário no MySQL para o Ghost.

# Inicializar o MySQL
sudo mysql

# Criar um DB user com senha
create user 'ghost'@'localhost' identified by 'Senha1234';

# Dar todos os privilégios para o usuário
grant all privileges on *.* to 'ghost'@'localhost';

# Criar uma DB para o Ghost
create database ghost;

# Atualizar as permissões
flush privileges;

# Sair do MySql
exit

Instale o Ghost-CLI

#Instalar CLI
sudo npm install ghost-cli@latest -g

Crie um novo diretório com o comando mkdir:

# Criar um diretorio para o ghost
sudo mkdir -p /var/www/ghost

# Setar o usuário dono do diretório
sudo chown nome_de_usuario:nome_de_usuario /var/www/ghost

# Alterar as permissões
sudo chmod 775 /var/www/ghost

# Navegar até o diretório criado
cd /var/www/ghost

# Iniciar a instalação do ghost
ghost install

Aguarde até que o Ghost termine de ser instalado.

12) Configurações da instalação

Após a instalação, o sistema vai pedir algumas configurações:

  • Blog URL: caso você possua um domínio registrado, pode inseri-lo nesse campo. Se não tiver, deixe o IP da sua máquina virtual mesmo. No meu caso, usei o endereço https://ludsilva.tech - sim, com https mesmo! Não precisa se preocupar com o certificado SSL, pois ele será configurado posteriormente.
  • MySQL hostname: hostname - por padrão, é o hostname
  • MySQL username / password: use o usuário e senha criados anteriormente para o MySQL
  • Ghost database name: ghost - use o nome do banco de dados criado no MySQL
  • Set up a ghost MySQL user? ghost - utilize o nome do user criado no MySQL
  • Set up NGINX? Selecione "Y"
  • Set up SSL? Selecione "Y"
  • Enter your email - forneça um e-mail para o certificado SSL
  • Set up systemd? - Selecione "Y"

Ao final do processo, se tudo ocorrer bem, você vai conseguir acessar o blog pelo pelo ip_da_vm/ghost

Se você utilizou um domínio já registrado, falta o último passo antes de acessar seu blog: configurar os apontamentos DNS.

13) Configurar o DNS (opcional)

Caso você possua um domínio registrado, é hora de configurar os apontamentos DNS para que quando você digite o endereço no navegador, você seja redirecionado para o seu blog Ghost.

💡

O domínio de testes que utilizei foi criado gratuitamente com o GitHub Student Developer Pack.

Para facilitar esse processo, vamos somente configurar o apontamento do tipo A, que vai utilizar o IP público da VM criada no Azure.

No meu caso, eu utilizo a Umbler como zona de DNS do meu domínio. Outra dica é deixar na CloudFlare. Por facilidade de uso, evito deixar no RegistroBr caso seja um domínio nacional (de extensão .br) ou em outros provedores. A interface da Umbler é bem amigável, e a da CloudFlare permite inserir apontamentos do tipo AAAA. Fica a sua critério escolher qual lhe atende melhor.

Como meu domínio já estava adicionado, só precisei logar no painel Umbler e clicar em "Domínio":

Em seguida, clicar em "Editor de DNS":

Depois, clicar no botão "+ Adicionar":

E criar um apontamento com os seguintes valores:

  • Tipo: A
  • Nome: deixar em branco ou colocar @
  • Dados: o IP da VM no Azure
  • TTL: 1 hora

Clique em "Salvar", e seu apontamento foi criado com sucesso.

Com o apontamento criado, é só esperar a propagação - que pode levar até 48 horas (é uma média, vai depender da extensão do seu domínio).

14) Acessando o site

Ao acessar o seu site (pelo domínio ou pelo IP), será apresentada essa página aqui:

15) Criando seu login

O próximo passo é criar o seu login. Por isso acesse seudominio.com/ghost ou ip_da_vm/ghost

No primeiro acesso, o sistema vai pedir para você criar um usuário e algums informações iniciais para o seu blog:

  • Site title: você vai escolher o título do seu site
  • Full name: o seu nome
  • Email address: o seu endereço de e-mail para realizar o login no Ghost
  • Password: a sua senha

16) Agora, é só aproveitar

Após o login, você será redirecionado para o Dashboard do Ghost. Fique à vontade para experimentar as funcionalidades e configurar o seu blog da forma que desejar.

Aproveite para explorar a documentação do Ghost (que está linkada no final deste post).

💡

Lembre-se que você está no período de testes do Azure (caso tenha criado uma nova conta). Então, não se esqueça de encerrar a sua instância para são ser cobrado!

Caso queira usar uma VM 100% gratuita, recomendo dar uma olhada no Free Tier da Oracle Cloud.

Extra: troubleshooting para alguns problemas comuns

Em alguns casos, na instalação do Ghost podem ocorrer alguns problemas. O primeiro deles é alegar "falta de memória" - principalmente se você estiver usando uma máquina virtual com 1GB de RAM.

Para contornar esse entrave, no momento de instalar o Ghost use o comando:

## Caso apresente erro de memória
ghost install --no-check-mem

É comum também ocorrer bugs durante a configuração do certificado SSL ou até mesmo problemas de causas desconhecidas. Para contornar, siga o passo a passo:

## Desinstale o Ghost
ghost uninstal

## Remova a pasta criada
sudo rm -R /ghost

E siga novamente os passos para criar uma nova pasta a partir do item 11 deste tutorial.

Por fim, bons estudos!


Referências