Medidas de Segurança Recomendadas para Proteger Seus Servidores

Introdução

Na maioria das vezes, seu foco principal será em colocar suas aplicações em nuvem no ar. Como parte do seu processo de configuração e implantação, é importante construir medidas de segurança robustas e abrangentes para seus sistemas e aplicações antes de torná-los publicamente disponíveis. Implementar as medidas de segurança deste tutorial antes de implantar suas aplicações garantirá que qualquer software que você execute em sua infraestrutura tenha uma configuração base segura, em oposição a medidas ad-hoc que podem ser implementadas após a implantação.

Este guia destaca algumas medidas de segurança práticas que você pode adotar enquanto está configurando e instalando sua infraestrutura de servidores. Esta lista não é exaustiva de tudo o que você pode fazer para garantir a segurança de seus servidores, mas oferece um ponto de partida que você pode construir. Ao longo do tempo, você pode desenvolver uma abordagem de segurança mais personalizada que atenda às necessidades específicas de seus ambientes e aplicações.

Chaves SSH

SSH, ou Shell Segura, é um protocolo criptografado usado para administrar e comunicar com servidores. Quando trabalhar com um servidor, você provavelmente passará a maior parte do seu tempo em uma sessão de terminal conectado ao seu servidor através de SSH. Como alternativa às senhas baseadas em palavras-passe, chaves SSH usam criptografia para proporcionar uma maneira segura de logar no seu servidor e são recomendadas para todos os usuários.

Com chaves SSH, um par de chaves privada e pública é criado para o propósito de autenticação. A chave privada é mantida segreda e segura pelo usuário, enquanto a chave pública pode ser compartilhada. Isso é frequentemente referido como criptografia assimétrica, um padrão que você pode encontrar em outros lugares.

Para configurar a autenticação por chaves SSH, você precisa colocar sua chave pública SSH no servidor na localização esperada (normalmente ~/.ssh/authorized_keys). Para saber mais sobre como funciona a autenticação baseada em chaves SSH, leia Entendendo o Processo de Criptografia e Conexão do SSH.

Como as Chaves SSH Melhoram a Segurança?

Com SSH, qualquer tipo de autenticação, incluindo autenticação por senha, é completamente encriptada. No entanto, quando as conexões baseadas em senhas são permitidas, os usuários malintencionados podem tentar acessar um servidor automaticamente e repetidamente, especialmente se o servidor tiver uma máscara pública de IP. Embora haja maneiras de bloquear acesso após vários fracassos consecutivos do mesmo IP, e os atacantes malintencionados serão limitados na prática pelo tempo que eles poderiam tentar fazer login ao seu servidor, qualquer situação em que um usuário possa plausivelmente tentar ganhar acesso à sua pilha por tentativas repetidas de força bruta contra a autenticação baseada em senha representa um risco de segurança.

Configurar autenticação de chaves SSH permite que você desative a autenticação baseada em senha. As chaves SSH geralmente tem muitos mais bits de dados do que uma senha – você pode criar um hash de chave SSH de 128 caracteres a partir de uma senha de 12 caracteres – tornando-as muito mais difícil de força bruta. Algumas algoritmos de encriptação são consideradas crackáveis ao tentar reverter hash de senha suficientemente vezes em uma computadora poderosa o suficiente. Outros, incluindo o padrão RSA gerado por clientes SSH modernos, não são ainda plausíveis para ser rompidos.

Como Implementar Chaves SSH

As chaves SSH são a forma recomendada de logar remotamente em qualquer ambiente de servidores Linux. Uma par de chaves SSH pode ser gerada na sua máquina local usando o comando ssh, e depois transferida a chave pública para um servidor remoto.

Para configurar chaves SSH em seu servidor, você pode seguir Como Configurar Chaves SSH para Ubuntu, Debian ou CentOS.

Para quaisquer partes de sua pilha que requerem acesso por senha ou que sofrem ataques de força bruta, você pode implementar uma solução como fail2ban nos seus servidores para limitar o número de tentativas de senha.

É uma prática comum não permitir que o usuário root logue diretamente sobre SSH. Em vez disso, logue como um usuário sem privilégios e então escalate as permissões quando necessário usando uma ferramenta como sudo. Essa abordagem de limitação de permissões é conhecida como princípio do menor privilegio. Uma vez que tenha conectado ao seu servidor e criado uma conta não privilegiada que ele havia verificado funcionar com SSH, você pode desabilitar os logins do root definindo a diretiva PermitRootLogin no no arquivo /etc/ssh/sshd_config do seu servidor e depois reiniciar o processo do SSH do servidor com um comando como sudo systemctl restart sshd.

Firewalls

Um firewall é um dispositivo ou software que controle como os serviços são expostos à rede e quais tipos de tráfego são permitidos para entrar e sair de determinados servidores ou redes. Um firewall configurado corretamente garantira que somente os serviços que devem estar disponíveis públicamente sejam alcançados desde fora das suas máquinas ou redes.

Numa máquina típica de servidor, vários serviços podem estar rodando por padrão. Esses podem ser categorizados em grupos seguintes:

  • Serviços públicos que poderem ser acessados por qualquer um na internet, frequentemente anónimo. Um exemplo disso é o servidor de websites que serve sua própria página.
  • Serviços privados que devem ser acessados apenas por uma seleção de contas autorizadas ou de certas locações. Por exemplo, um painel de controle de bancos de dadoscomo phpMyAdmin.
  • Serviços internos que devem ser acessíveis apenas dentro do próprio servidor, sem exposição ao internet público. Por exemplo, um banco de dados que deve aceitar conexões locais.

Os firewalls podem garantir que o acesso ao seu software seja restrito conforme as categorias acima com grau de granularidade variável. Os serviços públicos podem ser deixados abertos e disponíveis para a internet, os privados poderem ser restritos baseados em critérios diferentes, como tipos de conexões. Os portos não utilizados são bloqueados completamente em muitas configurações.

Como as Firewalls Aumentam a Segurança?

Mesmo que seus serviços implementem recursos de segurança ou sejam restritos às interfaces que você gostaria que eles fossem executados, uma firewall atua como uma camada base de proteção, limitando as conexões para e desde seus serviços antes que o tráfego seja tratado por um aplicativo.

Uma firewall configurada corretamente restringirá o acesso a tudo, exceto os serviços específicos que você precisa manter abertos, geralmente abrindo apenas as portas associadas a esses serviços. Por exemplo, o SSH geralmente é executado na porta 22, e o acesso HTTP/HTTPS via navegador da web geralmente é executado nas portas 80 e 443, respectivamente. Expor apenas algumas partes de software reduz a superfície de ataque do seu servidor, limitando os componentes que são vulneráveis à exploração.

Como Implementar Firewalls

Existem muitas firewalls disponíveis para sistemas Linux, e algumas são mais complexas que outras. Em geral, você só precisará fazer alterações na configuração da sua firewall quando fizer alterações nos serviços em execução no seu servidor. Aqui estão algumas opções para começar a usar:

  • UFW, ou Uncomplicated Firewall, é instalado por padrão em algumas distribuições Linux como Ubuntu. Você pode saber mais sobre ele na How To Set Up a Firewall with UFW on Ubuntu 20.04
  • Se você está usando Red Hat, Rocky, ou Fedora Linux, você pode levar a cabo How To Set Up a Firewall Using firewalld para usar as ferramentas padrão.

  • Muitas firewalls de software, como UFW e firewalld, escrevem suas regras configuradas diretamente em um arquivo chamado iptables. Para aprender a trabalhar com a configuração de iptables diretamente, você pode revisar Iptables Essentials: Common Firewall Rules and Commands
    . Observe que algumas outras ferramentas de software que implementam regras de porta em seu próprio, como Docker, também escrevem diretamente para iptables, e podem entrar em conflito com as regras que você cria com UFW, portanto, é útil saber como ler uma configuração de iptables em casos como este.

Nota: Muitos provedores de hospedagem, incluindo a DigitalOcean, permitirão que você configure um firewall como um serviço que é executado como uma camada externa sobre seus servidores em nuvem, em vez de precisar implementar o firewall diretamente. Essas configurações, que são implementadas na margem da rede usando ferramentas gerenciadas, são geralmente menos complexas na prática, mas podem ser mais desafiadoras de scriptar e replicar. Você pode consultar a documentação do firewall de nuvem da DigitalOcean.

Certifique-se de que a configuração do firewall padrão esteja bloqueando o tráfego desconhecido. Dessa forma, quaisquer novos serviços que você implantar não serão acidentalmente expostos à Internet. Em vez disso, você terá que permitir o acesso explicitamente, o que o forçará a avaliar como um serviço é executado, acessado e quem deve ser capaz de usá-lo.

Redes VPC

Redes de Virtual Private Cloud (VPC) são redes privadas para os recursos da sua infraestrutura. As redes VPC fornecem uma conexão mais segura entre recursos, pois as interfaces da rede são inacessíveis da internet pública.

Como as Redes VPC Melhoram a Segurança?

Alguns provedores de hospedagem padrãomente atribuirão às suas instâncias na nuvem uma única interfase de rede pública e outra privada. Desabilitar a sua interfase de rede pública em partes da sua infraestrutura permitirá que essas instâncias se conectem entre si usando suas interfaces de rede privadas sobre uma rede interna, o que significa que o tráfego entre os sistemas não será roteado pela internet, onde pode ser exposto ou interceptado.

Ao condicionar a exposição de apenas algumas portas de entrada dedicadas ao internet, também chamadas de gateways de ingresso, você terá mais controle e visibilidade sobre o tráfego público conectando as suas fontes de recursos. Sistemas de orquestração de containers modernos como Kubernetes têm um conceito muito definido de gateways de ingresso, porque eles criam muitas interfases de rede privadas por padrão, que precisam ser expostas selecionadamente.

Como Implementar Redes VPC

Muitos provedores de infraestrutura na nuvem permitem que você crie e adicione recursos à rede VPC dentro de seus centros de dados.

Nota: Se você está usando DigitalOcean e gostaria de configurar seu próprio gateway de VPC, você pode seguir o guia How to Configure a Droplet as a VPC Gateway para saber como fazer com servidores baseados no Debian, Ubuntu e CentOS.

Configurar uma rede privada manualmente pode exigir configurações avançadas de servidores e conhecimentos em redes. Uma alternativa ao configurar uma rede VPC é usar uma conexão VPN entre seus servidores.

VPNs e Redes Privadas

Uma VPN, ou rede privada virtual, é um método de criar conexões seguras entre computadores remotos e apresentar a conexão como se fosse uma rede privada local. Isso fornece uma maneira de configurar os serviços como se estivessem na rede privada e conectar servidores remotos sobre conexões seguras.

Por exemplo, as redes privadas do DigitalOcean permitem comunicação isolada entre servidores na mesma conta ou equipe dentro da mesma região.

Como As VPN Aumentam a Segurança?

Usando uma VPN é uma forma de mapear uma rede privada que somente seus servidores poderão ver. A comunicação será completamente privada e segura. Outros aplicativos podem ser configurados para passar sua trafego sobre uma interface virtuais que a software VPN expõe. Assim, apenas serviços que são destinados a serem usados por clientes na internet pública precisam ser expostos na rede pública.

Como implementar VPNs

Usar redes privadas normalmente requer que você faça decisões sobre suas interfaces de rede ao primeiro implantar seus servidores e configure seus aplicativos e firewall para preferir essas interfaces. Em comparação, o deploy de VPNs requer instalar ferramentas adicionais e criar rotas de rede adicionais, mas normalmente pode ser implantado sobre uma arquitetura existente. Cada servidor em uma VPN deve ter os dados de segurança e configuração compartilhados necessários para estabelecer uma conexão VPN. Após a configuração de um VPN estar funcionando, os aplicativos devem ser configurados para usar o túnel VPN.

Se você estiver usando Ubuntu ou CentOS, você pode seguir o tutorial Como Configurar um Servidor OpenVPN em Ubuntu 20.04.

Wireguard
é outra deploy popular de VPN. Normalmente, VPNs segue o mesmo princípio de limitar a entrada em seus servidores na nuvem implementando uma série de interfaces de rede privada atrás de alguns pontos de entrada, mas enquanto as configurações de VPC são normalmente consideradas como infraestrutura central, VPNs podem ser implantados de forma mais ad-hoc.

AUDIITA DE SERVICIOS

Auditoria de Serviços

A segurança adequada envolve analisar seu sistema, entender as superfícies de ataque disponíveis e bloquear os componentes com o máximo possível de precaução.

A auditoria de serviços é uma maneira de saber quais serviços estão rodando em um determinado sistema, quais portas eles usam para comunicação e quais protocolos esses serviços estão falando. Essa informação pode ajudar você a configurar quais serviços devem ser acessíveis ao público, definições de firewall, monitoramento e alertas.

Como a Auditoria de Serviços Melhora a Segurança?

Cada serviço executando, seja intenção de ser interno ou público, representa uma superfície de ataque expandida para usuários mal-intencionados. Mais serviços que você tiver rodando, maior é a chances de uma vulnerabilidade afetar sua softwara.

Uma vez que tenha uma boa ideia de quais serviços estão rodando no seu computador, você pode começar a analisar esses serviços. Quando você realiza uma auditoria de serviços, pergunte-se as seguintes questões sobre cada serviço executando:

  • Este serviço deve estar rodando?
  • O serviço está rodando em interfaces de rede que não deveriam ser rodadas?
  • O serviço deve ser associado à interfase de rede pública ou privada?
  • As minhas regras de firewall estão estruturadas para permitir o tráfego legítimo deste serviço?
  • As minhas regras de firewall bloqueiam o tráfego que não é legítimo?
  • Possuo uma maneira de receber alertas de segurança sobre vulnerabilidades para cada um desses serviços?

Este tipo de auditoria de serviços deve ser prática padrão quando configurar qualquer novo servidor na sua infraestrutura. Realizar auditorias de serviços a cada algumas semanas também ajudará você a capturar quaisquer serviços com configurações que possam ter mudado involuntariamente.

Como Implementar Auditoria de Serviços

Para auditar os serviços de rede que estão rodando no seu sistema, use o comando ss. Um exemplo de comando que mostra o nome do programa, PID e endereços sendo usados para escutar tráfego TCP e UDP é:

  1. sudo ss -plunt

Os opcionais p, l, u, n, e t funcionam como seguem:

  • p mostra o processo específico que está usando um socket.
  • l mostra apenas sockets que estão ativamente escutando conexões.
  • u inclui sockets UDP (além de sockets TCP).
  • n mostra valores numéricos de trafego.
  • t inclui sockets TCP (além de sockets UDP).

Você receberá saídas semelhantes a esta:

Output
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=812,fd=3)) tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=69226,fd=6),("nginx",pid=69225,fd=6)) tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=812,fd=4)) tcp LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=69226,fd=7),("nginx",pid=69225,fd=7))

As principais colunas que precisam de sua atenção são as colunas Netid, Local Address:Porta e Nome do Processo. Se a Local Address:Porta for 0.0.0.0, então o serviço está aceitando conexões em todas as interfaces de rede IPv4. Se o endereço for [::], então o serviço está aceitando conexões em todas as interfaces de rede IPv6. No exemplo de saída acima, SSH e Nginx estão ambos ouvindo em todas as interfaces públicas, em ambas as estruturas de rede IPv4 e IPv6.

Você poderia decidir se quer permitir que SSH e Nginx ouvam em ambas as interfaces, ou apenas em uma ou na outra. Normalmente, deve desabilitar serviços que estão rodando em interfaces não utilizadas.

Atualizações Sem supervisão

Manter seus servidores atualizados com correções é necessário para garantir um bom nível básico de segurança. Servidores que executam versões desatualizadas e inseguras de software são responsáveis por uma maioria dos incidentes de segurança, mas as atualizações regulares podem mitigar vulnerabilidades e impedir que atacantes obtenham um ponto de apoio em seus servidores. As atualizações sem supervisão permitem que o sistema atualize automaticamente a maioria dos pacotes.

Como as Atualizações Automatizadas Aumentam a Segurança?

Implementar atualizações automatizadas, ou seja, automáticas, reduz a quantidade de esforço necessária para manter seus servidores seguros e reduz o tempo em que seus servidores podem estar vulneráveis a falhas conhecidas. Em caso de uma vulnerabilidade que afeta o software em seus servidores, seus servidores estarão vulneráveis pelo tempo que levar para você executar as atualizações. Atualizações diárias automatizadas garantem que você não vai perder nenhum pacote e que qualquer software vulnerável seja corrigido assim que as correções estiverem disponíveis.

Como Implementar Atualizações Automatizadas

Você pode consultar Como Manter Servidores Ubuntu Atualizados para uma visão geral da implementação de atualizações automatizadas no Ubuntu.

Infraestrutura de Chaves Públicas e Criptografia SSL/TLS

Infraestrutura de Chave Pública, ou PKI, é um sistema projetado para criar, gerenciar e validar certificados para identificar indivíduos e encriptar comunicações. Os certificados SSL ou TLS podem ser usados para autenticar diferentes entidades彼此. Após a autenticação, elas também pode ser usadas para estabelecer comunicação encriptada.

Como A PKI Melhora a Segurança?

A criação de uma Autoridade Certificadora (CA) e o gerencimento de certificados para seus servidores permite que cada entidade dentro da sua infraestrutura valide as outras membros e encriptem suas trafegas. Isso pode prevenir ataques de intercepção no meio, onde um atacante imita um servidor na sua infraestrutura para interceptar tráfego.Man-in-the-middle

Cada servidor pode ser configurado para confiar em uma autoridade de certificação centralizada. Depois disso, qualquer certificado assinado por esta autoridade pode ser implicitamente confiado.

Como Implementar a PKI

Configuração de uma autoridade de certificados e a configuração dos outros infraestruturas de chaves públicas podem envolver um esforço inicial bastante significativo. Além disso, a gestão de certificados pode criar uma carga administrativa adicional quando novos certificados precisam ser criados, assinados ou revocados.

Para muitos usuários, implantar uma infraestrutura completa de chaves públicas só irá fazer sentido quando suas necessidades de infraestrutura sejam maiores. Segurança nas comunicações entre componentes usando um VPN pode ser uma medida intermediária até que você chegue ao ponto em que a infraestrutura de chaves públicas valha o extra custo de administração.

Se você gostaria de criar sua própria autoridade de certificados, você pode referir-se às guias Como Criar e Configurar uma Autoridade de Certificados (CA) dependendo da distribuição do Linux que está usando.

Conclusão

As estratégias apresentadas neste tutorial são um resumo de algumas das etapas que você pode tomar para melhorar a segurança de seu sistema. É importante reconhecer que as medidas de segurança diminuem em sua eficiência a mais tempo que você espera para implementar elas. A segurança não deve ser um aspecto posterior e deve ser implementada quando você primeiro provisao sua infraestrutura. Uma vez que tenha uma base de segurança para construir sobre, você pode começar a deployar seus serviços e aplicativos com algumas garantias de que estão rodando no ambiente de segurança por padrão.

Mesmo com um ambiente de segurança inicialmente seguro, tenha em mente que a segurança é um processo contínuo e iterativo. Sempre seja certo de se perguntar o que as implicações de segurança de qualquer alteração poderiam ser, e quais passos você pode tomar para garantir que sempre estiver criando configurações e ambientes de segurança padrões para seu software.

Source:
https://www.digitalocean.com/community/tutorials/7-security-measures-to-protect-your-servers