Como usar o Port Knocking para proteger o serviço SSH no Linux
Port Knocking é uma técnica bacana de controlar o acesso a uma porta, permitindo apenas que usuários legítimos acessem o serviço em execução em um servidor. Funciona de forma que quando é feita a sequência correta de tentativas de conexão, o firewall abre com prazer a porta que foi fechada.
A lógica por trás da batida de porta é proteger seu sistema Linux de scanners de porta automatizados que procuram portas abertas. Neste guia, examinamos como você pode instalar o port knocking e como configurá-lo para proteger o serviço SSH. Para fins de demonstração, usaremos o Ubuntu 18.04.
Etapa 1: instalar e configurar o knockd
Para começar, faça login em seu sistema Linux e instale o daemon knockd conforme mostrado.
sudo apt install knockd
Depois de instalado, abra a configuração do knockd.conf com seu editor de texto preferido. Aqui, estamos usando o editor de texto de linha de comando vim.
sudo vim /etc/knockd.conf
O arquivo de configuração padrão aparece da seguinte forma.
Na seção [openSSH]
, precisamos alterar a sequência de batidas padrão – 7000,8000,9000 – para outra coisa. Isso porque esses valores já são conhecidos e podem comprometer a segurança do seu sistema.
Para fins de teste, definimos os valores como 10005, 10006, 10007. Esta é a sequência que será usada para abrir a porta SSH de um sistema cliente.
Na terceira linha – começando com command, altere -A
para -I
logo após /sbin/iptables
comando e antes de INPUT
.
E por último, na seção [closeSSH]
, novamente, altere a sequência padrão para sua escolha preferida. Esta é a sequência que será usada para fechar a conexão SSH assim que o usuário terminar e sair do servidor.
Aqui está nossa configuração completa.
Quando terminar, salve as alterações e saia.
Outra configuração que precisamos modificar é a /etc/default/knockd. Mais uma vez, abra-o usando seu editor de texto.
sudo vim /etc/default/knockd
Localize a linha START_KNOCKD=0
. Remova o comentário e defina o valor como 1
.
Em seguida, vá para a linha KNOCKD_OPTS= ”-i eth1 ”
Remova o comentário e substitua o valor padrão eth1
pela interface de rede ativa do seu sistema. Para verificar sua interface de rede, basta executar o comando ip addr ou ifconfig.
Para nosso sistema, enp0s3 é a placa de rede ativa.
A configuração completa é conforme mostrado.
Salve as alterações e saia.
Em seguida, inicie e ative o daemon knockd conforme mostrado.
sudo systemctl start knockd
sudo systemctl enable knockd
Para verificar o status do daemon knockd, execute o comando:
sudo systemctl status knockd
Etapa 2: feche a porta SSH 22 no firewall
Como o objetivo do serviço knockd é conceder ou negar acesso ao serviço ssh, fecharemos a porta ssh no firewall. Mas primeiro, vamos verificar o status do firewall UFW.
sudo ufw status numbered
A partir da saída, podemos ver claramente que a porta SSH 22 está aberta nos protocolos IPv4 e IPv6 numerados 5 e 9 respectivamente.
Precisamos deletar essas duas regras conforme mostrado, começando pelo valor mais alto – que é 9.
sudo ufw delete 9
sudo ufw delete 5
Agora, se você tentar fazer login remotamente no servidor, receberá um erro de tempo limite de conexão, conforme mostrado.
Etapa 3: configurar um cliente knock para conectar-se ao servidor SSH
Na etapa final, configuraremos um cliente e tentaremos fazer o login enviando primeiro a sequência de knock que configuramos no servidor.
Mas primeiro, instale o daemon knockd exatamente como você fez no servidor.
sudo apt install knockd
Assim que a instalação for concluída, envie a sequência de batida usando a sintaxe mostrada
knock -v server_ip knock_sequence
No nosso caso, isso se traduz em:
knock -v 192.168.2.105 10005 10006 10007
Você deve obter uma saída semelhante à que temos, dependendo da sua sequência. Isso mostra que as tentativas de batida foram bem-sucedidas.
Neste ponto, você deve estar em condições de fazer login com êxito no servidor usando SSH.
Quando terminar de fazer seu trabalho no servidor remoto, feche a porta SSH enviando a sequência de fechamento.
knock -v 192.168.2.105 10007 10006 10005
Qualquer tentativa de login no servidor falhará conforme demonstrado.
Considerações finais
Isso conclui este guia sobre como aproveitar a batida de porta para proteger o serviço SSH em seu servidor. Uma abordagem melhor e mais fácil seria configurar a autenticação SSH por senha usando pares de chaves SSH. Isso garante que apenas o usuário com a chave privada possa se autenticar no servidor no qual a chave pública está armazenada.