Medidas de Segurança Recomendadas para Proteger Seus Servidores

Introdução

Na maioria do tempo, seu foco principal será em tirar suas aplicações cloud online e funcionando. Como parte do processo de configuração e implantação, é importante integrar medidas de segurança robustas e completas em seu sistema antes de elas ficarem disponíveis publicamente. Implementar as medidas de segurança deste tutorial antes de implantar suas aplicações garantirá que qualquer software que você execute na sua infraestrutura tenha uma configuração de base segura, em oposição a medidas ad-hoc que podem ser implementadas após a implantação.

Este guia destaca algumas medidas práticas de segurança que você pode tomar enquanto está configurando e montando sua infraestrutura de servidores. Esta lista não é exaustiva de tudo que você pode fazer para segurar seus servidores, mas oferece um ponto de partida que você pode construir. Ao longo do tempo, você pode desenvolver um approach de segurança mais personalizado 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 na expectativa de localização no servidor (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 — está completamente criptografada. No entanto, quando as autenticações baseadas em senha são permitidas, usuários malintencionados podem tentar acessar repetidamente e automaticamente um servidor, especialmente se ele tiver um endereço IP voltado para o público. Embora existam maneiras de bloquear o acesso após várias tentativas falhadas da mesma IP, e os usuários malintencionados serão limitados, em prática, por como rapidamente podem tentar fazer login no seu servidor, qualquer circunstância em que um usuário possa plausivelmente tentar obter acesso à sua pilha por meio de ataques de força bruta continuos representará um risco de segurança.

Configurar a autenticação de chaves SSH permite que você desative a autenticação baseada em senha. As chaves SSH geralmente têm muito 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íceis de forçar. Alguns algoritmos de criptografia, no entanto, são considerados quebráveis ao tentar reverter-engenhar hash de senhas suficientes vezes em um computador poderoso o suficiente. Outros, incluindo a chave RSA padrão gerada por clientes SSH modernos, ainda não são plausíveis de quebrar.

Como Implementar Chaves SSH

As chaves SSH são a forma recomendada de fazer login remoto em qualquer ambiente de servidor Linux. Um par de chaves SSH pode ser gerado em sua máquina local usando o comando ssh, e você pode transferir a chave pública para um servidor remoto.

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

Para quaisquer partes da 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 as tentativas de senha.

É uma prática boa não permitir que o usuário root logue diretamente sobre SSH. Em vez disso, logue com um usuário não privilegiado e escalate as privilégios quando necessário usando uma ferramenta como sudo. Essa abordagem de limitação de permissões é conhecida como princípio do menor privilégio. Uma vez que tenha conectado ao seu servidor e criado uma conta não privilegiada que ele confirme funcionar com SSH, você pode desabilitar as conexões de root definindo o directivo PermitRootLogin no no arquivo /etc/ssh/sshd_config do seu servidor e então reiniciar o processo de 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 um determinado servidor ou redes. Um firewall configurado corretamente garantira que somente os serviços que devem estar disponíveis públicamente sejam alcançados de 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. Um exemplo disso é o painel de controle do banco de dados como phpMyAdmin.
  • Serviços internos que devem ser acessíveis apenas dentro da própria máquina, sem exposição ao internet. Por exemplo, um banco de dados que aceite conexões locais exclusivas.

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 podem ser restritos baseados em critérios diferentes, como tipos de conexões. Serviços internos podem ser fechados completamente em muitas configurações para portas não usadas. Para portas que não estão sendo utilizadas, o acesso é bloqueado completamente em muitas configurações.

Como as Firewalls melhoram a segurança?

Mesmo que seus serviços implementem recursos de segurança ou sejam restritos às interfaces em que você gostaria que eles executassem, uma firewall serve como uma camada básica de proteção limitando as conexões para e de volta aos seus serviços antes de tráfego ser processado por uma aplicação.

Uma firewall configurada corretamente restringirá o acesso a tudo exceto os serviços específicos que você precisa manter abertos, normalmente abrindo apenas as portas associadas a esses serviços. Por exemplo, SSH normalmente funciona na porta 22, e o acesso HTTP/HTTPS através de um navegador da Internet normalmente funciona nas portas 80 e 443 respectivamente. Expor apenas algumas ferramentas 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 do que outras. Em geral, você deveria precisar de fazer mudanças na sua configuração de firewall apenas quando você fizer mudanças nos serviços executados no seu servidor. Aqui estão algumas opções para começar:

  • UFW, ou Firewall Uncomplicated, é instalado por padrão em algumas distribuições de Linux como o Ubuntu. Você pode saber mais sobre ele na Guia de Como Configurar um Firewall com UFW no Ubuntu 20.04
  • Se você está usando Red Hat, Rocky, ou Fedora Linux, você pode levar a cabeça para Como configurar um firewall usando o firewalld para usar as ferramentas padrões.

  • Muitas firewalls de software, como UFW e firewalld, escreverão 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
    . Note que algumas outras ferramentas de software que implementam regras de porta em seu próprio, como Docker, também escreverão diretamente em iptables, e podem entrar em conflito com as regras que você cria com UFW, então é útil saber como ler uma configuração de iptables em casos como este.

Nota: Muitos provedores de hospedagem, incluindo DigitalOcean, permitem que você configure um firewall como um serviço que executa como uma camada externa sobre seus servidores na nuvem, em vez de precisar implementar o firewall diretamente. Essas configurações, implementadas no borda da rede usando ferramentas gerenciadas, são frequentemente menos complexas na prática, mas podem ser mais desafiadoras para scriptar e replicar. Você pode referir-se à documentação do firewall na nuvem de DigitalOcean.

Certifique-se que sua configuração de firewall padrão bloqueie tráfego desconhecido. Dessa forma, quaisquer novos serviços que você deploy não serão expostos à Internet de forma acidental. Em vez disso, você terá que permitir acesso explicitamente, o que forçará você a avaliar como um serviço é executado, acessado e quem deveria ter permissão para usá-lo.

Redes VPC

Redes Virtuais de Cloud Privado (VPC) são redes privadas para recursos da sua infraestrutura. As redes VPC fornecem uma conexão mais segura entre recursos, porque as interfaces da rede não estão acessíveis pela Internet pública.

Como as Redes VPC Aumentam 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 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 seus sistemas não será roteado pela internet, onde poderia ser exposto ou interceptado.

Ao condicionalmente expor apenas algumas portas de entrada dedicadas ao internet, também conhecidas como gateways de entrada, você terá mais controle e visibilidade sobre o tráfego público conectando as suas fontes de recursos com a internet. Sistemas de orquestração de containers modernos como Kubernetes têm um conceito muito definido de gateways de entrada, porque eles criam muitas interfaces 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.

Observação: 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 no servidor baseado em Debian, Ubuntu e CentOS.

Configurar sua própria rede privada manualmente pode exigir configurações avançadas de servidores e conhecimentos sobre redes. Uma alternativa à configuração de uma rede VPC é usar uma conexão VPN entre seus servidores.

VPNs e Redes Privadas

Uma VPN, ou rede privada virtual, é um método para 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 em conexões seguras.

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

Como As VPNs Aumentam a Segurança?

Usando uma VPN é uma maneira 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 o tráfego sobre a interfase virtuais que o software do VPN expõe. Assim, apenas serviços que devem ser 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 implementar seus servidores e configurar suas aplicações 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 implementado 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. Depois que um VPN estiver funcionando, as aplicações devem ser configuradas 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
é outro popular deploy 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 implementadas de forma mais ad-hoc.

Auditoria de Serviços

Uma boa segurança envolve analisar seus sistemas, entender as superfícies de ataque disponíveis e ajustar os componentes o melhor que puder.

A auditoria de serviços é uma maneira de saber quais serviços estão sendo executados em um determinado sistema, quais portas eles estão usando para comunicação e quais protocolos esses serviços estão utilizando. Essa informação pode ajudar você a configurar quais serviços devem ser acessíveis publicamente, as configurações de firewall, o monitoramento e as alertas.

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

Cada serviço em execução, quer esteja destinado a ser interno ou público, representa uma superfície de ataque expandida para usuários maliciosos. Quanto mais serviços estiverem em execução, maior é a chance de uma vulnerabilidade afetar seu software.

Uma vez que você tenha uma boa noção de quais serviços de rede estão em execução em seu computador, você pode começar a analisar esses serviços. Quando você realiza uma auditoria de serviços, coloque questões como as seguintes sobre cada serviço em execução:

  • Este serviço devia estar rodando?
  • O serviço está sendo executado em interfaces de rede que não deveriam estar em execução?
  • 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 um método 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. Executar auditorias de serviços a cada algumas semanas também ajudará você a capturar quaisquer serviços com configurações que possam ter mudado unintencionalmente.

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 trafego 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 uma conexão.
  • l mostra apenas soquete que estão ativamente escutando conexões.
  • u inclui soquetes UDP (além de soquetes TCP).
  • n mostra valores numéricos de tráfego.
  • t inclui sockets TCP (além de sockets UDP).

Você receberá saídas semelhantes a isto:

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, Endereço Local: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. Na saída de exemplo acima, SSH e Nginx estão ambos escutando 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 escutem em ambas as interfaces, ou apenas em uma ou na outra. Normalmente, deve desabilitar serviços que estão rodando em interfaces não usadas.

Atualizações Sem Supervisão

Manter seus servidores atualizados com patch é 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 evitar 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 Sem Supervisão Melhoram a Segurança?

A implementação de atualizações sem supervisão, ou seja, automáticas, reduz o nível de esforço necessário para manter seus servidores seguros e encurta o tempo em que seus servidores podem ficar vulneráveis a bugs conhecidos. No caso de uma vulnerabilidade que afeta o software em seus servidores, seus servidores ficarão vulneráveis por quanto tempo levará para executar as atualizações. As atualizações diárias sem supervisão garantem que você não perca nenhum pacote e que qualquer software vulnerável é corrigido assim que as correções estiverem disponíveis.

Como Implementar Atualizações Sem Supervisão

Você pode consultar Como Manter Servidores Ubuntu Atualizados para uma visão geral de como implementar atualizações sem supervisão no Ubuntu.

Infraestrutura de Chave Pública 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?

Autoridade de Certificação (CA) e o gerencimento de certificados para seus servidores permite que cada entidade dentro da sua infraestrutura valide as outras membros’identidades e estabeleça uma comunicação encriptada. 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 configuração das outras infraestruturas de chaves públicas podem envolver um esforço inicial bastante significativo. Além disso, administrar certificados pode criar uma carga adicional de administração quando novos certificados precisam ser criados, assinados ou revocados.

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

Se você gostaria de criar sua própria autoridade de certificados, você pode referir-se às guias Como Configurar 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 implantada 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 podem 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