Letmein es un simple llamador de puertos con un mecanismo de autenticación simple y seguro. Se puede utilizar para protegerse contra ataques de autenticación previa en servicios como SSH, VPN, IMAP y muchos más.
Letmein oculta los servicios en un servidor detrás de una barrera de autenticación para reducir la superficie de ataque de un servicio. No se podrá acceder al servicio a menos que la autenticación Knok sea exitosa. En caso de un golpe exitoso, el servidor letmeind solo abrirá el puerto golpeado para la dirección IP del cliente que realizó el golpe. Las máquinas con diferentes direcciones IP aún no tendrán acceso al servicio protegido.
Las máquinas que no puedan autenticar exitosamente la secuencia de golpe no podrán acceder al servicio protegido. Recibirán un reject
ICMP en el puerto de servicio protegido con el ejemplo proporcionado nftables.conf
. (También puede decidir drop
los paquetes en su nftables.conf
).
Letmein requiere un firewall basado en nftables
. No funcionará con iptables
. Si utiliza un firewall basado en iptables
, conviértalo a nftables
antes de instalar letmein. Hay descripciones sobre cómo hacerlo en Internet. No es tan difícil ni tan trabajo como parece. :)
La comunicación de control de letmein en sí está predeterminada en el puerto TCP 5800, pero se puede configurar en cualquier puerto TCP o UDP. Si elige un puerto UDP como puerto de control y configura control-error-policy=basic-auth, entonces el servicio letmein opera en modo oculto y no responde a mensajes entrantes no autenticados.
Página principal
repositorio git
repositorio de github
En el servidor, instale el software del servidor letmein (consulte las secciones siguientes).
En el cliente, instale el software del cliente letmein (consulte las secciones siguientes).
Lea el archivo de configuración de ejemplo nftables.conf proporcionado con este proyecto. Es necesario agregar una cadena de entrada específica de letmein a su configuración nftables
existente. Modifique su nftables.conf
en consecuencia.
Genere una clave secreta compartida y un identificador de usuario para instalarlos en el servidor y el cliente con el siguiente comando de cliente:
letmein gen-key -u 00000000
El comando gen-key imprimirá la cadena de clave generada en la consola. De forma predeterminada, esto generará una clave aleatoria segura para el identificador de usuario 00000000
. Puede editar manualmente el identificador de usuario, si lo desea, o simplemente dejarlo como está.
Agregue la cadena generada (identificador de usuario y secreto compartido) a la configuración del servidor en /opt/letmein/etc/letmeind.conf
. Coloque la cadena de clave generada junto con el identificador de usuario en la sección [KEYS]
del archivo de configuración.
Agregue la misma cadena generada (identificador de usuario y secreto compartido) a la configuración del cliente en /opt/letmein/etc/letmein.conf
. Coloque la cadena de clave generada junto con el identificador de usuario en la sección [KEYS]
del archivo de configuración.
Cree un resource
en el servidor que describa el puerto sshd
que se puede abrir. En la sección [RESOURCES]
del archivo de configuración del servidor /opt/letmein/etc/letmeind.conf
se deben especificar todos los puertos que se pueden abrir. Un recurso consta de un identificador de recurso seguido de un identificador de puerto como este:
[RESOURCES]
00000022 = port: 22
El identificador del recurso es un número hexdecimal de 8 dígitos. En este ejemplo es 22 (hexadecimal), pero puede ser cualquier número. Simplemente tiene que ser el mismo número en el servidor y en el cliente. Después port:
se especifica el número de puerto (en decimal) que se puede abrir.
Agregue el mismo recurso con el mismo identificador de recurso y el mismo número de puerto a la configuración del cliente en /opt/letmein/etc/letmein.conf
.
Reinicie el servidor letmein:
systemctl restart letmeind.service
Ahora elimine su puerto sshd
estático (22) accept
de la configuración de su firewall nftables.conf
. Letmein instalará dicha regla dinámicamente en la cadena de entrada de letmein después de una autenticación de golpe exitosa. Luego reinicie nftables:
systemctl restart nftables.service
¡Hecho! Ahora deberías poder abrir el puerto sshd
en tu 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 desactivar automáticamente el puerto antes de conectarse con ssh, puede agregar una regla Match exec
a su archivo ~/.ssh/config
:
Match host your-server.com exec "letmein knock -u 00000000 your-server.com 22"
Consulte las instrucciones de instalación para obtener más información sobre cómo compilar e instalar letmein.
Si desea eliminar completamente letmein de su sistema, consulte las instrucciones de desinstalación.
La aplicación cliente letmein
es portátil y debería ejecutarse en todas las plataformas principales. Las plataformas probadas son:
La aplicación de servidor letmeind
es solo para Linux, porque solo admite nftables
como backend de firewall.
Consulte la documentación de configuración para obtener información detallada sobre cómo configurar el servidor y el cliente letmein.
Tenga en cuenta que los identificadores de usuario y los identificadores de recursos de los archivos de configuración se transmiten a través de la red sin cifrado en texto claro.
Asegúrese de que los identificadores de usuario y los identificadores de recursos no incluyan ninguna información privada.
Estos identificadores están destinados simplemente a ser una identificación abstracta para administrar diferentes claves, instalaciones y configuraciones letmein
.
Los principales objetivos de diseño de letmein son:
-4
y -6
.Para obtener más información sobre seguridad y reportar vulnerabilidades, consulte la documentación de seguridad de letmein.
Copyright (c) 2024 Michael Büsch [email protected]
Licenciado bajo la licencia Apache versión 2.0 o la licencia MIT, a su elección.