|
[howto] Toc Toc, hay alguien? (Instalando un Port-Knock Server)
|
| Autor |
Mensaje |
Hermes
El Alquimista
Mensajes: 461
Grupo: Registrado
Registro en: May 2005
Estado:
Sin Conexión
Reputación: 8
|
[howto] Toc Toc, hay alguien? (Instalando un Port-Knock Server)
La idea de este tuto es evacuar una de las dudas que surgio en este post: No dar señales en la red
La solución a esta pregunta la da un pequeño programita llamado knockd.
NOTA: Antes que nada aclaro que vamos a realizar tareas que necesitan cierta experiencia en el mundo Linux pero que no son imposibles de llevar a cabo.
La teoria:
knockd es lo que se conoce como port-knock server. Su funcion es la de "escuchar" todo el trafico en una interface ethernet o PPP (trabaja a nivel de la capa de enlace) en busca de una secuencia de "golpes" en ciertos puertos (port-hits).
Estos "golpes" (port-hits) son generados por una aplicación cliente mediante el envio de paquetes TCP o UDP al servidor. Por supuesto que los mismos no deben estar abiertos (en uso por alguna aplicacion).
Cuando el servidor detecta que una secuencia especifica de puertos han sido "golpeados" ejecuta un proceso especificado en su archivo configuracion. Esto puede ser usado, por ej., para abrir un puerto en un firewall para acceso temporario o simplemente para ejecutar un comando o script.
Ahora si!, la practica:
Lo primero que vamos a hacer es bajar la ultima version de knockd de aca: http://www.invoca.ch/pub/packages/knock/
Como veran es un RPM que contiene los fuentes que vamos a compilar con las tipicas sentencias:
./configure
make
make install
(Ok debianeros!, para Udes. tambien hay: http://packages.debian.org/unstable/net/knockd)
NOTA: Debemos tener instalados previamente los siguientes paquetes para que todo funcione bien durante la compilacion:
libpcap: es una biblioteca que implementa funciones para la captura de paquetes en una red, para lo cual coloca la placa de red en modo promiscuo.
bison: Bison es un generador de analizadores sintácticos, un sustituto de YACC ("Yet Another Compiler Compiler", otro compilador de compiladores). Es decir que es un programa que genera un programa que analiza la estructura de un archivo de texto.
flex: Flex es una herramienta para generar programas que reconocen patrones léxicos en un texto.
Una vez compilado e instalado todo vamos a modificar/agregar opciones en el archivo de configuracion /etc/knockd.conf; en él aparecen varios "tags" que vamos a enumerar:
el "tag" [options] es usuado para definir opciones globales, es decir que afecten a todas las directivas; dentro de el podemos usar:
UseSyslog
Los logs son manejados a traves del syslog(). Los mensajes son enviados al archivo /var/log/messages (o equivalente)
LogFile = /path/a/un/archivo
Especifica el archivo en el que se escribiran los logs que genere el programa
PidFile = /path/a/un/archivo
Esto se usa cuando el programa corre en modo daemon, por default seria /var/run/knockd.pid
Interface = <placa_de_red>
Nombre de la placa de red donde se "escuchara" el trafico (eth0, eth1, PPP, etc.)
Luego aparecen otro "tags" que son definidos por los usuarios para distinguir entre varias directivas (en el ejemplo [openSSH]). Dentro de estas directivas de usuario podemos utilizar:
Sequence = <puerto1>[:<tcp|udp>][,<puerto2>[:<tcp|udp>] ...]
Especifica la secuencia de puertos a encontrar. (por default son TCP).
One_Time_Sequences = /path/al/archivo/one_time_sequences
Es un archivo que contiene secuencias que se usuaran una por vez en lugar de secuencias "fijas". Knockd pone un # (numeral) delante de cada secuencia una vez usadas.
Nota: Te recomiendo que dejes un espacio en blanco delante de cada secuencia porque knockd reemplaza el primer caracter de la cadena y si no lo haces la deja trunka...
Seq_Timeout = <timeout>
El tiempo en segundos a esperar para que se complete una secuencia.
TCPFlags = fin|syn|rst|psh|ack|urg
Solo toma en cuenta los paquetes que tienen estos flags activos.
Usar TCPFlags = syn es principalmente util para conexiones SSH ya que esta suele interferir y en consecuencia invalidar la secuencia de golpes...
Si queres especificar mas flags TCP los podes separar con comas (TCPFlags = syn,ack,urg) y pueden ser explicitamente excluidos anteponiendo un "!" (TCPFlags = syn,!ack)
El tema de flags TCP lo voy a dejar para otro tuto
Start_Command = <comando>
Esto especifica el comando a ejecutar cuando el cliente realiza un port-knock correcto.
Se puede usar la variable %IP% que sera reemplazada por la direccion IP del cliente.
La directiva Command es un alias de Start_Command.
Cmd_Timeout = <timeout>
Tiempo a esperar entre Start_Command y Stop_Command. Esta directiva es opcional y es requerida solo si Stop_Command es usada.
Stop_Command = <comando>
Especifica el comando a ejecutar cuando Cmd_Timeout segundos han pasado desde que Start_Command ha sido ejecutado.
Un ejemplo:
Supongamos que necesitamos habilitar una conexion SSH a nuestro equipo conectado a internet desde nuestro trabajo. Dentro del archivo /etc/knock.conf vamos a poner las siguientes directivas:
por default nos aparece:
[options]
logfile = /var/log/knockd.log
[openSSH]
sequence = 7000,8000,9000
seq_timeout = 5
command = /sbin/iptables -A INPUT -i eth0 -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 5
command = /sbin/iptables -D INPUT -i eth0 -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
como ves, golpendo en secuencia los puertos TCP 7000, 8000 y 9000 hacemos que nuestro firewall nos abra el puerto 22 (puerto de escucha de ssh) solo a nuetra IP... y listo!!...
Para cerrar la conexion solo debemos golpear en secuencia los puertos TCP 9000, 8000 y 7000....
ok, llego el momento de hacer que nuestro knock server arranque; en la linea de comandos ejecutamos /usr/local/sbin/knockd -d para correrlo como "demonio" o servicio (hay mas opciones desde la linea de comando pero eso te lo dejo para que lo investigues vos, jeje!)...
ahora bien, como hacemos con el cliente?.. no te desesperes que ya llega la segunda parte... 
.
/****
Si entendemos todo lo que estamos haciendo,
no estamos aprendiendo nada...
****/
|
|
| 02-27-2007 06:39 PM |
|
 |
warp
Q
Mensajes: 2,009
Grupo: Registrado
Registro en: Jun 2005
Estado:
Sin Conexión
Reputación: 10
|
RE: [howto] Toc Toc, hay alguien? (Instalando un Port-Knock Server)
bueno les dejo la versión para instalar en gentoo:
1) ejecutamos:
emerge -av net-misc/knock
2) Editamos el archivo de configuración de knock... traten de seguir las indicaciones de hermes
3) agregamos el demonio al inicio del sistema:
rc-update add knock default
4) iniciamos el demonio:
TIP: en el caso de gentoo, para que knock trabaje con distintas interfaces, hay que editar el archivo /etc/conf.d/knock, y agregar las que deseemos de la siguiente manera:
OPTS="-d -i eth0 eth1 eth2"
bueno eso es todo, cuando hermes saque la segunda parte de su tutorial (cliente), agrego la versión gentoo.....
les dejo otro ejemplo para abrir ssh:
[options]
logfile = /var/log/knockd.log
[openCloseSSH]
sequence = 9876:tcp,5432:tcp,9999:tcp
seq_timeout = 5
tcpflags = syn
cmd_timeout = 10
start_command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
|
|
| 02-27-2007 07:49 PM |
|
 |
Hermes
El Alquimista
Mensajes: 461
Grupo: Registrado
Registro en: May 2005
Estado:
Sin Conexión
Reputación: 8
|
RE: [howto] Toc Toc, hay alguien? (Instalando un Port-Knock Server)
Antes de seguir con el cliente de knockd voy a agregar algunas cosillas que me quedaon en el tintero...
como dije podemos levantar knockd como demonio desde la linea de comandos con el modificador -d. Ademas de esto podemos decirle cual o cuales son las interfaces desde donde queremos que escuche, podemos tambien correrlo en modo "debug" haciendo que muestre toda la info por pantalla lo cual es util para determinar si el servicio esta corriendo correctamente, etc. Aca estan todos lo parametros que podemos pasarle al iniciarlo...
-i, --interface <nombre_int> La interface en la que escuchara, por defecto eth0
-d, --daemon Para que corra en modo "demonio" o servicio.
-c, --config <archivo> El archivo de configuración, por default /etc/knockd.conf
-D, --debug Los mensaje se envian a la consola.
-v, --verbose Muestra mas informacion en la salida.
-V, --version Muestra la versión del programa.
-h, --help Ayuda
-l, --lookup Chequea nombres DNS
Notas sobre la seguridad: si bien esta ultima opcion puede ser util no te recomiendo que la uses ya que un atacante podria encontrar el primer puerto de una secuencia si monitorea el trafico DNS que sale del equipo que corre knockd (por ej, tirando una serie de pings sobre puertos TCP cerrados en lugar de contestar con un paquete ACK+RST).
por ej, si queremos levantar la aplicacion como el servicio para que escuche en la placa eth1 cargando un archivo de configuracion alternativo y que la salida la muestre por pantalla hacemos lo siguiente:
knockd -d -v -D -i eth1 -c /etc/knockd.alternativo.conf &
El & simplemente lo pongo para que el comando corra en background y no nos "ocupe" la consola....
Ahora si, el cliente
Con la compilacion de knockd tambien se nos crea un programita llamado knock que seria el cliente...
Su uso es muy sencillo:
knock [opciones] <equipo> <puerto[ rotocolo]> [puerto[ rotocolo]]
las opciones:
-u, --udp Enviar paquetes UDP (por defecto envia TCP)
-v, --verbose Una salida con mas información
-V, --version Muestra la versión
-h, --help Ayuda.
Asi se ejecutaria knock desde la linea de comandos...
knock -v 192.168.0.1 7000 8000 9000
la respuesta seria:
hitting tcp 192.168.0.1:7000
hitting tcp 192.168.0.1:8000
hitting tcp 192.168.0.1:9000
Muchas veces ncesitamos acceder a equipos de nuestra red desde un cyber (nooo!!!.. ) o desde un equipo que no es el nuestro y que ademas tiene instalado un Window$... como hacemos?.. por suerte existe una version cliente Cygwin/Win32 que podemos llevar encima (yo la llevo en mi pendrive ) y usar cuando la necesitemos: http://www.zeroflux.org/proj/knock/files...cygwin.zip
CONCLUSION
Como he dicho en otras ocasiones no es posible "esconderse" del mundo si pretendes poner en linea un servicio a traves de la red, y si bien el "ocultamiento" como medida de seguridad NO representa seguridad en si misma con esto vas lograr poner un obstaculo mas a quienes pretendan acceder a tus recursos a traves de la red...
Espero que les sea util!.. 
.
/****
Si entendemos todo lo que estamos haciendo,
no estamos aprendiendo nada...
****/
|
|
| 03-02-2007 11:23 AM |
|
 |
p_eter
Chaos Manager
      
Mensajes: 4,364
Grupo: Administrador
Registro en: Jun 2005
Estado:
Sin Conexión
Reputación: 13
|
RE: [howto] Toc Toc, hay alguien? (Instalando un Port-Knock Server)
|
|
| 03-10-2007 12:03 AM |
|
 |