Frzk.nftables

Rol de Ansible: nftables

Estado de la Construcción

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.
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: 
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:

  1. Comprobar la sintaxis del rol.
  2. Hacer una primera ejecución.
  3. 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.

Acerca del proyecto

Install and manage nftables.

Instalar
ansible-galaxy install Frzk.nftables
Licencia
apache-2.0
Descargas
136
Propietario