Como usar o Port Knocking no Linux (e por que você não deveria)

A deteção de portas é uma forma de proteger um servidor fechando portas de firewall – mesmo aquelas que você sabe que serão usadas. Essas portas são abertas sob demanda se – e somente se – a solicitação de conexão fornecer a batida secreta.

Port Knocking é um “Secret Knock”

Na década de 1920, quando proibição estava em pleno andamento, se você quisesse entrar em um speakeasy, você tinha que saber a batida secreta e batê-la corretamente para entrar.

A batida de porta é um equivalente moderno. Se você deseja que as pessoas tenham acesso aos serviços em seu computador, mas não deseja abrir seu firewall para a Internet, pode usar o recurso de desbloqueio de porta. Ele permite que você feche as portas do firewall que permitem conexões de entrada e as abra automaticamente quando um padrão pré-arranjado de tentativas de conexão é feito. A sequência de tentativas de conexão atua como uma batida secreta. Outra batida secreta fecha a porta.

Bater no porto é uma novidade, mas é importante saber que é um exemplo de segurança através da obscuridade, e esse conceito é fundamentalmente falho. O segredo de como acessar um sistema é seguro porque apenas aqueles em um grupo específico sabem disso. Mas, uma vez que esse segredo seja descoberto – seja porque foi revelado, observado, adivinhado ou elaborado – sua segurança é nula. É melhor você proteger seu servidor de outras maneiras mais fortes, como exigir logins baseados em chave para um servidor SSH.

As abordagens mais robustas para a segurança cibernética são multicamadas, portanto, talvez o bloqueio de portas deva ser uma dessas camadas. Quanto mais camadas, melhor, certo? No entanto, você pode argumentar que a detecção de portas não acrescenta muito (se é que agrega) a um sistema seguro e devidamente fortalecido.

A cibersegurança é um tópico vasto e complicado, mas você não deve usar o bloqueio de portas como sua única forma de defesa.

Instalando o knockd

Para demonstrar a batida de porta, vamos usá-lo para controlar a porta 22, que é a porta SSH. Vamos usar uma ferramenta chamada knockd. Use apt-get para instalar este pacote em seu sistema se você usa Ubuntu ou outra distribuição baseada em Debian. Em outras distribuições Linux, use a ferramenta de gerenciamento de pacotes de sua distribuição Linux.

Digite o seguinte:

sudo apt-get install knockd

Você provavelmente já tem o firewall iptables instalado em seu sistema, mas pode ser necessário instalar o pacote iptables-persistent. Ele lida com o carregamento automático de regras de iptable salvas.

Digite o seguinte para instalá-lo:

sudo apt-get install iptables-persistent

Quando a tela de configuração IPV4 aparecer, pressione a barra de espaço para aceitar a opção “Sim”.

Pressione a barra de espaço para aceitar o

Pressione a barra de espaço novamente na tela de configuração IPv6 para aceitar a opção “Sim” e seguir em frente.

Pressione a barra de espaço para aceitar o

O comando a seguir diz ao iptables para permitir que as conexões estabelecidas e em andamento continuem. Agora vamos emitir outro comando para fechar a porta SSH.

  Como jogar Gunfire Reborn no Linux

Se alguém estiver conectado por SSH quando emitirmos este comando, não queremos que ele seja cortado:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Este comando adiciona uma regra ao firewall, que diz:

-A: acrescenta a regra à tabela de regras do firewall. Ou seja, adicione ao final.
ENTRADA: Esta é uma regra sobre conexões de entrada.
-m conntrack: As regras de firewall agem sobre o tráfego de rede (pacotes) que correspondem aos critérios da regra. O parâmetro -m faz com que o iptables use módulos extras de correspondência de pacotes – neste caso, aquele chamado conntrack funciona com os recursos de rastreamento de conexão de rede do kernel.
–Cstate ESTABLISHED, RELATED: Isso especifica o tipo de conexão à qual a regra se aplica, ou seja, conexões ESTABLISHED e RELACIONATED. Uma conexão estabelecida é aquela que já está em andamento. Uma conexão relacionada é aquela feita devido a uma ação de uma conexão estabelecida. Talvez alguém conectado queira baixar um arquivo; que pode acontecer em uma nova conexão iniciada pelo host.
-j ACEITAR: Se o tráfego corresponder à regra, vai para o alvo ACEITAR no firewall. Em outras palavras, o tráfego é aceito e pode passar pelo firewall.

Agora podemos emitir o comando para fechar a porta:

sudo iptables -A INPUT -p tcp --dport 22 -j REJECT

Este comando adiciona uma regra ao firewall, que diz:

-A: Anexa a regra à tabela de regras do firewall, ou seja, adiciona-a ao final.
ENTRADA: Esta regra é sobre conexões de entrada.
-p tcp: Esta regra se aplica ao tráfego que usa o protocolo de controle de transmissão.
–Dport 22: Esta regra se aplica especificamente ao tráfego TCP que visa a porta 22 (a porta SSH).
-j REJEITAR: Se o tráfego corresponder à regra, pule para o alvo REJEITAR no firewall. Portanto, se o tráfego for rejeitado, não é permitido através do firewall.

Devemos iniciar o daemon netfilter-persistent. Podemos fazer isso com este comando:

sudo systemctl start netfilter-persistent

Queremos que o netfilter-persistent passe um ciclo de salvar e recarregar, portanto, ele carrega e controla as regras de iptable.

Digite os seguintes comandos:

sudo netfilter-persistent save

sudo netfilter-persistent reload

Agora você instalou os utilitários e a porta SSH está fechada (com sorte, sem encerrar a conexão de ninguém). Agora, é hora de configurar a batida secreta.

Configurando knockd

Existem dois arquivos que você edita para configurar o knockd. O primeiro é o seguinte arquivo de configuração knockd:

sudo gedit /etc/knockd.conf

O editor gedit é aberto com o arquivo de configuração do knockd carregado.

Vamos editar este arquivo para atender às nossas necessidades. As seções nas quais estamos interessados ​​são “openSSH” e “closeSSH”. As quatro entradas a seguir estão em cada seção:

sequência: A sequência de portas que alguém deve acessar para abrir ou fechar a porta 22. As portas padrão são 7000, 8000 e 9000 para abri-la e 9000, 8000 e 7000 para fechá-la. Você pode alterá-los ou adicionar mais portas à lista. Para nossos propósitos, ficaremos com os padrões.
seq_timeout: O período de tempo dentro do qual alguém tem que acessar as portas para acionar sua abertura ou fechamento.
comando: O comando enviado para o firewall iptables quando a ação abrir ou fechar é disparada. Esses comandos adicionam uma regra ao firewall (para abrir a porta) ou a retiram (para fechar a porta).
tcpflags: O tipo de pacote que cada porta deve receber na sequência secreta. Um pacote SYN (sincronizar) é o primeiro em um TCP solicitação de conexão, chamada de aperto de mão de três vias.

  Como verificar qual GPU está instalada no Linux

A seção “openSSH” pode ser lida como “uma solicitação de conexão TCP deve ser feita às portas 7000, 8000 e 9000 – nessa ordem e em 5 segundos – para que o comando para abrir a porta 22 seja enviado ao firewall”.

A seção “closeSSH” pode ser lida como “uma solicitação de conexão TCP deve ser feita às portas 9000, 8000 e 7000 – nessa ordem e em 5 segundos – para que o comando de fechamento da porta 22 seja enviado ao firewall”.

As regras de firewall

As entradas de “comando” nas seções openSSH e closeSSH permanecem as mesmas, exceto por um parâmetro. É assim que eles são compostos:

-A: acrescenta a regra ao final da lista de regras do firewall (para o comando openSSH).
-D: Exclui o comando da lista de regras de firewall (para o comando closeSSH).
ENTRADA: esta regra se refere ao tráfego de entrada da rede.
-s% IP%: O endereço IP do dispositivo que está solicitando uma conexão.
-p: protocolo de rede; neste caso, é o TCP.
–Dport: a porta de destino; em nosso exemplo, é a porta 22.
-j ACEITAR: Salta para o destino de aceitação dentro do firewall. Em outras palavras, deixe o pacote passar pelo resto das regras sem agir sobre ele.

As edições do arquivo de configuração do knockd

As edições que faremos no arquivo são destacadas em vermelho abaixo:

Estendemos o “seq_timeout” para 15 segundos. Isso é generoso, mas se alguém está disparando manualmente em solicitações de conexão, ele pode precisar de muito tempo.

Na seção “openSSH”, alteramos a opção -A (anexar) no comando para -I (inserir). Este comando insere uma nova regra de firewall no topo da lista de regras de firewall. Se você deixar a opção -A, ela acrescentará a lista de regras do firewall e a colocará no final.

O tráfego de entrada é testado em relação a cada regra de firewall na lista de cima para baixo. Já temos uma regra que fecha a porta 22. Portanto, se o tráfego de entrada for testado em relação a essa regra antes de ver a regra que permite o tráfego, a conexão é recusada; se ele vir essa nova regra primeiro, a conexão será permitida.

O comando close remove a regra adicionada por openSSH das regras de firewall. O tráfego SSH é mais uma vez tratado pela regra “porta 22 fechada” preexistente.

Depois de fazer essas edições, salve o arquivo de configuração.

O Knockd Control File Edits

O arquivo de controle knockd é totalmente mais simples. Antes de mergulharmos e editarmos isso, no entanto, precisamos saber o nome interno de nossa conexão de rede; para encontrá-lo, digite este comando:

ip addr

O

A conexão que esta máquina usa para pesquisar este artigo é chamada enp0s3. Anote o nome da sua conexão.

O seguinte comando edita o arquivo de controle knockd:

sudo gedit /etc/default/knockd

Aqui está o arquivo knockd no gedit.

As poucas edições que precisamos fazer são destacadas em vermelho:

  Como hospedar um servidor FTP no Linux

Alteramos a entrada “START_KNOCKD =” de 0 para 1.

Também removemos o hash # do início da entrada “KNOCKD_OPTS =” e substituímos “eth1” pelo nome de nossa conexão de rede, enp0s3. Claro, se sua conexão de rede for eth1, você não a mudará.

A prova está no pudim

É hora de ver se isso funciona. Iniciaremos o daemon knockd com este comando:

sudo systemctrl start knockd

Agora, vamos pular em outra máquina e tentar conectar. Instalamos a ferramenta knockd naquele computador também, não porque queremos configurar o knocking de porta, mas porque o pacote knockd fornece outra ferramenta chamada knock. Usaremos esta máquina para disparar em nossa sequência secreta e bater para nós.

Use o seguinte comando para enviar sua sequência secreta de solicitações de conexão para as portas no computador host de batida de porta com o endereço IP 192.168.4.24:

knock 192.168.4.24 7000 8000 9000 -d 500

Isso diz à batida para direcionar o computador ao endereço IP 192.168.4.24 e disparar uma solicitação de conexão para as portas 7000, 8000 e 9000, por sua vez, com um -d (atraso) de 500 milissegundos entre elas.

Um usuário chamado “dave” faz uma solicitação SSH para 192.168.4.24:

ssh [email protected]

Sua conexão é aceita, ele insere sua senha e sua sessão remota é iniciada. Seu prompt de comando muda de [email protected] para [email protected] Para sair do computador remoto, ele digita:

exit

Seu prompt de comando retorna ao computador local. Ele usa knock mais uma vez e, desta vez, direciona as portas na ordem inversa para fechar a porta SSH no computador remoto.

knock 192.168.4.24 9000 8000 7000 -d 500

Reconhecidamente, esta não foi uma sessão remota particularmente frutífera, mas demonstra a abertura e o fechamento da porta por batida de porta e se encaixa em uma única captura de tela.

Então, como é isso do outro lado? O administrador do sistema no host knocking de porta usa o seguinte comando para visualizar as novas entradas que chegam no log do sistema:

tail -f /var/log/syslog

Você vê três entradas openSSH. Eles aumentam à medida que cada porta é direcionada pelo utilitário de detonação remota.
Quando todos os três estágios da sequência de gatilho são atendidos, uma entrada que diz “ABRE-TE SÉSAMO,”Está registrado
O comando para inserir a regra na lista de regras do iptables é enviado. Ele permite o acesso via SSH na porta 22 do endereço IP específico do PC que deu a batida secreta correta (192.168.4.23).
O usuário “dave” se conecta por apenas alguns segundos e, em seguida, desconecta.
Você vê três entradas closeSSH. Eles aumentam à medida que cada porta é direcionada pelo utilitário de detonação remota – ele diz ao host de detonação de porta para fechar a porta 22.
Depois que todos os três estágios são acionados, recebemos a mensagem “ABRIR SESAME” novamente. O comando é enviado ao firewall para remover a regra. (Por que não “FECHAR SESAME” quando está fechando a porta? Quem sabe?)

Agora, a única regra na lista de regras do iptables em relação à porta 22 é aquela que digitamos no início para fechar essa porta. Portanto, a porta 22 está fechada novamente.

Bata na cabeça

Esse é o truque de salão do bombardeio. Trate isso como uma diversão e não o faça no mundo real. Ou, se for preciso, não confie nele como sua única forma de segurança.