ipr-cnrs.nftables
Nftables
Przegląd
Rola do zarządzania regułami i pakietami Nftables.
Inspiracją dla tej roli był Mike Gleason - rola zapory. Dziękuję! Mam nadzieję, że nie skomplikowałem jego filozofii... (jestem pewny, że teraz ją skomplikowałem :D) ^^
Zmienne roli
- nft_enabled: Włącz lub wyłącz wsparcie dla Nftables [domyślnie:
true
]. - nft_pkg_state: Stan nowego pakietu
nftables
[domyślnie:present
]. - nft_old_pkg_list: Lista niepotrzebnych pakietów do usunięcia (np. Iptables) [domyślnie:
iptables
]. - nft_old_pkg_state: Stan starych pakietów [domyślnie:
absent
]. - nft_old_pkg_manage: Czy stare pakiety powinny być zarządzane przez tę rolę [domyślnie:
true
]. - nft_conf_dir_path: Katalog do przechowywania różnych plików konfiguracyjnych Nftables [domyślnie:
/etc/nftables.d
]. - nft_main_conf_path: Główny plik konfiguracyjny ładowany przez jednostkę systemd [domyślnie:
/etc/nftables.conf
]. - nft_main_conf_content: Szablon używany do generowania głównego pliku konfiguracyjnego [domyślnie:
etc/nftables.conf.j2
]. - nft_input_conf_path: Plik konfiguracyjny wejścia dołączony do głównego pliku konfiguracyjnego [domyślnie:
{{ nft_conf_dir_path }}/filter-input.nft
]. - nft_input_conf_content: Szablon używany do generowania pliku konfiguracyjnego wejścia [domyślnie:
etc/nftables.d/filter-input.nft.j2
]. - nft_output_conf_path: Plik konfiguracyjny wyjścia dołączony do głównego pliku konfiguracyjnego [domyślnie:
{{ nft_conf_dir_path }}/filter-output.nft
]. - nft_output_conf_content: Szablon używany do generowania pliku konfiguracyjnego wyjścia [domyślnie:
etc/nftables.d/filter-output.nft.j2
]. - nft_forward_conf_path: Plik konfiguracyjny przekazywania dołączony do głównego pliku konfiguracyjnego [domyślnie:
{{ nft_conf_dir_path }}/filter-forward.nft
]. - nft_forward_conf_content: Szablon używany do generowania pliku konfiguracyjnego przekazywania [domyślnie:
etc/nftables.d/filter-forward.nft.j2
]. - nft_define_conf_path: Plik definicji zmiennych dołączony do głównego pliku konfiguracyjnego [domyślnie:
{{ nft_conf_dir_path }}/defines.nft
]. - nft_define_conf_content: Szablon używany do generowania pliku definicji zmiennych [domyślnie:
etc/nftables.d/defines.nft.j2
]. - nft_sets_conf_path: Plik definicji zbiorów i map dołączony do głównego pliku konfiguracyjnego [domyślnie:
{{ nft_conf_dir_path }}/sets.nft
]. - nft_sets_conf_content: Szablon używany do generowania pliku definicji zbiorów i map [domyślnie:
etc/nftables.d/sets.nft.j2
]. - nft_global_default_rules: Ustaw domyślne reguły dla łańcucha
global
. Inne łańcuchy będą przekierowywać doglobal
przed zastosowaniem swoich specyficznych reguł. - nft_global_rules: Możesz dodać reguły
global
lub nadpisać te zdefiniowane przez nft_global_default_rules dla wszystkich hostów. - nft_global_group_rules: Możesz dodać reguły
global
lub nadpisać te zdefiniowane przez nft_global_default_rules i nft_global_rules dla grupy. - nft_global_host_rules: Hosty mogą również dodawać lub nadpisywać wszystkie wcześniejsze reguły.
- nft__custom_content: Niestandardowa treść (tabele, dołączanie itd.) do dodania w konfiguracji Nftables [domyślnie:
''
]. - nft_input_default_rules: Ustaw domyślne reguły dla łańcucha
input
. - nft_input_rules: Możesz dodać reguły
input
lub nadpisać te zdefiniowane przez nft_input_default_rules dla wszystkich hostów. - nft_input_group_rules: Możesz dodać reguły
input
lub nadpisać te zdefiniowane przez nft_input_default_rules i nft_input_rules dla grupy. - nft_input_host_rules: Hosty mogą również dodawać lub nadpisywać wszystkie wcześniejsze reguły
input
. - nft_output_default_rules: Ustaw domyślne reguły dla łańcucha
output
. - nft_output_rules: Możesz dodać reguły
output
lub nadpisać te zdefiniowane przez nft_output_default_rules dla wszystkich hostów. - nft_output_group_rules: Możesz dodać reguły
output
lub nadpisać te zdefiniowane przez nft_output_default_rules i nft_output_rules dla grupy. - nft_output_host_rules: Hosty mogą również dodawać lub nadpisywać wszystkie wcześniejsze reguły
output
. - nft_forward_default_rules: Ustaw domyślne reguły dla łańcucha
forward
. - nft_forward_rules: Możesz dodać reguły
forward
lub nadpisać te zdefiniowane przez nft_forward_default_rules dla wszystkich hostów. - nft_forward_group_rules: Możesz dodać reguły
forward
lub nadpisać te zdefiniowane przez nft_forward_default_rules i nft_forward_rules dla grupy. - nft_forward_host_rules: Hosty mogą również dodawać lub nadpisywać wszystkie wcześniejsze reguły
forward
. - nft__forward_table_manage: Czy tabela przekazywania powinna być zarządzana [domyślnie:
False
]. - nft__nat_table_manage: Czy tabela NAT powinna być zarządzana [domyślnie:
False
]. - nft__nat_default_prerouting_rules: Ustaw domyślne reguły dla łańcucha
prerouting
tabeli nat. - nft__nat_prerouting_rules: Ustaw reguły dla łańcucha
prerouting
tabeli nat dla wszystkich hostów w inwentarzu Ansible. - nft__nat_group_prerouting_rules: Ustaw reguły dla łańcucha
prerouting
tabeli nat dla hostów w specyficznej grupie inwentarza Ansible. - nft__nat_host_prerouting_rules: Ustaw reguły dla łańcucha
prerouting
tabeli nat dla konkretnych hostów w inwentarzu Ansible. - nft__nat_prerouting_conf_path: Plik konfiguracyjny prerouting dołączony do głównej konfiguracji [domyślnie:
{{ nft_conf_dir_path }}/nat-prerouting.nft
]. - nft__nat_prerouting_conf_content: Szablon używany do generowania pliku konfiguracyjnego prerouting [domyślnie:
etc/nftables.d/nat-prerouting.nft.j2
]. - nft__nat_default_postrouting_rules: Ustaw domyślne reguły dla łańcucha
postrouting
tabeli nat. - nft__nat_postrouting_rules: Ustaw reguły dla łańcucha
postrouting
tabeli nat dla wszystkich hostów w inwentarzu Ansible. - nft__nat_group_postrouting_rules: Ustaw reguły dla łańcucha
postrouting
tabeli nat dla hostów w specyficznej grupie inwentarza Ansible. - nft__nat_host_postrouting_rules: Ustaw reguły dla łańcucha
postrouting
tabeli nat dla konkretnych hostów w inwentarzu Ansible. - nft__nat_postrouting_conf_path: Plik konfiguracyjny postrouting dołączony do głównej konfiguracji [domyślnie:
{{ nft_conf_dir_path }}/nat-postrouting.nft
]. - nft__nat_postrouting_conf_content: Szablon używany do generowania pliku konfiguracyjnego postrouting [domyślnie:
etc/nftables.d/nat-postrouting.nft.j2
]. - nft_define_default: Ustaw domyślne zmienne dostępne we wszystkich regułach.
- nft_define: Możesz dodać zmienne lub nadpisać te zdefiniowane przez nft_define_default dla wszystkich hostów.
- nft_define_group: Możesz dodać zmienne lub nadpisać te zdefiniowane przez nft_define_default i nft_define dla grupy.
- nft_define_host: Możesz dodać lub nadpisać wszystkie wcześniejsze zmienne.
- nft_service_manage: Czy usługa
nftables
powinna być zarządzana przez tę rolę [domyślnie:true
]. - nft_service_name: Nazwa usługi
nftables
[domyślnie:nftables
]. - nft_service_enabled: Ustaw, aby usługa
nftables
była dostępna przy starcie [domyślnie:true
]. - nft__service_protect: Czy jednostka systemd powinna chronić system i dom [domyślnie:
true
]. - nft_merged_groups: Czy zmienne z grup Ansible hostów powinny być scalane [domyślnie:
false
]. - nft_merged_groups_dir: Słownik, w którym znajdują się reguły grupowe nftables, nazwane jak grupy Ansible [domyślnie:
vars/
]. - nft_debug: Włącz lub wyłącz bardziej szczegółowe wyjście. [domyślnie: 'false'].
Zmienne specyficzne dla systemu operacyjnego
Proszę zobaczyć domyślną wartość w pliku dla systemu operacyjnego w katalogu [vars][vars directory].
- nft_pkg_list: Lista pakietów, które dostarczają
nftables
. - nft__bin_location: Ścieżka do wykonywalnego
nftables
. [domyślnie:/usr/sbin/nft
]
Szablony reguł
Słownik nft_templates
zawiera bibliotekę użytecznych reguł, mających na celu standaryzację i gotowość do użycia w twojej zaporze. Na przykład {{ nft_templates.allow_mdns }}
rozwinie się do następujących reguł, obejmujących mDNS dla IPv4 i IPv6:
- meta l4proto udp ip6 daddr ff02::fb udp dport mdns counter accept comment "mDNS IPv6 service discovery"
- meta l4proto udp ip daddr 224.0.0.251 udp dport mdns counter accept comment "mDNS IPv4 service discovery"
Przykładowe zastosowanie w niestandardowych zbiorach reguł:
nft_host_input_rules:
...
010 allow mdns: "{{ nft_templates.allow_mdns }}"
Wśród innych, słownik nft_templates
zawiera reguły implementujące pełne zalecenia dla zapór przekazujących i przyjmujących ruch, zgodnie z definicjami w RFC 4890, RFC 7126 i RFC 9288. Szczegóły i przykłady można znaleźć w defaults/main.yml.
Słowniki reguł
Każdy typ słowników reguł będzie scalany, a reguły będą stosowane w porządku alfabetycznym kluczy (dlatego używamy prefiksów od 000 do 999). Więc:
- nft_*_default_rules: Definiują domyślne reguły dla wszystkich węzłów. Możesz je zdefiniować w
group_vars/all
. - nft_*_rules: Możesz dodać reguły i nadpisać te zdefiniowane przez nft_*_default_rules. Możesz je zdefiniować w
group_vars/all
. - nft_*_group_rules: Możesz dodać reguły i nadpisać te zdefiniowane przez nft_*_default_rules i nft_*_rules. Możesz je zdefiniować w
group_vars/webservers
.- Jeśli
nft_merged_groups
jest ustawione na true, wiele reguł grupowych z grup Ansible będzie również scalanych.
- Jeśli
- nft_*_host_rules: Możesz dodać reguły i nadpisać te zdefiniowane przez nft_*_default_rules, nft_*_group_rules i nft_*_rules. Możesz je zdefiniować w
host_vars/www.local.domain
.
defaults/main.yml
:
# reguły
nft_global_default_rules:
005 state management:
- ct state established,related accept
- ct state invalid drop
nft_global_rules: {}
nft_merged_groups: false
nft_merged_groups_dir: vars/
nft_global_group_rules: {}
nft_global_host_rules: {}
nft_input_default_rules:
000 polityka:
- type filter hook input priority 0; policy drop;
005 global:
- jump global
010 drop unwanted:
- ip daddr @blackhole counter drop
015 localhost:
- iif lo accept
210 input tcp accepted:
- tcp dport @in_tcp_accept ct state new accept
nft_input_rules: {}
nft_input_group_rules: {}
nft_input_host_rules: {}
nft_output_default_rules:
000 polityka:
- type filter hook output priority 0; policy drop;
005 global:
- jump global
015 localhost:
- oif lo accept
050 icmp:
- ip protocol icmp accept
- ip6 nexthdr icmpv6 counter accept
200 output udp accepted:
- udp dport @out_udp_accept ct state new accept
210 output tcp accepted:
- tcp dport @out_tcp_accept ct state new accept
nft_output_rules: {}
nft_output_group_rules: {}
nft_output_host_rules: {}
# definiowanie zmiennych nft
nft_define_default:
broadcast and multicast:
desc: 'broadcast and multicast'
name: badcast_addr
value: '{ 255.255.255.255, 224.0.0.1, 224.0.0.251 }'
input tcp accepted:
name: in_tcp_accept
value: '{ ssh }'
output tcp accepted:
name: out_tcp_accept
value: '{ http, https, hkp }'
output udp accepted:
name: out_udp_accept
value: '{ bootps, domain, ntp }'
nft_define: {}
nft_define_group: {}
nft_define_host: {}
# zbiory i mapy
nft_set_default:
blackhole:
- type ipv4_addr;
- elements = $badcast_addr
in_tcp_accept:
- type inet_service; flags interval;
- elements = $in_tcp_accept
out_tcp_accept:
- type inet_service; flags interval;
- elements = $out_tcp_accept
out_udp_accept:
- type inet_service; flags interval;
- elements = $out_udp_accept
nft_set: {}
nft_set_group: {}
nft_set_host: {}
Te domyślne wartości wygenerują następującą konfigurację :
#!/usr/sbin/nft -f
# Zarządzane przez Ansible
# czyszczenie
flush ruleset
include "/etc/nftables.d/defines.nft"
table inet filter {
chain global {
# 000 zarządzanie stanem
ct state established,related accept
ct state invalid drop
}
include "/etc/nftables.d/sets.nft"
include "/etc/nftables.d/filter-input.nft"
include "/etc/nftables.d/filter-output.nft"
}
A wszystkie reguły i definicje można uzyskać, wyświetlając zestaw reguł na hoście: $ nft list ruleset
:
table inet filter {
set blackhole {
type ipv4_addr
elements = { 255.255.255.255, 224.0.0.1, 224.0.0.251}
}
set out_tcp_accept {
type inet_service
flags interval
elements = { http, https, hkp}
}
set out_udp_accept {
type inet_service
flags interval
elements = { domain, bootps, ntp}
}
chain global {
ct state established,related accept
ct state invalid drop
}
chain input {
type filter hook input priority 0; policy drop;
jump global
ip daddr @blackhole counter packets 0 bytes 0 drop
iif "lo" accept
tcp dport @in_tcp_accept ct state new accept
}
chain output {
type filter hook output priority 0; policy drop;
jump global
oif "lo" accept
ip protocol icmp accept
udp dport @out_udp_accept ct state new accept
tcp dport @out_tcp_accept ct state new accept
}
}
Przykłady
Z playbookami
Zarządzaj Nftables za pomocą domyślnych zmiennych (kliknij, aby rozwinąć)
- hosts: serverXYZ
roles:
- role: ipr-cnrs.nftables
Dodaj nową prostą regułę filtrującą dla przychodzącego ruchu (np. 1 port dla UDP/torrent) (kliknij, aby rozwinąć)
- hosts: serverXYZ
vars:
nft_input_rules:
400 input torrent accepted:
- udp dport 6881 ct state new accept
roles:
- role: ipr-cnrs.nftables
- Zmienne nft_input_group_rules lub nft_input_host_rules mogą być również używane.
- Waga (
400
) pozwala uporządkować wszystkie scalone reguły (z słowników nft_input_*rules). - Tekst po wadze (
input torrent accepted
) to krótki opis, który będzie dodany jako komentarz w pliku nft_input_conf_path na zdalnym hoście.
Dodaj nową regułę wielopunktową dla przychodzącego ruchu (np. TCP/http, https, http-alt itd.) (kliknij, aby rozwinąć)
- hosts: serverXYZ
vars:
nft_input_rules:
400 input http accepted:
- tcp dport { 80, 443, 8080-8082 } ct state new accept
roles:
- role: ipr-cnrs.nftables
- Zmienne nft_input_group_rules lub nft_input_host_rules mogą być również używane.
- Waga (
400
) pozwala uporządkować wszystkie scalone reguły (z słowników nft_input_*rules). - Tekst po wadze (
input http accepted
) to krótki opis, który będzie dodany jako komentarz w pliku nft_input_conf_path na zdalnym hoście. - W tym przypadku nawiasy są przydatne i definiują anonimowy zbiór. Dla pojedynczego elementu (port, adres IP itd.) użycie nawiasów jest zbędne i definicja pojedyncza jest wystarczająca.
Dodaj nową regułę z użyciem zmiennej (kliknij, aby rozwinąć)
Zamienne Nftables mogą być przydatne, jeśli zdefiniujesz pewne ogólne reguły dla wszystkich hostów z tymi zmiennymi (wołanymi za pomocą $) i nadpiszesz wartość zmiennej dla niektórych grup lub hostów.
- hosts: serverXYZ
vars:
- nft_define_group:
input http accepted:
desc: HTTP i HTTPS
name: in_http_accept
value: '{ 80, 443 }'
nft_input_group_rules:
400 input http accepted:
- tcp dport $in_http_accept ct state new accept
roles:
- role: ipr-cnrs.nftables
- Dodaj nową zmienną za pomocą define dla portów HTTP.
- Dodaj nową regułę dla przychodzącego ruchu i użyj wcześniej zdefiniowanej zmiennej.
- Wynik
nft list ruleset
na zdalnym hoście będzie wyglądać:table inet filter { … chain input { … tcp dport { http, https } ct state new accept … } … }
- Brak wzmianki o zmiennej
$in_http_accept
.
- Brak wzmianki o zmiennej
- Zmienne nft_define lub nft_define_host mogą być również używane.
- Zmienne nft_input_rules lub nft_input_host_rules mogą być również używane.
- Waga (
400
) pozwala uporządkować wszystkie scalone reguły (z słowników nft_input_*rules). - Tekst po wadze (
input http accepted
) to krótki opis, który będzie dodany jako komentarz w pliku nft_input_conf_path na zdalnym hoście.
Dodaj nową regułę z użyciem nazwanego zbioru (kliknij, aby rozwinąć)
Podobnie jak zmienne Nftables, nazwa zbioru może być przydatna, jeśli zdefiniujesz pewne ogólne reguły i zbiory (np. dla wszystkich hostów) i nadpiszesz tylko zbiór w niektórych przypadkach (np. dla grupy lub niektórych hostów).
Oprócz zmiennych, możliwe jest dodawanie treści do nazwanych zbiorów w locie z hosta, bez całkowitego przepisania reguły.
- hosts: serverXYZ
vars:
nft_set_group:
in_udp_accept:
- type inet_service; flags interval;
- elements = { 6881-6887, 6889 }
nft_input_group_rules:
200 input udp accepted:
- udp dport @in_udp_accept ct state new accept
roles:
- role: ipr-cnrs.nftables
- Dodaj nowy nazwany zbiór używając słownika nft_set_group (np. dla portów torrent).
- Dodaj nową regułę dla przychodzącego ruchu i użyj wcześniej zdefiniowanego zbioru.
- Na zdalnym hoście, jeśli spróbujesz dodać port do tego zbioru:
nft add element inet filter in_udp_accept \{ 6999 \}
- Wynik
nft list ruleset
na zdalnym hoście teraz będzie wyglądać:table inet filter { … set in_udp_accept { type inet_service flags interval elements = { 6881-6887, 6889, 6999 } } chain input { … udp dport @in_udp_accept ct state new accept … } … }
- Zmienne nft_set lub nft_set_host mogą być również używane.
- Zmienne nft_input_rules lub nft_input_host_rules mogą być również używane.
- Waga (
200
) pozwala uporządkować wszystkie scalone reguły (z słowników nft_input_*rules). - Tekst po wadze (
input udp accepted
) to krótki opis, który będzie dodany jako komentarz w pliku nft_input_conf_path na zdalnym hoście.
Przedefiniuj domyślną regułę za pomocą 2 nowych reguł (kliknij, aby rozwinąć)
- hosts: serverXYZ
vars:
nft_input_host_rules:
050 icmp:
- ip protocol icmp ip saddr != 192.168.0.0/24 counter drop
- ip protocol icmp icmp type echo-request ip length <= 84 counter limit rate 10/minute accept
roles:
- role: ipr-cnrs.nftables
- Zdobądź opis reguły z pliku
defaults/main.yml
(np.050 icmp
). - Odrzuć wszelkie żądania ICMP, które nie pochodzą z sieci 192.168.0.0.
- Upewnij się, że żądanie ma długość mniejszą lub równą 84 bajtom i ustaw limit do 10 żądań na minutę.
- Zmienne nft_input_rules lub nft_input_group_rules mogą być również używane.
- Waga (
050
) pozwala uporządkować wszystkie scalone reguły (z słowników nft_input_*rules). - Tekst po wadze (
icmp
) to krótki opis, który będzie dodany jako komentarz w pliku nft_input_conf_path na zdalnym hoście.
Przedefiniuj niektóre z domyślnie zdefiniowanych zbiorów (kliknij, aby rozwinąć)
- hosts: serverXYZ
vars:
- nft_define:
input tcp accepted:
desc: Niestandardowy port SSH i torrent
name: in_tcp_accept
value: '{ 2201, 6881 }'
roles:
- role: ipr-cnrs.nftables
- Zdobądź nazwę przedmiotu (np.
input tcp accepted
) i nazwę zmiennej (np.in_tcp_accept
) z plikudefaults/main.yml
. - Ustaw nową wartość (np.
'{ 2201, 6881 }'
). - Możesz dodać atrybut
desc
, który będzie ustawiony jako komentarz w pliku nft_input_conf_path na zdalnym hoście.
- Zmienne nft_define_group lub nft_define_host mogą być również używane.
Przedefiniuj wszystkie domyślne reguły (np. dla ruchu wychodzącego) (kliknij, aby rozwinąć)
Jeśli domyślne reguły są zbyt łagodne, jeśli już nadpisałeś większość z nich, … W niektórych przypadkach, myślę, że może być ciekawie redefiniować domyślną zmienną:
- hosts: serverXYZ
vars:
nft_output_default_rules:
000 polityka:
- type filter hook output priority 0; policy drop;
005 zarządzanie stanem:
- ct state established,related accept
- ct state invalid drop
015 localhost:
- oif lo accept
050 moja reguła dla XX hostów i usług:
- tcp dport 2000 ip saddr { xxx.xxx.xxx.xxx, yyy.yyy.yyy.yyy } ct state new accept
250 reset-ssh: # pozwala hostowi zresetować połączenia SSH, aby uniknąć 10 min opóźnienia od kontrolera Ansible
- tcp sport ssh tcp flags { rst, psh | ack } counter accept
roles:
- role: ipr-cnrs.nftables
- Przynajmniej nie zapomnij o:
- ustawieniu domyślnej
polityki
. - zarządzaniu już
established
stanem. - akceptacji flag
rst, psh | ack
dla ssh, aby uniknąć 10 minut opóźnienia podczas pierwszego uruchomienia tej roli Nftables (zobacz #1).
- ustawieniu domyślnej
- Następnie dodaj własne reguły z odpowiednią wagą, aby uporządkować wszystkie scalone reguły (z słowników nft_output_*rules).
Usuń domyślną regułę (kliknij, aby rozwinąć)
- hosts: serverXYZ
vars:
nft_output_host_rules:
210 output tcp accepted:
-
roles:
- role: ipr-cnrs.nftables
- Zdobądź opis reguły z pliku
defaults/main.yml
(210 output tcp accepted
). - Domyślna polityka dla ruchu wychodzącego (drop) będzie teraz stosowana do portów zdefiniowanych w zmiennej out_tcp_accept. Upewnij się, że wiesz, co robisz.
- Reguła nie będzie już obecna w wyniku
nft list ruleset
, pozostanie tylko komentarz (210 output tcp accepted
) w pliku nft_output_conf_path na zdalnym hoście.
- Zmienne nft_output_rules lub nft_output_group_rules mogą być również używane.
- Waga (
210
) pozwala uporządkować wszystkie scalone reguły (z słowników nft_output_*rules).
Z group_vars i host_vars
Użyj domyślnych reguł i zezwól, dla first_group, na przychodzący ICMP i zlicz zarówno ICMP, jak i pakiety domyślnej polityki (drop) (kliknij, aby rozwinąć)
group_vars/first_group
:
nft_input_group_rules:
020 icmp:
- ip protocol icmp icmp type echo-request ip length <= 84 counter limit rate 1/minute accept
999 count policy packet:
- counter
Użyj scalonych reguł grupowych z wielu grup Ansible (kliknij, aby rozwinąć)
- Włącz możliwość scalania zmiennych grup:
- hosts: serverXYZ vars: nft_merged_groups: true nft_merged_groups_dir: vars/ roles: - role: ipr-cnrs.nftables
- Włóż dodatkowe reguły do "vars" folderu o nazwie odpowiadającej twoim grupom Ansible dla serverXYZ:
vars/first_group
:nft_input_group_rules: 020 icmp: - ip protocol icmp icmp type echo-request ip length <= 84 counter limit rate 1/minute accept 999 count policy packet: - counter
vars/second_group
:nft_input_group_rules: 021 LAN: - iif eth0 accept
- Te zestawy reguł z dwóch grup będą scalane, jeśli host jest członkiem tych grup.
Konfiguracja
Ta rola będzie:
- Instalować
nftables
na systemie. - Umożliwiać domyślnie usługi
nftables
podczas uruchomienia. - Generować domyślny plik konfiguracyjny, który uwzględnia wszystkie poniższe pliki i jest ładowany przez jednostkę systemd.
- Generować pliki reguł wejściowych i wyjściowych, które są wywoływane przez główny plik konfiguracyjny.
- Generować zmienne w jednym pliku, a zbiory i mapy w innym.
- Upewnić się, że
nftables
jest uruchamiane i włączone przy starcie. - (re)Uruchamiać usługę
nftables
przy pierwszym uruchomieniu lub po zmianie jednostek systemd. - Ładować usługę
nftables
przy kolejnych uruchomieniach, aby uniknąć sytuacji, w której host nie miałby reguł zapory z powodu błędnej składni.
Integracja z Fail2ban
Przed Debian Bullseye jednostka systemd dla Fail2ban nie była dobrze zintegrowana z Nftables.
Ta rola stworzy plik nad override dla jednostki fail2ban
, chyba że nft_fail2ban_service_override
jest ustawione na false
. Domyślnie jest to dodawane nawet jeśli jeszcze nie jest dostępne na hoście. To zapewnia:
- Jednostka
fail2ban
jest uruchamiana po jednostcenftables
. - Jednostka
fail2ban
jest restartowana, gdy jednostkanftables
jest restartowana.
Rozwój
Ten kod źródłowy pochodzi z naszej instancji Gitea, a repozytorium Github istnieje tylko po to, aby móc wysłać tę rolę do Ansible Galaxy…
Jednakże, nie krępuj się, aby wysyłać zgłoszenia problemów/PR tutaj :)
Dzięki temu hookowi Github automatycznie otrzymuje aktualizacje z naszej instancji Gitea :)
Licencja
Informacje o autorze
Jérémy Gardais
- IPR (Institut de Physique de Rennes)
ansible-galaxy install ipr-cnrs.nftables