Una VPN que conecta pero no llega a nada suele describirse como un problema de cortafuegos, y la solución a la que la gente recurre es poner la interfaz del túnel en una zona de confianza. Eso funciona en el sentido de que el tráfico empieza a fluir, pero también admite mucho más que el servicio previsto. Las dos políticas implicadas son distintas: una admite el transporte exterior hacia un socket que escucha, y la otra autoriza al tráfico descifrado a llegar a un recurso concreto. Tratarlas como un solo ajuste es lo que convierte un permiso estrecho en uno amplio. Ambas se deciden en lugares diferentes, y por eso el error es tan fácil de cometer.

Dos políticas, un túnel

La política exterior responde a una pregunta sencilla: ¿puede un paquete de este origen llegar al UDP 1194 de este host? La política interior responde a otra: ¿puede el cliente autenticado detrás de ese túnel llegar a este destino, con este protocolo, en este puerto? La primera trata de un socket, la segunda de una ruta, y firewalld las modela con objetos distintos porque se deciden en puntos distintos. Una es una propiedad de un socket de este host, la otra de una ruta a través de él.

La consecuencia práctica es que un túnel que funciona no dice nada sobre la segunda política, y una segunda política correcta no hace innecesaria la primera.

Admita el listener exterior real

Empiece inspeccionando lo que ya está asignado en lugar de suponerlo. Lea las zonas activas, enumere la zona que realmente transporta la entrada y compruebe la definición del servicio instalado, porque el nombre de un servicio describe un conjunto de puertos y no dice nada sobre si el listener de este servidor coincide con él.

firewall-cmd --get-active-zones
firewall-cmd --zone=public --list-all
firewall-cmd --info-service=openvpn

Si el listener es realmente UDP 1194 en esa zona, abra ese puerto y transporte específicamente, y después haga persistente la misma regla específica una vez que la haya probado. Compruebe también las asignaciones por origen, porque una zona ligada a un rango de orígenes puede capturar el tráfico antes de que la zona de la interfaz lo vea.

Autorice el destino descifrado por separado

Una conexión a un servicio que se ejecuta en el propio servidor VPN es política de entrada local. Una conexión reenviada a otro host de la LAN necesita política de reenvío, el reenvío habilitado en el núcleo y una ruta de respuesta — tres requisitos separados que la gente suele colapsar en uno. Los objetos de política modernos de firewalld describen el tráfico dirigido entre una zona de entrada y una de salida, y ese es el lugar correcto para expresar qué orígenes VPN pueden llegar a qué servicios privados.

Defina explícitamente los orígenes permitidos y deje que todo lo demás caiga en una denegación. Un permiso para el servicio exterior no es esa política, por mucho que lo parezca el diseño de las zonas.

Por qué confiar en la interfaz es el atajo equivocado

Poner la interfaz del túnel en una zona cuyo destino lo acepta todo admite todo el tráfico descifrado hacia cada servicio que el host expone, incluidos los que no ha revisado. Reorientar la zona de confianza para que sea restrictiva en una máquina en producción es peor, porque otras interfaces y rangos de origen pueden depender ya de su significado y cambiarán de comportamiento cuando la edite. Si necesita una política estrecha, cree una; no reutilice una zona compartida.

Mantenga también estable la asignación de zona del túnel a través del componente que posea esa configuración. Perder la asignación al reiniciar produce un fallo que parece un problema de regla de cortafuegos y en realidad es un problema de persistencia.

Verifique tres cosas, incluida una denegación

Pruebe la conexión exterior desde fuera, pruebe un servicio interior autorizado desde un cliente conectado y pruebe un servicio que debería seguir siendo inalcanzable. La tercera prueba es la que distingue una política de un efecto secundario, y es la que la gente omite porque todo parece funcionar. Si el servicio denegado responde, ha admitido una zona en lugar de un servicio.

Anote la zona, el puerto, el transporte y el objeto de política en las notas del servidor. De lo contrario, el próximo cambio en este host empezará desde la misma suposición.

Artículos relacionados