domingo, 9 de marzo de 2014

¿A qué puertos/servicios de internet me permite acceder el firewall de la intranet?



Después de crear mi servicio de VPN con OpenVPN en un servidor VPS me encuentro que en uno de los lugares donde pretendo usarlo no se me conecta con el puerto 1194 ni con otros como 80, 8080, 993, 22... los más habituales, tanto TCP como UDP.

Entonces ¿cómo puedes averiguar a qué servicios/puertos se te permite acceder?



Dado que escanear los puertos abiertos del firewall/router sirve de bien poco, ya que no deseas saber qué puertos tiene abiertos la máquina que actua de firewall (seguramente tendrá alguno para configurar el firewall de forma remota, pero no significa que puedas usar ese puerto para acceder a internet, como mucho para intentar hackear el firewall), lo único que se me ocurre es escanear los puertos de un servidor fuera de la intranet.

El problema es que no te sirve escanear cualquier servidor de internet, por seguridad suelen tener sólo los puertos indispensables abiertos. Así, cuando lo escanearas, en caso de que tu intranet te permitiera acceder te seguiría diciendo que el puerto está cerrado si el servidor lo tiene cerrado. Obtendrías un falso negativo. Lo que necesitas es un servidor que responda siempre, con todos los puertos abiertos (sí, es un sacrilegio en toda regla).

Aprovechando que el servicio VPN que expliqué puede funcionar tanto en UDP com en TCP y que se le han creado una serie de certificados y claves para que sea lo más seguro posible lo puedes usar como servidor para el escaneo completo de puertos (65000 puertos aprox. por protocolo) con un par de pasos muy simples.

En caso de que lograran acceder y conectarse al servicio OpenVPN e intentaran acceder al servidor, seguirían encontrándose que el único servicio alternativo de acceso es ssh (en la configuración que propuse) y éste sigue siendo igual de seguro tanto desde fuera de la red VPN y en teoría es lo suficientemente bueno para dejarlo abierto a internet (la prudencia nunca está de más claro). Siempre puede haber algún bug en ssh, OpenVPN o los sistemas generadores de claves...


Configurar el servidor para que responda en todos los puertos TCP/UDP


El primer paso es activar también el servicio OpenVPN para el protocolo TCP. Para ello, puedes aprovechar el archivo de configuración que ya dispones en el servidor. Cópialo y edítalo:
# cp /etc/openvpn/server.conf /etc/openvpn/serverTCP.conf
# nano /etc/openvpn/serverTCP.conf
Sólo debes cambiar la línea donde pone:
proto udp
por:
proto tcp
y activar el servicio
# systemctl start openvpn@serverTCP.service
# systemctl enable openvpn@serverTCP.service

El segundo paso consiste en redireccionar todas las conexiones externas (excepto las dirigidas al puerto 22 de ssh) al puerto de OpenVPN para ambos protocolos. Para ello se utilizan tres reglas nuevas en el firewall del servidor iptables:
# iptables -t nat -A PREROUTING -i venet0 -p tcp -m tcp --dport 1:21 -j REDIRECT --to-ports 1194
# iptables -t nat -A PREROUTING -i venet0 -p tcp -m tcp --dport 23:65535 -j REDIRECT --to-ports 1194
# iptables -t nat -A PREROUTING -i venet0 -p udp -m udp --dport 1:65535 -j REDIRECT --to-ports 1194


Ésto también añade la comodidad de no tener que estar cambiando el puerto en la configuración del servidor según la red en la que estés. Sobretodo si accedes por primera vez en una red, te puedes encontrar que el puerto al que te permitan acceder no lo tengas configurado en el servidor y no puedas acceder al servidor para cambiar la configuración. Así sólo debes cambiar los parámetros en el cliente para adecuarlo a cada contexto.


Escanear los puertos desde Android


Hay infinidad de aplicaciones, he probado IP Tools no permite seleccionar protocolo ni ninguna otra opción que no sea indicar la IP del servidor, el rango de puertos y el TimeOut. Asumo que usa TCP por defecto para los escaneos.


En el menú, en la opción "Port scanner":


Indica la dirección IP de tu servidor e inicia el escaneo. Si encuentra algún puerto abierto lo listará a continuación.

Sería interesante encontrar una app que permitiera también escanear puertos UDP.


Escanear los puertos desde Linux


Linux tiene una potentísima herramienta llamada nmap para todo tipo de escaneos en la red. Instálala en tu ordenador de la forma habitual en tu distribución. Si quieres entorno gráfico puede que incluya la utilidad zenmap o que tengas que instalarla a parte.

Para escanear los puertos TCP del servidor:
nmap -p 1-65535 -T4 -Pn -v <dirección IP servidor>

Para escanear los puertos UDP del servidor:
nmap -p 1-65535 -sU -T4 -Pn -v <dirección IP servidor>

El parámetro -Pn evita que se compruebe si el servidor está disponible mediante un ping, simplemente asume que lo está. El firewall podría estar bloqueando las conexiones icmp.

Una vez sepás qué puertos tienes disponibles ya puedes cambiar la configuración de conexión en el cliente. En Android, puedes editar el archivo que usaste para la primera configuración con Jota+ directamente en el dispositivo y volverlo a importar en OpenVPN Connect.

Si lo deseas te puedo enviar un correo electrónico cada vez que publique algo en Mi backup tan sólo debes inscribir tu dirección de correo. Tú dirección de correo será confidencial y sólo te enviaré información que crea que te puede interesar.

No hay comentarios:

Publicar un comentario