Gestión de firewall Proxmox

La gestión del firewall Proxmox de la nueva plataforma se encuentra automatizada a través del role firewall_proxmox para máquinas virtuales KVM y contenedores LXC (en adelante hosts).

Para el cluster Proxmox la gestión del firewall también se encuentra automatizada, pero a través de un playbook independiente, con el objetivo de evitar posibles indisponibilidades de servicios en producción a causa de ejecuciónes con valores desafortunados.

El firewall para cluster y hosts es gestionado a través de archivos de texto que son copiados tal cual a los nodos Proxmox. Construidos en base a la sintaxis y lineamientos definidos en su documentación.

En el proyecto config, todos los archivos de configuración de cluster y hosts se ubican en la ruta files/firewall_proxmox/etc/pve/firewall/

Hosts

Para los hosts, el archivo definido aquí será copiado a su nodo, siempre y cuando se cuente con la carácterística de firewall habilitada en alguna de sus interfaces de red. La nomenclatura a respetar para que un archivos sea asociado a su host correspondiente es:

<nombre-canónico-del-host-en-minúsculas>.fw

En caso de que un host tenga el firewall habilitado en sus interfaces pero no se defina un archivo .fw, será copiado el archivo default.fw que establece un grupo de reglas genéricas: ping, SSH y HTTP/HTTPS habilitado.

Una vez definido el archivo de configuración del firewall, corremos el playbook site.yml con el tag correspondiente:

ansible-playbook --limit <nombre-host>.interior.edu.uy --tags firewall site.yml

Cluster

Al igual que para los hosts, toda la configuración de firewall del cluster se concentra en un archivo: cluster.fw

Sin embargo, la diferencia radica en que las tareas de automatización de la configuración del cluster, fueron separadas al playbook configurar_firewall_cluster_proxmox.yml.

Esto se debe a que en el archivo de cluster se manejan directivas que permiten la normalización de la gestión, afectando a más de un host, como los IP Aliases y Security Groups (ver documentación Proxmox). Esta característica es muy beneficiosa, pero debe ser utilizada con cuidado. Ya que por ejemplo, al ejecutar versiones desactualizadas de config, podríamos estar aplicando una regresión en reglas de firewall que dejen indisponibles servicios ya declarados en producción.

Por ésta, entre otras tantas razones, es indispensable estar actualizado a los últimos cambios de la rama master (git pull) antes de correr playbooks

En principio, la configuración del cluster es muy poco editada, mientras que trabajamos intensivamente sobre los hosts. La separación a otro playbook permite entonces, asegurar que al ejecutar site.yml como se indicaba en el paso anterior:

ansible-playbook --limit nombre-host.interior.edu.uy --tags firewall site.yml

solo estamos aplicando modificaciones sobre el host indicado en el parámetro --limit.

Por el contrario, si deseamos modificar la configuración del cluster, es decir, aplicar nuestros cambios al archivo cluster.fw, se deberá ejecutar sobre cualquier nodo del cluster (la configuración es reflejada en los demás nodos automáticamente por Proxmox):

ansible-playbook --limit guri.interior.edu.uy configurar_firewall_cluster_proxmox.yml

Una vez con los cambios aplicados y comprobado su correcto funcionamiento, es indispensable que dichos cambios sean subidos a la rama master. De lo contario, alguien que simultánea o posteriormente trabaje sobre el cluster no tendrá tus modificaciones, y eventualmente correrá los playbooks sin ellas.