• Aucun résultat trouvé

nftables, one year later

N/A
N/A
Protected

Academic year: 2022

Partager "nftables, one year later"

Copied!
47
0
0

Texte intégral

(1)

nftables, one year later

Éric Leblond

Stamus Networks

September 25, 2014

(2)

1 Introduction

2 Nftables, an Iptables replacement

3 Nftables since last Kernel Recipes

4 The future

5 Conclusion

(3)

1 Introduction

2 Nftables, an Iptables replacement

3 Nftables since last Kernel Recipes

4 The future

5 Conclusion

(4)

Éric Leblond

co-founder of Stamus Networks

Company providing network probe based on Suricata

Focusing on bringing you the best of Suricata IDS technology

Netfilter Coreteam member

Work on kernel-userspace interaction Kernel hacking

Ulogd2 maintainer

Port of Openoffice firewall to Libreoffice

(5)

1 Introduction

2 Nftables, an Iptables replacement

3 Nftables since last Kernel Recipes

4 The future

5 Conclusion

(6)

Nftables

A new filtering system

Replace iptables and the filtering infrastructure No changes in

Hooks

Connection tracking Helpers

A new language

Based on a grammar Accessible from a library

Netlink based communication Atomic modification

Notification system

(7)

Nftables

A new filtering system

Replace iptables and the filtering infrastructure No changes in

Hooks

Connection tracking Helpers

A new language

Based on a grammar Accessible from a library

Netlink based communication Atomic modification

Notification system

(8)

Nftables

A new filtering system

Replace iptables and the filtering infrastructure No changes in

Hooks

Connection tracking Helpers

A new language

Based on a grammar Accessible from a library

Netlink based communication Atomic modification

(9)

A filtering based on a pseudo-state machine

Inspired by BPF 4 registers 1 verdict

A extensive instructions set

Add Some Magic ?

reg = pkt.payload[offset, len] reg = cmp(reg1, reg2, EQ) reg = pkt.meta(mark) reg = lookup(set, reg1) reg = ct(reg1, state)

Easy creation of new matches

reg1 = pkt.payload[offset_src_port, len] reg2 = pkt.payload[offset_dst_port, len] reg = cmp(reg1, reg2, EQ)

(10)

A filtering based on a pseudo-state machine

Inspired by BPF 4 registers 1 verdict

A extensive instructions set

Add Some Magic ?

reg = pkt.payload[offset, len]

reg = cmp(reg1, reg2, EQ) reg = pkt.meta(mark) reg = lookup(set, reg1) reg = ct(reg1, state)

Easy creation of new matches

reg1 = pkt.payload[offset_src_port, len] reg2 = pkt.payload[offset_dst_port, len] reg = cmp(reg1, reg2, EQ)

(11)

A filtering based on a pseudo-state machine

Inspired by BPF 4 registers 1 verdict

A extensive instructions set

Add Some Magic ?

reg = pkt.payload[offset, len]

reg = cmp(reg1, reg2, EQ) reg = pkt.meta(mark) reg = lookup(set, reg1) reg = ct(reg1, state)

Easy creation of new matches

reg1 = pkt.payload[offset_src_port, len]

reg2 = pkt.payload[offset_dst_port, len]

reg = cmp(reg1, reg2, EQ)

(12)

Architecture

Kernel

Tables: declared by user and attached to hook User interface: nfnetlink socket

ADD DELETE DUMP

Userspace

libmnl: low level netlink interaction

libnftnl: library handling low-level interaction with nftables Netlink’s API

nftables: command line utility to maintain ruleset

(13)

Dynamic chain loading

Chain are created on-demand

Chain are created via a specific netlink message Non-user chain are:

Of a specific type Bound to a given hook

Current chain type filter: filtering table route: old mangle table

nat: network address translation table

(14)

From userspace syntax to kernel

Converting user input

Operation is made via a netlink message The userspace syntax must be converted

From a text message following a grammar To a binary Netlink message

Linearize Tokenisation Parsing Evaluation Linearization

(15)

From kernel to userspace syntax

Kernel send netlink message It must be converted back to text

Conversion

Delinearization Postprocessing Textify

Example

i p f i l t e r o u t p u t 8 7

[ payload l o a d 4b @ network header + 16 => reg 1 ] [ b i t w i s e reg 1 = ( reg =1 & 0 x 0 0 f f f f f f ) ^ 0x00000000 ] [ cmp eq reg 1 0 x00500fd9 ]

[ c o u n t e r p k t s 7 b y t e s 588 ]

is translated to:

i p daddr 2 1 7 . 1 5 . 8 0 . 0 / 2 4 c o u n t e r p a c k e t s 7 b y t e s 588 # handle 8

(16)

Simplified kernel code

A limited in-kernel size

A limited set of operators and instructions A state machine

No code dedicated to each match

One match on address use same code as a match on port New matchs are possible without kernel modification

LOC count

50000 LOC in userspace only 7000 LOC in kernel-space

(17)

Less kernel update

Pseudo state machine instruction

Current instructions cover need found in previous 10 years New instruction require very limited code

Development in userspace

A new match will not need a new kernel

ICMPv6 implementation is a single userspace patch

(18)

Set handling

Interests of sets

One single rule evaluation Simple and readable ruleset Evolution handling

Anonymous set

n f t add r u l e i p g l o b a l f i l t e r \

i p daddr { 1 9 2 . 1 6 8 . 0 . 0 / 2 4 , 1 9 2 . 1 6 8 . 1 . 4 } \ t c p d p o r t { 2 2 , 443} \

accept

Named set

n f t add set g l o b a l ipv4_ad { type i p v 4 _ a d d r e s s ; }

n f t add element g l o b a l ipv4_ad { 1 9 2 . 1 6 8 . 1 . 4 , 1 9 2 . 1 6 8 . 1 . 5 } n f t d e l e t e element g l o b a l ipv4_ad { 1 9 2 . 1 6 8 . 1 . 5 }

n f t add r u l e i p g l o b a l f i l t e r i p saddr @ipv4_ad drop

(19)

Set handling

Interests of sets

One single rule evaluation Simple and readable ruleset Evolution handling

Anonymous set

n f t add r u l e i p g l o b a l f i l t e r \

i p daddr { 1 9 2 . 1 6 8 . 0 . 0 / 2 4 , 1 9 2 . 1 6 8 . 1 . 4 } \ t c p d p o r t { 2 2 , 443} \

accept

Named set

n f t add set g l o b a l ipv4_ad { type i p v 4 _ a d d r e s s ; }

n f t add element g l o b a l ipv4_ad { 1 9 2 . 1 6 8 . 1 . 4 , 1 9 2 . 1 6 8 . 1 . 5 } n f t d e l e t e element g l o b a l ipv4_ad { 1 9 2 . 1 6 8 . 1 . 5 }

n f t add r u l e i p g l o b a l f i l t e r i p saddr @ipv4_ad drop

(20)

Set handling

Interests of sets

One single rule evaluation Simple and readable ruleset Evolution handling

Anonymous set

n f t add r u l e i p g l o b a l f i l t e r \

i p daddr { 1 9 2 . 1 6 8 . 0 . 0 / 2 4 , 1 9 2 . 1 6 8 . 1 . 4 } \ t c p d p o r t { 2 2 , 443} \

accept

Named set

n f t add set g l o b a l ipv4_ad { type i p v 4 _ a d d r e s s ; }

n f t add element g l o b a l ipv4_ad { 1 9 2 . 1 6 8 . 1 . 4 , 1 9 2 . 1 6 8 . 1 . 5 }

(21)

Mapping

Principle and interest

Associative mapping linking two notions A match on the key trigger the use of the value Using addresses, interfaces, verdicts

Examples

Anonymous mapping:

# n f t add r u l e f i l t e r o u t p u t i p daddr vmap \

{ 1 9 2 . 1 6 8 . 0 . 0 / 2 4 =\ > drop, 1 9 2 . 1 6 8 . 0 . 1 =\ > accept}

Named mapping:

# n f t i

n f t> add map f i l t e r v e r d i c t _ m a p { type i p v 4 _ a d d r e s s => v e r d i c t ; } n f t> add element f i l t e r v e r d i c t _ m a p { 1 . 2 . 3 . 5 => drop}

n f t> add r u l e f i l t e r o u t p u t i p daddr vmap @verdict_map

(22)

Mapping

Principle and interest

Associative mapping linking two notions A match on the key trigger the use of the value Using addresses, interfaces, verdicts

Examples

Anonymous mapping:

# n f t add r u l e f i l t e r o u t p u t i p daddr vmap \

{ 1 9 2 . 1 6 8 . 0 . 0 / 2 4 =\ > drop, 1 9 2 . 1 6 8 . 0 . 1 =\ > accept}

Named mapping:

# n f t i

n f t> add map f i l t e r v e r d i c t _ m a p { type i p v 4 _ a d d r e s s => v e r d i c t ; } n f t> add element f i l t e r v e r d i c t _ m a p { 1 . 2 . 3 . 5 => drop}

(23)

Usage example

set web_servers { type i p v 4 _ a d d r e s s

elements = { 1 9 2 . 1 6 8 . 1 . 1 5 , 1 9 2 . 1 6 8 . 1 . 5 } }

map admin_map {

type i p v 4 _ a d d r e s s => v e r d i c t

elements = { 1 9 2 . 1 6 8 . 0 . 4 4 => jump logmetender , \

1 9 2 . 1 6 8 . 0 . 4 2 => jump logmetrue , 1 9 2 . 1 6 8 . 0 . 3 3 => accept} }

chain f o r w a r d {

c t s t a t e e s t a b l i s h e d accept

i p daddr @web_servers t c p d p o r t ssh i p saddr map @admin_map i p daddr @web_servers t c p d p o r t { h t t p , h t t p s } l o g accept counter l o g drop

}

chain logmetender {

l o g l i m i t 1 0 / minute accept }

chain l o g m e t r u e { counter l o g accept }

}

(24)

1 Introduction

2 Nftables, an Iptables replacement

3 Nftables since last Kernel Recipes

4 The future

5 Conclusion

(25)

Sexy trailer

The video

http://youtu.be/fUTgQw75ikA

Video generation

Video generated with gource

Various git history have been merged

File path has been prefixed with project name

(26)

Documentation

Man page

Complete description of nft Man page style:

Lot of things Concise description A few things missing

A wiki

Only a howto for now

http://wiki.nftables.org/

Still incomplete but a good documentation

Want to contribute: Ask on Netfilter mailing list to get an account

(27)

IPv4 and IPv6 filtering

Don’t mix the old and the new

Tables are defined relatively to a IP space Must declare a table

for each protocol for each chain/hook

Basic filtering chains

t a b l e f i l t e r {

chain i n p u t { type f i l t e r hook i n p u t p r i o r i t y 0 ; } chain f o r w a r d { type f i l t e r hook f o r w a r d p r i o r i t y 0 ; } chain o u t p u t { type f i l t e r hook o u t p u t p r i o r i t y 0 ; } }

t a b l e i p 6 f i l t e r {

chain i n p u t { type f i l t e r hook i n p u t p r i o r i t y 0 ; } chain f o r w a r d { type f i l t e r hook f o r w a r d p r i o r i t y 0 ; } chain o u t p u t { type f i l t e r hook o u t p u t p r i o r i t y 0 ; } }

(28)

Handling of IPv4 and IPv6

(29)

Inet filtering

Kernel side

Introduce a new NFPROTO_INET family

Realize dispatch later based on the effective family Activate IPv4 and IPv6 features when needed

Example

t a b l e i n e t f i l t e r { chain i n p u t {

type f i l t e r hook i n p u t p r i o r i t y 0 ; c t s t a t e e s t a b l i s h e d , r e l a t e d accept i i f l o accept

c t s t a t e new i i f ! = l o t c p d p o r t { ssh , 2200} \ t c p f l a g s == syn counter \

l o g p r e f i x "SSH a t t e m p t " group 1 \ accept

i p saddr 1 9 2 . 1 6 8 . 0 . 0 / 2 4 t c p d p o r t { 9300 , 3142} counter accept i p 6 saddr 2a03 : 2 8 8 0 : 2 1 1 0 : df07 : f a c e : b00c : 0 : 1 drop

} }

(30)

Result: easy handling of IPv4 and IPv6

(31)

Atomic ruleset update (1/2)

Bring transaction to nftables Update ruleset at once

Need transaction support All pass or abort

Need to handle table and rules

Problem of set

They exists at table level They are used at chain level

(32)

Atomic ruleset update (2/2)

Atomic ruleset update

atomically commit a set of rule-set updates incrementally based on a generation counter/mask

00 active in the present, will be active in the next generation.

01 active in the present, needs to zero its future, it becomes 00.

10 inactive in the present, delete now.

Batch method Method

Start transaction

Send modifications mixing set and ruleset update Commit transaction

Interest

Limit the number of netlink messages

(33)

Dynamic set choice (1/2)

Ipset usage

Choose set type

Among the possible choices

The set subsystem

Various set types are available hash

rbtree

No selector exists

(34)

Dynamic set choice (2/2)

Constraint based selection

Select set based on user constraint Memory usage

Lookup complexity

Syntax

n f t add set f i l t e r s e t 1 { type i p v 4 _ a d d r ; s i z e 1024 ; } n f t add set f i l t e r s e t 1 { type i p v 4 _ a d d r ; p o l i c y memory ; } n f t add set f i l t e r s e t 1 { type i p v 4 _ a d d r ; p o l i c y performance ; }

Status

Kernel space is implemented

(35)

Warning: NSFC

THE FOLLOWING SLIDE CONTAINS IMAGES THAT MAY HURT THE SENSITIVITY OF SOME CATS.

(36)

The young guard

Guiseppe Longo Arturo Borrero Gonzales Alvaro Neira Ayuso Ana Rey

Google Summer of Code Outreach Program

for Women

(37)

Ana Rey: nftables test system

Regression test

Test nft command and check result Most features are tested

Sponsored by OPW Already led to fixes

Example

any/queue.t: OK

any/ct.t: WARNING: line: 59: ’nft add rule -nnn ip test-ip4 \ output ct expiration 30’: \

’ct expiration 30’ mismatches ’ct expiration "30s"’

any/ct.t: WARNING: line: 61: ’nft add rule -nnn ip test-ip4 \ output ct expiration != 233’: \

’ct expiration != 233’ mismatches ’ct expiration != "3m53s"’

(38)

Arturo Borrero: Nftsync (1/2)

Principle

Distribute ruleset across the network Support master/slave

Deploy ruleset for non gateway systems

Implementation

Use notification system

Collect update and distribute them

(39)

Nftsync (2/2)

Current state

Bootstrapped during summer Basic mode working

No encryption yet

Get it, try it, hack it

http://git.netfilter.org/nft-sync/

(40)

Guiseppe Longo: ebtables compat layer

Provide tools compatibility

Use old tools with new nftables framework

Convert old command lines to new internal syntax

Multi layer compatibility Bridge level: ebtables IP level: iptables

(41)

1 Introduction

2 Nftables, an Iptables replacement

3 Nftables since last Kernel Recipes

4 The future

5 Conclusion

(42)

Libnftables

High level library for third party software Network manager

Firewall management interfaces It will be based on nftables

Using same command line Providing transaction feature

(43)

Complete import/export

Exporting ruleset

Can currently be done via a single nft command XML and JSON format

Importing ruleset

No single command to restore nft -fis not enough

nft importis needed

(44)

Unification with existing BPF

No real difference

Different keywords related to Netfilter ct

meta

May be possible to merge

(45)

1 Introduction

2 Nftables, an Iptables replacement

3 Nftables since last Kernel Recipes

4 The future

5 Conclusion

(46)

Conclusion

A huge evolution

Solving iptables problem An answer to new usages

Set handling Complex matches

IPv4 and IPv6 in one table

Already usable

Main features are here Compatibility can be used

(47)

Questions ?

Do you have questions ? Thanks to

Netfilter team

Google for GSoC 2014 Outreach Program for Women

More information Netfilter :

http://www.netfilter.org Nftables wiki:

http://wiki.nftables.org

Contact me Mail:

[email protected] Twitter: @Regiteric

Références

Documents relatifs

SS-IDS is best suited for the newly installed web servers which doesn’t have large number of requests in the data set to train the IDS and can be used on top of currently used

The CLEF IP 2010 PAC task enabled us to correct some experiments and obtain better results, basically using the same techniques (almost the same BM25-category strategy as used

To address this we propose a method based on rules clustering which builds a knowledge base for NIDS performance for a large number of vulnerabilities.. Finally, we present

We aim, with the current version of Mainpro+, to incorporate advancements in continuing professional develop- ment (CPD), foster participation in activities known to have

While finding duplicates in ORCID is, in general, as complex as finding au- thor duplicates in research literature (i.e., none or limited ground truth), we can leverage the

In its standard form, a European-style call on the maximum (the “best”) of n assets provides the investor, at the option expiry, with the difference, if positive, between the highest

In addition, after in-depth examination of the financial statements, the Supervisory Board approved the annual financial statements and consolidated financial statements as well

In addition, after obtaining the auditor‘s declaration of independence and after conclusion of a disclosure agreement, the Audit Committee prepared the Supervisory Board’s proposal