Vaje: Netfilter
Uporabili bomo nftables
za prepošiljanje in filtriranje paketkov preko strežnika.
Netfilter je ogrodje, ki je del Linux jedra, in je namenjeno filtriranju omrežnih paketkov ter translaciji njihovih omrežnih naslovov in vrata.
iptables
in novejši, enostavnejši in bolj učinkoviti nftables
predstavljata uporabniški programski orodji za delo z Netfilter ogrodje.
Naloga
- Postavite 2-e virtualki (
A
inB
) in sicer tako, daA
deluje kot omrežni prehod zaB
:A
ima dve omrežni kartici:- NIC1: Bridged Adapter / NAT / NAT Network
- NIC2: Internal Network
B
ima eno omrežno kartico:- NIC1: Internal Network
- Omogočite dostop do spleta virtualki
B
preko virtualkeA
. - Preprečite dostop do IP naslova 8.8.8.8 virtualki
B
. - Preprečite povezovanje virtualke
B
na virtualkoA
preko protokola SSH.
Navodila
Zaženemo obe virtualki in na virtualki A
postavimo DHCP strežnik ter na virtualki B
nastavimo pridobivanje IP naslova preko DHCP, kot smo to naredili na prejšnjih vajah.
Lahko pa tudi ročno nastavimo IP naslova na vsaki virtualki, in sicer na A
:
a$ ip addr add 10.30.0.1/24 dev enp0s8
a$ link set dev enp0s8 up
a$ ip a
Ter na virtualki B
:
b$ ip addr add 10.30.0.2/24 dev enp0s3
b$ link set dev enp0s3 up
b$ ip a
Delovanje lahko preiskusimo z orodjem ping
.
Nastavitve prehoda
Navodila za uporabo nftables
.
Trenutno nastavite nftables
lahko preverimo z:
a$ nft list ruleset
Na virtualki A
nastavimo translacijo IP naslovov paketov, ki omogoči delovanje prehoda:
a$ nft add table mytable
a$ nft 'add chain mytable postrouting { type nat hook postrouting priority -100; }'
a$ nft add rule mytable postrouting masquerade
Prav tako, ne smemo pozabiti ali imamo omogoče prepošiljanje paketov na A
, kar preverimo z:
a$ cat /proc/sys/net/ipv4/ip_forward
Vrednost 1 predstavlja omogočeno prepošiljanje paketov, medtem ko 0 onemogočeno. Nastavitev lahko spremenimo na 1 z:
a$ echo 1 > /proc/sys/net/ipv4/ip_forward
Če nam prehod še vedno ne deluje, preverimo omrežne poti z:
b$ ip r
V primeru, da nimamo nastavljene privzete poti preko prehoda, jo dodamo z:
b$ ip r a default via 10.30.0.1
Preprečite dostop do IP naslova 8.8.8.8
Dodamo pravilo za filtriranje vseh paketov s ponornim IP naslovom 8.8.8.8, ki izvirajo iz B
:
a$ nft 'add chain mytable forward { type filter hook forward priority -100; }'
a$ nft add rule mytable forward ip daddr . ip saddr { 8.8.8.8 . 10.30.0.2 } drop
Preprečite uporabo protokola SSH
Dodamo pravilo za filtriranje vseh paketov s protokolom SSH, ki izvirajo iz B
:
a$ nft 'add chain mytable input { type filter hook input priority -100; }'
a$ nft add rule mytable input tcp dport . ip saddr { 22 . 10.30.0.2 } drop
Brisanje
Vse nftables
tabele (tables), verige (chains) in pravila (rules) imajo svoje identifikatorje (handles), ki jih uporabljamo za brisanje. Npr.:
a$ nft -a list table mytable
a$ nft delete rule mytable input handle 10