Protegendo um servidor Linux. O que fazer primeiro

Protegendo um servidor Linux. O que fazer primeiro
Habib M’henni / Wikimedia Commons, CC BY-SA

Nos dias de hoje, levantar um servidor em um provedor de hospedagem é questão de minutos e alguns cliques. Mas logo após o início, ele entra em um ambiente hostil, pois está exposto a toda a internet como uma garota inocente em uma balada de rock. Rapidamente, ele é encontrado por scanners e milhares de bots automáticos que percorrem a rede em busca de vulnerabilidades e configurações inadequadas. Existem algumas coisas a serem feitas logo após a inicialização para garantir uma proteção básica.

Conteúdo

Usuário não-root

Primeiramente, é necessário criar um usuário não-root. A razão é que o usuário root tem privilégios absolutos no sistema, e se você permitir o gerenciamento remoto para ele, estará facilitando o trabalho para um hacker, deixando para ele um nome de usuário válido.

Portanto, você precisa criar outro usuário e desabilitar o gerenciamento remoto para o root via SSH.

Um novo usuário pode ser criado com o comando useradd:

useradd [opções]

Em seguida, é adicionado uma senha para ele com o comando passwd:

passwd

Finalmente, esse usuário precisa ser adicionado a um grupo que tenha permissão para executar comandos com privilégios elevados. sudoDependendo da distribuição Linux, esses podem ser grupos diferentes. Por exemplo, no CentOS e no Red Hat, o usuário é adicionado ao grupo wheel:

usermod -aG wheel

No Ubuntu, ele é adicionado ao grupo sudo:

usermod -aG sudo

Chaves em vez de senhas SSH

Brute force ou vazamento de senhas é um vetor de ataque padrão, então, é melhor desativar a autenticação por senhas no SSH (Secure Shell) e, em vez disso, utilizar a autenticação por chaves.

Existem diferentes programas para implementar o protocolo SSH, como lsh e Dropbear, mas o mais popular é o OpenSSH. Instalação do cliente OpenSSH no Ubuntu:

sudo apt install openssh-client

Instalação no servidor:

sudo apt install openssh-server

Iniciar o daemon SSH (sshd) no servidor com Ubuntu:

sudo systemctl start sshd

Ativar a inicialização automática do daemon a cada boot:

sudo systemctl enable sshd

É importante notar que a parte do servidor do OpenSSH inclui o cliente. Ou seja, através de openssh-server é possível conectar-se a outros servidores. Além disso, a partir da sua máquina cliente, você pode iniciar um túnel SSH de um servidor remoto para um host externo, e então o host externo considerará o servidor remoto como fonte dos pedidos. Uma funcionalidade muito conveniente para ocultar seu sistema. Veja mais no artigo «Dicas práticas, exemplos e túneis SSH».

Na máquina cliente, geralmente não faz sentido instalar um servidor completo, para evitar a possibilidade de conexão remota ao computador (por questões de segurança).

Portanto, para o seu novo usuário, primeiro é necessário gerar chaves SSH no computador do qual você acessará o servidor:

ssh-keygen -t rsa

A chave pública é armazenada em um arquivo .pub e aparece como uma sequência de caracteres aleatórios, que começa com ssh-rsa.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname

Em seguida, sob o root, crie um diretório SSH no diretório home do usuário no servidor e adicione a chave pública SSH ao arquivo authorized_keys, utilizando um editor de texto como o Vim:

mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys

vim /home/user_name/.ssh/authorized_keys

Por fim, defina as permissões corretas para o arquivo:

chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys

e mude a propriedade para esse usuário:

chown -R username:username /home/username/.ssh

Do lado do cliente, você precisa especificar a localização da chave secreta para autenticação:

ssh-add DIR_PATH/keylocation

Agora você pode fazer login no servidor como o usuário usando essa chave:

ssh [username]@hostname

Após a autorização, você pode usar o comando scp para copiar arquivos, a ferramenta sshfs para montar remotamente o sistema de arquivos ou diretórios.

É recomendável fazer várias cópias de segurança da chave privada, pois se você desativar a autenticação por senha e perder a chave, não restará nenhuma forma de acessar seu próprio servidor.

Como mencionado anteriormente, no SSH, é necessário desativar a autenticação para o root (é por isso que criamos um novo usuário).

No CentOS/Red Hat, localize a linha PermitRootLogin yes no arquivo de configuração /etc/ssh/sshd_config e altere-a para:

PermitRootLogin no

No Ubuntu, adicione a linha PermitRootLogin no no arquivo de configuração 10-my-sshd-settings.conf:

sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Após verificar que o novo usuário está se autenticando com sua chave, é possível desativar a autenticação por senha, para eliminar o risco de vazamento ou ataque de força bruta. Agora, para acessar o servidor, um invasor precisará obter a chave privada.

No CentOS/Red Hat, localize a linha PasswordAuthentication yes no arquivo de configuração /etc/ssh/sshd_config e alteramos da seguinte forma:

PasswordAuthentication no

No Ubuntu, adicione a linha PasswordAuthentication no . Isso facilitará a configuração e o uso do armazenamento HashiCorp com o GitLab. 10-my-sshd-settings.conf:

sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Instruções para configurar a autenticação de dois fatores via SSH veja: aqui.

Firewall

O firewall garante que somente o tráfego permitido nos portos que você autorizou diretamente chegue ao servidor. Isso protege contra a exploração de portas que podem ter sido acidentalmente ativadas por outros serviços, ou seja, reduz significativamente a superfície de ataque.

Antes de instalar o firewall, é necessário garantir que o SSH esteja na lista de exceções e não será bloqueado. Caso contrário, após a ativação do firewall, não conseguiremos conectar ao servidor.

Com a distribuição Ubuntu vem o Uncomplicated Firewall (ufw), e com CentOS/Red Hat — firewalld.

Permitindo SSH no firewall no Ubuntu:

sudo ufw allow ssh

No CentOS/Red Hat usamos o comando firewall-cmd:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

Após este procedimento, podemos iniciar o firewall.

No CentOS/Red Hat iniciamos o serviço systemd para firewalld:

sudo systemctl start firewalld
sudo systemctl enable firewalld

No Ubuntu usamos o seguinte comando:

sudo ufw enable

Fail2Ban

Serviço Fail2Ban analisa os logs no servidor e conta o número de tentativas de acesso de cada endereço IP. Nas configurações estão especificadas as regras de quantas tentativas de acesso são permitidas em um determinado intervalo — após o que esse endereço IP é bloqueado por um período definido. Por exemplo, permitimos 5 tentativas de autenticação SSH com falha em um intervalo de 2 horas, após o que bloqueamos esse endereço IP por 12 horas.

Instalação do Fail2Ban no CentOS e Red Hat:

sudo yum install fail2ban

Instalação no Ubuntu e Debian:

sudo apt install fail2ban

Início:

systemctl start fail2ban
systemctl enable fail2ban

O programa possui dois arquivos de configuração: /etc/fail2ban/fail2ban.conf e /etc/fail2ban/jail.conf. As restrições para o banimento são especificadas no segundo arquivo.

O jail para SSH está habilitado por padrão com as configurações padrão (5 tentativas, intervalo de 10 minutos, banimento de 10 minutos).

[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5

Além do SSH, o Fail2Ban pode proteger outros serviços no servidor web nginx ou Apache.

Atualizações automáticas de segurança

Como é sabido, novas vulnerabilidades são constantemente encontradas em todos os programas. Após a publicação de informações, exploits são adicionados a pacotes de exploits populares, que são amplamente utilizados por hackers e adolescentes ao escanear todos os servidores consecutivamente. Portanto, é muito importante instalar as atualizações de segurança assim que elas aparecem.

No servidor Ubuntu, atualizações de segurança automáticas estão habilitadas na configuração padrão, então nenhuma ação adicional é necessária.

No CentOS/Red Hat, você precisa instalar o aplicativo dnf-automatic e habilitar o timer:

sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer

Verificando o timer:

sudo systemctl status dnf-automatic.timer

Alteração das portas padrão

O SSH foi desenvolvido em 1995 para substituir o telnet (porta 23) e ftp (porta 21), então o autor do programa, Tatu Ylönen, escolheu a porta 22 como padrão, e isso foi aprovado pela IANA.

Naturalmente, todos os invasores estão cientes de qual porta o SSH opera — e a escaneiam junto com outras portas padrão para descobrir a versão do software, para verificar senhas padrão de root e assim por diante.

Alterar portas padrão — ofuscação — reduz significativamente o volume de tráfego lixo, o tamanho dos logs e a carga no servidor, além de diminuir a superfície de ataque. Embora alguns criticam esse método como "proteção pela obscuridade" (security through obscurity). A razão é que essa técnica se opõe à fundamental proteção arquitetônica.Portanto, por exemplo, o Instituto Nacional de Padrões e Tecnologia dos EUA no "Guia de Segurança de Servidores" indica a necessidade de uma arquitetura de servidor aberta: "A segurança do sistema não deve depender da ocultação da implementação de seus componentes", é afirmado no documento.

Teoricamente, mudar portas padrão contradiz a prática de arquitetura aberta. Mas na prática, o volume de tráfego malicioso realmente diminui, portanto, é uma medida simples e eficaz.

O número da porta pode ser configurado alterando a diretiva Port 22 no arquivo de configuração. /etc/ssh/sshd_configIsso também é especificado pelo parâmetro -p em sshd.O cliente SSH e os programas sftp também suportam o parâmetro -p.

Parâmetro -p que pode ser usado para especificar o número da porta ao se conectar com o comando ssh no Linux. No sftp e scp é utilizado o parâmetro -P (título P). O comando da linha de comando sobrepõe qualquer valor nos arquivos de configuração.

Se houver muitos servidores, quase todas essas ações para proteger o servidor Linux podem ser automatizadas em um script. Mas se houver apenas um servidor, é melhor controlar o processo manualmente.

Em nome da publicidade

Peça e comece a trabalhar imediatamente! Criação de VDS de qualquer configuração e com qualquer sistema operacional em um minuto. A configuração máxima permitirá liberar toda a potência — 128 núcleos de CPU, 512 GB de RAM, 4000 GB NVMe. É épico 🙂

Protegendo um servidor Linux. O que fazer primeiro

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster