From: Pablo Neira Ayuso <pablo@netfilter.org>
To: Christophe Leroy <christophe.leroy@c-s.fr>
Cc: Florian Westphal <fw@strlen.de>,
Patrick McHardy <kaber@trash.net>,
netfilter-devel@vger.kernel.org
Subject: Re: Seeking help for implementing CT HELPER in nftables
Date: Fri, 23 Sep 2016 16:24:35 +0200 [thread overview]
Message-ID: <20160923142435.GA17227@salvia> (raw)
In-Reply-To: <c93e2f7e-fe6b-b43d-c1d4-0c57287ff06c@c-s.fr>
On Fri, Sep 23, 2016 at 12:45:06PM +0200, Christophe Leroy wrote:
> Le 20/09/2016 à 17:38, Florian Westphal a écrit :
[...]
> >nft will need to populate this (or rather, libnftnl will do this on
> >behalf of nft).
> >
> >Currently we do this:
> >nft --debug=netlink add rule filter i ct helper set foo
> >ip filter i
> > [ immediate reg 1 0x006f6f66 0x00000000 0x00000000 0x00000000 ]
Florian, Christophe, sorry for this late jump on this.
If we pass the helper name as string, then helper autoload will not
work as we don't have a way to solve this from the packet path.
To solve this, I'm considering a different approach. Basically,
explicit preload the helpers and pass a helper handle through
register instead.
In the ruleset file, this would look like this:
table ip x {
helper ftp protocol tcp #1
chain y {
...
tcp dport 21 ct helper set ftp #2
}
}
Line #1 makes sure the ftp helper is loaded, we also increment reference
counter. This results in a handle that is dynamically allocated by
nf_tables, that can be retrieve in the same fashion of if_index (ie.
we can look up for the handle from the helper name).
Then from #2, we use the helper handle to refer to the helper.
Good things I see on this:
1) We can still use maps, although we would need a function to lookup
for the nf_conntrack_helper struct form this handle. We can have a
small hashtable for this (actually, we have similar approach currently
to look up for helpers from ports in the deprecated automagic helper
as signment).
2) We use a u32 instead of string to identify the helper.
3) We solve the module autoload issue.
4) We make sure helper module cannot be removed while there is a
reference from the ruleset.
5) We can validate that the helper runs from the right layer 4
protocol, eg. ensure the ftp helper is called for tcp since we can
do this from nft evaluation phase.
This would need commands like:
nft add helper ip x name ftp protocol tcp
and to delete this:
nft delete helper ip x name ftp protocol tcp
Main drawback is that this needs a explicit definition of the helper,
but I think this extra line is ok if it helps resolve other problems.
next prev parent reply other threads:[~2016-09-23 14:24 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-05 11:37 Seeking help for implementing CT HELPER in nftables christophe leroy
2016-03-07 13:20 ` Patrick McHardy
2016-03-08 23:25 ` Christophe Leroy
2016-04-12 13:40 ` Christophe Leroy
2016-04-12 13:51 ` Florian Westphal
2016-09-20 11:10 ` Christophe Leroy
2016-09-20 15:38 ` Florian Westphal
2016-09-23 10:45 ` Christophe Leroy
2016-09-23 14:24 ` Pablo Neira Ayuso [this message]
2016-09-23 14:31 ` Florian Westphal
2016-09-23 14:48 ` Christophe Leroy
2016-09-23 15:19 ` Pablo Neira Ayuso
2016-09-23 15:29 ` Christophe Leroy
2016-09-23 15:46 ` Florian Westphal
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=20160923142435.GA17227@salvia \
--to=pablo@netfilter.org \
--cc=christophe.leroy@c-s.fr \
--cc=fw@strlen.de \
--cc=kaber@trash.net \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.