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.