mirror of
https://gitlab.com/shorewall/code.git
synced 2025-06-21 18:21:27 +02:00
Add SPORT column to the snat file (FORMAT 2)
Signed-off-by: Tom Eastep <teastep@shorewall.net>
This commit is contained in:
parent
e4f24f41fd
commit
e3f139bbdb
@ -1800,7 +1800,7 @@ sub isolate_basic_target( $ ) {
|
|||||||
|
|
||||||
sub process_rule ( $$$$$$$$$$$$$$$$$$$$ );
|
sub process_rule ( $$$$$$$$$$$$$$$$$$$$ );
|
||||||
sub process_mangle_rule1( $$$$$$$$$$$$$$$$$$$ );
|
sub process_mangle_rule1( $$$$$$$$$$$$$$$$$$$ );
|
||||||
sub process_snat1( $$$$$$$$$$$$ );
|
sub process_snat1( $$$$$$$$$$$$$ );
|
||||||
sub perl_action_helper( $$;$$ );
|
sub perl_action_helper( $$;$$ );
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -1994,23 +1994,49 @@ sub process_action(\$\$$) {
|
|||||||
set_inline_matches( $matches );
|
set_inline_matches( $matches );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
my ( $action, $source, $dest, $protos, $port, $ipsec, $mark, $user, $condition, $origdest, $probability) =
|
my ( $action, $source, $dest, $protos, $port, $sport, $ipsec, $mark, $user, $condition, $origdest, $probability);
|
||||||
split_line2( 'snat file',
|
|
||||||
{ action =>0,
|
if ( $file_format == 1 ) {
|
||||||
source => 1,
|
( $action, $source, $dest, $protos, $port, $ipsec, $mark, $user, $condition, $origdest, $probability) =
|
||||||
dest => 2,
|
split_line2( 'snat file',
|
||||||
proto => 3,
|
{ action =>0,
|
||||||
port => 4,
|
source => 1,
|
||||||
ipsec => 5,
|
dest => 2,
|
||||||
mark => 6,
|
proto => 3,
|
||||||
user => 7,
|
port => 4,
|
||||||
switch => 8,
|
dport => 4,
|
||||||
origdest => 9,
|
ipsec => 5,
|
||||||
probability => 10,
|
mark => 6,
|
||||||
},
|
user => 7,
|
||||||
{},
|
switch => 8,
|
||||||
11,
|
origdest => 9,
|
||||||
1 );
|
probability => 10,
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
11,
|
||||||
|
1 );
|
||||||
|
$sport = '-';
|
||||||
|
} else {
|
||||||
|
( $action, $source, $dest, $protos, $port, $sport, $ipsec, $mark, $user, $condition, $origdest, $probability) =
|
||||||
|
split_line2( 'snat file',
|
||||||
|
{ action =>0,
|
||||||
|
source => 1,
|
||||||
|
dest => 2,
|
||||||
|
proto => 3,
|
||||||
|
port => 4,
|
||||||
|
dport => 4,
|
||||||
|
sport => 5,
|
||||||
|
ipsec => 6,
|
||||||
|
mark => 7,
|
||||||
|
user => 8,
|
||||||
|
switch => 9,
|
||||||
|
origdest => 10,
|
||||||
|
probability => 11,
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
12,
|
||||||
|
1 );
|
||||||
|
}
|
||||||
|
|
||||||
fatal_error 'ACTION must be specified' if $action eq '-';
|
fatal_error 'ACTION must be specified' if $action eq '-';
|
||||||
|
|
||||||
@ -2026,6 +2052,7 @@ sub process_action(\$\$$) {
|
|||||||
$dest,
|
$dest,
|
||||||
$proto,
|
$proto,
|
||||||
$port,
|
$port,
|
||||||
|
$sport,
|
||||||
$ipsec,
|
$ipsec,
|
||||||
$mark,
|
$mark,
|
||||||
$user,
|
$user,
|
||||||
@ -5401,8 +5428,8 @@ sub process_mangle_rule( $ ) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub process_snat_inline( $$$$$$$$$$$$$$ ) {
|
sub process_snat_inline( $$$$$$$$$$$$$$$ ) {
|
||||||
my ($inline, $chainref, $params, $loglevel, $source, $dest, $protos, $ports, $ipsec, $mark, $user, $condition, $origdest, $probability ) = @_;
|
my ($inline, $chainref, $params, $loglevel, $source, $dest, $protos, $ports, $sports, $ipsec, $mark, $user, $condition, $origdest, $probability ) = @_;
|
||||||
|
|
||||||
my ( $level,
|
my ( $level,
|
||||||
$tag ) = split( ':', $loglevel, 2 );
|
$tag ) = split( ':', $loglevel, 2 );
|
||||||
@ -5421,28 +5448,54 @@ sub process_snat_inline( $$$$$$$$$$$$$$ ) {
|
|||||||
|
|
||||||
progress_message "..Expanding inline action $inlinefile...";
|
progress_message "..Expanding inline action $inlinefile...";
|
||||||
|
|
||||||
push_open $inlinefile, 2, 1, undef , 2;
|
push_open $inlinefile, 2, 1, undef , 1;
|
||||||
|
|
||||||
my $save_comment = push_comment;
|
my $save_comment = push_comment;
|
||||||
|
|
||||||
while ( read_a_line( NORMAL_READ ) ) {
|
while ( read_a_line( NORMAL_READ ) ) {
|
||||||
my ( $maction, $msource, $mdest, $mprotos, $mports, $mipsec, $mmark, $muser, $mcondition, $morigdest, $mprobability) =
|
my ( $maction, $msource, $mdest, $mprotos, $mports, $msports, $mipsec, $mmark, $muser, $mcondition, $morigdest, $mprobability);
|
||||||
split_line2( 'snat file',
|
|
||||||
{ action =>0,
|
if ( $file_format == 1 ) {
|
||||||
source => 1,
|
( $maction, $msource, $mdest, $mprotos, $mports, $mipsec, $mmark, $muser, $mcondition, $morigdest, $mprobability) =
|
||||||
dest => 2,
|
split_line2( 'snat file',
|
||||||
proto => 3,
|
{ action =>0,
|
||||||
port => 4,
|
source => 1,
|
||||||
ipsec => 5,
|
dest => 2,
|
||||||
mark => 6,
|
proto => 3,
|
||||||
user => 7,
|
port => 4,
|
||||||
switch => 8,
|
dport => 4,
|
||||||
origdest => 9,
|
ipsec => 5,
|
||||||
probability => 10,
|
mark => 6,
|
||||||
},
|
user => 7,
|
||||||
{},
|
switch => 8,
|
||||||
11,
|
origdest => 9,
|
||||||
1 );
|
probability => 10,
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
11,
|
||||||
|
1 );
|
||||||
|
$msports = '-';
|
||||||
|
} else {
|
||||||
|
( $maction, $msource, $mdest, $mprotos, $mports, $msports, $mipsec, $mmark, $muser, $mcondition, $morigdest, $mprobability) =
|
||||||
|
split_line2( 'snat file',
|
||||||
|
{ action =>0,
|
||||||
|
source => 1,
|
||||||
|
dest => 2,
|
||||||
|
proto => 3,
|
||||||
|
port => 4,
|
||||||
|
dport => 4,
|
||||||
|
sport => 5,
|
||||||
|
ipsec => 6,
|
||||||
|
mark => 7,
|
||||||
|
user => 8,
|
||||||
|
switch => 9,
|
||||||
|
origdest => 10,
|
||||||
|
probability => 11,
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
12,
|
||||||
|
1 );
|
||||||
|
}
|
||||||
|
|
||||||
fatal_error 'ACTION must be specified' if $maction eq '-';
|
fatal_error 'ACTION must be specified' if $maction eq '-';
|
||||||
|
|
||||||
@ -5470,6 +5523,7 @@ sub process_snat_inline( $$$$$$$$$$$$$$ ) {
|
|||||||
$mdest,
|
$mdest,
|
||||||
$proto,
|
$proto,
|
||||||
merge_macro_column( $mports, $ports ),
|
merge_macro_column( $mports, $ports ),
|
||||||
|
merge_macro_column( $msports, $sports ),
|
||||||
merge_macro_column( $mipsec, $ipsec ),
|
merge_macro_column( $mipsec, $ipsec ),
|
||||||
merge_macro_column( $mmark, $mark ),
|
merge_macro_column( $mmark, $mark ),
|
||||||
merge_macro_column( $muser, $user ),
|
merge_macro_column( $muser, $user ),
|
||||||
@ -5496,8 +5550,8 @@ sub process_snat_inline( $$$$$$$$$$$$$$ ) {
|
|||||||
#
|
#
|
||||||
# Process a record in the snat file
|
# Process a record in the snat file
|
||||||
#
|
#
|
||||||
sub process_snat1( $$$$$$$$$$$$ ) {
|
sub process_snat1( $$$$$$$$$$$$$ ) {
|
||||||
my ( $chainref, $origaction, $source, $dest, $proto, $ports, $ipsec, $mark, $user, $condition, $origdest, $probability ) = @_;
|
my ( $chainref, $origaction, $source, $dest, $proto, $ports, $sports, $ipsec, $mark, $user, $condition, $origdest, $probability ) = @_;
|
||||||
|
|
||||||
my $inchain;
|
my $inchain;
|
||||||
my $inaction;
|
my $inaction;
|
||||||
@ -5609,7 +5663,7 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
#
|
#
|
||||||
# Handle Protocol, Ports and Condition
|
# Handle Protocol, Ports and Condition
|
||||||
#
|
#
|
||||||
$baserule .= do_proto( $proto, $ports, '' );
|
$baserule .= do_proto( $proto, $ports, $sports );
|
||||||
#
|
#
|
||||||
# Handle Mark
|
# Handle Mark
|
||||||
#
|
#
|
||||||
@ -5856,6 +5910,7 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
supplied( $destnets ) && $destnets ne '-' ? $inaction || $interface ? join( ':', $interface, $destnets ) : $destnets : $inaction ? '-' : $interface,
|
supplied( $destnets ) && $destnets ne '-' ? $inaction || $interface ? join( ':', $interface, $destnets ) : $destnets : $inaction ? '-' : $interface,
|
||||||
$proto,
|
$proto,
|
||||||
$ports,
|
$ports,
|
||||||
|
$sports,
|
||||||
$ipsec,
|
$ipsec,
|
||||||
$mark,
|
$mark,
|
||||||
$user,
|
$user,
|
||||||
@ -5968,18 +6023,30 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
|
|
||||||
sub process_snat( )
|
sub process_snat( )
|
||||||
{
|
{
|
||||||
my ($action, $source, $dest, $protos, $ports, $ipsec, $mark, $user, $condition, $origdest, $probability ) =
|
my ($action, $source, $dest, $protos, $ports, $sports, $ipsec, $mark, $user, $condition, $origdest, $probability );
|
||||||
split_line2( 'snat file',
|
|
||||||
{ action => 0, source => 1, dest => 2, proto => 3, port => 4, dport => 4, ipsec => 5, mark => 6, user => 7, switch => 8, origdest => 9, probability => 10 },
|
if ( $file_format == 1 ) {
|
||||||
{}, #Nopad
|
($action, $source, $dest, $protos, $ports, $ipsec, $mark, $user, $condition, $origdest, $probability ) =
|
||||||
11, #Columns
|
split_line2( 'snat file',
|
||||||
1 ); #Allow inline matches
|
{ action => 0, source => 1, dest => 2, proto => 3, port => 4, dport => 4, ipsec => 5, mark => 6, user => 7, switch => 8, origdest => 9, probability => 10 },
|
||||||
|
{}, #Nopad
|
||||||
|
11, #Columns
|
||||||
|
1 ); #Allow inline matches
|
||||||
|
$sports = '-';
|
||||||
|
} else {
|
||||||
|
($action, $source, $dest, $protos, $ports, $sports, $ipsec, $mark, $user, $condition, $origdest, $probability ) =
|
||||||
|
split_line2( 'snat file',
|
||||||
|
{ action => 0, source => 1, dest => 2, proto => 3, port => 4, dport => 4, sport => 5, ipsec => 6, mark => 7, user => 8, switch => 9, origdest => 10, probability => 11 },
|
||||||
|
{}, #Nopad
|
||||||
|
12, #Columns
|
||||||
|
1 ); #Allow inline matches
|
||||||
|
}
|
||||||
|
|
||||||
fatal_error 'ACTION must be specified' if $action eq '-';
|
fatal_error 'ACTION must be specified' if $action eq '-';
|
||||||
fatal_error 'DEST must be specified' if $dest eq '-';
|
fatal_error 'DEST must be specified' if $dest eq '-';
|
||||||
|
|
||||||
for my $proto ( split_list $protos, 'Protocol' ) {
|
for my $proto ( split_list $protos, 'Protocol' ) {
|
||||||
process_snat1( undef, $action, $source, $dest, $proto, $ports, $ipsec, $mark, $user, $condition, $origdest, $probability );
|
process_snat1( undef, $action, $source, $dest, $proto, $ports, $sports, $ipsec, $mark, $user, $condition, $origdest, $probability );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5994,7 +6061,7 @@ sub setup_snat()
|
|||||||
#
|
#
|
||||||
# Masq file was empty or didn't exist
|
# Masq file was empty or didn't exist
|
||||||
#
|
#
|
||||||
if ( $fn = open_file( 'snat', 1, 1 ) ) {
|
if ( $fn = open_file( 'snat', 2, 1, undef, 1 ) ) {
|
||||||
first_entry( sub { progress_message2 "$doing $fn..."; require_capability 'NAT_ENABLED' , "a non-empty snat file" , 's'; } );
|
first_entry( sub { progress_message2 "$doing $fn..."; require_capability 'NAT_ENABLED' , "a non-empty snat file" , 's'; } );
|
||||||
process_snat while read_a_line( NORMAL_READ );
|
process_snat while read_a_line( NORMAL_READ );
|
||||||
}
|
}
|
||||||
|
@ -12,8 +12,9 @@
|
|||||||
# For information about entries in this file, type "man shorewall-snat"
|
# For information about entries in this file, type "man shorewall-snat"
|
||||||
#
|
#
|
||||||
# See https://shorewall.org/manpages/shorewall-snat.html for more information
|
# See https://shorewall.org/manpages/shorewall-snat.html for more information
|
||||||
###########################################################################################################################################
|
?FORMAT 2
|
||||||
#ACTION SOURCE DEST PROTO DPORT IPSEC MARK USER SWITCH ORIGDEST PROBABILITY
|
###################################################################################################################################################
|
||||||
|
#ACTION SOURCE DEST PROTO DPORT SPORT IPSEC MARK USER SWITCH ORIGDEST PROBABILITY
|
||||||
#
|
#
|
||||||
# Rules generated from masq file /home/teastep/shorewall/trunk/Shorewall/Samples/three-interfaces/masq by Shorewall 5.0.13-RC1 - Sat Oct 15 11:43:47 PDT 2016
|
# Rules generated from masq file /home/teastep/shorewall/trunk/Shorewall/Samples/three-interfaces/masq by Shorewall 5.0.13-RC1 - Sat Oct 15 11:43:47 PDT 2016
|
||||||
#
|
#
|
||||||
|
@ -12,8 +12,9 @@
|
|||||||
# For information about entries in this file, type "man shorewall-snat"
|
# For information about entries in this file, type "man shorewall-snat"
|
||||||
#
|
#
|
||||||
# See https://shorewall.org/manpages/shorewall-snat.html for more information
|
# See https://shorewall.org/manpages/shorewall-snat.html for more information
|
||||||
###########################################################################################################################################
|
?FORMAT 2
|
||||||
#ACTION SOURCE DEST PROTO DPORT IPSEC MARK USER SWITCH ORIGDEST PROBABILITY
|
###################################################################################################################################################
|
||||||
|
#ACTION SOURCE DEST PROTO DPORT SPORT IPSEC MARK USER SWITCH ORIGDEST PROBABILITY
|
||||||
#
|
#
|
||||||
# Rules generated from masq file /home/teastep/shorewall/trunk/Shorewall/Samples/two-interfaces/masq by Shorewall 5.0.13-RC1 - Sat Oct 15 11:41:40 PDT 2016
|
# Rules generated from masq file /home/teastep/shorewall/trunk/Shorewall/Samples/two-interfaces/masq by Shorewall 5.0.13-RC1 - Sat Oct 15 11:41:40 PDT 2016
|
||||||
#
|
#
|
||||||
|
@ -5,5 +5,6 @@
|
|||||||
#
|
#
|
||||||
# See https://shorewall.org/manpages/shorewall-snat.html for more information
|
# See https://shorewall.org/manpages/shorewall-snat.html for more information
|
||||||
#
|
#
|
||||||
###########################################################################################################################################
|
?FORMAT 2
|
||||||
#ACTION SOURCE DEST PROTO DPORT IPSEC MARK USER SWITCH ORIGDEST PROBABILITY
|
###################################################################################################################################################
|
||||||
|
#ACTION SOURCE DEST PROTO DPORT SPORT IPSEC MARK USER SWITCH ORIGDEST PROBABILITY
|
||||||
|
@ -45,6 +45,20 @@
|
|||||||
that.</para>
|
that.</para>
|
||||||
</warning>
|
</warning>
|
||||||
|
|
||||||
|
<para>Beginning with Shorewall 5.2.6, the snat file supports two different
|
||||||
|
formats:</para>
|
||||||
|
|
||||||
|
<orderedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>The SPORT (source port) column is omitted. This is the default
|
||||||
|
unless a "?FORMAT 2" compiler directive is included.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>The SPORT column immediately follows the DPORT column.</para>
|
||||||
|
</listitem>
|
||||||
|
</orderedlist>
|
||||||
|
|
||||||
<para>The columns in the file are as follows.</para>
|
<para>The columns in the file are as follows.</para>
|
||||||
|
|
||||||
<variablelist>
|
<variablelist>
|
||||||
@ -378,6 +392,27 @@
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><emphasis role="bold">SPORT
|
||||||
|
{-|[!]<replaceable>port-name-or-number</replaceable>[,<replaceable>port-name-or-number</replaceable>]...|+<replaceable>ipset</replaceable>}</emphasis></term>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>FORMAT 2 only.</para>
|
||||||
|
|
||||||
|
<para>If the PROTO column specifies TCP (6), UDP (17), DCCP (33),
|
||||||
|
SCTP (132) or UDPLITE (136) then you may list one or more port
|
||||||
|
numbers (or names from services(5)) or port ranges separated by
|
||||||
|
commas.</para>
|
||||||
|
|
||||||
|
<para>Port ranges are of the form
|
||||||
|
<emphasis>lowport</emphasis>:<emphasis>highport</emphasis>.</para>
|
||||||
|
|
||||||
|
<para>An <replaceable>ipset</replaceable> name can be specified in
|
||||||
|
this column. This is intended to be used with
|
||||||
|
<firstterm>bitmap:port</firstterm> ipsets.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><emphasis role="bold">IPSEC</emphasis> (Optional) -
|
<term><emphasis role="bold">IPSEC</emphasis> (Optional) -
|
||||||
[<emphasis>option</emphasis>[<emphasis
|
[<emphasis>option</emphasis>[<emphasis
|
||||||
|
@ -5,5 +5,7 @@
|
|||||||
#
|
#
|
||||||
# See https://shorewall.org/manpages/shorewall-snat.html for more information
|
# See https://shorewall.org/manpages/shorewall-snat.html for more information
|
||||||
#
|
#
|
||||||
###########################################################################################################################################
|
?FORMAT 2
|
||||||
#ACTION SOURCE DEST PROTO DPORT IPSEC MARK USER SWITCH ORIGDEST PROBABILITY
|
###################################################################################################################################################
|
||||||
|
#ACTION SOURCE DEST PROTO DPORT SPORT IPSEC MARK USER SWITCH ORIGDEST PROBABILITY
|
||||||
|
|
||||||
|
@ -741,9 +741,9 @@ ACCEPT net:\
|
|||||||
<row>
|
<row>
|
||||||
<entry>snat</entry>
|
<entry>snat</entry>
|
||||||
|
|
||||||
<entry>action,source,dest,proto,port,ipsec,mark,user,switch,origdest,probability
|
<entry>action,source,dest,proto,port,sport,ipsec,mark,user,switch,origdest,probability
|
||||||
(Note: 'port' may be specified as 'dport' beginning with Shorewall
|
(Note: 'port' may be specified as 'dport', beginning with
|
||||||
5.2.6).</entry>
|
Shorewall 5.2.6).</entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row>
|
<row>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user