From 663f82c158712c01dad09d5c6ab03f5cd3f600c6 Mon Sep 17 00:00:00 2001 From: Tom Eastep Date: Sat, 20 Feb 2016 09:24:06 -0800 Subject: [PATCH] Move nat POSTROUTING rules to SHOREWALL if DOCKER=Yes Signed-off-by: Tom Eastep --- Shorewall/Perl/Shorewall/Chains.pm | 5 +++++ Shorewall/Perl/Shorewall/Config.pm | 1 + Shorewall/Perl/Shorewall/Misc.pm | 12 +++++++----- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Shorewall/Perl/Shorewall/Chains.pm b/Shorewall/Perl/Shorewall/Chains.pm index c5bfafdc1..029ef7854 100644 --- a/Shorewall/Perl/Shorewall/Chains.pm +++ b/Shorewall/Perl/Shorewall/Chains.pm @@ -2994,6 +2994,11 @@ sub initialize_chain_table($) { # Create this chain early in case it is needed by Policy actions # new_standard_chain 'reject'; + + if ( $config{DOCKER} ) { + my $chainref = new_nat_chain( $globals{POSTROUTING} = 'SHOREWALL' ); + set_optflags( $chainref, DONT_OPTIMIZE | DONT_DELETE | DONT_MOVE ); + } } my $ruleref = transform_rule( $globals{LOGLIMIT} ); diff --git a/Shorewall/Perl/Shorewall/Config.pm b/Shorewall/Perl/Shorewall/Config.pm index eb967cb86..ab0e9d35e 100644 --- a/Shorewall/Perl/Shorewall/Config.pm +++ b/Shorewall/Perl/Shorewall/Config.pm @@ -736,6 +736,7 @@ sub initialize( $;$$) { RPFILTER_LOG_TAG => '', INVALID_LOG_TAG => '', UNTRACKED_LOG_TAG => '', + POSTROUTING => 'POSTROUTING', ); # # From shorewall.conf file diff --git a/Shorewall/Perl/Shorewall/Misc.pm b/Shorewall/Perl/Shorewall/Misc.pm index f49925759..bf09bf1af 100644 --- a/Shorewall/Perl/Shorewall/Misc.pm +++ b/Shorewall/Perl/Shorewall/Misc.pm @@ -1508,13 +1508,15 @@ sub add_interface_jumps { # Add Nat jumps # for my $interface ( @_ ) { - addnatjump 'POSTROUTING' , snat_chain( $interface ), imatch_dest_dev( $interface ); + addnatjump $globals{POSTROUTING} , snat_chain( $interface ), imatch_dest_dev( $interface ); } + addnatjump( 'POSTROUTING', 'SHOREWALL' ) if $config{DOCKER}; + for my $interface ( @interfaces ) { addnatjump 'PREROUTING' , input_chain( $interface ) , imatch_source_dev( $interface ); - addnatjump 'POSTROUTING' , output_chain( $interface ) , imatch_dest_dev( $interface ); - addnatjump 'POSTROUTING' , masq_chain( $interface ) , imatch_dest_dev( $interface ); + addnatjump $globals{POSTROUTING} , output_chain( $interface ) , imatch_dest_dev( $interface ); + addnatjump $globals{POSTROUTING} , masq_chain( $interface ) , imatch_dest_dev( $interface ); if ( have_capability 'RAWPOST_TABLE' ) { insert_ijump ( $rawpost_table->{POSTROUTING}, j => postrouting_chain( $interface ), 0, imatch_dest_dev( $interface) ) if $rawpost_table->{postrouting_chain $interface}; @@ -2246,8 +2248,8 @@ sub generate_matrix() { # # Make sure that the 1:1 NAT jumps are last in PREROUTING # - addnatjump 'PREROUTING' , 'nat_in'; - addnatjump 'POSTROUTING' , 'nat_out'; + addnatjump 'PREROUTING' , 'nat_in'; + addnatjump $globals{POSTROUTING} , 'nat_out'; add_interface_jumps @interfaces unless $interface_jumps_added;