[2] Nftables – Podstawowe operacje
8 marca 2022To są podstawowe operacje Nftables.
[1] Wiele poziomów sieciowych jest podzielonych na rodziny w architekturze nftables, jak poniżej.
Rodzina | Opis |
ip | Ta rodzina przetwarza ruch/pakiety IPv4. Dziedziczenie [iptables] jest ekwiwalentne. |
ip6 | Ta rodzina przetwarza ruch/pakiety IPv6. Dziedziczenie [ip6tables] jest równoważne. |
inet | Ta rodzina przetwarza zarówno ruch/pakiety IPv4, jak i IPv6 jako obsługę podwójnego stosu. |
arp | Ta rodzina przetwarza ruch na poziomie ARP, zanim jakakolwiek obsługa warstwy L3 zostanie wykonana przez jądro. Dziedziczenie [arptables] jest ekwiwalentem. |
bridge | Ta rodzina przetwarza ruch/pakiety przechodzące przez mosty. Dziedzictwo [ebtables] jest ekwiwalentem.
Jednak nie ma dla niego integracji z nf_conntrack. |
netdev | Ta rodzina różni się od innych tym, że służy do tworzenia łańcuchów bazowych dołączonych do jednego interfejsu sieciowego. Takie łańcuchy bazowe widzą cały ruch sieciowy na określonym interfejsie, bez założeń dotyczących protokołów L2 lub L3. Nie ma starszych ***tabeli odpowiadających tej rodzinie. |
[2] Nie ma domyślnego ustawienia nftables, zacznij od utworzenia tabel, takich jak starsze iptables.
nft add table [rodzina] [nazwa tabeli] # pokaż reguły (domyślnie brak reguł) # my jednak w LINK skopiowaliśmy raguły z Firewalld [root@vlsr01 ~]# nft list ruleset # dodaj tabelę [firewall01] w rodzinie [inet] [root@vlsr01 ~]# nft add table inet firewall01 # pokaż tablice w rodzinie [inet] [root@vlsr01 ~]# nft list tables inet table inet firewalld table inet firewall01 # pokaż zestaw reguł [root@vlsr01 ~]# nft list ruleset # nie dołączyłem do listingu skopiowanych regul z Firewalld table inet firewall01 { } # aby skasować tabelę wykonaj: [root@vlsr01 ~]# nft delete table inet firewall01
[3] Następnie dodaj łańcuchy do tabeli.
nft add chain [family] [table name] [chain name] { type [type] hook [hook} priority [priority] \; }
Dostępne [type]y i [hook]s są następujące. Dla [priority], jest to zazwyczaj liczba całkowita, a im mniejsza wartość tym ma wyższy priorytet.
Typ | Możliwe do użycia z |
filter | all [family], [hook] |
route | [ip], [ip6], [inet] family
[output] hook |
nat | [ip], [ip6], [inet] family
[input], [output], [prerouting]. [postrouting] hook |
Hook (punkt zaczepienia) | Możliwe do użycia z |
input | [ip], [ip6], [inet], [apr], [bridge] family
[filter], [nat] type |
output | [ip], [ip6], [inet], [apr], [bridge] family
[filter], [route], [nat] type |
forward | [ip], [ip6], [inet], [bridge] family
[filter] type |
prerouting | [ip], [ip6], [inet], [bridge] family
[filter], [nat] type |
postrouting | [ip], [ip6], [inet], [bridge] family
[filter], [nat] type |
ingress | [netdev] family
[filter] type |
# typ [filter], punkt zaczepienia (hook) [input], priorytet [0] # dodaj łańcuch [filter_INPUT] do tabeli [firewall01] w rodzinie [inet] [root@vlsr01 ~]# nft add chain inet firewall01 filter_INPUT { type filter hook input priority 0 \;} [root@vlsr01 ~]# nft list ruleset table inet firewall01 { chain filter_INPUT { type filter hook input priority filter; policy accept; } } # aby skasować łańcuch wykonaj [root@vlsr01 ~]# nft delete chain inet firewall01 filter_INPUT [root@vlsr01 ~]# nft list ruleset table inet firewall01 { }
[4] Po dodaniu tabel i łańcuchów ustal dla nich reguły.
[root@vlsr01 ~]# nft list ruleset table inet firewall01 { chain filter_INPUT { type filter hook input priority filter; policy accept; } } # na przykład dodaj regułę zezwalającą na pakiety, których stan połączenia jest [powiązany (related), nawiązany (estabilished)] [root@vlsr01 ~]# nft add rule inet firewall01 filter_INPUT ct state related,established accept [root@vlsr01 ~]# nft list table inet firewall01 table inet firewall01 { chain filter_INPUT { type filter hook input priority filter; policy accept; ct state established,related accept } } # na przykład dodaj regułę zezwalającą na ruch pakietom na interfejs pętli zwrotnej [root@vlsr01 ~]# nft add rule inet firewall01 filter_INPUT iif lo accept [root@vlsr01 ~]# nft list table inet firewall01 table inet firewall01 { chain filter_INPUT { type filter hook input priority filter; policy accept; ct state established,related accept iif "lo" accept } } # na przykład dodaj regułę odrzucania pakietów z wyjątkiem dozwolonych pakietów powyżej [root@vlsr01 ~]# nft add rule inet firewall01 filter_INPUT drop [root@vlsr01 ~]# nft -a list table inet firewall01 table inet firewall01 { # handle 49 chain filter_INPUT { # handle 2 type filter hook input priority filter; policy accept; ct state established,related accept # handle 3 iif "lo" accept # handle 4 drop # handle 5 } } # na przykład dodaj regułę obok wiersza [uchwyt 3 (handle 3)], aby zezwolić na pakiety do portu 22 ze stanem połączenia [nowy, nieśledzony (new, untracked)] [root@vlsr01 ~]# nft add rule inet firewall01 filter_INPUT handle 3 tcp dport 22 ct state { new,untracked } accept [root@vlsr01 ~]# nft -a list table inet firewall01 table inet firewall01 { # handle 49 chain filter_INPUT { # handle 2 type filter hook input priority filter; policy accept; ct state established,related accept # handle 3 tcp dport 22 ct state { new, untracked } accept # handle 7 iif "lo" accept # handle 4 drop # handle 5 } } # na przykład dodaj regułę obok wiersza [uchwyt 7 (handle 7)], aby zezwolić na pakiety, których metadane to [icmp,ipv6-icmp] [root@vlsr01 ~]# nft add rule inet firewall01 filter_INPUT handle 7 meta l4proto { icmp,ipv6-icmp } accept [root@vlsr01 ~]# nft -a list table inet firewall01 table inet firewall01 { # handle 49 chain filter_INPUT { # handle 2 type filter hook input priority filter; policy accept; ct state established,related accept # handle 3 tcp dport 22 ct state { new, untracked } accept # handle 7 meta l4proto { icmp, ipv6-icmp } accept # handle 9 iif "lo" accept # handle 4 drop # handle 5 } } # aby usunąć regułę, podaj [uchwyt (uchwyt)] numer linii, którą chcesz usunąć, i uruchom poniższe polecenie [root@vlsr01 ~]# nft delete rule inet firewall01 filter_INPUT handle 7 [root@vlsr01 ~]# nft -a list table inet firewall01 table inet firewall01 { # handle 49 chain filter_INPUT { # handle 2 type filter hook input priority filter; policy accept; ct state established,related accept # handle 3 meta l4proto { icmp, ipv6-icmp } accept # handle 9 iif "lo" accept # handle 4 drop # handle 5 } }