Hi Alexei + netdev list, On Wed, May 02, 2018 at 09:36:02PM -0700, Alexei Starovoitov wrote: > Later bpfilter_process_sockopt() will be called from bpfilter hooks > in get/setsockopt() to pass iptable commands into umh via bpfilter.ko
This is a part I'm quite heavily opposed to - at least at this point. Unless bpfilter offered something that is semantically compatible to what netfilter/iptables is currently implementing, I don't think bpfilter should be [allowed to] overriding the iptables {get,set}sockopt() calls. I appreciate that people are working on a different architecture packet filter than what we used to. I also understand that there is a need for backwards compatibility. I still think it's wrong to offer that compatibility on the {set,get}sockopt level, rather than on the "iptables command line utility replacement" level. But nevermind, you guys have a different opinion on that, on which we can agree to disagree. However, no matter what you do, the most important part from the user point of view is to make sure you don't break semantics. netfilter/iptables semantics have an intricate notion abut when which chain of which table is executed, in which order, at what particular point of the packet traversal during the network stack. The packet filtering rulesets that people have created over more than 18 years are based on those semantics. If you offer the same interface, but not that very same semantics, the packet filtering policies can an will break - and they will break so in a hidden way. To the user, it appears as if the ruleset is loaded with the assumed semantics, but in reality it isn't. Unless you can replicate those semantics 1:1, I think it is not only wrong to override the iptables sockopt interface, but it's outright dangerous. Having less matches/targets implemented than original iptables is something that I believe is acceptable (and inevitable, at least in the beginning). If somebody tries to load a related ruleset with bpfilter active, it will fail gracefully and the user can chose to not use that match/target in his ruleset, or to not use bpfilter. But if the ruleset loads but behaves different than before (because e.g. it's executed from a completely different place in the stack), that's IMHO an absolute no-go that must be avoided at all cost. If that's the case, you are actively breaking network security, rather than creating it. So I think there's only two ways to go: a) replicate the exact semantics/order of the filter/mangle/raw/... tables and their chains, both among themselves as well as in terms of ordering with other parts of the network stack, or b) not use the existing tables/chains with their pre-defined semantics but rather start new 'tables' which can then have different semantics as defined at the time of their implementation. My apologies if I misunderstood something about bpfilter. Feel free to correct me where I'm wrong. Thanks. Regards, Harald -- - Harald Welte <lafo...@gnumonks.org> http://laforge.gnumonks.org/ ============================================================================ "Privacy in residential applications is a desirable marketing option." (ETSI EN 300 175-7 Ch. A6)