martes, 17 de diciembre de 2019

Práctica #9: El riesgo de utilizar protocolos no cifrados durante el enlace remoto de una Raspberry Pi 4

Raspberry Pi para desarrolladores

PRÁCTICA # 9

“El riesgo de utilizar protocolos no cifrados durante el enlace remoto de una Raspberry Pi 4”



Una de las preguntas que constantemente se hace un desarrollador al momento de evaluar la conexión remota entre dos o más dispositivos como la Raspberry Pi, generalmente viene siendo:

¿Qué protocolo de comunicación debería utilizar para la transmisión y control de procesos?

Pregunta que se enfoca directamente sobre de la transferencia efectiva de información sin evaluar el grado de inseguridad sobre la red de comunicación.

Por lo cual, con el fin de poder validar como se exponen los datos al usar un protocolo cifrado como SSH, ante otros que no son cifrado como TELNET, a continuación vamos a analizar dos capturas de tráfico tomadas durante el proceso de autentificación que realiza un computador a una Raspberry Pi, al momento de transferir las credenciales de ingreso (usuario/contraseña) en la sesión de cada protocolo:

Captura de paquetes utilizando WireShark del enlace remoto de una Raspberry Pi administrada bajo protocolo TELNET

Para poder generar una conexión TELNET en la Raspberry Pi se necesitan instalar el módulo de telnetd, mediante el siguiente comando sobre la consola:
sudo apt-get install telnetd

Una vez terminada la descarga e instalación solo debemos activar la comunicación TELNET en la raspberry mediante el comando:

sudo /etc/init.d/openbsd-inetd restart




Captura de paquetes utilizando WireShark del enlace remoto de una Raspberry Pi administrada bajo protocolo SSH




Encontrándonos con el siguiente resultado:

El protocolo TELNET a diferencia del SSH, expone de manera directa todos los datos de forma crítica, al no utilizar un cifrado para el transporte de información. Siendo tal el caso, que se hace evidente de forma directa, la información de la autentificación usuario/contraseña que fue usada durante el ingreso y control de la Raspberry Pi. Información que no debería estar expuesta de ninguna manera mediante una simple captura de tráfico utilizando programas como WireShark.

Finalmente, espero que esta información les sirva como guía para entender la importancia de trabajar con protocolos que contengan grados de cifrado para el tráfico de información. Así que muchas gracias y si les ha gustado esta pequeña práctica por favor divulgar esta información, para que todos aquellos que quieran aprender a desarrollar sobre la Raspberry Pi no se pierdan las próximas publicaciones.

jueves, 12 de diciembre de 2019

Práctica # 8: VPN para conexión remota entre redes privadas en una Raspberry Pi 4

Raspberry Pi 4 para desarrolladores

PRÁCTICA # 8

“Acceso remoto a una Raspberry Pi 4 mediante OpenVPN y PiVPN para administración y soporte desde redes privadas”




Gestionar y controlar una Raspberry pi de forma remota desde diferentes puntos de acceso privado, se ha convertido en una tarea importante para la construcción de canales de acceso remoto entre las diferentes empresas de desarrollo y sus respectivos clientes, buscando el cumplimiento de los siguientes tres criterios:

1.     Detectar y atender fallas reportadas por el cliente o el mismo sistema.

2.     Actualizar y desarrollar a distancia.

3.     Seguir y monitorear el funcionamiento de cada uno de los dispositivos instalados.

De acuerdo a lo anterior, ahora ustedes se preguntarán:

¿Cuál es la metodología práctica utilizada para el acceso remoto de dispositivos conectados en redes privadas diferentes?

El acceso remoto de dispositivos mediante redes privadas, han venido siendo administrado mediante el uso de una herramienta denominada VPN (“Virtual Private Network”). El cual no es más que una tecnología de red capaz de generar un enlace directo entre una red local y una red pública que utiliza un formato de autentificación credencial bajo un conjunto de protocolos de transporte de datos como UDP y TCP.

Para entender más a fondo como funciona esta metodología lo que se propone de forma general en cada una de sus etapas es:

      1.     Generar un servidor VPN sobre el dispositivo que se quiere controlar (la Raspberry Pi), utilizando un gestor de conexión VPN que dependerá del tipo de tecnología a usar.

 2.     Apertura de puertos de comunicación de los protocolos de transporte de datos UDP o TCP del enlace a configurar. (Pueden existir otros protocolos y depende de tipo de gestor VPN a usar, además de que esto se realiza sobre el router que proporciona acceso de red a la Raspberry Pi).

      3.     Generación y distribución de credenciales de acceso a los usuarios interesados de la VPN del servidor.

    4.     Acceso remoto mediante herramientas de gestión VPN como OpenVPN (desde nuestro computador de desarrollo o celular), bajo la importación de la credencial de autentificación generada por el servidor.

Por lo tanto, para entender cada una de estar etapas se propone la siguiente práctica:

“Generar un acceso remoto utilizando un gestor VPN, que permita controlar y gestionar una Raspberry Pi desde un computador o celular que se encuentra en un entorno de red diferente”

Para solucionar este ejercicio vamos a seguir los siguientes pasos, aclarando que no es una metodología definitiva ya que existen muchos gestores VPN para realizar este tipo de enlace remoto:

PASO # 1: Configuración de la VPN sobre la Raspberry Pi.

Para realizar esta primera etapa, si o si la Raspberry Pi deberá estar conectada a una red con internet, con el fin de poder descargar la aplicación “PiVPN”, la cual es un gestor de red privada para sistemas embebidos como la Raspberry Pi. El cual puede ser instalado mediante el comando:


curl -L https://install.pivpn.io | bash



Redireccionándonos seguidamente a una ventana de configuración en la que podremos detallar y gestionar todo el proceso de instalación de cada uno los paquetes previamente descargados por dicho enlace. Pasando luego a una ventana de información en la que se nos especificara que la Raspberry Pi se transformara en un servidor VPN.



Seguidamente, se nos advertirá que es importante establecer una red con IP estática para la Raspberry Pi sobre alguna de las interfaces de red disponibles por este hardware. En donde, escoger la red cableada o la red inalámbrica dependerá de la infraestructura de conexión del medio de trabajo en el que se encuentra instalada la Raspberry Pi.




Luego, él estado de configuración nos advertirá si queremos confirmar el uso de la IP asignada por defecto, recordándonos que el uso de IP dinámicas podría llevar a la comunicación a un conflicto de red. Sobre el que al darle aceptar lo que hace este administrador PiVPN es configurar internamente la Raspberry Pi, para que cuando se conecte a la Red si o si el proveedor le asigne una IP definida bajo petición directa de la misma tarjeta.

Encontrándonos que el problema de que la Raspberry Pi sea el que define su propia IP, es que, si el proveedor ISP ya la tiene definida, conllevara a un conflicto de conexión sobre los enlaces afectados. Por lo cual es recomendable que la definición de la IP de la Raspberry Pi, sea establecida y reservada de forma jerárquica por el mismo proveedor ISP (router). Aunque para este ejemplo se trabajo la petición de asignación por petición de la Raspberry.



Una vez que tenemos configurado el tema de la interfaz de red, el gestor nos pedirá que definamos el usuario que administrara los servicios del servidor VPN en la Raspberry Pi, junto a la activación de las actualizaciones periódicas para mantener segura la interfaz de conexión VPN.

Finalizando de esta manera la primera fase de configuración de la VPN en la Raspberry Pi.
PASO # 2: Apertura de puertos de comunicación para la VPN y preconfiguración del nivel de autentificación del certificado de conexión.

La configuración de la VPN en la Raspberry Pi, nos pedirá seleccionar un protocolo de comunicación bajo dos opciones que dependerán de lo que el entorno de comunicación proporcione y se solicite:

    ·        UDP (alta velocidad con baja latencia sin confirmación de paquetes recibidos).
    ·        TCP (alta fiabilidad con mayor latencia y menor velocidad con confirmación de paquetes recibidos).


Conllevando a que según la decisión que tomemos, se nos establecerá un puerto de enlace por defecto para el UDP como el 1194 y para el TCP el 443. Tomando en este caso la configuración de la opción UDP.

Puerto que deberá ser abierto sobre la red de trabajo de la Raspberry Pi, mediante la configuración directa del router que proporciona la conexión de red a la Raspberry. Teniendo en cuenta que generalmente este tema es de autonomía propia de la oficina de comunicación en las empresas que trabajamos o del mismo cliente al que se le prestara el servicio.

Aclarando que la IP asociada al puerto que se configurará, será la definida por los pasos anteriores a la Raspberry Pi.



NOTA: Si no se genera la apertura del puerto del protocolo UDP o TCP, al momento de generar la conexión obtendremos un error de acceso. Así que este paso es fundamental.
Luego de generar la definición del protocolo de transporte y su respectivo puerto de comunicación, la interfaz de configuración de PiVPN, nos pedirá decidir si queremos establecer un grado de autentificación para el certificado de conexión. El cual es un archivo físico de extensión “. ovpn” que utilizara el interesado para conectarse a la Raspberry Pi de forma remota utilizando herramientas como OpenVPN ya sea desde un celular o un computador.

Pidiendo de forma conjunta que se decida si nuestro servidor será visto por los clientes mediante un IP publica o mediante un identificador DNS. Destacando que para este ejercicio se trabajó bajo el uso de la IP pública del ISP al que se conectó la Raspberry Pi.

PASO # 3: Generación del certificado de conexión de la VPN.

Terminando la configuración de la VPN en la Raspberry Pi, se nos advertirá de que el comando para generar un servidor con su respectivo certificado de conexión será:

pivpn add (Para credenciales con contraseña de autentificación)
pivpn add nopass (Para credenciales sin contraseña de autentificación)

o también se puede utilizar de la forma:

pivpn -a (Para credencial con contraseña de autentificación)

pivpn -a nopass (Para credencial sin contraseña de autentificación)





En donde dependiendo de cómo lo hagamos, deberemos definir una contraseña de autentificación. La cual, deberá ser compartida junto el certificado de conexión encontrado en la carpeta “ovpns” en la Raspberry Pi.




PASO # 4: Conexión remota desde otra red privada al servidor VPN de la Raspberry Pi.


Para realizar una conexión sobre una VPN lo primero que debemos hacer es disponer de una herramienta o software capaz de administrar este tipo de conexiones. En este caso lo que vamos a realizar es la instalación previa de un programa denominado OpenVPN. El cual presenta una interfaz de trabajo intuitiva y versátil para este tipo de conexiones bajo una compatibilidad en sistemas operativos como Windows, Linux, Android y iOS.


Luego de que hemos descargado e instalado OpenVPN en nuestro computador o celular que utilizaremos como enlace remoto hacia la Rapberry Pi, tomaremos o solicitaremos la credencial generada por el servidor de la Raspberry Pi, junto a su respectiva clave de autentificación. La cual, simplemente deberá ser importada por la herramienta OpenVPN.




Logrando así una conexión remota sobre la red a la que se encuentra conectada la Raspberry Pi desde una red privada y sobre la que solo nos queda verificar si podemos ingresar a la Raspberry Pi. Proceso que debería ser validado mediante el uso de un enlace directo utilizando el protocolo SSH tal cual se ha definido en las publicaciones de estos tutoriales anteriormente.

Ahora ustedes se preguntarán: ¿A qué IP debemos apuntar para conectarnos a la Raspberry PI utilizando un enlace SSH?, pues resulta que, si ya estamos enlazados a la red privada de la Raspberry Pi mediante una VPN, es como si estuviéramos físicamente conectados a la misma red. Por lo cual la respuesta a esta pregunta sería a la IP asignada por la red privada de la Rasbperry Pi o al identificador por defecto de su host.




Ejemplo que también puede ser replicado utilizando un teléfono móvil bajo la aplicación OpenVPN disponible según su sistema operativo junto a una comunicación SSH gestionada por una aplicación como “Termius” para teléfonos con sistema operativo Android.




Finalmente solo me queda decirles que espero que esta información les ayude como guía para entender el alcance del uso de enlaces VPN para la gestión de dispositivos conectados en redes privadas independientes. Así que muchas gracias y si les ha gustado esta pequeña práctica por favor divulgar esta información, para que todos aquellos que quieran aprender a desarrollar sobre la Raspberry Pi no se pierdan las próximas publicaciones.

viernes, 6 de diciembre de 2019

Práctica # 7: Acceso remoto al escritorio de trabajo del sistema operativo Raspbian mediante TightVNC server sobre la Raspberry Pi 4


Raspberry Pi 4 para desarrolladores

PRÁCTICA # 7

“Acceso remoto al escritorio de trabajo del sistema operativo Raspbian mediante TightVNC server”



Una situación común que puede encontrar un desarrollador al momento de trabajar con una Raspberry Pi, es la necesidad de gestionar los procesos mediante el entorno gráfico del sistema operativo que se está ejecutando (generalmente Raspbian). Entorno que puede ser manipulado de forma directa mediante la implementación de una estación de trabajo utilizando un monitor HDMI, teclado y mouse (véase la práctica #5), limitado por la siguiente situación:

¿Es posible trabajar sobre el escritorio gráfico de la Raspberry pi de forma remota
sin utilizar un monitor, teclado y mouse?

Para resolver esta pregunta encontramos que los sistemas embebidos como la Raspberry Pi contienen un protocolo de acceso y control remoto llamado VNC (Virtual Network Computing). El cual funciona bajo la modalidad servidor-cliente, estableciendo una conexión virtual que utiliza por defecto el host o IP actual de la Raspberry como usuario de enlace junto a una contraseña previamente establecida. Por lo cual, ustedes se preguntarán ahora:

¿Cómo hago para implementar un servidor virtual VNC en la Raspberry Pi?

Pregunta que es resuelta mediante el uso de las siguientes instrucciones:

PASO # 1: Instalar TightVNC Server:

TightVNC Server es un programa de software libre que crea servidores gráficos sobre pantallas o displays virtuales y permite establecer conexiones remotas que se instala mediante el comando (La Raspberry debe estar previamente conectada a internet):

sudo apt-get install tightvncserver




PASO # 2: Configurar la clave de acceso para el servidor VNC:

Para configurar la contraseña de acceso al servidor virtual utilizamos el comando:

“vncpasswd”



En donde la contraseña deberá contener como mínimo 6 caracteres y la opción “view-only” nos permitirá gestionar los accesos (La cual puede ser establecida como “n” o “y” dependiendo de lo que cada uno requiera, totalmente abierto a todos o restringido para algunos)

PASO # 3: Activación del servidor VNC:

Para activar el servidor VNC server en la Raspberry se utilizar el comando:

“tightvncserver”




El cual nos devuelve la respuesta <New ‘X’ desktop is raspberrypi:1>, en donde la palabra “raspberrypi” es el host por defecto (también puede usarse la IP actual) y el “:1” es el número de display virtual establecido.

PASO # 4: Conexión remota desde un cliente utilizando MobaXterm o RealVNC:

Para conectarnos de forma remota al escritorio de trabajo de la Raspberry Pi una vez ya tenemos configurado el servidor VNC en esta, debemos utilizar un programa que permita conexiones de tipo VNC como lo es MobaXterm o RealVNC. Sobre los cuales se nos pedirá:

   1.     Un usuario de conexión conformado por la respuesta del paso # 3, ejemplo: 192.168.1.9:1. Generalmente recomiendo utilizar la IP de la Raspberry en vez del Host, ya que si tenemos varias tarjetas de las mismas, podremos tener un conflicto por dominios iguales.

   2.     La clave correspondiente configurada al servidor VNC.

   3.     Un puerto de acceso que por defecto es 5900 (Algunos programas de conexión remota VNC no lo piden).




PASO # 5: Desconexión del cliente virtual VNC:

En caso de que queremos cerrar de forma definitiva el servidor VNC que se esta ejecutando sobre la Raspberry Pi, utilizaremos el comando:

vncserver -kill :1



En donde “:1”, corresponde al display previamente activado por el paso # 3.

Por lo cual, esos son los pasos generales utilizados para acceder al entorno gráfico de la Raspberry Pi de forma remota, así que, si te ha gustado esta pequeña práctica, compártela en tus redes sociales para que sigamos creciendo como comunidad

Muchas gracias y nos vemos pronto.