Tutoriales, noticias y soluciones informáticas

Restricciones de puertos e IP’s usando Wireguard

En un artículo anterior hemos hablado de Wireguard. Hemos visto que este software nos va a permitir crear un servidor VPN con algunas ventajas respecto a una instalación básica de OpenVPN. Por internet veréis mencionado mil veces que la principal ventaja deWireguard es la velocidad, pero hemos podido ver que tiene otras muchas funcionalidades interesantes. Por ejemplo, si habéis seguido el tutorial, hemos instalado de forma muy sencilla un interfaz web que nos permite gestionar desde un navegador la creación y gestión de los diferentes usuarios de la VPN. Además, desde el propio interfaz, se le puede decir a cada cliente de VPN que hayamos creado a qué equipos de nuestra red puede acceder y a qué equipos no va a poder hacer ni un mísero ping.

Esa precisamente es la funcionalidad que más me ha gustado. He hecho todo lo que has dicho en el trabajo y ahora tengo absoluta seguridad de que mis usuarios de VPN no van a poder acceder a otros equipos y...

Pues siento mucho decírtelo Usuario Anónimo, pero seguridad completa en ese sentido va a ser que no.

Va a ser que no
Pero qué me estás diciendo. Me siento entonces estafado por tu anterior tutorial. Devuélveme el dinero. 

Tranquilo Usuario Anónimo. Primero expliquemos por qué Wireguard no es todo lo seguro que debería a la hora de impedir a los usuarios entrar en equipos en los que no están autorizados y luego daremos una solución efectiva a este problema.

1.- ¿Por qué las restrecciones de acceso de Wireguard no son suficientes?

Habíamos visto que el interface gráfico nos permitía poner en el campo «Allowed IPs» las direcciones IP a las que el usuario puede acceder.

Captura de Wireguard de una web no permitida

Una vez creado el usuario con una determinada restricción, podemos bajarnos el archivo de configuración desde el mismo interfaz gráfico. El archivo tendrá un contenido similar a éste.

Fijaos en la zona de «Allowed IPs». Ahí estarán las direcciónes IP que hemos puesto en el campo «Allowed IPs» al generar el usuario de Wireguard. Y no vais a encontrar ese dato en ningún sitio del servidor.

Me explico: todo lo que configuramos en Wireguard, tiene su reflejo en un archivo que nos queda en el servidor de Wireguard en la siguiente ruta:

/etc/wireguard/wg0.conf

En ese archivo, para cada cliente de VPN vais a ver un campo llamado «AllowedIPs», pero rellenar el campo «Allowed IPs» en Wireguard-ui no va a surtir efecto en el servidor. Veremos en un momento cómo hacer una primera solución a este problema, pero quedaos con que en principio la configuración de dónde puede acceder o no acceder un usuario queda guardada en el archivo que le hemos enviado al cliente (y bueno… en la interfaz gráfica dónde lo hemos configurado, por supuesto).

Vale, pero eso no tiene por qué ser malo ¿No es así? El tema es que funcione. 

Acepto el comentario, pero el gran problema es que si el usuario sabe sólo un poquito de cómo funciona Wireguard, se puede saltar esta restricción a la torera. Sólo tiene que cambiar el archivo «.conf» que le han enviado para conectarse a nuestra VPN poniendo en el campo «Allowed IPs» más direcciones ips. O incluso poner 0.0.0.0/0 en ese campo para tener acceso a cualquier equipo de nuestra red… y ya la hemos «liao». Wireguard le va a dejar conectarse a nuestra red y acceder a cualquiera de los equipos sin restricción ninguna.

Venga, vale. Pero en Wireguard-UI hay otro campo más que pone "Extra allowed IPs". Si lo cubro veo que lo que pongo sí que se refleja en el servidor, por lo que este problema podría solucionarse rellenando este campo. 

Efectivamente, y ésta es la «primera solución» de la que os hablaba hace un momento. Si queremos restringir por IP este método podría servirnos. Sin embargo aún hay otro punto de «inseguridad» en esta forma de gestionar las VPN’s. Imagínate que el usuario no tiene intención de hacer maldades y se va a conectar sólo a dónde le dejemos. Necesita teletrabajar, así que le vamos a dejar acceder únicamente a un equipo (usando la casilla que me has indicado) para que se conecte a él con la herramienta de escritorio remoto de Microsoft. Pero desgraciadamente este usuario tiene un malware en su equipo que va a buscar carpetas compartidas en equipos disponibles en la red para cifrarlas y fastidiarle el día. Si el equipo al que se conecta por escritorio remoto tiene una carpeta compartida, que se olvide de ella, porque el virus la podría cifrar.

Lo ideal sería tener algún tipo de control para evitar que el usuario no se conecte a otro puerto más que al del escritorio remoto del ordenador con el que va a trabajar. De esta forma el malware no podría acceder a ningún recurso compartido en el equipo de destino más allá del puerto que le hayamos habilitado y no habría posibilidades de ataque por esta vía.

Pues sí que estamos bien. Ahora va a ser cuando nos explicas alguna función avanzada de Wireguard para evitar estas cosas. Lo veo venir. 

Pues no. Wireguard lo hemos montado sobre un servidor linux, y los servidores linux tienen desde el principio de los tiempos una herramienta que permite tener un control total sobre ips y puertos a los que se accede: iptables. Así que usaremos esta herramienta para controlar a dónde accede cada usuario sin posibilidad de acceso por ninguna otra vía.

2.- Qué diablos es iptables

Todos los sistemas linux tienen implementado un cortafuegos a nivel de kernel. iptables no es más que una utilidad que podemos usar desde el terminal que nos pemite configurar ese cortafuegos. Desde iptables podemos poner un montón de condiciones para que un paquete de datos pueda entrar o salir por una ip determinada, un rango de direcciones IP o por un puerto o rango de puertos determinado.

Vale. ¿Pero eso qué tiene que ver con Wireguard? Conectar eso con Wireguard suena complicado. 

No hay que conectar gran cosa. Cada vez que generamos un usuario de VNP con Wireguard, a ese usuario se le asigna una ip local en un segmento de red que sólo usa Wireguard. En el tutorial de Wireguard habíamos puesto manualmente el segmento 10.10.0.1/24, pero si dejáis las opciones por defecto es posible que estéis usando el 10.252.1.0/24.

Cada vez que un cliente de Wireguard pide un paquete de datos, lo está haciendo por la ip que le ha otorgado Wireguard. El servidor de Wireguard se encarga de cogerlo desde la ip del equipo linux en el que está instalado el servidor de Wireguard y se la da al cliente de Wireguard. Para el equipo de destino, el equipo que le ha hecho la petición de ese dato ha sido el servidor de wireguard. Aunque tengamos varios clientes de Wireguard, todos se identificarán hacia afuera con la ip del servidor de Wireguard. A eso se le llama «enmascaramiento». El cliente está enmascarando la ip detrás de la que tiene el servidor de VPN.

Sabiendo esto, lo único que debemos hacer con nuestro firewall es dejar pasar o bloquear el tráfico entre estas dos redes según nos convenga.

3.- Configuraciones previas: preparemos el «post up script» y el «post down script»

Venga, vamos al lío.

¿Os acordáis que cuando configuramos Wireguard pusimos en los campos «Post up script» y «Post down script» unas líneas tal que así?

Configurar de esa forma el entorno gráfico hará que si entramos en el archivo /etc/wireguard/wg0.conf, veamos algo similar a esto.

Espera, espera... ahora que me fijo... ¿Esas dos líneas están usando ya iptables? ¿Resulta que ya lo estaba usando y no me había enterado?

Pues sí. Si te fijas en cada una de las líneas hay dos comandos, cada uno de ellos separados por un punto y coma. Lo que hacíamos en cada una de las líneas, primero es aceptar cualquier tipo de tráfico que nos entrara por Wireguard (nuestro cliente de VPN) y luego enmascarar ese tráfico por la tarjeta de red de la máquina linux haciendo un NAT (que es algo similar a lo que hacen los routers de nuestra casa al permitir intercambiar información entre la red local e internet).

Ufff... demasiada información así de pronto

Tranquilo Usuario Anónimo. Ya sabes que no me gusta saturar los artículos con explicaciones demasiado técnicas. Lo que considere que necesita una aclaración a mayores lo iré dejando en enlaces en cada concepto por si queréis ampliar la información. Así que en este artículo iremos bastante al grano (que no se trata de hacer en este momento un tutorial de iptables).

Pues bien. Lo primero que vamos a hacer es sacar esas dos líneas de ahí y dejarlas en dos archivos sepadados. Podemos guardarlos en cualquier sitio del disco duro que sea accesible por el usuario root, pero para darle continuidad al anterior tutorial, vamos a dejar estos archivos en la siguiente ruta (voy a suponer que ya está creada, porque la creamos en el artículo anterior. Si no es así, creadla):

/home/wireguard/

Vamos al lío. Entremos en nuestro linux como usuario root y luego creemos el primero de los archivos. Para ello usaremos estos comandos:

sudo -i
cd wireguard
nano postup.sh

Una vez abierto el editor de texto, simplemente pegamos ahí la línea que teníamos en el apartado «Post Up Script» del Wireguard-UI (o en la línea «PostUp» del archivo /etc/wireguard/wg0.conf) aunque con una pequeñísima modificación. Vamos a sustituir el «%i» por un «$1», de esta forma:

iptables -A FORWARD -i $1 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

(Recordad que dependiendo de la configuración de vuesto equipo, la interfaz de red puede cambiar de nombre y no ser «eth0». Puede que sea «wlan0» o algo como «ens18»)

Al final, el archivo debería quedar como algo similar a esto:

Lo guardamos y hacemos exactamente lo mismo para el Post Down Script. Hacemos un…

nano postdown.sh

Y dentro del archivo pondremos lo que teníamos en este script con el cambio del «%i» por «$1», de forma que nos quedaría así:

iptables -D FORWARD -i $1 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Guardamos cambios. Ahora debemos hacer esos dos archivos ejecutables y darles los permisos adecuados con estos comandos.

sudo chmod +x postup.sh
sudo chmod +x postdown.sh
sudo chmod 744 postup.sh
sudo chmod 744 postdown.sh
¿Archivos ejecutables? Pero espera... ¿lo que había en esas líneas de texto era algo que se puede poner en el terminal?

Pues sí. Fíjate que si ejecutas esa línea en solitario, el terminal se traga el comando sin rechistar.

Todo lo que estaba en ese campo del interfaz era en realidad un script que podríamos correrlo en el terminal. Por eso necesitamos hacer esos dos archivos ejecutables.

Por último nos vamos a la interfaz de Wireguard-ui y le decimos que a partir de ahora cargue esos scripts de los archivos que acabamos de crear, dándole la ruta de cada uno, pero poniendo al final un «%i». En la web nos quedaría algo tal que así.

Acordaos de pulsar el botón «Save» y el de «Apply config» en el interfaz web para que se apliquen los cambios. En el caso de que no estéis usando el interfaz web, podéis hacerlo directamente en el archivo wg0.conf dejando las dos líneas que nos interesan de esta forma.

Hecho esto es hora de probar la configuración de nuestro Wireguard. Coged un equipo que esté conectado en otra conexión distinta en la que esté vuestro servidor de VPN (por ejemplo, compartid la conexión a internet de un móvil y conectad un portátil a ese móvil) y usad una de vuestros usuarios de VPN con ese equipo. Si todo va bien debería funcionar todo exactamente igual que os ha estado funcionando hasta ahora.

Genial. Acabo de hacer un montón de cambios para que siga funcionando todo como hasta ahora. 

No te quejes tanto, Usuario Anónimo, que a partir de ahora empieza lo divertido.

4.- Configuraciones previas: creamos un ejecutable para automatizar cambios.

Como algunos estaréis suponiendo a estas alturas, todos los bloqueos y filtros de IP’s y puertos van a ir configurados en el archivo postup.sh. El problema es que después de editar este archivo hay que hacer un par de reinicios del firewall para que funcione todo correctamente. Para solucionarlo nos vamos a inventar un comando nuevo que hará dos cosas. Primero nos dejará editar el archivo postup.sh, pero nada más salir de la edición de ese archivo borrará todas las configuraciones viejas del firewall de linux y cargará las nuevas.

Pare crearlo, primero iremos a la ruta «/etc/wireguard». Ahora vamos a crear un archivo ejecutable y lo llamaremos «ips» (porque en él gestionaremos direcciones IP’s). La secuencia de comandos que debemos teclear para hacer ambas cosas es así.

cd /etc/wireguard
sudo nano ips

El contenido de ese archivo será el siguiente:

sudo nano /root/wireguard/postup.sh
sudo iptables -F
sudo service ufw restart
sudo /root/wireguard/postup.sh

Ahora guardamos cambios en el archivo con «Control» + «O», le damos permisos adecuados y lo convertimos en ejecutable. La secuencia de comandos es la siguiente:

chmod +x ips
chmod 744 ips

Por último, vamos a hacer que podamos invocar ese archivo aunque estemos en otra carpeta distinta que en la que está alojado. Para ello creamos un enlace simbólico de esta forma:

ln -s /etc/wireguard/ips /usr/bin

Desde ahora, si queremos modificar el archivo postup.sh, sólo tendremos que escribir en el terminal la palabra «ips» y se nos abrirá el editor «nano» con el archivo listo para modificar. Además, al guardar cambios con «Control»+»O» y luego salir de nano con «Control»+»X», se cargarán todas las modificaciones en el firewall correctamente.

5.- Primera modificación en el script: por defecto vamos a bloquear todo el tráfico

Lo primero que vamos a hacer en el script es aplicar una regla de bloqueo. Por defecto nos interesa que, salvo que lo indiquemos expresamente, se bloquee el tráfico hacia cualquier dirección ip o puerto no autorizado. Sólo los autorizados podrán pasar. Así que apliquemos una regla para bloquear todo el tráfico. En el siguiente punto ya veremos cómo autorizar a un cliente de VPN a pasar entre las rejas que vamos a construir ahora.

Para aplicar este bloqueo vamos a usar el comando que hemos creado en el punto anterior. Tecleamos en el terminal «sudo ips» y se nos abrirá nano con el postup script dentro. Vamos a borrar todo y cuando nos aseguremos de que no hay ni un sólo caracter en el archivo, vamos a pegar este código.

# PLANTILLA CLIENTES VPN SÓLO ORDENADOR PARA ESCRITORIO REMOTO
#iptables -I FORWARD -s 10.252.1.XXX -i wg0 -p tcp --dport 3389 -d 192.168.XXX.XXX -j ACCEPT
#iptables -I FORWARD -s 10.252.1.XXX -i wg0 -p udp --dport 53 -d 192.168.YYY.YYY -j ACCEPT
#
#PLANTILLA CLIENTES VPN ORDENADOR+ASTERISK
#iptables -I FORWARD -s 10.252.1.XXX -i wg0 -p tcp --dport 3389 -d 192.168.177.XXX -j ACCEPT
#iptables -I FORWARD -s 10.252.1.XXX -i wg0 -p udp --dport 53 -d 192.168.YYY.YYY -j ACCEPT
#iptables -I FORWARD -s 10.252.1.XXX -i wg0 -p udp --match multiport --dport 5060,10000:20000 -d 192.168.AAA.AAA -j ACCEPT
#
#PLANTILLA CLIENTES VPN CON ACCESO A ABSOLUTAMENTE TODO
#iptables -I FORWARD -s 10.252.1.XXX -i wg0 -j ACCEPT
#
#PLANTILLA CLIENTES VPN PARA MÓVIL SÓLO CON ASTERISK
#iptables -I FORWARD -s 10.252.1.XXX -i wg0 -p udp --match multiport --dport 5060,10000:20000 -d 192.168.AAA.AAA -j ACCEPT
#iptables -I FORWARD -s 10.252.1.XXX -i wg0 -p udp --dport 53 -d 192.168.YYY.YYY -j ACCEPT
#
#PLANTILLA CLIENTES VPN PARA MÓVIL CON ESCRITORIO REMOTO A CUALQUIER EQUIPO Y ACCESO AL ASTERISK
#iptables -I FORWARD -s 10.252.1.XXX -i wg0 -p tcp --dport 3389 -j ACCEPT
#iptables -I FORWARD -s 10.252.1.XXX -i wg0 -p udp --dport 53 -d 192.168.YYY.YYY -j ACCEPT
#
##
#
#Enmascaramiento. La dirección origen del paquete se cambiará por la ip local de esta máquina.
iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE
#Todo lo que no aparezca arriba explicitamente se ignora
#iptables -A FORWARD -d 192.168.XXX.XXX/24 -j DROP
¿Son impresiones mías o este código huele a que está hecho por ti?

Efectivamente. Esto que hemos pegado es una pequeña plantilla (si os fijáis, todas las líneas están comentadas menos una) y es un poco «made in mi casa». Vamos a ir paso por paso. Pero primero vamos a establecer las líneas que no van a cambiar nunca.

La primera línea que debemos revisar es la del enmascaramiento. Es la que está sin comentar, que pone esto:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Lo único que debemos revisar en esta línea es que la tarjeta de red «eth0» se llame efectivamente así (en mi caso, como tengo el sistema virtualizado, se llama ens18). Simplemente debemos poner el nombre correcto de la tarjeta.

La siguiente línea importante es la de abajo del todo. Aquí debemos poner el segmento de red local en la que están los equipos a los que queremos acceder mediante la VPN. Por ejemplo, si estamos trabajando con un segmento habitual, como es el 192.168.0.0/24, copiaremos esa línea comentada y al final del archivo dejaremos una línea a mayores tal que así:

iptables -A FORWARD -d 192.168.0.0/24 -j DROP
Oye... pero tengo un problema. Quiero implementar esto en mi empresa pero resulta que ahí tenemos varios segmentos de red y Vlanes diferentes. ¿Puedo poner todos de alguna forma?

Sin problema. Sólo debes añadir una línea por cada Vlan o segmento de red que tengas en la empresa. Por ejemplo, si trabajáis con el segmento 192.168.0.0/24 y el segmento 192.168.20.0/24, pues tendrías que poner estas dos líneas:

iptables -A FORWARD -d 192.168.0.0/24 -j DROP
iptables -A FORWARD -d 192.168.20.0/24 -j DROP

Puedes poner tantas líneas como segmentos de red tengas en la empresa. Y recuerda que esto hay que dejarlo al final del todo del archivo.

Ahora vamos a hacer un pequeño experimento. Con esto que hemos hecho guarda cambios en el archivo con «Control»+»O» y sal del editor nano con «Control»+»X». Si todo ha ido bien no habrá ningún mensaje de error al terminar la edición (Recuerda que despues de editar esta archivo con el comando «ips» se aplican los cambios de forma automática). Ahora intenta hacer lo mismo que hicimos antes: Conéctate con un cliente de VPN al servidor e intenta acceder a algo dentro de la red local.

Esto va de mal en peor. Aparentemente estoy conectado. Sin embargo no tengo internet en el equipo ni acceso a nada. 

Exacto. Como esas restricciones no tienen ninguna excepción, todo el tráfico de red que se genera dentro del VPN se ignora, así que no tienes acceso a absolutamente nada. Es lo que pretendíamos en este paso.

6.- Añadimos una excepción sencilla: Vamos a permitir cualquier tipo de tráfico a un único cliente de nuestra VPN

Vamos ahora a hacer que uno de los usuarios de VPN pueda acceder a cualquier recurso de nuestra red, y que el resto de usuarios de VPN no puedan acceder a nada. Para ello ejecutamos el comando «ips» y luego buscaremos en la plantilla (en la zona superior) la siguiente parte:

#PLANTILLA CLIENTES VPN CON ACCESO A ABSOLUTAMENTE TODO
#iptables -I FORWARD -s 10.252.1.XXX -i wg0 -j ACCEPT

Vamos a copiar este trozo de código y lo volvemos a pegar arriba de todo, pero le haremos un par de modificaciones:

  • A la primera línea le dejamos la almohadilla y le ponemos el nombre del usuario de VPN y la política que va a seguir: pondremos algo como
# Benito Camela - Tiene acceso a todo
  • En la segunda línea quitamos la almohadilla y cambiamos la dirección ip por la dirección ip que le ha otorgado Wireguard-UI a ese cliente. Por ejemplo ponemos algo como
iptables -I FORWARD -s 10.10.0.2 -i wg0 -j ACCEPT

Ahora guardamos cambios y volvemos a intentar conectar ese usuario a la VPN. ¿Qué es lo que pasa, usuario anónimo?

Bueno. Ahora tengo de nuevo acceso a absolutamente todo. Felicidades. Me estoy tragando un tutorial interminable para volver a estar igual que antes. 

No exactamente. Ahora ese usuario tiene acceso a todo, pero el resto de usuarios de VPN si los hubiera no tendrían acceso a absolutamente nada. Recuerda que este archivo nos da un control total de dónde podemos acceder y dónde no.

7.- Empecemos a liar las cosas: Vamos a dar a un usuario acceso a un ordenador para que únicamente pueda acceder a él por el escritorio remoto de Microsft.

Empecemos a liar las cosas y veamos casos ya más prácticos. Supongamos que tenemos una empresa con un montón de equipos. Supongamos también que tenemos a un empleado con Covid, Viruela del Mono y Tuberculosis y como vemos que aún puede respirar, vamos a ser generosos y vamos a permitirle que pueda trabajar desde casa conectándose por escritorio remoto a su puesto de trabajo.

¿Cómo decías que se llamaba tu empresa? Es para no enviarte nunca un currículum. 

Es sólo un supuesto, Usuario Anónimo. Seguramente aún así podría ir a trabajar presencialmente a la oficina (es que la gente está de un quejica…), pero vayamos a lo que nos interesa.

Muchas empresas, durante la pandemia de Covid del 2020 han dejado que los empleados usaran sus propios ordenadores personales para acceder a la información de la empresa en lugar de darles portátiles de empresa. Si se le configura una VPN y un cliente de escritorio remoto al empleado en su ordenador personal, podrá trabajar sin problema con ese equipo, pero la empresa debe darse cuenta de que si el ordenador de ese empleado está infectado con algún tipo de virus, ese virus se puede extender por los servidores y ordenadores de la empresa si esa conexión de VPN no está securizada correctamente.

Lo que haremos será permitirle a ese empleado dos cosas:

  1. Va a poder usar los servidores de DNS de la empresa. Eso quiere decir que si la empresa tiene por ejemplo un filtro de рοгոo, no podrá ver рοгոo en su ordenador personal mientras está trabajando, pero tendrá acceso a internet desde su propio equipo
¿QUÉÉÉÉ? Ahora sí que me niego a trabajar contigo. Eso debería estar prohibido. Eso sí es ser muy mala gente.

2. Va a poder acceder únicamente a la ip del ordenador de su puesto de trabajo, pero cómo de ese ordenador sólo necesita acceder al servicio de escritorio remoto, sólo le vamos a dejar acceder a los puertos que hacen que funcione el escritorio remoto (que es el puerto tcp 3389). De esta forma si el equipo personal de este trabajador tiene un virus que quiera encriptar el contenido de carpetas de red, el virus nunca podrá llegar a ver si el equipo del trabajo tiene alguna carpeta compartida.

Para habilitar esto, al igual que en el caso anterior, creamos previamente un usuario de VPN con Wireguard-UI y luego tecleamos el comando «ips» en nuestro terminal, que nos abrirá la plantilla que hemos hecho. Nos interesa coger este trozo de código y pegarlo de nuevo en la zona superior.

# PLANTILLA CLIENTES VPN SÓLO ORDENADOR PARA ESCRITORIO REMOTO
#iptables -I FORWARD -s 10.252.1.XXX -i wg0 -p tcp --dport 3389 -d 192.168.XXX.XXX -j ACCEPT
#iptables -I FORWARD -s 10.252.1.XXX -i wg0 -p udp --dport 53 -d 192.168.YYY.YYY -j ACCEPT

Debemos modificarlo de la siguiente forma:

Línea 1: le dejamos la almohadilla, pero borramos el resto de la línea y ponemos en su lugar el nombre de la persona que va a disfrutar de ese VPN y el tipo de acceso que le vamos a dar.

Línea 2: Le quitamos la almohadilla y en el primer campo dónde poner la dirección ip, ponemos la dirección ip que le ha asignado Wireguard a ese cliente (Voy a suponer que es 10.10.0.3). En el segundo campo, ponemos la dirección IP del ordenador de su empresa al que debe acceder (por ejemplo, el 192.168.0.58).

Línea 3: Le quitamos la almohadilla y en el primer campo, dónde pone una dirección IP, ponemos la que le ha asignado Wireguard (De nuevo la 10.10.0.3). En el segundo campo, ponemos la IP del servidor de DNS de la empresa (Supondré que es la 192.168.0.3)

De esta forma, quedaría todo de forma similar a ésto.

# ROSA MELANO - ACCESO DESDE SU PORTÁTIL AL ESCRITORIO REMOTO
#iptables -I FORWARD -s 10.10.0.3 -i wg0 -p tcp --dport 3389 -d 192.168.0.58 -j ACCEPT
#iptables -I FORWARD -s 10.10.0.3 -i wg0 -p udp --dport 53 -d 192.168.0.3 -j ACCEPT

Guardamos cambios en el archivo con «Control»+»O» y salimos de la edición con «Control» + «X». Recordad que mientras no salgáis de la edición, no se cargarán las reglas nuevas de IPTables, así que salid del programa. Con esto, la señorita Rosa únicamente podrá hacer un escritorio remoto al ordenador de su puesto de trabajo, y también podrá navegar por internet en las páginas que le permita la empresa.

Como veis, el sistema es sencillo. Sólo hay que ir poniendo líneas que indican que a una determinada ip del segmento de las VPN le dejas acceder a una ip del segmento de los equipos. Vamos a ver un último ejemplo para dejar claros los conceptos.

8.- Vamos a permitir que un cliente de VPN pueda navegar por internet, acceder al equipo de su puesto de trabajo y usar un programa de voz-ip a través de nuestra centralita Asterisk.

Es un caso muy similar al punto anterior. Al igual que antes, primero creamos el usuario de VPN. Luego tecleamos el comando «ips» en el terminal para coger estas líneas de la plantilla y pegarlas en la zona superior.

#PLANTILLA CLIENTES VPN ORDENADOR+ASTERISK
#iptables -I FORWARD -s 10.252.1.XXX -i wg0 -p tcp --dport 3389 -d 192.168.177.XXX -j ACCEPT
#iptables -I FORWARD -s 10.252.1.XXX -i wg0 -p udp --dport 53 -d 192.168.YYY.YYY -j ACCEPT
#iptables -I FORWARD -s 10.252.1.XXX -i wg0 -p udp --match multiport --dport 5060,10000:20000 -d 192.168.AAA.AAA -j ACCEPT

Las tres primeras líneas las hemos visto en el apartado anterior, así que las cubrimos de la misma forma. La última línea es la que le va a habilitar a este usuario a usar el servidor Asterisk de la empresa.

Oye... ¿Qué es eso de servidor Asterisk? ¿El cliente de ese servidor no debería ser Obelix?

Asterisk es un software libre que te permite crear una centralita telefónica digital, y es muy usado en muchas empresas españolas. Le ha permitido a muchas empresas reducir considerablemente el gasto en telefonía y… bueno… yo es que no usaría otra cosa a la hora de gestionar las telecomunicaciones de una empresa. Hay un montón de implementadores de este tipo de soluciones en España, aunque personalmente he tenido muy buenas experiencias con Norvoz en este aspecto.

A lo que vamos… el empleado puede instalar algún programa de voz ip en su ordenador para usarlo como si fuera el teléfono del trabajo. Programas de este tipo hay un montón, como Bria, Zoiper o Draytek Softphone. Vamos a necesitar decirle a nuestro sistema que desde el ordenador pesonal del empleado va a poder acceder al servidor Asterisk para que el software pueda conectarse.

Pero hay un problema, y es que aunque sepamos la ip de nuestro servidor Asterisk, la conexión con este tipo de servidor necesita dos puertos a la vez: uno de ellos es el 5060, pero el otro es un puerto aleatorio entre el 10000 y el 20000 que se crea en cada nueva conversación. En todo caso no es nada que iptables no pueda manejar ya que puede manejar múltiples puertos y rangos sin problema.

Así que vamos a suponer que Wireguard le ha asignado a nuestro empleado llamado Elver la ip 10.10.0.4, que el ordenador al que se debe conectar en su oficina tiene la ip 192.168.0.69, que el servidor de dns de la empresa es el 192.168.0.3 y que el servidor de Asterisk corre en la ip 192.168.0.5. Con esos datos, deberíamos dejar su configuración tal que así:

# ELVER GALARGA - CONECTA DESDE SU PORTÁTIL Al ESCRITORIO REMOTO Y ASTERISK
iptables -I FORWARD -s 10.0.1.4 -i wg0 -p tcp --dport 3389 -d 192.168.0.69 -j ACCEPT
iptables -I FORWARD -s 10.0.1.4 -i wg0 -p udp --dport 53 -d 192.168.0.3 -j ACCEPT
iptables -I FORWARD -s 10.0.1.4 -i wg0 -p udp --match multiport --dport 5060,10000:20000 -d 192.168.0.5 -j ACCEPT

Como siempre, guardamos cambios con «Control»+»O» y salimos con «Control»+»X». Una vez realizado esto, el usuario ya quedará habilitado y tendrá acceso tanto al escritorio remoto, como a la navegación a través de internet y al Asterisk de la empresa.

9.- Conclusiones

Con cualquier otro servicio que necesitemos habilitar podemos hacer lo mismo. Hacemos una plantilla para facilitarnos el trabajo y cuando creemos un cliente de VPN, primero creamos el cliente en el Wireguard y acto seguido con el comando IPS asignamos los equipos a los que puede acceder. Parece más lío de lo que realmente es, porque la verdad es que si sabes las direcciones IP y los puertos a los que debe acceder el cliente, con este método en un minuto le creas un usuario de VPN con el tráfico completamente filtrado.

Y vosotros ¿Habéis implementado algún sisitema similar en algún sitio? ¿Os ha dado problemas el método que os describo? Estaré atento a vuestros comentarios.

Share

1 comentario

  1. any

    Si !, una joya!

    1000 gracias, no sabes el tiempo que buscaba algo así.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

© 2024 Flopy.es

Tema por Anders NorenArriba ↑

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies