Segurança na nuvem - Como proteger seus droplets na Digital Ocean

A Digital Ocean é uma empresa de cloud computing que tem ganhado notoriedade em seu serviços nos últimos meses. Eles estão sempre lançando novos recursos que são documentados através de uma comunicação clara com os desenvolvedores, seja através do blog, documentação ou contato direto com a comunidade. Outro ponto bastante interessante é a facilidade de utilizar os recursos da plataforma.

Mas como nem tudo nesse mundo são flores, ao mesmo tempo que a empresa atrai pessoas de boa índole pela facilidade na utilização de seus serviços, acaba atraíndo também pessoas, que de alguma forma querem o seu mal. Tratando-se de cloud computing, máquinas virtuais ou seja lá como você queira chamar, algumas premissas básicas de segurança devem ser tomadas. Me acompanhe que vou mostrar algumas regras básicas a serem seguidas para que seus serviços não sejam prejudicados.

  1. Desabilitar login root
  2. Alterar a porta default do SSH
  3. Configurar o firewall
  4. Previnir brute force access

1. Desabilitar login root

Ao criar um novo droplet, você verá que a Digital Ocean cria um usuário root para você por padrão. Este usuário tem total acesso aos recursos do droplet, o que o torna um alvo preferencial para hackers. Uma vez estando comprometido, eles terão liberdade para fazer o que quiser. Além disso, devido aos seus amplos privilégios, você poderia facilmente fazer alterações devastadoras em seu droplet por acidente.

Crie usuários alternativos para acesso

Antes de desativar o login root, precisamos criar uma maneira alternativa de acessar o droplet (caso contrário, você ficará bloqueado!). Portanto, vamos criar um novo usuário. Substitua “username” pelo seu nome de usuário no seguinte comando:

Em seguida, será solicitado que você preencha uma senha e mais alguns detalhes. Agora precisamos dar ao usuário recém-criado privilégios (sudo) para realizar tarefas administrativas no sistema:

sudo (abreviação de superuser do) é o comando que permite a um usuário executar programas e comandos com os privilégios de segurança de um superusuário (no nosso caso, o usuário root).

Agora você pode executar tarefas administrativas digitando sudo antes de um comando. Vamos nesse momento alternar para o usuário recém-criado através do seguinte comando:

Desabilitando o acesso root

Com o novo usuário criado já podemos desabilitar o login de root. Abra o arquivo /etc/ssh/sshd_config com o editor vim:

Com o arqivo aberto, utilize as teclas de seta para navegar pelo arquivo até encontrar por PermitRootLogin. Mude o valor da linha para no, conforme imagem abaixo:

Como desbilitar o login root

Vamos também permitir acesso ssh ao usuário que acabamos de criar. Em qualquer lugar do arquivo, adicione a linha AllowUsers com o nome do seu usuário recém criado, você pode adicionar múltiplos usuários, desde que sejam separados por espaço:

Como habilitar acesso ssh ao usuário recém criado

Substitua pedrorogerio pelo seu nome de usuário. Por enquanto não feche esse terminal, vamos agora copiar a chave de acesso que estavamos utilizando no usuário root para o novo usuário criado. Para isso, vamos utilizar os seguintes comandos:

Reinicie o serviço ssh com o seguinte comando:

Abra uma nova aba no seu terminal e teste o acesso via ssh ao seu droplet com o novo usuário e você verá que funcionará tudo ok.

2. Alterar a porta default do SSH

Por padrão, os droplets da Digital Ocean (bem como quaisquer outros provedores de seviços na nuvem) vem com a porta ssh aberta (porta 22). Portanto, qualquer usuário poderia tentar acesso utilizando um login e senha ao seu servidor. Uma vez que muitos servidores acabam rodando em sua configuração default, é fácil encontrar vários bots executando ataques de força bruta aleatoriamente para obter acesso não autorizado.

Para evitar esse tipo de problema, você pode alterar a porta ssh do seu servidor para uma que seja diferente da 22 alterando novamente o arquivo /etc/ssh/sshd_config.

Porta SSH default

No arquivo, altere o número na linha Port 22 para qualquer valor entre 1024 e 32767. Para os fins deste tutorial, iremos alterá-lo para o seguinte:

Porta SSH alterada

Salve o arquivo e renicie o serviço ssh:

A partir de agora, o acesso ssh ao droplet deve ser feito da seguinte forma. Atente-se que você deve passar o parâmetro -p juntamente com a porta escolhida:

3. Configurar o firewall

Depois de mudar a porta, precisaremos bloquear as conexões de outras portas. Isso pode ser feito configurando o UFW (Uncomplicated Firewall) do sistema. Para começar, vamos negar todas as solicitações de entrada por padrão, permitindo que os aplicativos no servidor se conectem fora dele:

A partir de agora, o UFW está configurado para negar todas as conexões de entrada. Isso também bloquearia nosso acesso ao droplet. Portanto, precisamos definir regras para que o firewall aceite os tipos de conexão que desejamos. Para começar, vamos permitir conexões em nossa porta SSH na qual configuramos anteriormente. Digite o seguinte comando com o número da porta que você definiu (no meu exemplo escolhi a 20234):

Vamos permitir também conexões HTTP e HTTPS ao nosso droplet, para isso basta executar o seguinte comando:

Estando tudo ok com as configurações, basta ativar o firewall:

Se tudo correu bem, você só poderá acessar seu droplet a partir da porta especificada.

4. Previnir brute force access

Mudar de porta pode dificultar o acesso ao servidor, mas se alguém se esforçar o suficiente é uma questão de tempo antes que eles consigam invadir o seu servidor. Como esses ataques funcionam? São utilizados bots para gerar credenciais de login aleatórias até que consigam adivinhar as corretas para entrar. Para evitar que eles façam isso, precisamos limitar o número de vezes que se pode tentar fazer login em um usuário antes de serem bloqueados.

Podemos conseguir isso utilizando o PAM (Pluggable Authentication Modules) para configurar a autenticação no servidor. Isso pode ser feito acessando /etc/pam.d/common-auth:

No momento, ele está definido como pam_permit.so, o que significa que o acesso é sempre concedido, mesmo se ocorrer falhas nas tentativas de login. Vamos mudar isso e usar o módulo pam_tally2.so, que nos permitirá negar o acesso ao usuário se ele fizer muitas tentativas de login malsucedidas. Para isso, adicione a seguinte linha na parte superior do arquivo (antes das demais configurações):

Previnir brute force access

OpçãoDescrição
deny=3O número de tentativas antes que a conta seja bloqueada. Neste caso, o usuário será bloqueado após 3 tentativas.
unlock_time=2400Por quanto tempo o usuário ficará bloqueado, em segundos. Neste caso específico, o usuário ficará bloqueado por 40 minutos. Se você não usar esta opção, o usuário será bloqueado indefinidamente até que você desbloqueie manualmente.

Salve as alterações e renicie novamente o serviço de SSH:

Espero que essas 4 dicas básicas possam trazer um pouco mais de segurança aos seus droplets. E se você não tem conta na Digital Ocean mais gostaria de testar, crie uma conta utilizando o seguinte link, você vai ganhar $100 dólares de crédito para gastar em até 60 dias (válido somente para novas contas).