Aprenda sobre práticas de segurança essenciais ao obter uma VPS, aplicáveis a qualquer computador remoto que você necessite acessar remotamente através do SSH. Os comandos descritos serão baseados nas distribuições Debian e Ubuntu.
Conteúdo:
- Atualizar o sistema
- Criar um novo Usuário
- Criar Chaves de Segurança
- Configurando o SSH
- Instalando um Firewall
- Firewall com Docker
- Mudando a Porta de Acesso
- Outras Medidas de Segurança
Este guia destina-se a VPS que fornecem apenas o IP e as credenciais de login root, excluindo aquelas que já oferecem níveis predefinidos de segurança, como chaves de segurança e WAF (Web Application Firewall).
Atualizar o Sistema
Faça login no seu VPS como root.
Uma prática de segurança recomendada é manter o sistema sempre atualizado. Portanto, o primeiro passo é realizar a atualização do sistema usando o comando abaixo:
apt update
apt upgrade
Atualizações Automáticas
Instale o pacote unattended-upgrades
com o comando:
sudo apt install unattended-upgrades
Depois de instalado, você pode configurar o unattended-upgrades
para atualizar automaticamente o seu sistema. Para isso, você pode usar o comando:
sudo dpkg-reconfigure -plow unattended-upgrades
Este comando abrirá uma janela perguntando se você deseja que o sistema baixe e instale atualizações estáveis automaticamente. Selecione “Sim” ou “Yes” para ativar as atualizações automáticas
Finalmente, dois comandos finais para ativar as atualizações automáticas no início do sistema:
sudo systemctl enable unattended-upgrades
sudo systemctl start unattended-upgrades
Criar um Novo Usuário
Crie um novo usuário:
adduser nome_do_usuario
Defina e confirme a nova senha do usuário.
Adicione o novo usuário ao grupo sudo:
usermod -aG sudo nome_do_usuario
Criar Chaves de Segurança
Usando o Windows:
Para criar chaves no Windows você pode seguir esse guia Gerar Chaves de Segurança com Putty
Usando o Linux:
No seu sistema local, abra um terminal.
Digite o comando abaixo no terminal e pressione Enter
ssh-keygen
Isso inicia o processo de criação da chave.
ssh-keygen
Você será solicitado a fornecer um local para salvar a chave. Se você quiser usar o local padrão, basta pressionar Enter.
Enter file in which to save the key (/home/username/.ssh/id_rsa):
Em seguida, você será solicitado a fornecer uma senha. Isso adiciona uma camada extra de segurança à sua chave. Se você não quiser usar uma senha, basta pressionar Enter quando solicitado.
Enter passphrase (empty for no passphrase):
Se você escolheu usar uma senha, será solicitado a confirmá-la. Digite a mesma senha novamente e pressione Enter.
Enter same passphrase again:
Seu novo par de chaves SSH é gerado. A chave privada (id_rsa) e a chave pública (id_rsa.pub) são salvas no diretório especificado.
Enviando a chave de segurança para o Servidor
No seu sistema local, use o comando ssh-copy-id para copiar a chave pública para o servidor remoto. Substitua nome_do_usuario pelo nome do usuário que você criou no servidor remoto e seu_vps_ip pelo endereço IP do seu VPS
ssh-copy-id nome_do_usuario@seu_vps_ip
Tente se conectar ao servidor remoto usando SSH. Você deve ser capaz de se conectar sem digitar uma senha
ssh nome_do_usuario@seu_vps_ip
No servidor remoto, a chave pública é adicionada a um arquivo chamado authorized_keys no diretório ~/.ssh do usuário. Você pode verificar isso com o seguinte comando:
cat ~/.ssh/authorized_keys
Lembre-se, a chave privada deve ser mantida em segredo e segura.
Configurando o SSH
Antes de prosseguir para esta etapa de configuração, assegure-se de que consegue acessar o SSH utilizando sua chave de segurança, ou seja, sem o uso de login e senha. Além disso, confirme se o comando ‘sudo’ está funcionando corretamente, tentando utilizá-lo em algum comando que exige privilégios de root. Com essas verificações confirmadas, podemos avançar para a próxima etapa.
Desabilitando o Acesso SSH como Root e por Senha
Abra o arquivo de configuração do SSH:
sudo nano /etc/ssh/sshd_config
Localize a linha que diz PermitRootLogin e altere para no.
Localize a linha que diz PasswordAuthentication e altere para no.
Salve e feche o arquivo.
Reinicie o serviço SSH:
sudo systemctl restart ssh
ou
sudo service ssh restart
Instalando e Habilitando um Firewall
Instale o UFW (Uncomplicated Firewall):
sudo apt install ufw
Setando as Primeiras Regras:
Negar Todas as Entradas e Permitir Tráfego de Saída
sudo ufw default deny incoming
sudo ufw default allow outgoing
Habilitando Acesso ao SSH:
sudo ufw allow 22
Ativando o Firewall:
sudo ufw enable
Firewall com Docker
O Docker modifica as regras do iptables, o firewall do Linux, para administrar o tráfego e o isolamento dos containers. Essa ação pode resultar na violação das regras preexistentes do iptables, permitindo, por exemplo, tráfego em portas bloqueadas pelo firewall para os containers do Docker.
Diante disso se voce pretende utilizar docker na sua VPS é importante você configurar o arquivo /etc/ufw/after.rules
Digite no terminal
sudo nano /etc/ufw/after.rules
Adicione essas regras no fim do arquivo
# BEGIN UFW AND DOCKER
*filter
:ufw-user-forward - [0:0]
:ufw-docker-logging-deny - [0:0]
:DOCKER-USER - [0:0]
-A DOCKER-USER -j ufw-user-forward
-A DOCKER-USER -j RETURN -s 10.0.0.0/8
-A DOCKER-USER -j RETURN -s 172.16.0.0/12
-A DOCKER-USER -j RETURN -s 192.168.0.0/16
-A DOCKER-USER -p udp -m udp --sport 53 --dport 1024:65535 -j RETURN
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 192.168.0.0/16
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 10.0.0.0/8
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 172.16.0.0/12
-A DOCKER-USER -j RETURN
-A ufw-docker-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW DOCKER BLOCK] "
-A ufw-docker-logging-deny -j DROP
COMMIT
# END UFW AND DOCKER
Atualize o sistema com as novas regras
sudo ufw reload
Breve Explicação sobre as regras que estão sendo adicionadas:
:ufw-user-forward - [0:0]
, :ufw-docker-logging-deny - [0:0]
, :DOCKER-USER - [0:0]
: Essas linhas estão criando novas cadeias de regras no iptables.
-A DOCKER-USER -j ufw-user-forward
: Essa linha adiciona uma regra à cadeia DOCKER-USER que encaminha o tráfego para a cadeia ufw-user-forward.
-A DOCKER-USER -j RETURN -s 10.0.0.0/8
, -A DOCKER-USER -j RETURN -s 172.16.0.0/12
, -A DOCKER-USER -j RETURN -s 192.168.0.0/16
: Essas linhas adicionam regras que permitem o tráfego de retorno das respectivas sub-redes.
- A faixa 10.0.0.0/8 engloba os IPs de 10.0.0.1 até 10.255.255.255.
- A faixa 172.16.0.0/12 engloba os IPs de 172.16.0.1 até 172.31.255.255.
- A faixa 192.168.0.0/16 engloba os IPs de 192.168.0.1 até 192.168.255.255
-A DOCKER-USER -p udp -m udp --sport 53 --dport 1024:65535 -j RETURN
: Essa linha permite o tráfego UDP de retorno da porta 53 para as portas entre 1024 e 65535.
As próximas seis linhas começando com -A DOCKER-USER -j ufw-docker-logging-deny
estão configurando o firewall para bloquear certos tipos de tráfego e registrar as tentativas de conexão bloqueadas.
-A DOCKER-USER -j RETURN
: Essa linha especifica que, se nenhuma das regras anteriores corresponder, o pacote deve ser retornado à cadeia de chamada.
-A ufw-docker-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW DOCKER BLOCK] "
: Essa linha configura o registro de tentativas de conexão bloqueadas, limitando a taxa de registro a três por minuto com um limite de rajada de dez.
-A ufw-docker-logging-deny -j DROP
: Essa linha descarta os pacotes que correspondem às regras de negação
Essas regras ajudam a garantir que o Docker e o UFW possam coexistir sem interferir um no outro, permitindo que você gerencie as regras de firewall de maneira mais eficaz.
Mais informações podem ser obtidas no github do criador do UFW-Docker
Mudando a Porta do SSH
Atenção: Esta é uma configuração crítica que pode resultar na perda de acesso. Algumas VPS da Oracle com Ubuntu podem apresentar problemas ao tentar mudar a porta. Se ainda assim desejar testar, crie uma senha para o usuário root. Isso permitirá que você acesse o console serial e recupere o acesso em caso de erro. A maioria das VPS no mercado deve funcionar normalmente com essa configuração.
sudo passwd root
Abra o arquivo de configuração do SSH:
sudo nano /etc/ssh/sshd_config
Localize a linha que diz Port 22 e altere 22 para a nova porta que você deseja usar ela deve ter um # na frente que deve ser removido.
Ex: Port 5935
Salve e feche o arquivo.
Reinicie o serviço SSH
sudo systemctl restart sshd
Atualize a regra do UFW para permitir conexões na nova porta:
ufw allow nova_porta
Sistemas com SELinux habilitado, como o CentOS, requerem um passo adicional antes de reiniciar o serviço.
sudo semanage port -a -t ssh_port_t -p tcp NOVA_PORTA
sudo firewall-cmd –permanent –add-port=NOVA_PORTA/tcp
sudo firewall-cmd –reload
Outras Medidas de Segurança
- Instale um scanner de malware como o ClamAV: apt install clamav.
- Configure alertas de login do SSH enviando um email sempre que alguém fizer login no seu VPS.
- Instale um sistema de prevenção de intrusão como o Fail2Ban.
- Configurar SSH pelo Tunel da Cloudflare
- SSH com Port Knocking