comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Port knocking en Debian con knockd

  • 1 Respuestas
  • 1383 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado BlackDead

  • *
  • Underc0der
  • Mensajes: 13
  • Actividad:
    0%
  • Reputación 0
  • si lo haces aslo bn y mejoralo
    • Ver Perfil
« en: Agosto 07, 2013, 04:50:50 pm »
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 golpeo de puertos 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 golpeo de puertos correcto. Normalmente los puertos donde se brindan los servicios se muestran aparentemente cerrados.



Una vez que sabemos qué es el Port knocking y sus utilidades, vamos a ver el modo de instalarlo y utilizarlo, tanto en modo servidor como cliente. Para ello podemos hacer uso de varias herramientas, una de ellas es knockd, que incluye tanto el demonio (Servidor) como el cliente así que será lo que instalemos en ambas partes.

Los paquetes precompilados y código fuente se pueden descargar desde el sitio de knockd, para Debian y derivados podemos instalarlo directamente desde los repositorio

Citar
$ sudo apt-get install knockd

Una vez instalado, la configuración básica, requiere por un lado habilitar el servicio (que no arrancarlo), para ello debemos modificar la variable START_KNOCKD de 0 a 1 en el fichero /etc/default/knockd. Veréis que al instalar os ha indicado lo siguiente:

Citar
  * knockd disabled: not starting. To enable it edit /etc/default/knockd

Ese fichero tiene dos variables, una la comentada y la otra en la que especificamos la interfaz de red en la que escuchará knockd y cualquier otro parámetro que queramos pasar al demonio:

Citar
################################################
#
# knockd's default file, for generic sys config
#
################################################

# control if we start knockd at init or not
# 1 = start
# anything else = don't start
#
# PLEASE EDIT /etc/knockd.conf BEFORE ENABLING
START_KNOCKD=1

# command line options
KNOCKD_OPTS="-i eth1"

Y el otro fichero de configuración es en el que especificamos las opciones de logging y las secuencias que queramos configurar para abrir y cerrar puertos, es el fichero /etc/knockd.conf. Vemos que por defecto estamos mandando los logs a syslog y que hay dos secuencias, una para abrir el puerto 22 (SSH) para una IP y otra para cerrarla. La primera con la secuencia de puertos TCP 7000,8000 y 9000 y la segunda a la inversa:

Citar

[options]
   UseSyslog

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

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

Esta es la configuración por defecto, si quisiéramos probarla podemos arrancar el demonio (/etc/init.d/knockd start) o ejecutarlo manualmente ampliando el debug y ver directamente en STDOUT el funcionamiento. Voy a probarlo en local contra la interfaz “lo” y añadiendole verbose:

Citar
# knockd -i lo -v
listening on lo...

En el lado del cliente utilizaremos el comando “knock”, es tan sencillo como pasarle la IP seguida de los puertos y el protocolo (si es tcp no hace falta ponerlo). Para nuestro caso anterior, si quisieramos abrir el puerto 22 para nuestra IP haríamos lo siguiente

Citar
$ knock localhost 7000 8000 9000

Y una vez ejecutado veremos en el log o en STDOUT si lo hemos ejecutado a mano:

Citar
127.0.0.1: openSSH: Stage 1
127.0.0.1: openSSH: Stage 2
127.0.0.1: openSSH: Stage 3
127.0.0.1: openSSH: OPEN SESAME
openSSH: running command: /sbin/iptables -A INPUT -s 127.0.0.1 -p tcp --dport 22 -j ACCEPT

Y para cerrarlo:

Citar
$ knock localhost 9000 8000 7000

Y el log:

Citar
127.0.0.1: closeSSH: Stage 1
127.0.0.1: closeSSH: Stage 2
127.0.0.1: closeSSH: Stage 3
127.0.0.1: closeSSH: OPEN SESAME
closeSSH: running command: /sbin/iptables -D INPUT -s 127.0.0.1 -p tcp --dport 22 -j ACCEPT

A partir de aquí conviene investigar ya que las posibilidades son infinitas, jugando con las secuencias de puertos, flags tcp (syn, ack…), timeouts de secuencias, comandos a ejecutar, etc. Os recomiendo esta entrada de Kriptopolis donde profundizan más en sus posibilidades.

Desconectado ALFORSOLID

  • *
  • Underc0der
  • Mensajes: 6
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #1 en: Octubre 13, 2013, 10:24:41 pm »
yo creia que fuese un poco mas complicado pero no
Gracias por la info men

 

¿Te gustó el post? COMPARTILO!



Port knocking para reforzar la seguridad de un servidor

Iniciado por LucaSthefano

Respuestas: 0
Vistas: 1317
Último mensaje Marzo 25, 2013, 07:11:42 pm
por LucaSthefano