Segurança de servidores na nuvem da Digital Ocean
Neste post iremos ver como aplicar segurança básica em servidores linux. Pormais que eu utilize a Digital Ocean e o CentOS, estas regras servem para qualquer *UNIX
Hoje irei mostrar como aplicar as configurações básicas de segurança em um servidor Linux.
A distro linux utilizada será o CentOS 7, porém as configurações de segurança apresentadas aqui podem ser aplicadas a qualquer disto. Dependendo da distro que você for utilizar, alguns detlahes como caminho de arquivos ou comandos podem ser diferentes.
Tomarei como base, que você já tenha um servidor e queira aplicar as configurações de segurança básica. Caso ainda não tenha um servidor, confira: Como criar um Droplet na Digital Ocean
Acessando o droplet
Nosso droplet está pronto para ser acessado! Levando em consideração que está utilizando uma distro Linux, copie o IP Address referente à instância que acabamos de subir e conecte-se a ela da seguinte forma:
ssh root@IP_DA_INSTANCIA
No caso do nosso tutorial fica assim:
ssh [email protected]
Criando a senha do usuário root
É importante cria uma senha para o root, pois mais para frente vamos desativar o acesso dele via ssh, porém teremos que deixar uma forma de atualizar o sistema ou instalar novos pacotes no nosso servidor. Mais para frente explico melhor.
Utilize o seguinte comando para criar a senha do root:
passwd root
Uma nova senha sera solicitada, logo digite uma e tecle ENTER. Após, será pedido que confirme a senha que acabou de digitar, então, repita a senha e tecle ENTER novamente.
Ok! Agora que criamos uma senha para o root, vamos adicionar um usuário comum em nossa instância.
Adicionando um usuário comum
Um usuário comum é aquele que não tem os privilégios de root e nem permissão para executar comandos com sudo. Ou seja, este usuário não pode alterar que não seja dele ou seja público.
É super importante que as aplicações que ficaram ativas em nosso servidor, não estejam pelo usuário root ou por um usuário com poder de sudo. Isso nos dá uma camada a mais de segurança.
Para criar um novo usuário utilize o comando abaixo no terminal da instância e tecle ENTER:
useradd NOME_DO_NOVO_USUARIO
No caso do nosso tutorial:
useradd gabriel
Nenhum retorno será exibido. Agora vamos criar uma senha para o novo usuário.
passwd NOME_DO_NOVO_USUARIO
No caso do nosso tutorial:
passwd gabriel
Os passos são idênticos aos que utilizamos para por a senha no usuário root. E a saída será semelhante.
Tudo certo!
Adicionando Autenticação de Chave Pública para o novo usuário
O próximo passo é configurar uma chave pública de autenticação para o seu novo usuário, isso te proporciona uma camada de segurança, pois só conseguirá logar com este usuário via SSH, quem tive sua chave privada.
É importante fazer backup do seu par de chaves, pois se perder sua chave privada, não terá mais acesso ao seu servidor.
O ideal seria gerar um par de chaves novas para ter um pouco mais de segurança. Porém, neste tutorial vou utulizar a mesma chave pública que utilizamos para o usuário root.
Com a chave pública em mãos, vamos chavear para o novo usuário. Para isso digite o seguinte comando:
su - NOME_DO_NOVO_USUARIO
No caso do nosso tutorial:
su - gabriel
O - faz com que a gente vá para o diretório home do usuário.
Se você digitar o seguinte comando:
pwd
Verá que o retorno será /home/NOME_DO_NOVO_USUARIO, ou seja, não estamos no diretório /root, estamos na home do usuário.
Agora que estamos chaveado para o novo usuário, vamos adicionar a chave pública para ele.
Crie um novo diretório chamado .ssh e restrinja suas permissões com os seguintes comandos:
mkdir .ssh chmod 700 .ssh
Agora crie um arquivo dentro do diretório .ssh chamado authorized_keys e adicione sua chave pública dentro dele.
Utilize o seguinte commando:
echo "SUA_CHAVE_PUBLICA_AQUI" > .ssh/authorized_keys
No caso do nosso tutorial fica assim:
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCuNu6K/LblCPgWTpfv/QBbZh8W/DJmjIHs8s7KMiqWgqVD8RILZ5TnNSfrg+BwwW4P0KvRyBMVoJeeAy1Xeonh5Yn+KUQ/6OehCsc0OBYE+o+dnex6V5QNZS6VUIyewMHzTSSVRW2ZYlMQGFq4jtqV2xD4OOOYvQiR5ijWjkgRTdjtQBivZDgBrVy/QU97+ToBw4MQyWwNQpH8lrkBJtYYdwVkIC0/DGsq3BfzEcUCnNF+s7qbUKQ57zG2ic02yWQZlOkTumhs8PFNGj75o0z0tM0MDa/n1YypQRHxnB98UGF5Fz8mHebKCX6jEDorrbacKgkXXyJDNEeW+BeJsDGT [email protected]" > .ssh/authorized_keys
Agora restrinja as permissões do arquivo authorized_keys com este comando:
chmod 600 .ssh/authorized_keys
A partir de agora você pode efetuar login SSH como seu novo usuário, usando a chave privada como autenticação.
Digite o comando exit e tecle ENTER para sair do usuário atual e voltar para o root.
Configurando o servidor SSH
Podemos proteger um pouco mais o nosso servidor, modificando a configuração padrão do SSH. As configurações ficam no seguinte caminho e arquivo:
/etc/ssh/sshd_config
Poderíamos utilizar qualquer editor de texto como vi, vim e nano, porém vou me ater a adicionar as novas configurações no final do arquivo de configuração do serviço SSH.
Alterando a porta do serviço SSH
Por padrão o serviço SSH vem configurado para responder na porta 22, por sem bem conhecida, o ideal é alterar esta configuração para diminuir o risco de um ataque no nosso servidor.
Podemos alterar a porta para algo entre 1025 e 65536, mas lembre-se de anotar para você não esquecer qual é a nova porta. Pois é através dela que você terá o acesso via SSH.
Vou utilizar a porta 2806 para o nosso tutorial. Utilize este comando para adicionar a nova configuração de porta:
echo "Port 2806" >> /etc/ssh/sshd_config
Desabilitar o login remoto do root
Por o usuário root também ser bastante conhecido, é fato que podem tentar atacar nosso servidor utilizando as credênciais do root, por isso, é mega importante desabilitar o acesso remoto do usuário root.
Não se preocupe, se você precisar utilizar o root, poderá chavear para ele como fez como usuário comum (su - root), bastando apenas digitar a senha root que será solicitada.
Para não permitir o acesso remoto do root, utilize o seguinte comando:
echo "PermitRootLogin no" >> /etc/ssh/sshd_config
Reiniciar o serviço SSH
Agora que já fizemos as configurações, devemos reiniciar o serviço SSH. Para isso utilize o seguinte comando:
service sshd restart
Agora, antes de sair do servidor, devemos testar nossa nova configuração. Não queremos desconectar antes que possamos confirmar que as novas conexões podem ser estabelecidas com sucesso.
Abra um novo terminal e digite o seguinte comando para se conectar ao servidor:
ssh -p PORTA_NOVA NOME_DO_NOVO_USUARIO@IP_DA_INSTANCIA
No caso do nosso tutorial, fica assim:
ssh -p 2806 [email protected]
Se configurou tudo certo, verá que conectou no servidor com sucesso.
Agora que verificamos que tudo ocorreu bem, podemos deslogar o usuário root do servidor. Para isso utilize ocomando exit
A partir de agora, se você tentar conectar na porta padrão (22) ou com o usuário root, não irá conseguir.
Atualizando os pacotes do servidor
Acabamos decriar a nossa instância CentOS 7, logo, devemos atualizar seus pacotes.
Dado que não podemos mais acessar o nosso servidor via SSH com o usuário root, vamos acessá-lo com o usuário comum e depois a gente escala para o root.
Conectando ao servidor com o novo usuário:
ssh -p 2806 [email protected]
Escalando para o usuário root:
su root
Ele vai pedir a senha, digite a senha do root e tecle ENTER.
Agora que estamos logados como root, vamos utilizar o seguinte comando para atualizar os pacotes do nosso servidor:
yum update -y
Ao término, teremos algo como este aqui:
Pronto!
Digital Ocean Firewall
O Firewall é mais uma camada de segurança para o nosso servidor. A Digital Ocean tem o serviço de Firewall de graça. Vamos configurar o firewall básico para o nosso servidor.
Para isso vá até o painel da sua conta Digital Ocean, clique em Networking e depois em Firewall. Após clique em Create Firewall.
A seguinte tela irá ser carregada:
Em Name ponha um nova que vá te lembrar quais regras estaram na configuração de Firewall.
Exemplos: regras-servidor-lamp, regras-servidor-mysql, regras-servidor-apache, regras-servidor-nginx.
No nosso caso botarei: tutorial-seguranca-basica-servidor.
Em Inbound Rules são as configurações para as conexões que vêm de fora para dentro do nosso servidor.
Podemos ver que a configuração SSH na porta 22 já está por padrão na regra do Firewall, porém nós alteramos o serviço SSH para a porta 2806, logo, devemos modificar o valor da porta na configuração do Firewall, caso contrário, não conseguiremos mais conectar no nosso servidor.
Altere o type de SSH para custom e digite 2806 no Port Range.
Lembre de adicionar todas as portas que você quiser expor. Exemplos: HTTP (80), HTTPS (443), MySQL (3306), …
Em Outbound Rules são as configurações para as conexões de dentro para fora do nosso servidor. Por padrão está liberado o protocolo ICMP e todas as porta utilizando tanto o protocolo TCP quanto o UDP.
Só altere estas configurações se tiver certeza do que está fazendo.
Em Apply to Droplets você irá selecionar quais instâncias (droplets) você quer quer recebam estas configurações de Firewall.
Ao começar a digitar o nome da instância, uma lista irá aparecer para você selecionar.
Após selecionar sua instância, clique no botão Create Firewall.
Pronto! Agora temos um Firewall básico em nossa droplet. :)
Com estes cuidados básicos, estaremos bem mais protegido do que antes. Não podemos esquecer de sempre utilizar autenticação com chave pública em nossos servidores!
Confira como receber $ 25 em créditos na Digital Ocean e caso seja um novo cadastro receberá um adicional de $ 50, totalizando $ 75.
Livros indicados
É vital que um profissional de T.I conheça boas práticas e saiba aplicá-las independente da linguagem ou ferramenta.
Pensando nisso, separei alguns títulos que fazem parte da minha bilioteca pessoal.
Aproveite e invista na sua educação, pois é a base de tudo para uma carreira incrível.
Deixe seu comentário
Atenção: Os comentários abaixo são de inteira responsabilidade de seus respectivos autores e não representam, necessariamente, a opinião do autor desse blog.
Não perca mais nenhum post!
Cadastre-se e receba novos posts diretamente em seu e-mail.
Escolhidos para você