All of lore.kernel.org
 help / color / mirror / Atom feed
From: Willem de Bruijn <willemb@google.com>
To: Pablo Neira Ayuso <pablo@netfilter.org>
Cc: netfilter-devel <netfilter-devel@vger.kernel.org>,
	netdev@vger.kernel.org, Eric Dumazet <edumazet@google.com>,
	David Miller <davem@davemloft.net>, kaber <kaber@trash.net>
Subject: Re: [PATCH 2/2] netfilter: add xt_bpf xtables match
Date: Fri, 7 Dec 2012 11:56:05 -0500	[thread overview]
Message-ID: <CA+FuTSdq0Mfpw6QRaa6LMBYAOcMfc8dGcSwWZBa7rvW1e89qQA@mail.gmail.com> (raw)
In-Reply-To: <20121207131638.GA3019@1984>

On Fri, Dec 7, 2012 at 8:16 AM, Pablo Neira Ayuso <pablo@netfilter.org> wrote:
> On Wed, Dec 05, 2012 at 03:10:13PM -0500, Willem de Bruijn wrote:
>> On Wed, Dec 5, 2012 at 2:48 PM, Pablo Neira Ayuso <pablo@netfilter.org> wrote:
>> > Hi Willem,
>> >
>> > On Wed, Dec 05, 2012 at 02:22:19PM -0500, Willem de Bruijn wrote:
>> >> A new match that executes sk_run_filter on every packet. BPF filters
>> >> can access skbuff fields that are out of scope for existing iptables
>> >> rules, allow more expressive logic, and on platforms with JIT support
>> >> can even be faster.
>> >>
>> >> I have a corresponding iptables patch that takes `tcpdump -ddd`
>> >> output, as used in the examples below. The two parts communicate
>> >> using a variable length structure. This is similar to ebt_among,
>> >> but new for iptables.
>> >>
>> >> Verified functionality by inserting an ip source filter on chain
>> >> INPUT and an ip dest filter on chain OUTPUT and noting that ping
>> >> failed while a rule was active:
>> >>
>> >> iptables -v -A INPUT -m bpf --bytecode '4,32 0 0 12,21 0 1 $SADDR,6 0 0 96,6 0 0 0,' -j DROP
>> >> iptables -v -A OUTPUT -m bpf --bytecode '4,32 0 0 16,21 0 1 $DADDR,6 0 0 96,6 0 0 0,' -j DROP
>> >
>> > I like this BPF idea for iptables.
>> >
>> > I made a similar extension time ago, but it was taking a file as
>> > parameter. That file contained in BPF code. I made a simple bison
>> > parser that takes BPF code and put it into the bpf array of
>> > instructions. It would be a bit more intuitive to define a filter and
>> > we can distribute it with iptables.
>>
>> That's cleaner, indeed. I actually like how tcpdump operates as a
>> code generator if you pass -ddd. Unfortunately, it generates code only
>> for link layer types of its supported devices, such as DLT_EN10MB and
>> DLT_LINUX_SLL. The network layer interface of basic iptables
>> (forgetting device dependent mechanisms as used in xt_mac) is DLT_RAW,
>> but that is rarely supported.
>
> Indeed, you'll have to hack on tcpdump to select the offset. In
> iptables the base is the layer 3 header. With that change you could
> use tcpdump for generate code automagically from their syntax.
>
>> > Let me check on my internal trees, I can put that user-space code
>> > somewhere in case you're interested.
>>
>> Absolutely. I'll be happy to revise to get it in. I'm also considering
>> sending a patch to tcpdump to make it generate code independent of the
>> installed hardware when specifying -y.
>
> I found a version of the old parser code I made:
>
> http://1984.lsi.us.es/git/nfbpf/
>
> It interprets a filter expressed in a similar way to tcpdump -dd but
> it's using the BPF constants. It's quite preliminary and simple if you
> look at the code.
>
> Extending it to interpret some syntax similar to tcpdump -d would even
> make more readable the BPF filter.
>
> Time ago I also thought about taking the kernel code that checks that
> the filter is correct. Currently you get -EINVAL if you pass a
> handcrafted filter which is incorrect, so it's hard task to debug what
> you made wrong.
>
> It could be added to the iptables tree. Or if generic enough for BPF
> and the effort is worth, just provide some small library that iptables
> can link with and a small compiler/checker to help people develop BPF
> filters.

Or use pcap_compile? I went with the tcpdump output to avoid
introducing a direct dependency on pcap to iptables. One possible
downside I see to pcap_compile vs. developing from scratch is that it
might lag in supporting the LSF ancillary data fields.

> Back to your xt_bpf thing, we can use the file containing the code
> instead:
>
> iptables -v -A INPUT -m bpf --bytecode-file filter1.bpf -j DROP
> iptables -v -A OUTPUT -m bpf --bytecode-file filter2.bpf -j DROP
>
> We can still allow the inlined filter via --bytecode if you want.

I'll add that. I'd like to keep --bytecode to able to generate the
code inline using backticks.

  reply	other threads:[~2012-12-07 16:56 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-05 19:22 [PATCH rfc] netfilter: two xtables matches Willem de Bruijn
2012-12-05 19:22 ` [PATCH 1/2] netfilter: add xt_priority xtables match Willem de Bruijn
2012-12-08  0:04   ` [PATCH] [RFC] netfilter: add xt_skbuff " Willem de Bruijn
2012-12-08  3:23     ` Pablo Neira Ayuso
2012-12-09 20:24       ` Willem de Bruijn
2012-12-09 20:28         ` [PATCH] " Willem de Bruijn
2012-12-05 19:22 ` [PATCH 2/2] netfilter: add xt_bpf " Willem de Bruijn
2012-12-05 19:48   ` Pablo Neira Ayuso
2012-12-05 20:10     ` Willem de Bruijn
2012-12-07 13:16       ` Pablo Neira Ayuso
2012-12-07 16:56         ` Willem de Bruijn [this message]
2012-12-08  3:31           ` Pablo Neira Ayuso
2012-12-08 16:02             ` Daniel Borkmann
2012-12-09 21:52             ` [PATCH next] iptables: add xt_bpf match Willem de Bruijn
2013-01-08  3:21               ` Pablo Neira Ayuso
2013-01-09  1:58                 ` Willem de Bruijn
2013-01-09  9:52                   ` Pablo Neira Ayuso
2013-01-10  0:08                     ` Willem de Bruijn
2013-01-10  0:08                       ` [PATCH next v2] " Willem de Bruijn
2013-01-10  0:15                         ` [PATCH next v3] " Willem de Bruijn
2013-01-17 23:53                           ` Pablo Neira Ayuso
2013-01-18 16:48                             ` Willem de Bruijn
2013-01-18 17:17                               ` [PATCH next] " Willem de Bruijn
2013-01-21 11:28                                 ` Pablo Neira Ayuso
2013-01-21 11:33                                   ` Pablo Neira Ayuso
2013-01-21 11:42                                     ` Florian Westphal
2013-01-21 12:03                                       ` Pablo Neira Ayuso
2013-01-21 16:02                                   ` Willem de Bruijn
2013-01-21 13:44                               ` [PATCH next v3] " Pablo Neira Ayuso
2013-01-22  8:46                                 ` Florian Westphal
2013-01-22  9:46                                   ` Jozsef Kadlecsik
2013-01-22 10:03                                     ` Maciej Żenczykowski
2013-01-22 11:11                                     ` Pablo Neira Ayuso
2013-01-23 15:59                                   ` Willem de Bruijn
2013-01-23 16:21                                     ` Pablo Neira Ayuso
2013-01-23 16:38                                       ` Willem de Bruijn
2013-01-23 18:56                                         ` Pablo Neira Ayuso
2013-02-18  3:44                                           ` [PATCH] utils: bpf_compile Willem de Bruijn
2013-02-20 10:38                                             ` Daniel Borkmann
2013-02-21  4:35                                               ` Willem de Bruijn
2013-02-21 13:43                                                 ` Daniel Borkmann
2013-03-12 15:44                                                   ` [PATCH next] " Willem de Bruijn
2013-04-01 22:20                                                     ` Pablo Neira Ayuso
2013-04-03 15:32                                                       ` Willem de Bruijn
2013-04-04  9:34                                                         ` Pablo Neira Ayuso
2013-02-18  3:52                                           ` [PATCH next v3] iptables: add xt_bpf match Willem de Bruijn
2013-02-24  2:15                                             ` Maciej Żenczykowski
2013-02-27 20:39                                               ` Willem de Bruijn
2012-12-05 19:28 ` [PATCH rfc] netfilter: two xtables matches Willem de Bruijn
2012-12-05 20:00   ` Jan Engelhardt
2012-12-05 21:45     ` Willem de Bruijn
2012-12-05 21:50       ` Willem de Bruijn
2012-12-05 22:35       ` Jan Engelhardt
2012-12-06  5:22     ` Pablo Neira Ayuso
2012-12-06 21:12       ` Willem de Bruijn
2012-12-07  7:22         ` Pablo Neira Ayuso
2012-12-07 13:20         ` Pablo Neira Ayuso
2012-12-07 17:26           ` Willem de Bruijn

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=CA+FuTSdq0Mfpw6QRaa6LMBYAOcMfc8dGcSwWZBa7rvW1e89qQA@mail.gmail.com \
    --to=willemb@google.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=kaber@trash.net \
    --cc=netdev@vger.kernel.org \
    --cc=netfilter-devel@vger.kernel.org \
    --cc=pablo@netfilter.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.