Rola Ansible: nftables

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:
- Sprawdzenie składni roli
- Wykonanie pierwszego uruchomienia
- 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.