nftables budoucnost linuxového firewallu Petr Krčmář 7. října 2017

Podobné dokumenty
nftables budoucnost linuxového firewallu Petr Krčmář 18. listopadu 2014

Firewall, mac filtering, address filtering, port forwarding, dmz. Ondřej Vojtíšek, Jakub Niedermertl

Osobní firewall s iptables

Instalace. Samotný firewall již je s největší pravděpodobností nainstalovaný Zjistíme dle parametru při použití. aptitude search iptables

Zjednodusene zaklady prace s IPTABLES Jiri Kubina jiri.kubina@osu.cz Ver. 1.1 zari 2006

Firewal ing v Linuxe

Téma 11: Firewall v CentOS. Nastavení firewallu

Základní konfigurace Linux firewallu

WireGuard. nová a jednoduchá linuxová VPN. Petr Krčmář. 3. listopadu 2018

PB169 Operační systémy a sítě

Operační systémy 2. Firewally, NFS Přednáška číslo 7b

FIREWALL - IPTABLES. 1. Co je to firewall 2. IPTABLES 3. Manuálové stránky 4. Nastavení směrovače 5. Příklady. 1. Co je to firewall?

Firewally a iptables. Přednáška číslo 12

Y36SPS: Firewalling laborka

Úvod do iptables aneb UN*Xové firewally

Site - Zapich. Varianta 1

IP protokol v linuxu trocha teorie a hodně praxe příkazy ip, iptables a další.

Nástroje pro FlowSpec a RTBH. Jiří Vraný, Petr Adamec a Josef Verich CESNET. 30. leden 2019 Praha

Multikast z pohledu uživatele

OpenVPN. Uvedené dílo podléhá licenci Creative Commons Uved te autora 3.0 Česko. Ondřej Caletka (CESNET, z.s.p.o.) OpenVPN 3. března / 16

Semestrální projekt do předmětu SPS

Administrace Unixu (Nastavení firewallu)

Vychytávky v iptables

BEZPEČNOST SLUŽEB NA INTERNETU

Demo: Multipath TCP. 5. října 2013

Instalace Debianu pomocí debootstrap

GRE tunel APLIKA ˇ CNÍ P ˇ RÍRU ˇ CKA

2N VoiceBlue Next. 2N VoiceBlue Next & Siemens HiPath (series 3000) Propojení pomocí SIP trunku. Quick guide. Version 1.

Alpine Linux: minimalistická distribuce nejen na server

Y36PSI IPv6. Jan Kubr - 7_IPv6 Jan Kubr 1/29

Y36SPS QoS Jan Kubr - Y36SPS 1 5/2008

IPv6. RNDr. Ing. Vladimir Smotlacha, Ph.D.

Implementace protokolů IPSec na OS Linux, FreeS/WAN. Martin Povolný

BEZPEČNOST SLUŽEB NA INTERNETU

Počítačové sítě II. 15. Internet protokol verze 6 Miroslav Spousta, 2006

IP filtr a detektor útoků

Linux v síti. Ondřej Vondrouš

Analýza protokolů rodiny TCP/IP, NAT

OpenVPN. Ondřej Caletka.

Seznámení s Mikrotik RouterOS

Možnosti IPv6 NAT. Lukáš Krupčík, Martin Hruška KRU0052, HRU0079. Konfigurace... 3 Statické NAT-PT Ověření zapojení... 7

Snort pravidla a jejich syntaxe. Příklad psaní vlastních pravidel

1. Směrovače směrového protokolu směrovací tabulku 1.1 TTL

Správa sítí. RNDr. Ing. Vladimir Smotlacha, Ph.D.

Laboratorní práce: SNMP - Linux snmputils

Mikrotik RouterOS: Řízení datových toků

X36PKO Úvod Protokolová rodina TCP/IP

WrapSix aneb nebojme se NAT64. Michal Zima.

Grafické rozhraní pro nastavení iptables v GNU/Linux

Počítačové sítě a Linux. Radek Pilař Gymnázium Tanvald Oktáva 2008/2009

Vladimír Václavek 2010/2011

Další nástroje pro testování

Migrace laboratorního firewallu z platformy Linux PC na platformu MikroTik

Úvod do IPv6. Pavel Satrapa

Studentská unie ČVUT v Praze, klub Silicon Hill. 22. února Ondřej Caletka (SU ČVUT) IPv6 nové (ne)bezpečí? 22.

Certificate Transparency

Semestrální práce z předmětu KIV/PD

Internet protokol, IP adresy, návaznost IP na nižší vrstvy

Bezpečnost vzdáleného přístupu. Jan Kubr

TESTOVÁNÍ VYSOKORYCHLOSTNÍHO NÁSTROJE PRO PŘEKLAD IP ADRES TESTING OF HIGH-SPEED TOOL FOR NETWORK ADDRESS TRANSLATION

XMW3 / IW3 Sítě 1. Štefan Pataky, Martin Poisel YOUR LOGO

SSH: dálková správa serveru

Access Control Lists (ACL)

Uvedené dílo (s výjimkou obrázků) podléhá licenci Creative Commons Uved te autora 3.0 Česko.

P2P komunikace I/O modulů řady E1200 I/O moduly s komunikací přes mobilní telefonní sítě

Technická specifikace zařízení

Praktikum Směrování Linux

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Netfilter. semestrální projekt předmětu OBDAI 2011

Analýza a optimalizace softwarových firewall na operačních systémech Linux Diplomová práce

Směrovací démon BIRD. CZ.NIC z. s. p. o. Ondřej Filip / IT10

Internet a zdroje. (ARP, routing) Mgr. Petr Jakubec. Katedra fyzikální chemie Univerzita Palackého v Olomouci Tř. 17. listopadu

HP HELION OPENSTACK LAB GUIDE

ANALÝZA TCP/IP 2 ANALÝZA PROTOKOLŮ DHCP, ARP, ICMP A DNS

Základní principy obrany sítě II. Michal Kostěnec CESNET, z. s. p. o.

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

Linux na serveru. seminář Arcibiskupského gymnázia v Praze a gymnázia Boženy Němcové v Hradci Králové

1 Webový server, instalace PHP a MySQL 13

Šifrovaný disk v Linuxu

Administrace Unixu a sítí

Kontejnerová virtualizace na Linuxu

ADMINISTRACE UNIXU A SÍTÍ - AUS Metodický list č. 1

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

FlowMon novinky. Představení FlowMon verze 5.0. Petr Špringl

Protokol TELNET. Schéma funkčních modulů komunikace protokolem TELNET. Telnet klient. login shell. Telnet server TCP/IP.

Vstupní požadavky, doporučení a metodické pokyny

Dual-stack jako řešení přechodu?

Identifikátor materiálu: ICT-3-03

Projekt VRF LITE. Jiří Otisk, Filip Frank

Dodávka nových switchů a jejich integrace do stávající IT infrastruktury inspektorátu SZPI v Praze

HTTP hlavičky pro bezpečnější web

2N VoiceBlue Next. 2N VoiceBlue Next brána - instalační průvodce. Version 1.00

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Uživatelský modul. Modem Bonding

Technologie počítačových sítí AFT NAT64/DNS64. Bc. Lumír Balhar (BAL344), Bc. Petr Kadlec (KAD0019)

vpsfree.cz: linuxový server u neziskovky

Falšování DNS s RPZ i bez

V LINUXU ADVANCED METHODS OF FILTERING NETWORK TRAFFIC IN THE LINUX SYSTEM

Principy XQuery. funkcionální jazyk vše je výraz, jehož vyhodnocením vznikne určitá hodnota základní typy stejné jako v XML Schema:

Y36SPS Jmenné služby DHCP a DNS

Transkript:

nftables budoucnost linuxového firewallu Petr Krčmář 7. října 2017 Uvedené dílo (s výjimkou obrázků) podléhá licenci Creative Commons Uveďte autora 3.0 Česko. Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 1 / 35

Prezentace už teď na webu www.petrkrcmar.cz Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 2 / 35

Historie síťového filtru v Linuxu Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 3 / 35

Historie síťového filtru v Linuxu ipfwadm 1995 1999 jádro 1.2.1 2.2.0 bezestavový filtr, IPv4 only, NAT vedle každý paket se posuzoval zvlášť méně bezpečné = nutno otevírat všem nebo nikomu Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 3 / 35

Historie síťového filtru v Linuxu ipfwadm 1995 1999 jádro 1.2.1 2.2.0 bezestavový filtr, IPv4 only, NAT vedle každý paket se posuzoval zvlášť méně bezpečné = nutno otevírat všem nebo nikomu ipchains 1999 2001 jádro 2.2.0 2.4.0 podpora IPv6, více protokolů stále bezestavový filtr stále stejné nevýhody bezestavosti Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 3 / 35

Současnost síťového filtru v Linuxu Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 4 / 35

Současnost síťového filtru v Linuxu iptables/netfilter 2001? jádro 2.4.0 současná univerzální netfilter (hooky), conntrack a NAT + iptables implementující obecné tabulky s pravidly výsledkem plně stavový filtr (umí i bezestavový) Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 4 / 35

Současnost síťového filtru v Linuxu iptables/netfilter 2001? jádro 2.4.0 současná univerzální netfilter (hooky), conntrack a NAT + iptables implementující obecné tabulky s pravidly výsledkem plně stavový filtr (umí i bezestavový) nftables leden 2014 budoucnost poprvé v jádře 3.13 projekt ale běží od roku 2008 nenahrazuje netfilter, jen iptables vyvíjí netfilter core team, není to akce proti iptables Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 4 / 35

Milníky v historii nftables...the biggest change to Linux firewalling since the introduction of iptables in 2001 Patrick McHardy projekt představen na Netfilter Workshop 2008 první implementace v březnu 2009 poté projekt vypadal mrtvě, zmizel i web v březnu 2010 přechod do beta verze říjen 2012 rozhraní kompatibilní s iptables říjen 2013 pull request do jádra v lednu 2014 zařazeno do jádra 3.13 prvotní vydání, poté další vývoj Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 5 / 35

Proč nový firewall? IPtables jsou neefektivní, přerostlé a málo dynamické duplikují kód: iptables, ip6tables, arptables, ebtables obsahují spoustu kódu pro konkrétní protokoly např. kód pro získání portu z UDP a TCP je jiný rozšíření funkčnosti = tvorba jaderného modulu např. xt_dns pro zkoumání typů DNS provozu v jádře jsou zhruba dvě stovky modulů k IPtables spousta věcí dodrátovaných dodatečně ipset přidání či změna pravidla jsou výkonnostní problém vše se pošle do userspace, upraví a nahraje zpět často je výhodnější save a restore Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 6 / 35

Jak to řeší nftables? neobsahují žádný kód, který by rozuměl protokolům implementují jednoduchý virtuální stroj ten dostává program od uživatelské utility instrukcí je minimum, pokrývají všechny potřeby snadno lze přidat další rozšíření funkčnosti = úprava uživatelské utility nft není třeba měnit jádro (!) např. podpora icmpv6 = 100řádkový patch desetina kódu v jádře IPtables: 70K řádek v jádře, 50K v userspace nftables: 7K řádek v jádře, 50K v userspace Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 7 / 35

Univerzálnost nftables nftables neobsahují kód pro hledání IP adres nic jako porovnej IP adresu paketu se 192.168.1.1 místo toho se vloží univerzální kód payload load 4 offset network header + 16 => reg 1 compare reg 1 192.168.1.1 první řádek skočí v hlavičce o 16 bytů pak načte čtyři byty do reg 1 druhý řádek porovná obsah reg 1 stroj nftables používá opcode (bytecode) vychází z Berkeley Packet Filter Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 8 / 35

Mnoho možností takový přístup je velmi mocný jazyk umožňuje mnoho věcí payload load 4 offset network header + 16 => reg 1 set lookup reg 1 load result in verdict register { "192.168.1.1" : jump chain1, "192.168.1.2" : drop, "192.168.1.3" : jump chain2 } vyhledání adresy ve slovníkové tabulce nahrazuje ipset předání paketů do dalších řetězců Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 9 / 35

Možnost slučování akcí použití více slovníků či map jeden paket může být testován na více vlastností i více akcí v řetězci: započítat, logovat, zahodit výsledek = není třeba opakovat testy vlastností nftables dostávají od network stacku metadata data z conntracku, metadata délku paketu, protokol, adresy a další Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 10 / 35

Co je jinak proti IPtables syntaxe je podobná firewallu pf z BSD světa nebo jako u iproute2 (ip) či tcpdump parametry se zapisují bez pomlček ve volném pořadí změny jsou atomické a rychlé je možné bez problémů za běhu měnit pravidla jediná transakce v Netlinku minimum komunikace z userspace do jádra nftables nemají žádné vestavěné řetězce počítadla je třeba explicitně zapínat Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 11 / 35

Co budete potřebovat jádro > 3.13, doporučeno 4.10, nejlépe co nejnovější modul nf_tables, vyflushované iptables utilitu nft (v Debianu balík nftables) není třeba psát programy ručně, dělá to utilita má i možnost dekompilace = vytvoří čitelný výstup umožňuje uložit a načíst stav Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 12 / 35

Terminologie tabulka tabulka (table) kontejner pro řetězce a sety ip ip6 inet (IPv4 + IPv6) arp bridge netdev neexistují žádné předdefinované tabulky výchozí tabulka je ip Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 13 / 35

Terminologie řetězec řetězec (chain) kontejner pro pravidla leží vždy uvnitř tabulky filter route nat může mít hook, typ a prioritu neexistují žádné předdefinované řetězce Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 14 / 35

Terminologie hook hook jaderný výstup z netfilteru je na něj možné zavěsit callback pak se provoz posílá do řetězce hook ale není nutný prerouting vše vstupující do počítače forward pakety pro jiné počítače vyžadující forward input pakety pro lokální počítače output pakety pocházející z lokálního počítače postrouting pakety opouštějící počítač Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 15 / 35

Hooky k tabulkám hooky pro ip, ip6 a inet prerouting, input, forward, output, postrouting hooky pro arp input, output bridge sleduje data tekoucí bridgem hook pro netdev ingress (data přicházející na rozhraní) Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 16 / 35

Terminologie pravidlo pravidla výrazy sledující parametry paketů ip IP protokol ip6 IPv6 protokol tcp TCP protokol udp UDP protokol udplite UDP-lite protokol sctp SCTP protokol dccp DCCP protokol ah IPSec AH režim esp IPSec ESP režim ipcomp IPcomp hlavičky icmp icmp protokol icmpv6 icmpv6 protokol ct connection tracking meta metadata jako síťová rozhraní každý má své parametry Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 17 / 35

Terminologie akce možné řetězit bez opakování testů je možné vykonat následující akce accept pusť paket a dál ho nezkoumej drop zahoď paket a dál ho nezkoumej reject zahoď paket a pošli o tom ICMP zprávu queue předej paket do userspace (libnetfilter_queue) snat zařiď source NAT dnat zařiď destination NAT jump skoč do jiného řetězce return ukonči současný řetězec a vrať se goto jako jump, ale bez návratu counter započítej paket log zaloguj aktivitu Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 18 / 35

Praktická část Praktické použití Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 19 / 35

Založení tabulky založíme si tabulku pro ipv4-filter # nft -f /etc/nftables.conf podíváme se, co se založilo # nft list table inet filter Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 20 / 35

Přidání pravidel přidáme si pravidla # nft add rule inet filter output ip\ daddr 77.78.107.135 reject # nft add rule inet filter output ip\ daddr www.linuxdays.cz reject # nft add rule inet filter output ip6\ daddr 2a01:430:17:1::ffff:613 reject podíváme se, co se přidalo # nft list table inet filter Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 21 / 35

Vložení pravidel pravidla je možné strkat před/mezi předchozí pomocí -a si zjistíme číslo pravidla pomocí add vložíme za pravidlo pomocí insert vložíme před pravidlo # nft list table inet filter -a # nft add rule inet filter output position 10 \ ip daddr 1.2.3.4 reject # nft insert rule inet filter output position 10 \ ip daddr 5.6.7.8 reject Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 22 / 35

Počítadla přidáme si počítadlo # nft add rule inet filter output ip daddr \ 8.8.8.8 counter podíváme se na stav # ping 8.8.8.8 # nft list table inet filter Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 23 / 35

Limity a logování možné limitovat různé druhy provozu příklad s limitem SSH spojení možno omezovat i toky (od jádra 4.3) # nft add rule inet filter input tcp dport ssh \ limit rate 15/minute counter accept # nft add rule filter input limit rate \ 10 mbytes/second burst 9000 kbytes accept pro logování je třeba modul ipt_log informace se sypou do syslogu čili dnes journalctl -f # nft add rule inet filter output tcp dport 22 ct state \ new log prefix \"Pripojeni pres SSH: \" accept Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 24 / 35

Výrazy, rozsahy a skoky k dispozici!=, >, <, >=, <= pozor, v shellu nutno escapovat možné použít i proměnné a rozsahy # nft add rule inet filter output tcp dport!= 22 counter # nft add rule inet filter input tcp dport 1-1024 counter skoky do jiných řetězců jump, je možné se vrátit pomocí return goto skok bez návratu řetězce nemusí mít hooky # nft add chain inet filter sshcko # nft add rule inet filter input tcp dport 22 jump sshcko # nft add rule inet filter sshcko counter # nft add rule inet filter sshcko return Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 25 / 35

NAT NAT má zvláštní pravidla pouze první paket flow projde do řetězce NAT zavede se nová vazba, případně upraví paket poté ostatní pakety upravují podle vzniklé vazby řetězec prerouting musíte vytvořit, i když nemá pravida aktivuje odnatování paketů # nft add table nat # nft add chain nat prerouting { type nat \ hook prerouting priority 0 \; } # nft add chain nat postrouting { type nat \ hook postrouting priority 0 \; } # nft add rule nat postrouting ip saddr \ 192.168.1.0/24 oif eth0 snat 195.18.52.55 Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 26 / 35

Sety nftables má zabudovanou podporu setů není potřeba žádná nadstavba typu ipset lze použít sadu libovolných selektorů připravené jsou slovníky a mapy (další slide) jednoduché anonymní sety nebo pojmenované # nft add rule inet filter output tcp dport { 22, 23 } \ counter # nft add set inet filter zlobivaci { type ipv4_addr\;} # nft add element inet filter zlobivaci { 192.168.1.4 } # nft add element inet filter zlobivaci \ { 192.168.2.8, 192.168.2.15 } # nft add rule inet filter input ip saddr @zlobivaci \ reject Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 27 / 35

Slovníky a mapy slovníky umožňují propojení elementu a akce ohromné zjednodušení, nic takového iptables nemají # nft add rule inet filter input ip protocol vmap \ { 22 : accept, 23 : drop, 25 : jump posta } # nft add rule inet filter input counter drop mapy přiřazují výstup ke vstupu (interně set) například různou NAT adresu podle portů # nft add rule ip filter prerouting dnat set tcp dport \ map { 80 : 192.168.1.100, 8888 : 192.168.1.101 } Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 28 / 35

Ukládání a obnova nastavené tabulky je možné uložit poté triviálně obnovit # nft list table inet filter > ulozeno # nft -f ulozeno lze použít i XML nebo JSON import se plánuje, zatím neexistuje # nft export xml # nft export json Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 29 / 35

Skriptování není potřeba používat shellové skripty vše možné naskriptovat s nftables include, proměnné, sety #!/usr/sbin/nft flush ruleset # všechno vylejt include "pravidla-pro-nat.ruleset" # vložit soubor define google_dns = 8.8.8.8 # definice proměnné a setu define ntp_servers = { 84.77.40.132, 176.31.53.99, 81.19.96.148 } add table inet filter add chain inet filter input { type filter hook input priority 0; \ policy drop; } add rule inet filter input ct state established,related counter accept add rule inet filter input ip saddr $google_dns counter Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 30 / 35

Monitoring událostí je možné monitorovat události v nftables sledovat objekty (tables, chains, rules, sets, elements) nebo jejich změny (new, destroy) výstup v XML nebo JSON # nft monitor # nft monitor rules # nft monitor new # nft monitor new rules json Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 31 / 35

Mazání všeho možného řetězec lze smazat, pokud v něm nejsou pravidla tabulku lze smazat, pokud v ní nejsou řetězce pro mazání pravidel je třeba si vypsat jejich čísla # nft list table inet filter -a # nft delete rule inet filter input handle 11 kompletní vyprázdnení tabulky vymazání řetězců vymazání tabulky ultimátní vymazání všeho # nft flush table filter # nft delete chain inet filter input # nft delete table filter # nft flush ruleset Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 32 / 35

Kompatibilita s IPtables existuje balíček iptables-nftables-compat obsahuje translační utility možno konvertovat po pravidlech (iptables-translate, ip6tables-translate) nebo souborech (tables-restore-translate) možno i přímo psát pravidla starou syntaxí (iptables-compat) # iptables-translate -A INPUT -p tcp --dport 22 -j DROP nft add rule ip filter INPUT tcp dport 22 counter drop # iptables-compat -A INPUT -p tcp --dport 22 -j DROP Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 33 / 35

Další čtení wiki.nftables.org man nft Phil Sutter, Red Hat: Benchmarking nftables Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 34 / 35

Otázky? Otázky? Petr Krčmář petr.krcmar@iinfo.cz Petr Krčmář (Root.cz, vpsfree.cz) nftables 7. října 2017 35 / 35