helpers: implement explicit CT helper assignment support
authorJo-Philipp Wich <jo@mein.io>
Mon, 19 Feb 2018 17:16:26 +0000 (18:16 +0100)
committerJo-Philipp Wich <jo@mein.io>
Tue, 20 Feb 2018 16:01:27 +0000 (17:01 +0100)
commitf50a524847a0ac74ef8cc74011d3cc46e9269c6b
treeac6d5eed48f5ecf236e3228eabf862242632d6df
parent503db4a2e50519802ca6380495d4ecf32894f905
helpers: implement explicit CT helper assignment support

Implement support for explicit per-zone conntrack helper assignment in
the raw table in order to compensate for the now disabled automatic
helper assignment in recent Linux kernels.

This commit adds, along with the required infrastructure, a new per-
zone uci option "helper" which can be used to tie one or more CT helpers
to a given zone.

For example the following configuration:

    config zone
      option name lan
      option network lan
      list helper ftp
      list helper sip

... will assign the FTP and SIP conntrack helpers as specified in
/usr/share/fw3/helpers.conf to traffic originating from the LAN zone.

Additionally, a new boolean option "auto_helper" has been defined for
both "config defaults" and "config zone" sections, with the former
option overruling the latter.

When the default true "option auto_helper" is set, all available helpers
are automatically attached to each non-masq zone (i.e. "lan" by default).

When one or more "list helper" options are specified, the zone has
masquerading enabled or "auto_helper" is set to false, then the automatic
helper attachment is disabled for the corresponding zone.

Furthermore, this commit introduces support for a new 'HELPER' target in
"config rule" sections, along with "option helper" to match helper traffic
and "option set_helper" to assign CT helpers to a stream.

Finally, "config redirect" sections support "option helper" too now,
which causes fw3 to emit helper setting rules for forwarded DNAT traffic.

When "option helper" is not defined for a redirect and when the global
option "auto_helper" is not disabled, fw3 will pick a suitable helper
based on the destination protocol and port and assign it to DNATed traffic.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
17 files changed:
CMakeLists.txt
defaults.c
helpers.c [new file with mode: 0644]
helpers.conf [new file with mode: 0644]
helpers.h [new file with mode: 0644]
iptables.c
iptables.h
main.c
options.c
options.h
redirects.c
redirects.h
rules.c
rules.h
utils.c
utils.h
zones.c