User Tools

Site Tools


improvisar_un_sistema_port_knocking_para_accesos

This is an old revision of the document!


Sistema de golpeo de puertos (Port knocking) simple

El golpeo de puertos (del inglés port knocking) es un mecanismo para abrir puertos externamente en un sistema de control de acceso, normalmente un firewall, mediante una secuencia de “golpes”. Normalmente esos golpes son intentos de conexión a puertos que se encuentran cerrados en un orden determinado. Una vez que el sistema encargado de controlar ese port knocking recibe una secuencia de conexión correcta, las reglas del cortafuegos son modificadas para permitir algo, normalmente la conexión a un puerto que antes estaba cerrado.

El propósito principal del golpeo de puertos es prevenir mostrar puertos abiertos por razones de seguridad. Como los mismos solo se abren ante un golpeo de puertos correcto, normalmente los puertos donde se brindan los servicios se muestran aparentemente cerrados.

Por lo general este mecanismo de golpeo de puertos se implementa configurando un servicio 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”.

Ya hay software dedicado para estos fines en casi todos los sistemas operativos, pero vamos a ver una forma simple y de andar por casa para implementar un port knocking. Este se basará en ofrecer un servicio de proxy socks5 en un determinado puerto, el cual solo estará abierto a las IPs que realicen bien el golpeo, que en el caso del ejemplo no será propiamente un golpeo, si no enviar una determinada string a un puerto concreto.

Script knoking.sh

#!/bin/bash
 
############# CONFIG ##############
port=534
service_log="sshd.service"
payload="stallmanistsexy\|recogetrufas\|usuarioXXXX"
logfile=/var/log/proxy_knock.log
cron="2 minutes ago"
##################################
 
ips=$( journalctl  -u $service_log --since "$cron" | grep -i "from" |  grep -i "$payload" |  egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}' | sort | uniq | paste -d',' -s)
 
if [ -n "$ips" ]; then
	/usr/sbin/iptables -C INPUT -p tcp -s $ips --dport $port -j ACCEPT || (/usr/sbin/iptables -I INPUT -p tcp -s $ips --dport $port -j ACCEPT &&  echo "$(date "+%x %H:%M:%S") ips $ips added." >> $logfile)
 
fi
improvisar_un_sistema_port_knocking_para_accesos.1645996895.txt.gz · Last modified: 2022/02/27 22:21 by busindre