Gestión de firewall Proxmox » History » Version 1

Santiago Martinez, 10/15/2019 08:13 PM

1 1 Santiago Martinez
h1. Gestión de firewall Proxmox
2 1 Santiago Martinez
3 1 Santiago Martinez
La gestión del firewall Proxmox de la nueva plataforma se encuentra automatizada a través del role "firewall_proxmox":https://github.com/UdelaRInterior/ansible-role-firewall-proxmox para máquinas virtuales KVM y contenedores LXC (en adelante hosts).
4 1 Santiago Martinez
5 1 Santiago Martinez
Para el cluster Proxmox la gestión del firewall también se encuentra automatizada, pero a través de un "playbook independiente":https://git.interior.edu.uy/adminsys/config/blob/master/configurar_firewall_cluster_proxmox.yml, con el objetivo de evitar posibles indisponibilidades de servicios en producción a causa de ejecuciónes con valores desafortunados.
6 1 Santiago Martinez
7 1 Santiago Martinez
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":https://pve.proxmox.com/wiki/Firewall.
8 1 Santiago Martinez
9 1 Santiago Martinez
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/":https://git.interior.edu.uy/adminsys/config/tree/master/files/firewall_proxmox/etc/pve/firewall
10 1 Santiago Martinez
11 1 Santiago Martinez
h2. Hosts
12 1 Santiago Martinez
13 1 Santiago Martinez
Para los hosts, el archivo definido "aquí":https://git.interior.edu.uy/adminsys/config/tree/master/files/firewall_proxmox/etc/pve/firewall será copiado a su nodo, "siempre y cuando":https://git.interior.edu.uy/adminsys/config/blob/a97dcba79f84c89a77c2ba11f2b803efcae13a69/config_host.yml#L13 se cuente con la carácterística de firewall "habilitada en alguna de sus interfaces de red":https://git.interior.edu.uy/adminsys/config/blob/a97dcba79f84c89a77c2ba11f2b803efcae13a69/host_vars/guayabo.interior.edu.uy/vars/10_lxc_container.yml#L28. La nomenclatura a respetar para que un archivos sea asociado a su host correspondiente es:
14 1 Santiago Martinez
<pre>
15 1 Santiago Martinez
<nombre-canónico-del-host-en-minúsculas>.fw
16 1 Santiago Martinez
</pre>
17 1 Santiago Martinez
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":https://git.interior.edu.uy/adminsys/config/blob/master/files/firewall_proxmox/etc/pve/firewall/default.fw que establece un grupo de reglas genéricas: ping, SSH y HTTP/HTTPS habilitado.
18 1 Santiago Martinez
19 1 Santiago Martinez
Una vez definido el archivo de configuración del firewall, corremos el playbook _site.yml_ con el tag correspondiente:
20 1 Santiago Martinez
<pre>
21 1 Santiago Martinez
ansible-playbook --limit <nombre-host>.interior.edu.uy --tags firewall site.yml
22 1 Santiago Martinez
</pre>
23 1 Santiago Martinez
24 1 Santiago Martinez
h2. Cluster
25 1 Santiago Martinez
26 1 Santiago Martinez
Al igual que para los hosts, toda la configuración de firewall del cluster se concentra en un archivo: "cluster.fw":https://git.interior.edu.uy/adminsys/config/blob/master/files/firewall_proxmox/etc/pve/firewall/cluster.fw
27 1 Santiago Martinez
28 1 Santiago Martinez
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":https://git.interior.edu.uy/adminsys/config/blob/master/configurar_firewall_cluster_proxmox.yml. 
29 1 Santiago Martinez
30 1 Santiago Martinez
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":https://pve.proxmox.com/wiki/Firewall). 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.
31 1 Santiago Martinez
32 1 Santiago Martinez
*Por ésta, entre otras tantas razones, es indispensable estar actualizado a los últimos cambios de la rama master (_git pull_) antes de correr playbooks*
33 1 Santiago Martinez
34 1 Santiago Martinez
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:
35 1 Santiago Martinez
> ansible-playbook --limit nombre-host.interior.edu.uy --tags firewall site.yml
36 1 Santiago Martinez
37 1 Santiago Martinez
solo estamos aplicando modificaciones sobre el host indicado en el parámetro _--limit_. 
38 1 Santiago Martinez
39 1 Santiago Martinez
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):
40 1 Santiago Martinez
<pre>
41 1 Santiago Martinez
ansible-playbook --limit guri.interior.edu.uy configurar_firewall_cluster_proxmox.yml
42 1 Santiago Martinez
</pre>
43 1 Santiago Martinez
44 1 Santiago Martinez
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.