
, 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 e , mas o mais popular é o OpenSSH. Instalação do cliente OpenSSH no Ubuntu:
sudo apt install openssh-clientInstalação no servidor:
sudo apt install openssh-serverIniciar o daemon SSH (sshd) no servidor com Ubuntu:
sudo systemctl start sshdAtivar 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 .
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_keysvim /home/user_name/.ssh/authorized_keysPor fim, defina as permissões corretas para o arquivo:
chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keyse mude a propriedade para esse usuário:
chown -R username:username /home/username/.sshDo lado do cliente, você precisa especificar a localização da chave secreta para autenticação:
ssh-add DIR_PATH/keylocationAgora você pode fazer login no servidor como o usuário usando essa chave:
ssh [username]@hostnameApós a autorização, você pode usar o comando scp para copiar arquivos, a ferramenta 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.confApó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.confInstruções para configurar a autenticação de dois fatores via SSH veja: .
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 (), e com CentOS/Red Hat — .
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 --permanentApó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 firewalldNo Ubuntu usamos o seguinte comando:
sudo ufw enable
Fail2Ban
Serviço 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 fail2banInstalação no Ubuntu e Debian:
sudo apt install fail2banIní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 e habilitar o timer:
sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timerVerificando 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, , 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 (security through obscurity). A razão é que essa técnica se opõe à fundamental Portanto, por exemplo, o Instituto Nacional de Padrões e Tecnologia dos EUA no 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. Isso também é especificado pelo parâmetro -p em O cliente SSH e os programas 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 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! 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 🙂
Fonte: habr.com
