vbotka.freebsd_pf

freebsd_pf

calidad Estado de Construcción Etiqueta de GitHub

Rol de Ansible. FreeBSD. Configura el firewall PF.

No dudes en compartir tus comentarios e informar problemas.

Las contribuciones son bienvenidas.

Advertencia:

Como manipula el firewall, hay riesgo de aislamiento. Es necesario leer el manual

Cuando experimentes con pf en un host remoto, abre una sesión y, como root, ejecuta el siguiente comando antes de habilitar pf

shell> sleep 120; pfctl -d

Esto desactivará pf después de 2 minutos y te permitirá abrir una nueva sesión a este host remoto en caso de que algo salga mal.

Requisitos y dependencias

Colecciones

  • community.general

Dependencias opcionales

Variables del rol

Por defecto, el firewall está desactivado

pf_enable: False

Por defecto, sshguard, blacklistd, fail2ban, y relayd están desactivados

pf_blacklistd_enable: False
pf_fail2ban_enable: False
pf_relayd_enable: False
pf_sshguard_enable: False

Por defecto, los paquetes bloqueados no se registran

pf_log_all_blocked: False

Revisa los valores predeterminados y ejemplos en vars.

Flujo de trabajo

  1. Cambia la shell a /bin/sh si es necesario
shell> ansible srv.example.com -e 'ansible_shell_type=csh ansible_shell_executable=/bin/csh' -a 'sudo pw usermod freebsd -s /bin/sh'
  1. Instala el rol y colecciones
shell> ansible-galaxy role install vbotka.freebsd_pf

Instala la colección si es necesario

shell> ansible-galaxy collection install community.general
  1. Crea el firewall

Hay un par de plantillas *-pf.conf.j2 disponibles. Elige una plantilla que se ajuste a tu propósito (enrutador, servidor, balanceador, ...) y revisa los ejemplos de las variables .yml.sample en vars. La plantilla default-pf.conf.j2 y las variables pfconf_example_default.yml.sample han sido probadas. Otras plantillas y muestras necesitarán más atención y pruebas.

Nota: Puedes crear listas anidadas (tablas, opciones, normalización, enrutamiento, traducción, filtrado, ...) para la plantilla default-pf.conf.j2. Las listas serán aplanadas.

  1. Crea el playbook
shell> cat freebsd-pf.yml
- hosts: srv.example.com
  roles:
    - vbotka.freebsd_pf
  1. Revisa los handlers para ver cómo se implementan el inicio/reinicio/recarga de pf.

  2. Instala los paquetes

shell> ansible-playbook -t pf_packages -e pf_install=true freebsd-pf.yml

Luego, desactiva la instalación para acelerar la ejecución del playbook.

  1. Configura el firewall

Iniciar y reiniciar el firewall interrumpe las conexiones SSH. Consulta los handlers para más detalles. Como consecuencia, tanto los handlers de inicio como los de recarga no funcionarán correctamente y la conexión SSH quedará sin respuesta. Por lo tanto, configuremos primero las reglas

shell> ansible-playbook -e pf_enable=false freebsd-pf.yml

Antes de habilitar el firewall, abre una sesión SSH al host remoto y ejecuta los siguientes comandos

shell> sleep 120; pfctl -d

Si te bloqueas fuera del host remoto, los comandos anteriores desactivarán el firewall en 2 minutos. Puede que quieras ejecutar estos comandos siempre que experimentes con el firewall. Ahora, habilita el firewall

shell> ansible-playbook -e pf_enable=true freebsd-pf.yml

Actualiza el firewall

Abre una conexión SSH al host por si algo sale mal. Actualiza y valida la configuración. No recargues las reglas

shell> ansible-playbook -e pf_conf_only=true -e pf_conf_validate=true freebsd-pf.yml

Recarga las reglas después de que la configuración haya sido actualizada y validada

shell> ansible srv.example.com -m service -a "name=pf state=reloaded"

Solución de problemas

pf.conf

Como primer paso, habilita la copia de seguridad de los archivos de configuración

pf_backup_conf: true

En caso de que la configuración /etc/pf.conf no pase la validación, la ejecución falla

TASK [vbotka.freebsd_pf : pfconf: Configure rules] **********************************************
fatal: [srv.example.com]: FAILED! => changed=false
  checksum: 765302b1f0de9f200b2cab396e0271fc04e6adcc
  exit_status: 1
  msg: failed to validate
  stderr: |-
    /home/freebsd/.ansible/tmp/ansible-tmp-1554558267.39-44232067735996/source:119: syntax error

El mensaje anterior muestra la ubicación del error de sintaxis (source:119) en el archivo temporal creado por el módulo de plantilla. Es difícil encontrar el error si este archivo temporal no está disponible para revisión.

Habilita pf_conf_only=true y desactiva la validación pf_conf_validate=false para encontrar el problema

shell> ansible-playbook -e pf_conf_only=true -e pf_conf_validate=false freebsd-pf.yml

Ubica el error de sintaxis en el archivo de configuración /etc/pf.conf

shell> pfctl -n -f /etc/pf.conf

Actualiza, valida y recarga las reglas después de corregir la configuración

shell> ansible srv.example.com -m service -a "name=pf state=reloaded"

relayd.conf

De la misma manera, es posible solucionar problemas en /usr/local/etc/relayd.conf

shell> ansible-playbook -t pf_relayd -e pf_debug=true -e pf_relayd_conf_validate=false -e pf_relayd_conf_only=true freebsd-pf.yml

Ubica el error de sintaxis en el archivo de configuración /usr/local/etc/relayd.conf

shell> relayd -n -f /usr/local/etc/relayd.conf

Actualiza, valida y recarga las reglas después de corregir la configuración

shell> ansible srv.example.com -m service -a "name=relayd state=reloaded"

Seguridad

Para evitar que una configuración no validada sea recargada por el handler, el archivo de configuración /etc/pf.conf no será creado y la ejecución se terminará si ambos pf_conf_only=false y pf_conf_validate=false

shell> ansible-playbook -e pf_conf_only=false -e pf_conf_validate=false freebsd-pf.yml
fatal: [srv.example.com]: FAILED! => changed=false
  msg: Validation can be turned off if pf_conf_only=True. End of play.

El rol falla de la misma manera en caso de -e pf_relayd_conf_only=false -e pf_relayd_conf_validate=false.

Ansible lint

Usa el archivo de configuración .ansible-lint.local al ejecutar ansible-lint. Algunas reglas pueden estar desactivadas y algunas advertencias pueden ser ignoradas. Consulta las notas en el archivo de configuración.

shell> ansible-lint -c .ansible-lint.local

Referencias

Licencia

licencia

Información del autor

Vladimir Botka

Instalar
ansible-galaxy install vbotka.freebsd_pf
Licencia
bsd-2-clause
Descargas
243
Propietario