Posteado por: Jesus | 17 agosto, 2009

Knock ‘Golpeo de Puertos’ en Ubuntu

port.knocking.ssh.linux

La mejor explicación que he encontrado, es la que se encuenta en Wikipedia.

El golpeo de puertos (del inglés port knocking) es un mecanismo para abrir puertos externamente en un firewall mediante una secuencia preestablecida de intentos de conexión a puertos que se encuentran cerrados. Una vez que el firewall recibe una secuencia de conexión correcta, sus reglas son modificadas para permitir al host que realizó los intentos conectarse a un puerto específico.

El propósito principal del PK es prevenir un escanéo de puertos por parte de un atacante que busca posibles servicios vulnerables. Como los mismos solo se abren ante un pk correcto, los puertos donde se brindan los servicios se muestran aparentemente cerrados.

Por lo general este mecanismo se implementa configurando un demonio para que revise la bitácora o log del firewall para detectar esta secuencia de intentos de conexión. Otra forma es tener un proceso examinando paquetes con alguna interfaz de captura de paquetes, pero esto tiene que hacerse en puertos TCP que se encuentren “abiertos”.

La idea es simple, poder acceder mediante ‘ssh’ remotamente a un servidor desde una IP dinámica, en donde solo unas IPs fijas están permitidas por el cortafuegos.

La instalación en nuestro servidor Ubuntu, es simplemente instalar el paquete ‘knocker’.

knocker

Antes tenia montado un script en donde se comprobaban las direcciones ip, de los dominios ‘no-ip.org’ que tenia asignados a varios usuarios. Pero cuando el numero de equipos (dominios no-ip.org asignados) empieza a crecer, no es una solución valida, ya que se tienen que comprobar cada X minutos que las direcciones de estos equipo no han cambiado, y actualizar las reglas del  cortafuegos.

El demonio de Knock escuchara los intentos de acceso a los puertos que hemos definido, y si la secuencia es correcta en el tiempo que se ha definido, ejecutara la regla que nosotros hemos definido (dar acceso a esa IP a una conexión SSH).

Por seguridad, pasados X segundos, borraremos esa misma regla de nuestro cortafuegos, impidiendo nuevas conexiones desde esa IP.

Una vez instalado el paquete en nuestro servidor, editaremos el archivo ‘/etc/knockd.conf’, que es donde definiremos que secuencia de ‘golpeos’ sera valida,  y que acciones se ejecutaran, ante una llamada nuestra.

knockd-conf

En la primera sección definimos  el archivo log de Knockr. Lo realmente importante esta definido en la sección [SSH].
Definimos en un principio la secuencia de puertos a los que tendremos que llamar ( sequence = 1000,2000,3000) y el tiempo que tendremos para hacer una llamada a estos puertos (5 segundos).

Si se detecta esta secuencia de llamada, añadiremos durante 20 segundos (cmd_timeout   = 20) una regla a nuestro cortafuegos permitiendo acceso mediante SSH a esa dirección IP en concreto (/sbin/iptables -I INPUT 1 -s %IP% -p tcp –dport 22 -j ACCEPT).
Pasados esos 20 segundos, borraremos esa regla en nuestro cortafuegos, impidiendo nuevos accesos a esa IP (/sbin/iptables -D INPUT -s %IP% -p tcp –dport 22 -j ACCEPT)

De nuevo recurrimos a Wikipedia para explicar su funcionamiento:

Paso 1 El cliente no puede conectarse a una aplicación que se encuentra escuchando en el puerto n. El cliente no puede establecer una conexión con ningún pueerto

Paso 2 El cliente intenta conectarse a un conjunto predefinido de puertos en secuencia, enviando ciertos paquetes. El cliente tiene conocimiento previo del demonio de golpeo de puertos y su configuración, pero no recibe ninguna respuesta durante esta fase ya que las reglas del firewall no lo permiten.

Paso 3 El demonio de port knocking intercepta los intentos de conexión y los decodifica para verificar un golpeo auténtico. El servidor realiza tareas específicas basadas en el golpeo de puertos, como abrir otros puertos para el cliente.

Paso 4 El cliente se conecta al puerto n y se autentica mediante el mecanismo normal de la aplicación que escucha en ese puerto.

En el cliente también también tendremos que instalar el paquete knocker para hacer la llamada a los puertos que  están monitorizados por nuestro servidor con knorck. También hay clientes para Windows, Mac, Iphone

Ya podríamos conectarnos a nuestro servidor. Para automatizar este proceso un poco, tengo un script ‘toc-toc.sh’ en mi cliente, que lanza una conexión ssh en Nautilus cada vez que quiero entrar en mi servidor remoto.

Antes de lanzar mi conexión SSH, llamo mediante knock a la dirección IP de mi servidor 100.123.34.32, con la secuencia ‘1000,2000,3000’

toc-toc

Puedes ampliar la información aquí:

https://help.ubuntu.com/community/PortKnocking
http://www.linuca.org/body.phtml?nIdNoticia=275

Anuncios

Responses

  1. Hola Jesus, gracias por esta información. Yo quiero aprender como usar Ubuntu Server para servir paginas web. Usted sabe como configurar una computadora con Ubuntu Server? Gracias!


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Categorías

A %d blogueros les gusta esto: