Letmein é um batedor de porta simples com um mecanismo de autenticação simples e seguro. Ele pode ser usado para proteger contra ataques de pré-autenticação em serviços como SSH, VPN, IMAP e muitos mais.
Letmein oculta serviços em um servidor atrás de uma barreira de autenticação para reduzir a superfície de ataque de um serviço. O serviço não estará acessível a menos que uma autenticação knock seja bem-sucedida. No caso de uma batida bem-sucedida, o servidor letmeind abrirá apenas a porta batida para o endereço IP do cliente que executou a batida. Máquinas com endereços IP diferentes ainda não terão acesso ao serviço protegido.
As máquinas que não conseguirem autenticar com êxito a sequência de batida não conseguirão acessar o serviço protegido. Eles receberão uma reject
ICMP na porta de serviço protegida com o exemplo fornecido nftables.conf
. (Você também pode decidir drop
os pacotes em seu nftables.conf
).
Letmein requer um firewall baseado em nftables
. Não funcionará com iptables
. Se você usa um firewall baseado em iptables
, converta para nftables
antes de instalar o letmein. Existem descrições sobre como fazer isso na Internet. Não é tão difícil e trabalhoso quanto parece. :)
A própria comunicação de controle letmein é padronizada para a porta TCP 5800, mas pode ser configurada para qualquer porta TCP ou UDP. Se você escolher uma porta UDP como porta de controle e configurar control-error-policy=basic-auth, o próprio serviço letmein operará em modo furtivo e não responderá a mensagens recebidas não autenticadas.
Página inicial
Repositório Git
Repositório Github
No servidor, instale o software de servidor letmein (veja as seções abaixo).
No cliente, instale o software cliente letmein (veja as seções abaixo).
Por favor, leia o arquivo de configuração de exemplo nftables.conf fornecido com este projeto. É necessário adicionar uma cadeia de entrada específica do letmein à configuração existente nftables
. Modifique seu nftables.conf
de acordo.
Gere uma chave secreta compartilhada e um identificador de usuário para ser instalado no servidor e no cliente com o seguinte comando do cliente:
letmein gen-key -u 00000000
O comando gen-key imprimirá a string de chave gerada no console. Por padrão, isso gerará uma chave aleatória segura para o identificador de usuário 00000000
. Você pode editar manualmente o identificador do usuário, se desejar, ou simplesmente deixá-lo como está.
Adicione a string gerada (identificador do usuário e segredo compartilhado) à configuração do servidor em /opt/letmein/etc/letmeind.conf
. Coloque a string de chave gerada junto com o identificador do usuário na seção [KEYS]
do arquivo de configuração.
Adicione a mesma string gerada (identificador de usuário e segredo compartilhado) à configuração do cliente em /opt/letmein/etc/letmein.conf
. Coloque a string de chave gerada junto com o identificador do usuário na seção [KEYS]
do arquivo de configuração.
Crie um resource
no servidor que descreva a porta sshd
que pode ser aberta. Na seção [RESOURCES]
do arquivo de configuração do servidor /opt/letmein/etc/letmeind.conf
todas as portas que podem ser abertas devem ser especificadas. Um recurso consiste em um identificador de recurso seguido por um identificador de porta como este:
[RESOURCES]
00000022 = port: 22
O identificador de recurso é um número hexdecimal de 8 dígitos. Neste exemplo é 22(hex), mas pode ser qualquer número. Só precisa ser o mesmo número no servidor e no cliente. Depois port:
é especificado o número da porta (em decimal) que pode ser aberta.
Adicione o mesmo recurso com o mesmo identificador de recurso e o mesmo número de porta à configuração do cliente em /opt/letmein/etc/letmein.conf
.
Reinicie o servidor letmein:
systemctl restart letmeind.service
Agora remova a porta sshd
estática (22) accept
da configuração do firewall nftables.conf
. Letmein instalará tal regra dinamicamente na cadeia de entrada letmein após a autenticação knock bem-sucedida. Em seguida, reinicie o nftables:
systemctl restart nftables.service
Feito! Agora você deve conseguir abrir a porta sshd
em seu servidor:
# This must fail! No successful knock authentication, yet.
# If this does not fail, check if you have removed the sshd accept rule from nftables.conf.
ssh your-server.com
# Knock-open port 22 (sshd) on the server using user-id/key 00000000:
# (You do not have to specify -u 00000000 if that is your default user (see config).)
letmein knock -u 00000000 your-server.com 22
# Now you should be able to ssh into your server successfully:
ssh your-server.com
Para derrubar automaticamente a porta antes de conectar com ssh, você pode adicionar uma regra Match exec
ao seu arquivo ~/.ssh/config
:
Match host your-server.com exec "letmein knock -u 00000000 your-server.com 22"
Consulte as instruções de instalação para obter mais informações sobre como construir e instalar o letmein.
Se você deseja remover completamente o letmein do seu sistema, consulte as instruções de desinstalação.
O aplicativo cliente letmein
é portátil e deve ser executado em todas as principais plataformas. As plataformas testadas são:
O aplicativo de servidor letmeind
é somente Linux, porque suporta apenas nftables
como back-end de firewall.
Consulte a documentação de configuração para obter informações detalhadas sobre como configurar o servidor e cliente letmein.
Esteja ciente de que os identificadores de usuário e de recursos dos arquivos de configuração são transmitidos pela rede sem criptografia em texto não criptografado.
Certifique-se de que os identificadores de usuário e de recurso não incluam nenhuma informação privada.
Esses identificadores pretendem ser apenas uma identificação abstrata para gerenciar diferentes chaves, instalações e configurações letmein
.
Os principais objetivos de design do letmein são:
-4
e -6
.Para obter mais informações sobre segurança e relatórios de vulnerabilidades, consulte a documentação de segurança do letmein.
Copyright (c) 2024 Michael Büsch [email protected]
Licenciado sob a Licença Apache versão 2.0 ou a licença MIT, conforme sua opção.