Sady adres (sets) jsou integrální součástí nftables, existují anonymní sady přímo v pravidlech nebo pojmenované sady stojící samostatně. Není tedy potřeba další modul, který by podobnou funkcionalitu doplňoval.
Pro GeoIP existuje nástroj nftables-geoip, který umí vygenerovat soubory s mapováním mezi IP adresami a jejich lokací. Po načtení je pak možné přidávat pravidla vyhodnocující geo.
Dobrý den,
především děkuji, za články.
už několik dní hledám návod na nft, ale né a né něco porádného najít.
Na nasazení nftables jsem se těšil z toho důvodu, protože všude co jsem četl byla infomrace, že jde o zjednodušení zefektivění stávajících iptables a co hlavně že se inspirovali u BSD firewallu "pf".
"pf" firewall jsem chvíli používal a jeho konfigurace byla super, měl jsem ho hodně rád, byl jednoduchý na pochopení na používání v CLI, prostě super.
Co měl ale ze všeho nejlepěí je MANUÁL.
Vždy když jsem něco nevěděl, stačilo dát "man pf" a během několika minut jsem našel odpověď.
Takže když jsem seo dozvěděl, že nftables by mělo být jednodušší syntax a inspirováno u pf, tak že to zkusím.
Bohužel jsem opět narazil na MAN stránly v linuxu, které jsou o proti BSD manuálovým stránkám na nulové informační úrovni.
Prakticky NIKDY mi "man příkaz" v linuxu nepomohl s nalezením odpovědí jak co nastavit. Vždy člověk musel do googlu a najít nějaký návod, kde to vysvětluje nějaký uživatel.
A u nftables je to bohužel úplně stejné. Návod "man nft" je naprosto ale úplně na dvě věci! Napsal bych něco jiného ale nechci být sprostý.
Jen obyčejnáotázka na nalezení jak nastavit pravidlo, které povoluje IP kamkoli je nadlidský úkol.
Něco jako "ip accept" nefunguje, nebo "oif encp0 accept" znovu nefunguje.
Zafungoval až příkaz: "ip daddr 0/0 accept".
Který se ale ve výpisu zobrazí jako:
"ip daddr & 0.0.0.0 == 0.0.0.0 accept"
WTF! Co to proboha je??? To si fakt někdo dělá "pr..."! Omlouvám se zase jsem sprostý. Ale co je to proboha za zápis?
Proč tam nění jednoduše to co je konfiguraci, tj. "0.0.0.0/0" ?
Když napíšu, "ip daddr 10.0.0.0/16 accept", tak to se zobrazí stejně.
Proč proboha network 0/0 zobrazuje takhle zpitvořeně?
Z principu se network 0.0.0.0/0 naprosto nelyší od 10.0.0.0/16. Je to systém psaní ip adres jen 0/0 reprezentuje "default routu", ale v principu zápis je naprotosto stejný jako pro všechny ostatní ip adresy.
Podobně jako loopback je ip adresa 127.0.0.1/32. To správně zobrazuje jako 127.0.0.1.
Může mi někdo vysvětlit proč pitvoří zápis pro default routu?
No abych to ukončil.
Zatím jsem nebyl schopný nastavit rozumný konfigurák pro obyčejný firewall workstation tak abych provoz "OUTPUT" vše zakázal a povolil pouze vybraný provoz a všechno mi fungovalo.
Je mi jasné, že je to hlavně mezi klávesnicí a židlí, že nerozumím tomu jak to je vyrobené, ale kydž to porovnám s bsd, pf, nebo ipfw, nebo i se starým IPTABLES, tak ty jsem byl relativně hned schopný nastavit.
S nftables, který má být jednodušší se mi to zatím nepodařilo.
Ach jo.
Používám něco takového, doufám, že nedávám hackerům návod na exploit.
chain output {
type filter hook output priority 0;
ct state established,related accept
# accept any localhost traffic
oif lo accept
# # accept local lan
# ip daddr $local_lan accept
# accept trusted protocols
tcp dport { \
ssh, http, https, svn, git, imaps, domain, mdns \
} ct state new accept
udp dport { \
domain, mdns \
} ct state new accept
ip protocol { icmp, esp } accept
# count and drop any other traffic
counter drop
}
Teď jsem našel že flustrovaný ze složitosti a nelogičnosti nftables nejsem sám:
https://www.reddit.com/r/linux/comments/9wog4x/i_cannot_believe_the_complexity_of_nftables/
Tady jeden uživatel píše přesně to samé co si myslím i já.
Jedna konkrétní věc, co nechápu, kde mám chybu.
Chci mít default policy drop pro OUTPUT chain (tedy odchozí provoz přímo z počítače ven).
Mám toto v konfiguráku vytvořený chain:
chain OUTPUT {
type filter hook output priority 0; policy drop;
ip saddr 10.0.99.2 accept
# count and reject everything else
counter
}
IP adresa 10.0.99.2 je můj počítač, kde default route je na 10.0.99.1
Pak jsem si myslel, že přidám pravidlo "ip saddr 10.0.99.2 accept"
A tím jsem si myslel, že by mělo být povoleno "VŠECHNO" směrem ven tj. i do internetu.
Proč mi ale nefunguje DNS?
PING do světa funguje, tcp zkoušel jsem telnetem na ip adresu také funguje.
Jen jaksy nefunguje DNS, takže vlastně skorno nic.
ping www.google.cz
ping: www.google.cz: Name or service not known
ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=7.60 ms
^C
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 7.602/7.602/7.602/0.000 ms
telnet 8.8.8.8 443
Trying 8.8.8.8...
Connected to 8.8.8.8.
Escape character is '^]'.
^CConnection closed by foreign host.
telnet 8.8.8.8 53
Trying 8.8.8.8...
Connected to 8.8.8.8.
Escape character is '^]'.
^CConnection closed by foreign host.
DNS mám nastavený 8.8.8.8:
systemd-resolve --status
Global
DNS Servers: 8.8.8.8
V čem dělám chybu, čemu nerozumím? Nechápu.
Když nftables přepnu do defaultních hodnot, resp. přepnu default policy chani OUTPUT na accecpt, tak to funguje:
chain output {
type filter hook output priority 0; policy accept;
}
Nově řeším nftables na našem serveru.
Řeším jednoduchou věc z iptables, na nftables, resp nevím jak na to.
(zablokovat daný rozsah)
iptables:
iptables -I INPUT -s 1.2.3.0/24 -j DROP
nftables podle mne:
nft add rule inet filter input ip saddr 1.2.3.0 counter drop
v tabulce se to objeví, nicméně, nefunguje mi to.
pokud by někdo zde věděl jak na to, případně nějaký použitelný návod, kromě oficiálních stránek nftables, fakt mi to pomůže.
Děkuji moc