Saltar al contenido

Cómo usar port Knocking en Linux (y por qué no debería)

Golpee la puerta cerrada con la mano.
Photographee.eu/Shutterstock

El golpe de puerto es una forma de proteger su servidor cerrando los puertos del firewall. También se utiliza en puertos que se sabe que se utilizan. Estos puertos se abren a pedido solo si la solicitud de conexión proporciona un golpe secreto.

Golpear a los puertos es un «golpe secreto»

1920, cuando Prohibición Si quieres entrar, fue auténtico. Speakeasy, Sabías un golpe secreto y tenías que tocarlo correctamente para entrar.

El golpe de puerto es un equivalente moderno. Si desea que las personas accedan a los servicios de su computadora, pero no desea abrir su firewall a Internet, puede usar la función de llamada de puertos. Esto le permite cerrar los puertos del firewall que permiten conexiones entrantes y abrirlos automáticamente cuando se realiza un patrón predeterminado de intentos de conexión. La secuencia de intentos de conexión actúa como un golpe secreto. Otro golpe secreto cierra el puerto.

El golpe de puerto es nuevo, pero es Seguridad escondiéndose El concepto tiene un defecto fundamental. El secreto de cómo acceder al sistema es seguro, ya que solo un grupo específico de personas lo conoce. Sin embargo, una vez que se revela el secreto, la seguridad se desactiva cuando se revela, observa, adivina o resuelve. Le recomendamos que proteja su servidor de otras formas más potentes, como solicitar un inicio de sesión basado en claves desde su servidor SSH.

La llamada de puertos es probablemente una de esas capas, ya que el enfoque más sólido de la ciberseguridad es de varias capas. ¿Cuantas más capas tengas, mejor? Sin embargo, se puede argumentar que la activación de puertos no agrega mucho (si es que lo hay) a un sistema seguro y mejorado adecuadamente.

La ciberseguridad es un tema vasto y complejo, pero el golpe de puerto no debe usarse como la única defensa.

Relación: Cómo crear e instalar la clave SSH desde el shell de Linux

Instalación de golpe

Use esto para controlar el puerto 22, que es un puerto SSH, para indicar que el puerto golpea.Usar Una herramienta llamada golpe..usar apt-get Si está utilizando Ubuntu u otra distribución basada en Debian, instale este paquete en su sistema. Para otras distribuciones de Linux, utilice las herramientas de administración de paquetes de la distribución de Linux.

Ingrese de la siguiente manera.

sudo apt-get install knockd

Probablemente ya tienes cortafuegos iptables Está instalado en su sistema, pero es posible que deba instalarlo iptables-persistent paquete.Maneja cargas automáticas guardadas iptable regla.

Ingrese lo siguiente para instalar.

sudo apt-get install iptables-persistent

Cuando aparezca la pantalla de configuración de IPV4, presione la barra espaciadora para aceptar la opción «Sí».

Presione la barra espaciadora, "Okey" Opciones de pantalla iptables-persistent IPV4.

Presione la barra espaciadora nuevamente en la pantalla de configuración de IPv6 para aceptar la opción «Sí» y continuar.

Presione la barra espaciadora, "Okey" Opciones de la pantalla de configuración de IPv6.

El siguiente comando es iptables Le permite mantener una conexión continua establecida. Luego emita otro comando para cerrar el puerto SSH.

Si alguien está usando SSH cuando emite este comando, no debe desconectarse.

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

Este comando agrega la siguiente regla al firewall:

  • -A: Agregue una regla a la tabla de reglas de firewall. Es decir, agréguelo en la parte inferior.
  • aporte: Esta es una regla para las conexiones entrantes.
  • -m conntrack: Las reglas de firewall actúan sobre el tráfico de red (paquetes) que coinciden con los criterios de la regla.El· -m Causa del parámetro iptables Módulo adicional de coincidencia de paquetes (en este caso, conntrack Funciona con la función de seguimiento de la conexión de red del kernel.
  • –C Estado ESTABLECIDO, RELACIONADO: Especifica el tipo de conexión a la que se aplica la regla: conexiones ESTABLECIDAS y RELACIONADAS. Una conexión establecida es aquella que ya está en curso. La conexión asociada es la conexión creada por la acción de la conexión establecida. Quizás alguien conectado quiera descargar el archivo. Esto puede suceder a través de una nueva conexión iniciada por el host.
  • -j aceptar: Si el tráfico coincide con la regla, salte al objetivo ACEPTAR del cortafuegos. Es decir, el tráfico se acepta y se permite a través del firewall.

Ahora puede emitir un comando para cerrar el puerto.

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

Este comando agrega la siguiente regla al firewall:

  • -A: Agregue la regla a la tabla de reglas de firewall. Es decir, agréguelo en la parte inferior.
  • aporte: Esta regla es para conexiones entrantes.
  • -p tcp: Esta regla se aplica al tráfico que utiliza el protocolo de control de transmisión.
  • – Puerto 22: Esta regla se aplica específicamente al puerto 22 de destino del tráfico TCP (puerto SSH).
  • -j rechazar: Si el tráfico coincide con la regla, salte al objetivo RECHAZAR del cortafuegos. Por lo tanto, si se deniega el tráfico, no se permitirá a través del firewall.

Tenemos que empezar netfilter-persistent demonio. Puedes hacer esto con este comando:

sudo systemctl start netfilter-persistent

Querer netfilter-persistent aprobar Guardar y recargar ciclo, Entonces carga y controla iptable regla.

Ingrese el siguiente comando:

sudo netfilter-persistent save

sudo netfilter-persistent reload

Esto instaló la utilidad y cerró el puerto SSH (con suerte sin cerrar la conexión de nadie). A continuación, configure el golpe secreto.

Configuración golpeada

Tengo dos archivos para editar para configurar knockd..El primero es: knockd Archivo de configuración:

sudo gedit /etc/knockd.conf

El· gedit Se abre el editor knockd Se ha cargado el archivo de configuración.

Un archivo de configuración dañado en el editor gedit.

Edite este archivo según sea necesario. Las secciones de interés son «openSSH» y «closeSSH». Hay cuatro entradas en cada sección:

  • secuencia: Una secuencia de puertos a los que alguien necesita acceder para abrir o cerrar el puerto 22. Los puertos predeterminados son 7000, 8000 y 9000 para abrir y 9000, 8000 y 7000 para cerrar. Puede cambiarlos o agregar puertos a la lista. Aquí usamos el predeterminado.
  • seq_timeout: El período durante el cual alguien debe acceder a un puerto para abrirlo o cerrarlo.
  • mandoComandos enviados a: iptables Cortafuegos cuando se activa una acción de apertura o cierre. Estos comandos agregan una regla al firewall (abre el puerto) o eliminan la regla (cierra el puerto).
  • tcpflags: El tipo de paquete que cada puerto debe recibir en una secuencia secreta. Paquetes SYN (síncronos) TCP Solicitud de conexión llamada Apretón de manos de tres vías..

La sección «openSSH» se puede leer como «Para enviar un comando para abrir el puerto 22 al firewall, las solicitudes de conexión TCP a los puertos 7000, 8000 y 9000 deben realizarse en este orden en 5 segundos». Puedo hacerlo.

La sección «cerrar SSH» se puede leer como «Para enviar un comando para cerrar el puerto 22 al firewall, las solicitudes de conexión TCP a los puertos 9000, 8000 y 7000 deben realizarse en este orden en 5 segundos». Puedo hacerlo.

Reglas del cortafuegos

Las entradas de «comando» en las secciones openSSH y closeSSH siguen siendo las mismas excepto por un parámetro. He aquí cómo configurarlos.

  • -A: Agregue la regla al final de la lista de reglas de firewall (para el comando openSSH).
  • -D: Elimine el comando de la lista de reglas de firewall (para el comando closeSSH).
  • aporte: Esta regla se aplica al tráfico de red entrante.
  • -sorbo%: Dirección IP del dispositivo que solicita la conexión.
  • -pag: Protocolo de red; en este caso es TCP.
  • – Dport: Puerto de destino. En este ejemplo, es el puerto 22.
  • -j aceptar: Salte al destino de aceptación en el firewall. En otras palabras, hace que el paquete pase el resto de las reglas sin realizar ninguna acción.

Editar un archivo de configuración dañado

Las ediciones que realiza en el archivo se resaltan en rojo a continuación.

Un archivo de configuración golpeado en el editor gedit con la edición resaltada.

Extiende «seq_timeout» a 15 segundos. Esto es generoso, pero si alguien invoca manualmente la solicitud de conexión, es posible que necesite tanto tiempo.

En la sección «openSSH», -A Opciones de comando (adicionales) -I (insertar). Este comando inserta una nueva regla de firewall en. Arriba De la lista de reglas de firewall.Si te vas -A Opción, es agregar Lista de reglas de firewall y bajo..

El tráfico entrante se prueba de arriba a abajo para cada regla de firewall de la lista. Ya existe una regla para cerrar el puerto 22. Por lo tanto, si el tráfico entrante se prueba con esa regla antes de que se muestre la regla que permite el tráfico, se denegará la conexión. La primera vez que verifica esta nueva regla, se permite la conexión.

El comando cerrar elimina las reglas agregadas por openSSH de las reglas del firewall. El tráfico SSH será procesado nuevamente por la regla existente de «puerto 22 cerrado».

Después de realizar estas ediciones, guarde el archivo de configuración.

Relación: Cómo editar un archivo de texto gráficamente usando gedit en Linux

Editar un archivo de control golpeado

El· knockd El archivo de control es completamente simple. Sin embargo, antes de poder editarlo y editarlo, debe conocer el nombre interno de la conexión de red. Para encontrarlo, ingrese el siguiente comando:

ip addr

La conexión que utiliza esta máquina para estudiar este artículo es enp0s3.. Anote el nombre de la conexión.

El siguiente comando knockd Archivo de control:

sudo gedit /etc/default/knockd

Este es knockd Al archivo gedit..

Archivo de control golpeado de Gedit.

Algunas ediciones que deben realizarse están resaltadas en rojo.

Archivo de control golpeado de Gedit con las ediciones resaltadas.

Se cambió la entrada «START_KNOCKD =» de 0 a 1.

También borré el hash # Desde el comienzo de la entrada «KNOCKD_OPTS =», reemplace «eth1» con el nombre de su conexión de red, enp0s3..Por supuesto, la conexión de red eth1, No cambies.

La evidencia está en el pudín

Es hora de ver si funciona.comienzo knockd Daemon usando este comando:

sudo systemctrl start knockd

Luego salte a otra máquina e intente conectarse.Instalado knockd Las herramientas en esa computadora tampoco lo son porque quieran configurar la activación de puertos. knockd El paquete proporciona otra herramienta llamada knock.. Utilice esta máquina para disparar y golpear en una secuencia secreta.

Utilice el siguiente comando para enviar una secuencia secreta de solicitudes de conexión al puerto en la computadora host que golpea el puerto con la dirección IP 192.168.4.24.

knock 192.168.4.24 7000 8000 9000 -d 500

Es esto knock Apunte a la computadora con la dirección IP 192.168.4.24 y realice solicitudes de conexión a los puertos 7000, 8000 y 9000 en secuencia. -d (Retraso) 500 ms entre ellos.

Luego, un usuario llamado «dave» envía una solicitud SSH a 192.168.4.24.

ssh dave@192.168.4.24

Una vez que se acepta la conexión e ingresa la contraseña, se iniciará la sesión remota.Su símbolo del sistema dave@nostromo Para dave@howtogeek.. Para cerrar sesión en la computadora remota, escriba:

exit

Su símbolo del sistema regresa a la computadora local.Él usa knock Una vez más, esta vez apunte a los puertos en orden inverso y cierre el puerto SSH en la computadora remota.

knock 192.168.4.24 9000 8000 7000 -d 500

Claro, esta no fue una sesión remota particularmente útil, pero muestra que el puerto golpea y cierra el puerto y cabe en una captura de pantalla.

Entonces, ¿cómo se ve esto desde el otro lado? El administrador del sistema para el host de golpe de puerto utiliza el siguiente comando para ver las nuevas entradas que llegan al registro del sistema.

tail -f /var/log/syslog

  • Verá tres entradas openSSH. Estos ocurren cuando cada puerto se convierte en el objetivo de la utilidad de golpe remoto.
  • Cuando se cumplen las tres etapas de la secuencia de activación,Ábrete Sésamo,Está registrado
  • Comando para insertar una regla en iptables Se enviará la lista de reglas. Permita el acceso a través de SSH en el puerto 22 desde una dirección IP específica en la PC que dio el golpe secreto correcto (192.168.4.23).
  • El usuario «dave» se conecta durante unos segundos y luego se desconecta.
  • Verá tres entradas closeSSH. Estos ocurren cuando cada puerto se convierte en el objetivo de la utilidad de golpe remoto. Esto le dice al host de golpe de puerto que cierre el puerto 22.
  • Cuando se activan las tres etapas, vuelve a aparecer el mensaje «ABRIR SÉSAMO». Se envía un comando al firewall para eliminar la regla. (¿Por qué no usas «CERRAR SÉSAMO» al cerrar un puerto? ¿Quién sabe?)

Ahora la única regla iptables La lista de reglas para el puerto 22 es la primera que ingresó para cerrar ese puerto. Por tanto, el puerto 22 se vuelve a cerrar.

Golpe en la cabeza

Ese es el truco de la sala de golpeo en el puerto. Trátelo como una distracción y no lo haga en el mundo real. O, si lo necesita, no confíe en él como la única forma de seguridad.