Frzk.nftables

Rola Ansible: nftables

Status budowy

Ta rola Ansible pozwala na zainstalowanie nftables i zarządzanie jego konfiguracją.

Aby uzyskać więcej informacji o nftables, proszę sprawdzić oficjalną stronę projektu.

Zmienne roli

Zamienne i właściwości pogrubione są obowiązkowe. Inne są opcjonalne.

Nazwa zmiennej Opis Wartość domyślna
nftables_flush_ruleset Czy należy usunąć bieżący zestaw reguł? tak
nftables_config_file Ścieżka do pliku konfiguracyjnego. /etc/nftables.conf
nftables_tables Lista tabel. []

właściwości tabeli

Nazwa właściwości Opis Wartość domyślna
name Nazwa tabeli.
family Rodzina adresów tabeli. Jeśli jest określona, musi to być ip, ip6, inet, arp, bridge lub netdev. ip
sets Lista zbiorów.
maps Lista map.
verdict_maps Lista map decyzyjnych.
chains Lista łańcuchów.

Dokumentacja

właściwości zbiorów

Nazwa właściwości Opis
name Nazwa zbioru.
type Typ elementów zawartych w zbiorze. Musi to być ipv4_addr, ipv6_addr, ether_addr, inet_service, inet_proto, icmp_type, icmpv6_type lub mark.
size Liczba elementów, które może zawierać zbiór.
policy Polityka wyboru zbioru. Jeśli jest określona, musi to być performance lub memory.
timeout Jak długo elementy pozostają w zbiorze.
flags Lista flag. Jeśli jest określona, musi zawierać przynajmniej jedną z następujących: constant, interval, timeout.
gc_interval Interwał zbierania śmieci.
elements Lista elementów zawartych w zbiorze. Elementy muszą odpowiadać typowi zbioru.

Dokumentacja

właściwości map

Nazwa właściwości Opis
name Nazwa mapy.
keys_type Typ kluczy. Musi to być ipv4_addr, ipv6_addr, ether_addr, inet_service, inet_proto, icmp_type, icmpv6_type lub mark.
values_type Typ wartości. Musi to być ipv4_addr, ipv6_addr, ether_addr, inet_service, inet_proto, mark, counter lub quota.
elements Lista elementów zawartych w mapie. Elementy muszą odpowiadać typowi kluczy i typowi wartości mapy.

Dokumentacja

właściwości elementów mapy

Nazwa właściwości Opis
key Wartość klucza.
value Wartość przypisana do klucza.

właściwości map decyzyjnej

verdict_map to po prostu specjalny przypadek map, gdzie values_type zawsze wynosi verdict. W związku z tym, nie ma właściwości values_type. Elementy zawarte w verdict_map mają właściwość verdict zamiast właściwości value.

Nazwa właściwości Opis
name Nazwa mapy.
keys_type Typ kluczy. Musi to być ipv4_addr, ipv6_addr, ether_addr, inet_service, inet_proto, icmp_type, icmpv6_type lub mark.
elements Lista elementów zawartych w mapie decyzyjnej.

właściwości elementów mapy decyzyjnej

Nazwa właściwości Opis
key Wartość klucza.
verdict Werdykt przypisany do klucza.

właściwości łańcucha

Nazwa właściwości Opis
name Nazwa łańcucha.
base Podstawowa reguła dla łańcucha.
rules Lista reguł zawartych w łańcuchu.

Dokumentacja

podstawowe właściwości

Nazwa właściwości Opis
type Typ łańcucha. Musi to być filter, nat lub route.
hook Hak, do którego łańcuch jest podłączony. Dostępne wartości zależą od type.
priority Liczba całkowita określająca kolejność łańcuchów podłączonych do tego samego hook.
policy Domyślna polityka dla łańcucha. Jeśli jest określona, musi to być accept lub drop.

Dokumentacja

właściwości reguł

Dokumentacja

Nazwa właściwości Opis
position Liczba całkowita określająca kolejność reguł w łańcuchu.
statement Oświadczenie reguły.
comment Komentarz opisujący regułę.

Przykład

Oto mały przykład tego, jak powinien wyglądać Twój plik.

WAŻNE: NIE używaj tego jako swojego zapory!

---
nftables_flush_ruleset: tak
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: "Mój filtr wejściowy"
        base:
          type: "filter"
          hook: "input"
          priority: 0
          policy: "drop"
        rules:
          - position: 2
            statement: "ct state invalid log prefix 'Invalid_IN: ' drop"
            comment: "Zaloguj i odrzuć nieprawidłowe pakiety."
          - position: 1
            statement: "iif lo accept"
          - position: 3
            statement: "ct state {established,related} accept"

      - name: "Mój filtr wyjściowy"
        base:
          type: "filter"
          hook: "output"
          priority: -10
          policy: "accept"
        rules:
          - position: 1
            statement: "ip daddr 192.0.2.100 counter"
...

Testowanie

Testowanie obejmuje następujące kroki:

  1. Sprawdzenie składni roli
  2. Wykonanie pierwszego uruchomienia
  3. Wykonanie drugiego uruchomienia i sprawdzenie idempotencji.

Na następujących systemach operacyjnych:

  • Debian 9
  • CentOS 7
  • Ubuntu 18.04

Wkład

Recenzje kodu, łatki, komentarze, zgłoszenia błędów i zapytania o funkcje są mile widziane. Proszę zapoznać się z Przewodnikiem po wkładzie w celu uzyskania dalszych informacji.

Zainstaluj
ansible-galaxy install Frzk.nftables
Licencja
apache-2.0
Pobrania
136
Właściciel