Abrir un acceso momentáneo a nuestro servidor linux aunque tengamos este totalmente cerrado y securizado.

Port Knocking Security Port Knocking Security

En ocasiones podemos necesitar acceder a algún tipo de servicio de nuestro servidor linux que tenemos cerrado al exterior mediante iptables. Un ejemplo claro sería el poder acceder desde el exterior al puerto 22 (SSH y SFTP).

Si queremos que la salud de nuestro servidor esté intacta y no estemos sometidos a continuos ataques por parte de arañas de internet o aburridas personas que no tienen otra cosa que intentar acceder a nuestra maquina lo mas normal es que este puerto lo tengamos cerrado por iptables o redirigido a otro puerto que no le diga al atacante de manera que servicio está ahí corriendo para no facilitarle la tarea de intentar fastidiar nuestra maquina.

En ocasiones no podemos usar otro puerto, por lo que no nos queda otra que dejarlo cerrado en el iptables y abrirlo cuando hace falta o exponernos peligrosamente a dejarlo abierto al exterior.

Tenemos una tercera opción, que es la de hacer que nuestra máquina lo abra momentáneamente a demanda si le hacen la petición correcta y de la manera correcta.

Para esto usaremos el paquete knockd. Este paquete lo que hace básicamente es que si alguien desde el exterior, lanza una secuencia de intentos de accesos a unos puertos que nosotros hemos especificado (aunque estos se encuentren cerrados) y en el orden que nosotros le hemos dicho, entonces el software reconoce la secuencia de llamada y aplica la regla del IPtables que nosotros le hemos preconfigurado para abrir ese puerto que nuestro cliente necesita. Repito, solo funciona si los puertos, el protocolo y el orden de llamada es el correcto. También podemos establecer una secuencia después para que se aplique la regla contraria y cierre de nuevo el puerto o establecer que lo haga tras un periodo de inactividad sobre el mismo. Para establecer estas llamadas será necesario también tener el cliente de knock instalado.

Lo primero que haremos será instalarlo desde la web donde se encuentra.

http://www.zeroflux.org/projects/knock

vemos que tenemos paquetes para diferentes distribuciones tanto de cliente como de servidor.

una vez instalado en nuestro sistema procederemos a editar el fichero knockd.conf donde nos encontraremos una configuración básica como esta:

[options]
logfile = /var/log/knockd.log

[openSSH]
sequence = 7000,8000,9000
seq_timeout = 10
tcpflags = syn
command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp –dport 22 -j ACCEPT

[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 10
tcpflags = syn
command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp –dport 22 -j ACCEPT

En esta configuración básica solo hay dos posibilidades, la primera establece que si mediante el cliente de knock se establece una llamada a los puerto 7000, 8000 y 9000 entonces se ejecutará una regla que abrirá el puerto 22 en el ip tables al exterior para esa IP que ha realizado la llamada.

De la misma manera la segunda posibilidad aplicará la regla del IP tables para cerrar dicho puerto.

Un ejemplo del comando cliente para realizar la llamada en este caso sería knock 7000 8000 9000

Podemos configurar/usar TCP, UDP y los puertos que queramos así como los TCP Flags que estimemos oportunos.

De esta manera tendríamos el puerto 22 de nuestro servidor cerramos al exterior pero podemos abrirlo y cerrarlo a demanda si conocemos la combinación exacta de como hacerlo desde fuera y sin tener que tener acceso físico a nuestro servidor para modificar las reglas del iptables.

Como la combinación de llamada que podemos establecer es la que queramos y  la podemos complicar tanto como nos venga en gana la posibilidad de que una araña de Internet o un atacante pudiera dar con ella es ínfima.

Ni que decir tiene que es una buena idea también para tener una puerta trasera por si en algún momento mientras tocamos iptables nos equivocásemos y nosotros mismos nos negáramos la entrada a nuestro propio servidor de manera remota.

2 Comments

  1. Muy interesante Dani! Si es que está todo inventado.
    A ver si lo pruebo en mi servidor de casa, que ahora mismo está un poco en precario y no quiero llevarme un susto.
    Aunque antes tengo que aprender a configurar el iptables… Para cuando un artículo!

Anímate a compartir con nosotros tus inquietudes y experiencias.

A %d blogueros les gusta esto: