GNU/Linux >> Tutoriales Linux >  >> Debian

Cómo oscurecer los puertos de red con una secuencia de activación de puertos en Debian 10

La activación de puertos es un método de apertura dinámica de puertos de red al "golpear" (es decir, conectar) en una secuencia predefinida de puertos. Esto es especialmente útil para ocultar un puerto de red abierto del escaneo de puertos, ya que el puerto en cuestión se cerrará a menos que se ejecute la secuencia de activación de puertos. Una secuencia de activación de puertos lo suficientemente larga es prácticamente imposible para la fuerza bruta:por ejemplo, para adivinar con éxito (mediante la fuerza bruta) una combinación de 3 puertos TCP, un atacante tendría que intentar tocar cada una de las 281 billones de combinaciones posibles y buscar abra los puertos después de cada secuencia de golpeteo de puertos. Como probablemente puedas imaginar, esto llevaría mucho, mucho tiempo.

Esta guía lo ayudará con la instalación de knockd, un daemon flexible para golpear puertos, en Debian 10. Para fines de demostración, lo configuraremos para ocultar el puerto SSH, aunque cualquier otro puerto/servicio puede protegerse con este enfoque.

Requisitos

  • Un servidor que ejecuta Debian 10.
  • Acceso raíz a su servidor.
  • Debe establecerse la variable de entorno $EDITOR.
  • Un segundo sistema para realizar pruebas.

NOTA:Si tiene la intención de usar el bloqueo de puertos para ocultar el puerto SSH, asegúrese de tener un método de acceso alternativo (a través de la consola, por ejemplo), que será útil si se bloquea accidentalmente.

Antes de instalar knockd, verifique el nombre de la interfaz de red pública de su sistema con el siguiente comando:

ip link show | grep -v lo
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000

Tome nota del nombre de la interfaz (ens18 en este caso). Será necesario más adelante.

Paso 1:Instalación de Knockd

knockd es un demonio que golpea puertos que escucha las conexiones y abre los puertos en consecuencia. Usaremos knockd con reglas de iptables para implementar la activación de puertos. Instale los paquetes necesarios de la siguiente manera:

apt update
apt install knockd iptables-persistent

Paso 2:Configuración de Knockd

Knockd emplea un único archivo de configuración, /etc/knockd.conf, para definir secuencias de golpeteo y otros parámetros. Hay dos modos prácticos de funcionamiento. El primero requiere una sola secuencia de golpeteo para abrir y cerrar el puerto predefinido, mientras que el otro usa secuencias de apertura y cierre separadas. Usaremos el primero ya que requiere menos interacción del usuario.

Primero, haga una copia de seguridad del archivo de configuración existente:

mv /etc/knockd.conf /etc/knockd.conf.bak

Segundo, abra el archivo de configuración en su editor de texto:

$EDITOR /etc/knockd.conf

E ingrese la configuración que se muestra a continuación:

(reemplace ens18 con el nombre de su interfaz de red).

[options]
        UseSyslog
	Interface = ens18
[SSH]
        sequence = 1000,2000,3000
        seq_timeout = 15
        tcpflags = syn
        start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        cmd_timeout = 20

Esto le indicará a knockd que habilite el tráfico al puerto 22 después de recibir la secuencia de toque correcta (1000, 2000, 3000 en este caso), luego vuelva a deshabilitar el tráfico después de una demora de 20 segundos. Por lo tanto, las conexiones SSH solo se aceptarán durante esta ventana de 20 segundos.

A continuación, habilite knockd editando el archivo /etc/default/knockd:

$EDITOR /etc/default/knockd

Y establezca START_KNOCKD en 1:

START_KNOCKD=1

Guarda el archivo y cierra. También modificaremos la unidad systemd para knockd. Para hacerlo, cree un nuevo archivo de unidad para anular el predeterminado:

$EDITOR /etc/systemd/system/knockd.service

Y pega lo siguiente:

[Unit]
Description=Port-Knock Daemon
After=network.target
Requires=network.target
Documentation=man:knockd(1)
[Service]
EnvironmentFile=-/etc/default/knockd
ExecStartPre=/usr/bin/sleep 1
ExecStart=/usr/sbin/knockd $KNOCKD_OPTS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
Restart=always
SuccessExitStatus=0 2 15
ProtectSystem=full
CapabilityBoundingSet=CAP_NET_RAW CAP_NET_ADMIN
[Install]
WantedBy=multi-user.target

Luego use el siguiente comando para cargar y habilitar la nueva unidad:

systemctl daemon-reload
systemctl enable --now knockd.service

Paso 3:Reglas de cortafuegos

En este punto, Knockd está listo, pero todo el tráfico está habilitado a través del firewall de manera predeterminada. Crearemos reglas de firewall para denegar el acceso al puerto 22/tcp.

Los siguientes comandos aseguran que las conexiones existentes no se interrumpan.

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Las siguientes son reglas para desconectar conexiones al puerto 22/tcp:

iptables -A INPUT -p tcp --destination-port 22 -j DROP
ip6tables -A INPUT -p tcp --destination-port 22 -j DROP

Luego, guarde las cadenas de reglas actuales para la persistencia en los reinicios:

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

Paso 4:Prueba

Desde un sistema diferente, intente iniciar una nueva sesión SSH en su servidor. No deberías poder conectarte. Para realizar la secuencia de toques, se pueden usar diferentes herramientas, aunque haremos una demostración con knock, el cliente de toques incluido con Knockd. Instale el paquete knockd como se muestra en el Paso 1 en un sistema diferente, luego ejecute los comandos:

knock server_ip_address 1000 2000 3000
ssh [email protected]_ip_address

La conexión SSH ahora debería tener éxito.

Configuración alternativa

Knockd se puede configurar alternativamente para requerir dos secuencias distintas para abrir y cerrar puertos de red. Esto es útil si desea mantener los puertos abiertos durante largos períodos de tiempo. Para configurar Knockd de la manera, abra su archivo de configuración:

$EDITOR /etc/knockd.conf

Y reemplace la configuración existente con lo siguiente:

[options]
        UseSyslog
        Interface = your_interface
[openSSH]
        sequence = 1000,2000,3000
        seq_timeout = 15
        tcpflags = syn
        start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
[closeSSH]
        sequence = 3000,2000,1000
        seq_timeout = 15
        tcpflags = syn
        start_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

Luego reinicie el servicio para cargar la nueva configuración:

systemctl restart knockd.service

Conclusión

Knockd puede ser una solución efectiva para los ataques de fuerza bruta, que son muy comunes en SSH y otros servicios. Aunque systemd reiniciará Knockd si falla, siempre debe tener un método de copia de seguridad para acceder a su servidor si utiliza la activación de puertos para ocultar el puerto SSH.


Debian
  1. Cómo configurar una dirección IP estática en Debian Linux

  2. Cómo convertir HTML a PDF con HTMLDoc en Debian 10

  3. Cómo oscurecer los puertos de red con una secuencia de activación de puertos en Debian 10

  4. Cómo instalar WonderCMS con Nginx en Debian 11

  5. Cómo asegurar el servicio SSH con Port Knocking

Cómo instalar Gitea con PostgreSQL en Debian 11

Cómo instalar Debian 11 (Bullseye) con capturas de pantalla

Cómo configurar LAMP con Debian 11

Cómo configurar el servidor Samba con Debian 11

Cómo instalar Itch con Debian 11

Cómo instalar phpMyAdmin con Nginx en Debian 11