Rol de Ansible: nftables

Este rol de Ansible te permite instalar nftables
y gestionar su configuración.
Para más información sobre nftables
, por favor consulta la página oficial del proyecto.
Variables del rol
Las variables y propiedades en negrita son obligatorias. Las demás son opcionales.
Nombre de variable |
Descripción |
Valor por defecto |
nftables_flush_ruleset |
Si debemos eliminar el conjunto de reglas actual o no. |
sí |
nftables_config_file |
Ruta al archivo de configuración. |
/etc/nftables.conf |
nftables_tables |
Una lista de tablas. |
[] |
propiedades de tabla
Nombre de propiedad |
Descripción |
Valor por defecto |
name |
Nombre de la tabla. |
|
family |
Familia de direcciones de la tabla. Si se especifica, debe ser ip , ip6 , inet , arp , bridge o netdev . |
ip |
sets |
Una lista de conjuntos. |
|
maps |
Una lista de mapas. |
|
verdict_maps |
Una lista de mapas de veredicto. |
|
chains |
Una lista de cadenas. |
|
Documentación
propiedades de conjunto
Nombre de propiedad |
Descripción |
name |
Nombre del conjunto. |
type |
Tipo de los elementos contenidos en el conjunto. Debe ser ipv4_addr , ipv6_addr , ether_addr , inet_service , inet_proto , icmp_type , icmpv6_type o mark . |
size |
Número de elementos que el conjunto puede contener. |
policy |
La política de selección del conjunto. Si se especifica, debe ser performance o memory . |
timeout |
Cuánto tiempo permanecen los elementos en el conjunto. |
flags |
Una lista de flags. Si se especifica, debe contener al menos uno de los siguientes: constant , interval , timeout . |
gc_interval |
Intervalo de recolección de basura. |
elements |
Una lista de elementos contenidos en el conjunto. Los elementos deben ajustarse al tipo del conjunto. |
Documentación
propiedades de mapa
Nombre de propiedad |
Descripción |
name |
Nombre del mapa. |
keys_type |
Tipo de las claves. Debe ser ipv4_addr , ipv6_addr , ether_addr , inet_service , inet_proto , icmp_type , icmpv6_type o mark . |
values_type |
Tipo de los valores. Debe ser ipv4_addr , ipv6_addr , ether_addr , inet_service , inet_proto , mark , counter o quota . |
elements |
Una lista de elementos contenidos en el mapa. Los elementos deben ajustarse al keys_type y values_type del mapa. |
Documentación
propiedades de elementos de mapa
Nombre de propiedad |
Descripción |
key |
Valor clave. |
value |
Valor asociado a la clave. |
propiedades de mapa de veredicto
Un verdict_map
es solo un caso especial de map
donde el values_type
siempre es verdict
. Por lo tanto, no hay propiedad values_type
. Además, los elementos contenidos en un verdict_map
tienen una propiedad verdict
en lugar de la propiedad value
.
Nombre de propiedad |
Descripción |
name |
Nombre del mapa. |
keys_type |
Tipo de las claves. Debe ser ipv4_addr , ipv6_addr , ether_addr , inet_service , inet_proto , icmp_type , icmpv6_type o mark . |
elements |
Una lista de elementos contenidos en el mapa de veredicto. |
propiedades de elementos de mapa de veredicto
Nombre de propiedad |
Descripción |
key |
Valor clave. |
verdict |
Veredicto asociado a la clave. |
propiedades de cadena
Nombre de propiedad |
Descripción |
name |
Nombre de la cadena. |
base |
Regla base para la cadena. |
rules |
Lista de reglas contenidas en la cadena. |
Documentación
propiedades base
Nombre de propiedad |
Descripción |
type |
El tipo de la cadena. Debe ser filter , nat o route . |
hook |
Gancho donde se adjunta la cadena. Los valores disponibles dependen del type . |
priority |
Número entero que determina el orden de las cadenas adjuntas al mismo hook . |
policy |
Política predeterminada para la cadena. Si se especifica, debe ser accept o drop . |
Documentación
propiedades de regla
Documentación
Nombre de propiedad |
Descripción |
position |
Número entero que determina el orden de las reglas en la cadena. |
statement |
Declaración de la regla. |
comment |
Un comentario que describe la regla. |
Ejemplo
Aquí hay un pequeño ejemplo de cómo debería verse tu archivo.
IMPORTANTE: ¡NO uses esto como tu firewall!
---
nftables_flush_ruleset: sí
nftables_config_path: /etc/nftables.rules
nftables_tables:
- name: firewall
family: inet
sets:
- name: "set1"
type:
size: 10
policy: "performance"
timeout: "1d"
flags:
- "timeout"
- "interval"
gc_interval: "12h"
elements:
- 192.0.2.1
- 192.0.2.2
maps:
- name: "map1"
keys_type: "inet_service"
values_type: "ipv4_addr"
elements:
- key: ssh
value: "192.0.2.10"
- name: "map2"
keys_type: "inet_service"
values_type: "ipv4_addr"
elements:
- key: ftp
value: "192.0.2.25"
verdict_maps:
- name: "vmap1"
keys_type: "inet_service"
elements:
- key: "192.0.2.10"
value: "accept"
chains:
- name: "Mi filtro de entrada"
base:
type: "filter"
hook: "input"
priority: 0
policy: "drop"
rules:
- position: 2
statement: "ct state invalid log prefix 'Invalid_IN: ' drop"
comment: "Registrar y eliminar paquetes inválidos."
- position: 1
statement: "iif lo accept"
- position: 3
statement: "ct state {established,related} accept"
- name: "Mi filtro de salida"
base:
type: "filter"
hook: "output"
priority: -10
policy: "accept"
rules:
- position: 1
statement: "ip daddr 192.0.2.100 counter"
...
Pruebas
Las pruebas implican los siguientes pasos:
- Comprobar la sintaxis del rol.
- Hacer una primera ejecución.
- Hacer una segunda ejecución y comprobar la idempotencia.
En los siguientes sistemas operativos:
- Debian 9
- CentOS 7
- Ubuntu 18.04
Contribuyendo
Las revisiones de código, parches, comentarios, informes de errores y solicitudes de características son bienvenidos. Por favor, lee la Guía de Contribución para más detalles.