From: Brett Mastbergen <bmastbergen@untangle.com>
To: Florian Westphal <fw@strlen.de>
Cc: netfilter-devel@vger.kernel.org, dmorris@untangle.com
Subject: Re: dict: A netfilter expression for dictionary lookups
Date: Tue, 23 Apr 2019 16:18:57 -0400 [thread overview]
Message-ID: <20190423201857.GA3116@pinebook> (raw)
In-Reply-To: <20190415230830.jsmatvfyn3fjrtec@breakpoint.cc>
On 16-04-19, Florian Westphal wrote:
> Brett Mastbergen <bmastbergen@untangle.com> wrote:
> > This patch looks great. That would greatly improve the usefulness of keying
> > off of the conntrack id. If it gets accepted I can send a kernel patch and
> > an nft patch to support the ct id key.
>
> That would be really nice to have.
>
I've just sent the kernel, libnftnl, and nft patches that add support for the
ct id key to the list. Take a look, see what you think.
> > > > For a more in depth description of how things work I suggest reading the doc
> > > > in the first link I posted, but below are a few simple examples of what is
> > > > possible using dict expressions:
> > > >
> > > > nft add rule ip filter forward dict sessions ct id application long_string
> > > > NETFLIX reject
> > > >
> > > > If I were to describe that rule in plain English it would be:
> > > >
> > > > For traffic passing through the ip filter table forward hook, use the
> > > > conntrack id as a key to lookup an entry in the sessions table. For that
> > > > entry check if it has an application field set to a string value of NETFLIX,
> > > > if so, reject the traffic.
> > > >
> > > > How did that field get set to NETFLIX? That is up to some other entity. In
> > >
> > > Why isn't it possible to use the existing nftables set infrastructure
> > > for this?
> > >
> > > The nft sets store arbitrary octets/bytes as keys, so we could at least
> > > from kernel side store arbitrary identifiers (strings, integers etc).
> > >
> >
> > I wanted to use the existing set infrastructure, but I ran into two issues
> > wrt to what we were trying to acheive:
> >
> > 1. As far as I can tell the current sets are only set up to hold elements
> > of a particular data type, where as we are storing elements of many different
> > types in a particular dictionary.
>
> Yes, a set is only one data type (They support combining types though).
>
> > 2. sets are associated with a particular table and therefore can only be
> > accessed by rules in that table. If you want to associate some piece of
> > information with a particular connection and use it from rules in multiple
> > different tables, you'd have to populate it in a set in each of those tables.
>
> Yes, but thats intentional, a table forms a namespace; so
> crossing it is not desireable.
>
> The idea is that different entities each can manage their own tables
> without clashing with chain or set names of another table.
>
> Still looking at dicts code, I am trying to understand where normal nft
> set infra can't be used (or is too cumbersome) to best understand how we
> can fit dicts ideas into nftables' architecture.
prev parent reply other threads:[~2019-04-23 20:19 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-28 19:58 dict: A netfilter expression for dictionary lookups Brett Mastbergen
2019-04-11 19:22 ` Florian Westphal
2019-04-12 14:18 ` Brett Mastbergen
2019-04-15 23:08 ` Florian Westphal
2019-04-17 14:41 ` Brett Mastbergen
2019-04-18 12:13 ` Jozsef Kadlecsik
2019-04-19 14:56 ` Brett Mastbergen
2019-04-23 20:18 ` Brett Mastbergen [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190423201857.GA3116@pinebook \
--to=bmastbergen@untangle.com \
--cc=dmorris@untangle.com \
--cc=fw@strlen.de \
--cc=netfilter-devel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).