forked from extern/shorewall_code
Compare commits
36 Commits
5.0.6
...
5.0.7-Beta
Author | SHA1 | Date | |
---|---|---|---|
|
407bc8f8db | ||
|
2743a411ae | ||
|
1a23e840d7 | ||
|
bed747c20b | ||
|
c2fd48c4c6 | ||
|
054637880b | ||
|
5f01bc75bd | ||
|
0e59b82503 | ||
|
33343aaf17 | ||
|
90ace544eb | ||
|
c36cee28fb | ||
|
df5f34951c | ||
|
ec2ebee0e6 | ||
|
a50c52675b | ||
|
bb7b3123df | ||
|
3960fa6e0e | ||
|
a7fda02d88 | ||
|
68a324c62c | ||
|
d179615fca | ||
|
6779c8307f | ||
|
147c7e284f | ||
|
8d657775af | ||
|
b14bf0e779 | ||
|
dc286c472c | ||
|
87f63b7160 | ||
|
617218f8ea | ||
|
ec9148637f | ||
|
991d8d2d3f | ||
|
301bce5d34 | ||
|
1add0487f6 | ||
|
a4aa020a84 | ||
|
81c16d2d67 | ||
|
bbbf54f7c3 | ||
|
ba6dc9c5c0 | ||
|
89b2c2fb55 | ||
|
43a81e85f7 |
@@ -59,21 +59,21 @@ our $acctable;
|
|||||||
#
|
#
|
||||||
|
|
||||||
use constant {
|
use constant {
|
||||||
LEGACY => 0,
|
LEGACY_SECTION => 0,
|
||||||
PREROUTING => 1,
|
PREROUTING_SECTION => 1,
|
||||||
INPUT => 2,
|
INPUT_SECTION => 2,
|
||||||
OUTPUT => 3,
|
OUTPUT_SECTION => 3,
|
||||||
FORWARD => 4,
|
FORWARD_SECTION => 4,
|
||||||
POSTROUTING => 5
|
POSTROUTING_SECTION => 5
|
||||||
};
|
};
|
||||||
#
|
#
|
||||||
# Map names to values
|
# Map names to values
|
||||||
#
|
#
|
||||||
our %asections = ( PREROUTING => PREROUTING,
|
our %asections = ( PREROUTING => PREROUTING_SECTION,
|
||||||
INPUT => INPUT,
|
INPUT => INPUT_SECTION,
|
||||||
FORWARD => FORWARD,
|
FORWARD => FORWARD_SECTION,
|
||||||
OUTPUT => OUTPUT,
|
OUTPUT => OUTPUT_SECTION,
|
||||||
POSTROUTING => POSTROUTING
|
POSTROUTING => POSTROUTING_SECTION
|
||||||
);
|
);
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -157,7 +157,7 @@ sub process_accounting_rule1( $$$$$$$$$$$ ) {
|
|||||||
|
|
||||||
$jumpchainref = 0;
|
$jumpchainref = 0;
|
||||||
|
|
||||||
$asection = LEGACY if $asection < 0;
|
$asection = LEGACY_SECTION if $asection < 0;
|
||||||
|
|
||||||
our $disposition = '';
|
our $disposition = '';
|
||||||
|
|
||||||
|
@@ -138,6 +138,17 @@ our %EXPORT_TAGS = (
|
|||||||
ALL_COMMANDS
|
ALL_COMMANDS
|
||||||
NOT_RESTORE
|
NOT_RESTORE
|
||||||
|
|
||||||
|
PREROUTING
|
||||||
|
INPUT
|
||||||
|
FORWARD
|
||||||
|
OUTPUT
|
||||||
|
POSTROUTING
|
||||||
|
ALLCHAINS
|
||||||
|
STICKY
|
||||||
|
STICKO
|
||||||
|
REALPREROUTING
|
||||||
|
ACTIONCHAIN
|
||||||
|
|
||||||
unreachable_warning
|
unreachable_warning
|
||||||
state_match
|
state_match
|
||||||
state_imatch
|
state_imatch
|
||||||
@@ -188,6 +199,7 @@ our %EXPORT_TAGS = (
|
|||||||
ensure_raw_chain
|
ensure_raw_chain
|
||||||
ensure_rawpost_chain
|
ensure_rawpost_chain
|
||||||
new_standard_chain
|
new_standard_chain
|
||||||
|
new_action_chain
|
||||||
new_builtin_chain
|
new_builtin_chain
|
||||||
new_nat_chain
|
new_nat_chain
|
||||||
optimize_chain
|
optimize_chain
|
||||||
@@ -325,6 +337,10 @@ our $VERSION = 'MODULEVERSION';
|
|||||||
# complete => The last rule in the chain is a -g or a simple -j to a terminating target
|
# complete => The last rule in the chain is a -g or a simple -j to a terminating target
|
||||||
# Suppresses adding additional rules to the chain end of the chain
|
# Suppresses adding additional rules to the chain end of the chain
|
||||||
# sections => { <section> = 1, ... } - Records sections that have been completed.
|
# sections => { <section> = 1, ... } - Records sections that have been completed.
|
||||||
|
# chainnumber => Numeric enumeration of the builtin chains (mangle table only).
|
||||||
|
# allowedchains
|
||||||
|
# => Mangle action chains only -- specifies the set of builtin chains where
|
||||||
|
# this action may be used.
|
||||||
# } ,
|
# } ,
|
||||||
# <chain2> => ...
|
# <chain2> => ...
|
||||||
# }
|
# }
|
||||||
@@ -456,6 +472,22 @@ use constant { NO_RESTRICT => 0, # FORWARD chain rule - Both -i an
|
|||||||
ALL_RESTRICT => 12, # fw->fw rule - neither -i nor -o allowed
|
ALL_RESTRICT => 12, # fw->fw rule - neither -i nor -o allowed
|
||||||
DESTIFACE_DISALLOW => 32, # Don't allow dest interface. Similar to INPUT_RESTRICT but generates a more relevant error message
|
DESTIFACE_DISALLOW => 32, # Don't allow dest interface. Similar to INPUT_RESTRICT but generates a more relevant error message
|
||||||
};
|
};
|
||||||
|
#
|
||||||
|
# Mangle Table allowed chains enumeration
|
||||||
|
#
|
||||||
|
use constant {
|
||||||
|
PREROUTING => 1, #Actually tcpre
|
||||||
|
INPUT => 2, #Actually tcin
|
||||||
|
FORWARD => 4, #Actually tcfor
|
||||||
|
OUTPUT => 8, #Actually tcout
|
||||||
|
POSTROUTING => 16, #Actually tcpost
|
||||||
|
ALLCHAINS => 31,
|
||||||
|
STICKY => 32,
|
||||||
|
STICKO => 64,
|
||||||
|
REALPREROUTING => 128,
|
||||||
|
ACTIONCHAIN => 256,
|
||||||
|
};
|
||||||
|
|
||||||
#
|
#
|
||||||
# Possible IPSET options
|
# Possible IPSET options
|
||||||
#
|
#
|
||||||
@@ -904,7 +936,7 @@ sub set_rule_option( $$$ ) {
|
|||||||
#
|
#
|
||||||
# Shorewall::Rules::perl_action_tcp_helper() can produce rules that have two -p specifications.
|
# Shorewall::Rules::perl_action_tcp_helper() can produce rules that have two -p specifications.
|
||||||
# The first will have a modifier like '! --syn' while the second will not. We want to retain
|
# The first will have a modifier like '! --syn' while the second will not. We want to retain
|
||||||
# the first while
|
# the first one.
|
||||||
if ( $option eq 'p' ) {
|
if ( $option eq 'p' ) {
|
||||||
my ( $proto ) = split( ' ', $ruleref->{p} );
|
my ( $proto ) = split( ' ', $ruleref->{p} );
|
||||||
return if $proto eq $value;
|
return if $proto eq $value;
|
||||||
@@ -2325,6 +2357,7 @@ sub new_chain($$)
|
|||||||
filtered => 0,
|
filtered => 0,
|
||||||
optflags => 0,
|
optflags => 0,
|
||||||
origin => shortlineinfo( '' ),
|
origin => shortlineinfo( '' ),
|
||||||
|
restriction => NO_RESTRICT,
|
||||||
};
|
};
|
||||||
|
|
||||||
trace( $chainref, 'N', undef, '' ) if $debug;
|
trace( $chainref, 'N', undef, '' ) if $debug;
|
||||||
@@ -2738,6 +2771,13 @@ sub new_standard_chain($) {
|
|||||||
$chainref;
|
$chainref;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub new_action_chain($$) {
|
||||||
|
my $chainref = &new_chain( @_ );
|
||||||
|
$chainref->{referenced} = 1;
|
||||||
|
$chainref->{allowedchains} = ALLCHAINS | REALPREROUTING | ACTIONCHAIN;
|
||||||
|
$chainref;
|
||||||
|
}
|
||||||
|
|
||||||
sub new_nat_chain($) {
|
sub new_nat_chain($) {
|
||||||
my $chainref = new_chain 'nat' ,$_[0];
|
my $chainref = new_chain 'nat' ,$_[0];
|
||||||
$chainref->{referenced} = 1;
|
$chainref->{referenced} = 1;
|
||||||
@@ -3001,6 +3041,12 @@ sub initialize_chain_table($) {
|
|||||||
$chainref = new_nat_chain( $globals{POSTROUTING} = 'SHOREWALL' );
|
$chainref = new_nat_chain( $globals{POSTROUTING} = 'SHOREWALL' );
|
||||||
set_optflags( $chainref, DONT_OPTIMIZE | DONT_DELETE | DONT_MOVE );
|
set_optflags( $chainref, DONT_OPTIMIZE | DONT_DELETE | DONT_MOVE );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$mangle_table->{PREROUTING}{chainnumber} = PREROUTING;
|
||||||
|
$mangle_table->{INPUT}{chainnumber} = INPUT;
|
||||||
|
$mangle_table->{OUTPUT}{chainnumber} = OUTPUT;
|
||||||
|
$mangle_table->{FORWARD}{chainnumber} = FORWARD;
|
||||||
|
$mangle_table->{POSTROUTING}{chainnumber} = POSTROUTING;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( my $docker = $config{DOCKER} ) {
|
if ( my $docker = $config{DOCKER} ) {
|
||||||
@@ -4469,7 +4515,7 @@ sub clearrule() {
|
|||||||
sub state_match( $ ) {
|
sub state_match( $ ) {
|
||||||
my $state = shift;
|
my $state = shift;
|
||||||
|
|
||||||
if ( $state eq 'ALL' ) {
|
if ( $state eq 'ALL' || $state eq '-' ) {
|
||||||
''
|
''
|
||||||
} else {
|
} else {
|
||||||
have_capability( 'CONNTRACK_MATCH' ) ? ( "-m conntrack --ctstate $state " ) : ( "-m state --state $state " );
|
have_capability( 'CONNTRACK_MATCH' ) ? ( "-m conntrack --ctstate $state " ) : ( "-m state --state $state " );
|
||||||
@@ -6782,14 +6828,12 @@ sub get_interface_gateway ( $;$ ) {
|
|||||||
my $interface = get_physical $logical;
|
my $interface = get_physical $logical;
|
||||||
my $variable = interface_gateway( $interface );
|
my $variable = interface_gateway( $interface );
|
||||||
|
|
||||||
my $routine = $config{USE_DEFAULT_RT} ? 'detect_dynamic_gateway' : 'detect_gateway';
|
|
||||||
|
|
||||||
$global_variables |= ALL_COMMANDS;
|
$global_variables |= ALL_COMMANDS;
|
||||||
|
|
||||||
if ( interface_is_optional $logical ) {
|
if ( interface_is_optional $logical ) {
|
||||||
$interfacegateways{$interface} = qq([ -n "\$$variable" ] || $variable=\$($routine $interface));
|
$interfacegateways{$interface} = qq([ -n "\$$variable" ] || $variable=\$(detect_gateway $interface));
|
||||||
} else {
|
} else {
|
||||||
$interfacegateways{$interface} = qq([ -n "\$$variable" ] || $variable=\$($routine $interface)
|
$interfacegateways{$interface} = qq([ -n "\$$variable" ] || $variable=\$(detect_gateway $interface)
|
||||||
[ -n "\$$variable" ] || startup_error "Unable to detect the gateway through interface $interface");
|
[ -n "\$$variable" ] || startup_error "Unable to detect the gateway through interface $interface");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7702,7 +7746,7 @@ sub expand_rule( $$$$$$$$$$$$;$ )
|
|||||||
# No logging or user-specified logging -- add the target rule with matches to the rule chain
|
# No logging or user-specified logging -- add the target rule with matches to the rule chain
|
||||||
#
|
#
|
||||||
if ( $targetref ) {
|
if ( $targetref ) {
|
||||||
add_expanded_jump( $chainref, $targetref , 0, $matches );
|
add_expanded_jump( $chainref, $targetref , 0, $prerule . $matches );
|
||||||
} else {
|
} else {
|
||||||
add_rule( $chainref, $prerule . $matches . $jump , 1 );
|
add_rule( $chainref, $prerule . $matches . $jump , 1 );
|
||||||
}
|
}
|
||||||
@@ -7718,7 +7762,7 @@ sub expand_rule( $$$$$$$$$$$$;$ )
|
|||||||
'' ,
|
'' ,
|
||||||
$logtag ,
|
$logtag ,
|
||||||
'add' ,
|
'add' ,
|
||||||
$matches
|
$prerule . $matches
|
||||||
);
|
);
|
||||||
} elsif ( $logname || $basictarget eq 'RETURN' ) {
|
} elsif ( $logname || $basictarget eq 'RETURN' ) {
|
||||||
log_rule_limit(
|
log_rule_limit(
|
||||||
@@ -7729,7 +7773,7 @@ sub expand_rule( $$$$$$$$$$$$;$ )
|
|||||||
'',
|
'',
|
||||||
$logtag,
|
$logtag,
|
||||||
'add',
|
'add',
|
||||||
$matches );
|
$prerule . $matches );
|
||||||
|
|
||||||
if ( $targetref ) {
|
if ( $targetref ) {
|
||||||
add_expanded_jump( $chainref, $targetref, 0, $matches );
|
add_expanded_jump( $chainref, $targetref, 0, $matches );
|
||||||
@@ -7749,7 +7793,7 @@ sub expand_rule( $$$$$$$$$$$$;$ )
|
|||||||
$actparms{disposition} || $disposition,
|
$actparms{disposition} || $disposition,
|
||||||
$target ),
|
$target ),
|
||||||
$terminating{$basictarget} || ( $targetref && $targetref->{complete} ),
|
$terminating{$basictarget} || ( $targetref && $targetref->{complete} ),
|
||||||
$matches );
|
$prerule . $matches );
|
||||||
}
|
}
|
||||||
|
|
||||||
conditional_rule_end( $chainref ) if $cond3;
|
conditional_rule_end( $chainref ) if $cond3;
|
||||||
@@ -8578,17 +8622,17 @@ sub preview_netfilter_load() {
|
|||||||
if ( $name =~ /^DOCKER/ ) {
|
if ( $name =~ /^DOCKER/ ) {
|
||||||
if ( $name eq 'DOCKER' ) {
|
if ( $name eq 'DOCKER' ) {
|
||||||
enter_cmd_mode;
|
enter_cmd_mode;
|
||||||
emit( '[ -n "$g_docker" ] && echo ":DOCKER - [0:0]" >&3' );
|
print( '[ -n "$g_docker" ] && echo ":DOCKER - [0:0]" >&3' );
|
||||||
enter_cat_mode;
|
enter_cat_mode;
|
||||||
} elsif ( $name eq 'DOCKER-ISOLATION' ) {
|
} elsif ( $name eq 'DOCKER-ISOLATION' ) {
|
||||||
enter_cmd_mode;
|
enter_cmd_mode;
|
||||||
emit( '[ -n "$g_dockernetwork" ] && echo ":DOCKER-ISOLATION - [0:0]" >&3' );
|
print( '[ -n "$g_dockernetwork" ] && echo ":DOCKER-ISOLATION - [0:0]" >&3' );
|
||||||
enter_cat_mode;
|
enter_cat_mode;
|
||||||
} else {
|
} else {
|
||||||
emit_unindented ":$name - [0:0]";
|
print( ":$name - [0:0]" );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
emit_unindented ":$name - [0:0]";
|
print( ":$name - [0:0]" );
|
||||||
}
|
}
|
||||||
|
|
||||||
push @chains, $chainref;
|
push @chains, $chainref;
|
||||||
|
@@ -95,7 +95,7 @@ sub generate_script_1( $ ) {
|
|||||||
emit "#!$config{SHOREWALL_SHELL}\n#\n# Compiled firewall script generated by Shorewall $globals{VERSION} - $date\n#";
|
emit "#!$config{SHOREWALL_SHELL}\n#\n# Compiled firewall script generated by Shorewall $globals{VERSION} - $date\n#";
|
||||||
|
|
||||||
copy $globals{SHAREDIRPL} . '/lib.core', 0;
|
copy $globals{SHAREDIRPL} . '/lib.core', 0;
|
||||||
copy2 $globals{SHAREDIRPL} . '/lib.common', 0;
|
copy2 $globals{SHAREDIRPL} . '/lib.common', $debug;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -2506,10 +2506,10 @@ sub join_parts( $$$ ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Evaluate an expression in an ?IF, ?ELSIF or ?SET directive
|
# Evaluate an expression in an ?IF, ?ELSIF, ?SET or ?ERROR directive
|
||||||
#
|
#
|
||||||
sub evaluate_expression( $$$ ) {
|
sub evaluate_expression( $$$$ ) {
|
||||||
my ( $expression , $filename , $linenumber ) = @_;
|
my ( $expression , $filename , $linenumber, $just_expand ) = @_;
|
||||||
my $val;
|
my $val;
|
||||||
my $count = 0;
|
my $count = 0;
|
||||||
my $chain = $actparms{chain};
|
my $chain = $actparms{chain};
|
||||||
@@ -2565,7 +2565,7 @@ sub evaluate_expression( $$$ ) {
|
|||||||
|
|
||||||
print "EXPR=> $expression\n" if $debug;
|
print "EXPR=> $expression\n" if $debug;
|
||||||
|
|
||||||
if ( $expression =~ /^\d+$/ ) {
|
if ( $just_expand || $expression =~ /^\d+$/ ) {
|
||||||
$val = $expression
|
$val = $expression
|
||||||
} else {
|
} else {
|
||||||
#
|
#
|
||||||
@@ -2602,7 +2602,7 @@ sub process_compiler_directive( $$$$ ) {
|
|||||||
|
|
||||||
print "CD===> $line\n" if $debug;
|
print "CD===> $line\n" if $debug;
|
||||||
|
|
||||||
directive_error( "Invalid compiler directive ($line)" , $filename, $linenumber ) unless $line =~ /^\s*\?(IF\s+|ELSE|ELSIF\s+|ENDIF|SET\s+|RESET\s+|FORMAT\s+|COMMENT\s*)(.*)$/i;
|
directive_error( "Invalid compiler directive ($line)" , $filename, $linenumber ) unless $line =~ /^\s*\?(IF\s+|ELSE|ELSIF\s+|ENDIF|SET\s+|RESET\s+|FORMAT\s+|COMMENT\s*|ERROR\s+)(.*)$/i;
|
||||||
|
|
||||||
my ($keyword, $expression) = ( uc $1, $2 );
|
my ($keyword, $expression) = ( uc $1, $2 );
|
||||||
|
|
||||||
@@ -2620,7 +2620,7 @@ sub process_compiler_directive( $$$$ ) {
|
|||||||
my %directives =
|
my %directives =
|
||||||
( IF => sub() {
|
( IF => sub() {
|
||||||
directive_error( "Missing IF expression" , $filename, $linenumber ) unless supplied $expression;
|
directive_error( "Missing IF expression" , $filename, $linenumber ) unless supplied $expression;
|
||||||
my $nextomitting = $omitting || ! evaluate_expression( $expression , $filename, $linenumber );
|
my $nextomitting = $omitting || ! evaluate_expression( $expression , $filename, $linenumber , 0 );
|
||||||
push @ifstack, [ 'IF', $omitting, ! $nextomitting, $linenumber ];
|
push @ifstack, [ 'IF', $omitting, ! $nextomitting, $linenumber ];
|
||||||
$omitting = $nextomitting;
|
$omitting = $nextomitting;
|
||||||
} ,
|
} ,
|
||||||
@@ -2632,7 +2632,7 @@ sub process_compiler_directive( $$$$ ) {
|
|||||||
#
|
#
|
||||||
# We can only change to including if we were previously omitting
|
# We can only change to including if we were previously omitting
|
||||||
#
|
#
|
||||||
$omitting = $prioromit || ! evaluate_expression( $expression , $filename, $linenumber );
|
$omitting = $prioromit || ! evaluate_expression( $expression , $filename, $linenumber, 0 );
|
||||||
$included = ! $omitting;
|
$included = ! $omitting;
|
||||||
} else {
|
} else {
|
||||||
#
|
#
|
||||||
@@ -2671,12 +2671,14 @@ sub process_compiler_directive( $$$$ ) {
|
|||||||
directive_error( "Shorewall variables may only be SET in the body of an action", $filename, $linenumber ) unless $actparms{0};
|
directive_error( "Shorewall variables may only be SET in the body of an action", $filename, $linenumber ) unless $actparms{0};
|
||||||
my $val = $actparms{$var} = evaluate_expression ( $expression,
|
my $val = $actparms{$var} = evaluate_expression ( $expression,
|
||||||
$filename,
|
$filename,
|
||||||
$linenumber );
|
$linenumber,
|
||||||
|
0 );
|
||||||
$parmsmodified = PARMSMODIFIED;
|
$parmsmodified = PARMSMODIFIED;
|
||||||
} else {
|
} else {
|
||||||
$variables{$2} = evaluate_expression( $expression,
|
$variables{$2} = evaluate_expression( $expression,
|
||||||
$filename,
|
$filename,
|
||||||
$linenumber );
|
$linenumber,
|
||||||
|
0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} ,
|
} ,
|
||||||
@@ -2736,8 +2738,16 @@ sub process_compiler_directive( $$$$ ) {
|
|||||||
directive_error ( "?COMMENT is not allowed in this file", $filename, $linenumber );
|
directive_error ( "?COMMENT is not allowed in this file", $filename, $linenumber );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} ,
|
||||||
|
|
||||||
|
ERROR => sub() {
|
||||||
|
directive_error( evaluate_expression( $expression ,
|
||||||
|
$filename ,
|
||||||
|
$linenumber ,
|
||||||
|
1 ) ,
|
||||||
|
$filename ,
|
||||||
|
$linenumber ) unless $omitting;
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
if ( my $function = $directives{$keyword} ) {
|
if ( my $function = $directives{$keyword} ) {
|
||||||
@@ -2793,6 +2803,11 @@ sub copy( $ ) {
|
|||||||
print $script $_;
|
print $script $_;
|
||||||
print $script "\n";
|
print $script "\n";
|
||||||
$lastlineblank = 0;
|
$lastlineblank = 0;
|
||||||
|
|
||||||
|
if ( $debug ) {
|
||||||
|
s/\n/\nGS-----> /g;
|
||||||
|
print "GS-----> $_\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3421,17 +3436,17 @@ sub handle_first_entry() {
|
|||||||
sub read_a_line($) {
|
sub read_a_line($) {
|
||||||
my $options = $_[0];
|
my $options = $_[0];
|
||||||
|
|
||||||
|
LINE:
|
||||||
while ( $currentfile ) {
|
while ( $currentfile ) {
|
||||||
|
|
||||||
$currentline = '';
|
$currentline = '';
|
||||||
$currentlinenumber = 0;
|
$currentlinenumber = 0;
|
||||||
|
|
||||||
while ( <$currentfile> ) {
|
while ( <$currentfile> ) {
|
||||||
chomp;
|
chomp;
|
||||||
#
|
#
|
||||||
# Handle conditionals
|
# Handle directives
|
||||||
#
|
#
|
||||||
if ( /^\s*\?(?:IF|ELSE|ELSIF|ENDIF|SET|RESET|FORMAT|COMMENT)/i ) {
|
if ( /^\s*\?(?:IF|ELSE|ELSIF|ENDIF|SET|RESET|FORMAT|COMMENT|ERROR)/i ) {
|
||||||
$omitting = process_compiler_directive( $omitting, $_, $currentfilename, $. );
|
$omitting = process_compiler_directive( $omitting, $_, $currentfilename, $. );
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
@@ -3445,7 +3460,7 @@ sub read_a_line($) {
|
|||||||
#
|
#
|
||||||
# Suppress leading whitespace in certain continuation lines
|
# Suppress leading whitespace in certain continuation lines
|
||||||
#
|
#
|
||||||
s/^\s*// if $currentline =~ /[,:]$/ && $options & CONFIG_CONTINUATION;
|
s/^\s*// if $currentline && $options & CONFIG_CONTINUATION && $currentline =~ /[,:]$/;
|
||||||
#
|
#
|
||||||
# If this is a continued line with a trailing comment, remove comment. Note that
|
# If this is a continued line with a trailing comment, remove comment. Note that
|
||||||
# the result will now end in '\'.
|
# the result will now end in '\'.
|
||||||
@@ -3456,19 +3471,20 @@ sub read_a_line($) {
|
|||||||
#
|
#
|
||||||
chop $currentline, next if ($currentline .= $_) =~ /\\$/;
|
chop $currentline, next if ($currentline .= $_) =~ /\\$/;
|
||||||
#
|
#
|
||||||
|
# We now have a (possibly concatenated) line
|
||||||
# Must check for shell/perl before doing variable expansion
|
# Must check for shell/perl before doing variable expansion
|
||||||
#
|
#
|
||||||
if ( $options & EMBEDDED_ENABLED ) {
|
if ( $options & EMBEDDED_ENABLED ) {
|
||||||
if ( $currentline =~ s/^\s*\??(BEGIN\s+)SHELL\s*;?//i || $currentline =~ s/^\s*\?SHELL\s*//i || $currentline =~ s/^\s*SHELL\s+// ) {
|
|
||||||
handle_first_entry if $first_entry;
|
|
||||||
embedded_shell( $1 );
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( $currentline =~ s/^\s*\??(BEGIN\s+)PERL\s*;?//i || $currentline =~ s/^\s*\??PERL\s*//i ) {
|
if ( $currentline =~ s/^\s*\??(BEGIN\s+)PERL\s*;?//i || $currentline =~ s/^\s*\??PERL\s*//i ) {
|
||||||
handle_first_entry if $first_entry;
|
handle_first_entry if $first_entry;
|
||||||
embedded_perl( $1 );
|
embedded_perl( $1 );
|
||||||
next;
|
next LINE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( $currentline =~ s/^\s*\??(BEGIN\s+)SHELL\s*;?//i || $currentline =~ s/^\s*\?SHELL\s*//i || $currentline =~ s/^\s*SHELL\s+// ) {
|
||||||
|
handle_first_entry if $first_entry;
|
||||||
|
embedded_shell( $1 );
|
||||||
|
next LINE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#
|
#
|
||||||
@@ -3480,7 +3496,7 @@ sub read_a_line($) {
|
|||||||
#
|
#
|
||||||
# Ignore (concatinated) blank lines
|
# Ignore (concatinated) blank lines
|
||||||
#
|
#
|
||||||
$currentline = '', $currentlinenumber = 0, next if $currentline =~ /^\s*$/;
|
next LINE if $currentline =~ /^\s*$/;
|
||||||
#
|
#
|
||||||
# Eliminate trailing whitespace
|
# Eliminate trailing whitespace
|
||||||
#
|
#
|
||||||
@@ -3511,18 +3527,16 @@ sub read_a_line($) {
|
|||||||
push_include;
|
push_include;
|
||||||
$currentfile = undef;
|
$currentfile = undef;
|
||||||
do_open_file $filename;
|
do_open_file $filename;
|
||||||
} else {
|
|
||||||
$currentlinenumber = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$currentline = '';
|
next LINE;
|
||||||
} elsif ( ( $options & DO_SECTION ) && $currentline =~ /^\s*\?SECTION\s+(.*)/i ) {
|
} elsif ( ( $options & DO_SECTION ) && $currentline =~ /^\s*\?SECTION\s+(.*)/i ) {
|
||||||
my $sectionname = $1;
|
my $sectionname = $1;
|
||||||
fatal_error "Invalid SECTION name ($sectionname)" unless $sectionname =~ /^[-_\da-zA-Z]+$/;
|
fatal_error "Invalid SECTION name ($sectionname)" unless $sectionname =~ /^[-_\da-zA-Z]+$/;
|
||||||
fatal_error "This file does not allow ?SECTION" unless $section_function;
|
fatal_error "This file does not allow ?SECTION" unless $section_function;
|
||||||
$section_function->($sectionname);
|
$section_function->($sectionname);
|
||||||
$directive_callback->( 'SECTION', $currentline ) if $directive_callback;
|
$directive_callback->( 'SECTION', $currentline ) if $directive_callback;
|
||||||
$currentline = '';
|
next LINE;
|
||||||
} else {
|
} else {
|
||||||
fatal_error "Non-ASCII gunk in file" if ( $options && CHECK_GUNK ) && $currentline =~ /[^\s[:print:]]/;
|
fatal_error "Non-ASCII gunk in file" if ( $options && CHECK_GUNK ) && $currentline =~ /[^\s[:print:]]/;
|
||||||
print "IN===> $currentline\n" if $debug;
|
print "IN===> $currentline\n" if $debug;
|
||||||
|
@@ -641,6 +641,7 @@ sub create_docker_rules() {
|
|||||||
add_ijump( $chainref, j => 'DOCKER', o => 'docker0' );
|
add_ijump( $chainref, j => 'DOCKER', o => 'docker0' );
|
||||||
add_ijump( $chainref, j => 'ACCEPT', i => 'docker0', o => '! docker0' );
|
add_ijump( $chainref, j => 'ACCEPT', i => 'docker0', o => '! docker0' );
|
||||||
add_ijump( $chainref, j => 'ACCEPT', i => 'docker0', o => 'docker0' ) if $dockerref->{options}{routeback};
|
add_ijump( $chainref, j => 'ACCEPT', i => 'docker0', o => 'docker0' ) if $dockerref->{options}{routeback};
|
||||||
|
add_ijump( $filter_table->{OUTPUT}, j => 'DOCKER' );
|
||||||
decr_cmd_level( $chainref );
|
decr_cmd_level( $chainref );
|
||||||
add_commands( $chainref, 'fi' );
|
add_commands( $chainref, 'fi' );
|
||||||
}
|
}
|
||||||
|
@@ -69,6 +69,7 @@ sub process_one_masq1( $$$$$$$$$$$ )
|
|||||||
my $destnets = '';
|
my $destnets = '';
|
||||||
my $baserule = '';
|
my $baserule = '';
|
||||||
my $inlinematches = '';
|
my $inlinematches = '';
|
||||||
|
my $prerule = '';
|
||||||
#
|
#
|
||||||
# Leading '+'
|
# Leading '+'
|
||||||
#
|
#
|
||||||
@@ -83,6 +84,13 @@ sub process_one_masq1( $$$$$$$$$$$ )
|
|||||||
$inlinematches = get_inline_matches(0);
|
$inlinematches = get_inline_matches(0);
|
||||||
}
|
}
|
||||||
#
|
#
|
||||||
|
# Handle early matches
|
||||||
|
#
|
||||||
|
if ( $inlinematches =~ s/s*\+// ) {
|
||||||
|
$prerule = $inlinematches;
|
||||||
|
$inlinematches = '';
|
||||||
|
}
|
||||||
|
#
|
||||||
# Parse the remaining part of the INTERFACE column
|
# Parse the remaining part of the INTERFACE column
|
||||||
#
|
#
|
||||||
if ( $family == F_IPV4 ) {
|
if ( $family == F_IPV4 ) {
|
||||||
@@ -336,7 +344,7 @@ sub process_one_masq1( $$$$$$$$$$$ )
|
|||||||
#
|
#
|
||||||
expand_rule( $chainref ,
|
expand_rule( $chainref ,
|
||||||
POSTROUTE_RESTRICT ,
|
POSTROUTE_RESTRICT ,
|
||||||
'' ,
|
$prerule ,
|
||||||
$baserule . $inlinematches . $rule ,
|
$baserule . $inlinematches . $rule ,
|
||||||
$networks ,
|
$networks ,
|
||||||
$destnets ,
|
$destnets ,
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -30,4 +30,4 @@
|
|||||||
|
|
||||||
DEFAULTS DROP
|
DEFAULTS DROP
|
||||||
|
|
||||||
IPTABLES(@1) - - udp 53 ; -m u32 --u32 "0>>22&0x3C\@8&0xffff=0x0100 && 0>>22&0x3C\@12&0xffff0000=0x00010000"
|
@1 - - udp 53 ;; -m u32 --u32 "0>>22&0x3C\@8&0xffff=0x0100 && 0>>22&0x3C\@12&0xffff0000=0x00010000"
|
||||||
|
@@ -28,30 +28,16 @@
|
|||||||
# IF YOU ARE HAVING CONNECTION PROBLEMS, CHANGING THIS FILE WON'T HELP!!!!!!!!!
|
# IF YOU ARE HAVING CONNECTION PROBLEMS, CHANGING THIS FILE WON'T HELP!!!!!!!!!
|
||||||
#
|
#
|
||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
|
||||||
# The following magic provides different defaults for @2 thru @5, when @1 is
|
|
||||||
# 'audit'.
|
|
||||||
#
|
|
||||||
?begin perl;
|
|
||||||
use Shorewall::Config;
|
|
||||||
|
|
||||||
my ( $p1, $p2, $p3 , $p4, $p5 ) = get_action_params( 5 );
|
|
||||||
|
|
||||||
if ( defined $p1 ) {
|
|
||||||
if ( $p1 eq 'audit' ) {
|
|
||||||
set_action_param( 3, 'A_DROP') unless supplied $p3;
|
|
||||||
set_action_param( 4, 'A_ACCEPT' ) unless supplied $p4;
|
|
||||||
set_action_param( 5, 'A_DROP' ) unless supplied $p5;
|
|
||||||
} else {
|
|
||||||
fatal_error "Invalid value ($p1) for first Drop parameter" if supplied $p1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
||||||
|
|
||||||
?end perl;
|
|
||||||
|
|
||||||
|
?if @1 ne '' && @1 ne '-'
|
||||||
|
?if @1 eq 'audit'
|
||||||
|
DEFAULTS -,-,A_DROP,A_ACCEPT,A_DROP
|
||||||
|
?else
|
||||||
|
?error The first parameter to Drop must be 'audit' or '-'
|
||||||
|
?endif
|
||||||
|
?else
|
||||||
DEFAULTS -,-,DROP,ACCEPT,DROP
|
DEFAULTS -,-,DROP,ACCEPT,DROP
|
||||||
|
?endif
|
||||||
|
|
||||||
#TARGET SOURCE DEST PROTO DPORT SPORT
|
#TARGET SOURCE DEST PROTO DPORT SPORT
|
||||||
#
|
#
|
||||||
|
@@ -11,20 +11,11 @@
|
|||||||
|
|
||||||
DEFAULTS 2,0
|
DEFAULTS 2,0
|
||||||
|
|
||||||
?begin perl
|
?if @1 !~ /^\d+/ || ! @1 || @1 > 1024
|
||||||
|
?error Invalid value for Bricks (@1)
|
||||||
use Shorewall::Config qw(:DEFAULT :internal);
|
?elsif @2 !~ /^[01]$/
|
||||||
use Shorewall::Chains;
|
?error Invalid value for IB (@2)
|
||||||
use Shorewall::Rules;
|
?endif
|
||||||
use strict;
|
|
||||||
|
|
||||||
my ( $bricks, $ib ) = get_action_params( 2 );
|
|
||||||
|
|
||||||
fatal_error "Invalid value for Bricks ( $bricks )" unless $bricks =~ /^\d+$/ && $bricks > 1 && $bricks < 1024;
|
|
||||||
fatal_error "Invalid value for IB ( $ib )" unless $ib =~ /^[01]$/;
|
|
||||||
|
|
||||||
?end perl
|
|
||||||
|
|
||||||
|
|
||||||
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK CONNLIMIT TIME HEADERS SWITCH HELPER
|
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK CONNLIMIT TIME HEADERS SWITCH HELPER
|
||||||
# PORT PORT(S) DEST LIMIT GROUP
|
# PORT PORT(S) DEST LIMIT GROUP
|
||||||
|
@@ -43,7 +43,7 @@ my ( $action, $audit ) = get_action_params( 2 );
|
|||||||
if ( supplied $audit ) {
|
if ( supplied $audit ) {
|
||||||
fatal_error "Invalid parameter ($audit) to action NotSyn" if $audit ne 'audit';
|
fatal_error "Invalid parameter ($audit) to action NotSyn" if $audit ne 'audit';
|
||||||
$action = "A_$action";
|
$action = "A_$action";
|
||||||
}
|
}
|
||||||
|
|
||||||
perl_action_tcp_helper( $action, '-p 6 ! --syn' );
|
perl_action_tcp_helper( $action, '-p 6 ! --syn' );
|
||||||
|
|
||||||
|
@@ -41,7 +41,7 @@ my ( $action, $audit ) = get_action_params( 2 );
|
|||||||
if ( supplied $audit ) {
|
if ( supplied $audit ) {
|
||||||
fatal_error "Invalid parameter ($audit) to action RST" if $audit ne 'audit';
|
fatal_error "Invalid parameter ($audit) to action RST" if $audit ne 'audit';
|
||||||
$action = "A_$action";
|
$action = "A_$action";
|
||||||
}
|
}
|
||||||
|
|
||||||
perl_action_tcp_helper( $action, '-p 6 --tcp-flags RST RST' );
|
perl_action_tcp_helper( $action, '-p 6 --tcp-flags RST RST' );
|
||||||
|
|
||||||
|
@@ -27,30 +27,16 @@
|
|||||||
#
|
#
|
||||||
# IF YOU ARE HAVING CONNECTION PROBLEMS, CHANGING THIS FILE WON'T HELP!!!!!!!!!
|
# IF YOU ARE HAVING CONNECTION PROBLEMS, CHANGING THIS FILE WON'T HELP!!!!!!!!!
|
||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
|
||||||
# The following magic provides different defaults for @2 thru @5, when @1 is
|
|
||||||
# 'audit'.
|
|
||||||
#
|
|
||||||
?begin perl;
|
|
||||||
use Shorewall::Config;
|
|
||||||
|
|
||||||
my ( $p1, $p2, $p3 , $p4, $p5 ) = get_action_params( 5 );
|
|
||||||
|
|
||||||
if ( defined $p1 ) {
|
|
||||||
if ( $p1 eq 'audit' ) {
|
|
||||||
set_action_param( 3, 'A_REJECT') unless supplied $p3;
|
|
||||||
set_action_param( 4, 'A_ACCEPT' ) unless supplied $p4;
|
|
||||||
set_action_param( 5, 'A_DROP' ) unless supplied $p5;
|
|
||||||
} else {
|
|
||||||
fatal_error "Invalid value ($p1) for first Reject parameter" if supplied $p1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
||||||
|
|
||||||
?end perl;
|
|
||||||
|
|
||||||
|
?if @1 ne '' && @1 ne '-'
|
||||||
|
?if @1 eq 'audit'
|
||||||
|
DEFAULTS -,-,A_REJECT,A_ACCEPT,A_DROP
|
||||||
|
?else
|
||||||
|
?error The first parameter to Reject must be 'audit' or '-'
|
||||||
|
?endif
|
||||||
|
?else
|
||||||
DEFAULTS -,-,REJECT,ACCEPT,DROP
|
DEFAULTS -,-,REJECT,ACCEPT,DROP
|
||||||
|
?endif
|
||||||
|
|
||||||
#TARGET SOURCE DEST PROTO
|
#TARGET SOURCE DEST PROTO
|
||||||
#
|
#
|
||||||
|
@@ -12,11 +12,6 @@
|
|||||||
#
|
#
|
||||||
# For additional information, see http://www.shorewall.net/Events.html
|
# For additional information, see http://www.shorewall.net/Events.html
|
||||||
#
|
#
|
||||||
#######################################################################################################
|
|
||||||
# DO NOT REMOVE THE FOLLOWING LINE
|
|
||||||
#################################################################################################################################################################################################
|
|
||||||
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK CONNLIMIT TIME HEADERS SWITCH HELPER
|
|
||||||
# PORT PORT(S) DEST LIMIT GROUP
|
|
||||||
|
|
||||||
DEFAULTS -,ACCEPT,src
|
DEFAULTS -,ACCEPT,src
|
||||||
|
|
||||||
|
@@ -12,28 +12,21 @@
|
|||||||
|
|
||||||
DEFAULTS -
|
DEFAULTS -
|
||||||
|
|
||||||
?begin perl;
|
?if @1 ne '' && @1 ne '-'
|
||||||
use strict;
|
?if @1 eq 'audit'
|
||||||
use Shorewall::Config qw(:DEFAULT F_IPV4 F_IPV6);
|
?set tcpflags_action 'A_DROP'
|
||||||
use Shorewall::Chains;
|
?else
|
||||||
use Shorewall::Rules;
|
?error The parameter to TCPFlags must be 'audit' or '-'
|
||||||
|
?endif
|
||||||
|
?else
|
||||||
|
?set tcpflags_action 'DROP'
|
||||||
|
?endif
|
||||||
|
|
||||||
my $action = 'DROP';
|
$tcpflags_action - - ;;+ -p 6 --tcp-flags ALL FIN,URG,PSH
|
||||||
|
$tcpflags_action - - ;;+ -p 6 --tcp-flags ALL NONE
|
||||||
my ( $audit ) = get_action_params( 1 );
|
$tcpflags_action - - ;;+ -p 6 --tcp-flags SYN,RST SYN,RST
|
||||||
|
$tcpflags_action - - ;;+ -p 6 --tcp-flags SYN,FIN SYN,FIN
|
||||||
if ( supplied $audit ) {
|
$tcpflags_action - - ;;+ -p tcp --syn --sport 0
|
||||||
fatal_error "Invalid parameter ($audit) to action TCPFlags" if $audit ne 'audit';
|
|
||||||
$action = "A_DROP";
|
|
||||||
}
|
|
||||||
|
|
||||||
perl_action_tcp_helper( $action, '-p tcp --tcp-flags ALL FIN,URG,PSH' );
|
|
||||||
perl_action_tcp_helper( $action, '-p tcp --tcp-flags ALL NONE' );
|
|
||||||
perl_action_tcp_helper( $action, '-p tcp --tcp-flags SYN,RST SYN,RST' );
|
|
||||||
perl_action_tcp_helper( $action, '-p tcp --tcp-flags SYN,FIN SYN,FIN' );
|
|
||||||
perl_action_tcp_helper( $action, '-p tcp --syn --sport 0' );
|
|
||||||
|
|
||||||
?end perl;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
22
Shorewall/action.mangletemplate
Normal file
22
Shorewall/action.mangletemplate
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#
|
||||||
|
# Shorewall version 5 - Mangle Action Template
|
||||||
|
#
|
||||||
|
# /etc/shorewall/action.mangletemplate
|
||||||
|
#
|
||||||
|
# This file is a template for files with names of the form
|
||||||
|
# /etc/shorewall/action.<action-name> where <action> is an
|
||||||
|
# ACTION defined with the mangle option in /etc/shorewall/actions.
|
||||||
|
#
|
||||||
|
# To define a new action:
|
||||||
|
#
|
||||||
|
# 1. Add the <action name> to /etc/shorewall/actions with the mangle option
|
||||||
|
# 2. Copy this file to /etc/shorewall/action.<action name>
|
||||||
|
# 3. Add the desired rules to that file.
|
||||||
|
#
|
||||||
|
# Please see http://shorewall.net/Actions.html for additional
|
||||||
|
# information.
|
||||||
|
#
|
||||||
|
# Columns are the same as in /etc/shorewall/mangle.
|
||||||
|
#
|
||||||
|
####################################################################################################################################################
|
||||||
|
#ACTION SOURCE DEST PROTO DPORT SPORT USER TEST LENGTH TOS CONNBYTES HELPER PROBABILITY DSCP
|
@@ -470,11 +470,15 @@ compiler() {
|
|||||||
[ -n "$g_doing" ] && progress_message3 "$g_doing using $g_product $SHOREWALL_VERSION..."
|
[ -n "$g_doing" ] && progress_message3 "$g_doing using $g_product $SHOREWALL_VERSION..."
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
#
|
||||||
|
# Only use the pager if 'trace' or -r was specified and -d was not
|
||||||
|
#
|
||||||
|
[ "$g_debugging" != trace -a -z "$g_preview" ] || [ -n "$g_debug" ] && g_pager=
|
||||||
|
|
||||||
if [ ${PERLLIBDIR} = ${LIBEXECDIR}/shorewall ]; then
|
if [ ${PERLLIBDIR} = ${LIBEXECDIR}/shorewall ]; then
|
||||||
$PERL $debugflags $pc $options $@
|
eval $PERL $debugflags $pc $options $@ $g_pager
|
||||||
else
|
else
|
||||||
PERL5LIB=${PERLLIBDIR} $PERL $debugflags $pc $options $@
|
eval PERL5LIB=${PERLLIBDIR} $PERL $debugflags $pc $options $@ $g_pager
|
||||||
fi
|
fi
|
||||||
|
|
||||||
status=$?
|
status=$?
|
||||||
|
@@ -118,6 +118,18 @@
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>mangle</term>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Added in Shorewall 5.0.7. Specifies that this action is
|
||||||
|
to be used in <ulink
|
||||||
|
url="shorewall-mangle.html">shorewall-mangle(5)</ulink> rather
|
||||||
|
than <ulink
|
||||||
|
url="shorewall-rules.html">shorewall-rules(5)</ulink>.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>noinline</term>
|
<term>noinline</term>
|
||||||
|
|
||||||
|
@@ -68,8 +68,9 @@
|
|||||||
<replaceable>command</replaceable>[(<replaceable>parameters</replaceable>)][:<replaceable>chain-designator</replaceable>]</term>
|
<replaceable>command</replaceable>[(<replaceable>parameters</replaceable>)][:<replaceable>chain-designator</replaceable>]</term>
|
||||||
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>The chain-specifier indicates the Netfilter chain that the
|
<para>The <replaceable>chain-designator </replaceable>indicates the
|
||||||
entry applies to and may be one of the following:</para>
|
Netfilter chain that the entry applies to and may be one of the
|
||||||
|
following:</para>
|
||||||
|
|
||||||
<variablelist>
|
<variablelist>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
@@ -111,10 +112,14 @@
|
|||||||
url="/manpages/shorewall.conf.html">shorewall.conf(5)</ulink>, and
|
url="/manpages/shorewall.conf.html">shorewall.conf(5)</ulink>, and
|
||||||
FORWARD when MARK_IN_FORWARD_CHAIN=Yes.</para>
|
FORWARD when MARK_IN_FORWARD_CHAIN=Yes.</para>
|
||||||
|
|
||||||
<para>A chain-designator may not be specified if the SOURCE or DEST
|
<para>A <replaceable>chain-designator</replaceable> may not be
|
||||||
columns begin with '$FW'. When the SOURCE is $FW, the generated rule
|
specified if the SOURCE or DEST columns begin with '$FW'. When the
|
||||||
is always placed in the OUTPUT chain. If DEST is '$FW', then the
|
SOURCE is $FW, the generated rule is always placed in the OUTPUT
|
||||||
rule is placed in the INPUT chain.</para>
|
chain. If DEST is '$FW', then the rule is placed in the INPUT chain.
|
||||||
|
Additionally, a <replaceable>chain-designator</replaceable> may not
|
||||||
|
be specified in an action body unless the action is declared as
|
||||||
|
<option>inline</option> in <ulink
|
||||||
|
url="shorewall6-actions.html">shorewall-actions</ulink>(5).</para>
|
||||||
|
|
||||||
<para>Where a command takes parameters, those parameters are
|
<para>Where a command takes parameters, those parameters are
|
||||||
enclosed in parentheses ("(....)") and separated by commas.</para>
|
enclosed in parentheses ("(....)") and separated by commas.</para>
|
||||||
@@ -123,6 +128,21 @@
|
|||||||
following.</para>
|
following.</para>
|
||||||
|
|
||||||
<variablelist>
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><emphasis
|
||||||
|
role="bold"><replaceable>action</replaceable>[([<replaceable>param</replaceable>[,...])]</emphasis></term>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Added in Shorewall 5.0.7.
|
||||||
|
<replaceable>action</replaceable> must be an action declared
|
||||||
|
with the <option>mangle</option> option in <ulink
|
||||||
|
url="manpages/shorewall-actions.html">shorewall-actions(5)</ulink>.
|
||||||
|
If the action accepts paramaters, they are specified as a
|
||||||
|
comma-separated list within parentheses following the
|
||||||
|
<replaceable>action</replaceable> name.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><emphasis
|
<term><emphasis
|
||||||
role="bold">ADD(<replaceable>ipset</replaceable>:<replaceable>flags</replaceable>)</emphasis></term>
|
role="bold">ADD(<replaceable>ipset</replaceable>:<replaceable>flags</replaceable>)</emphasis></term>
|
||||||
@@ -720,33 +740,6 @@ Normal-Service => 0x00</programlisting>
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
</variablelist>
|
</variablelist>
|
||||||
|
|
||||||
<orderedlist numeration="arabic">
|
|
||||||
<listitem>
|
|
||||||
<para><emphasis role="bold">TTL</emphasis>([<emphasis
|
|
||||||
role="bold">-</emphasis>|<emphasis
|
|
||||||
role="bold">+</emphasis>]<replaceable>number</replaceable>)</para>
|
|
||||||
|
|
||||||
<para>Added in Shorewall 4.4.24.</para>
|
|
||||||
|
|
||||||
<para>Prior to Shorewall 4.5.7.2, may be optionally followed by
|
|
||||||
<emphasis role="bold">:F</emphasis> but the resulting rule is
|
|
||||||
always added to the FORWARD chain. Beginning with Shorewall
|
|
||||||
4.5.7.s, it may be optionally followed by <emphasis
|
|
||||||
role="bold">:P</emphasis>, in which case the rule is added to
|
|
||||||
the PREROUTING chain.</para>
|
|
||||||
|
|
||||||
<para>If <emphasis role="bold">+</emphasis> is included, packets
|
|
||||||
matching the rule will have their TTL incremented by
|
|
||||||
<replaceable>number</replaceable>. Similarly, if <emphasis
|
|
||||||
role="bold">-</emphasis> is included, matching packets have
|
|
||||||
their TTL decremented by <replaceable>number</replaceable>. If
|
|
||||||
neither <emphasis role="bold">+</emphasis> nor <emphasis
|
|
||||||
role="bold">-</emphasis> is given, the TTL of matching packets
|
|
||||||
is set to <replaceable>number</replaceable>. The valid range of
|
|
||||||
values for <replaceable>number</replaceable> is 1-255.</para>
|
|
||||||
</listitem>
|
|
||||||
</orderedlist>
|
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
22
Shorewall6/action.mangletemplate
Normal file
22
Shorewall6/action.mangletemplate
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#
|
||||||
|
# Shorewall version 5 - Mangle Action Template
|
||||||
|
#
|
||||||
|
# /etc/shorewall6/action.mangletemplate
|
||||||
|
#
|
||||||
|
# This file is a template for files with names of the form
|
||||||
|
# /etc/shorewall/action.<action-name> where <action> is an
|
||||||
|
# ACTION defined with the mangle option in /etc/shorewall/actions.
|
||||||
|
#
|
||||||
|
# To define a new action:
|
||||||
|
#
|
||||||
|
# 1. Add the <action name> to /etc/shorewall6/actions with the mangle option
|
||||||
|
# 2. Copy this file to /etc/shorewall6/action.<action name>
|
||||||
|
# 3. Add the desired rules to that file.
|
||||||
|
#
|
||||||
|
# Please see http://shorewall.net/Actions.html for additional
|
||||||
|
# information.
|
||||||
|
#
|
||||||
|
# Columns are the same as in /etc/shorewall6/mangle.
|
||||||
|
#
|
||||||
|
############################################################################################################################################################
|
||||||
|
#ACTION SOURCE DEST PROTO DPORT SPORT USER TEST LENGTH TOS CONNBYTES HELPER HEADERS PROBABILITY DSCP
|
@@ -119,6 +119,18 @@
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>mangle</term>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Added in Shorewall 5.0.7. Specifies that this action is
|
||||||
|
to be used in <ulink
|
||||||
|
url="shorewall6-mangle.html">shorewall6-mangle(5)</ulink>
|
||||||
|
rather than <ulink
|
||||||
|
url="shorewall6-rules.html">shorewall6-rules(5)</ulink>.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>noinline</term>
|
<term>noinline</term>
|
||||||
|
|
||||||
|
@@ -69,8 +69,9 @@
|
|||||||
<replaceable>command</replaceable>[(<replaceable>parameters</replaceable>)][:<replaceable>chain-designator</replaceable>]</term>
|
<replaceable>command</replaceable>[(<replaceable>parameters</replaceable>)][:<replaceable>chain-designator</replaceable>]</term>
|
||||||
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>The chain-specifier indicates the Netfilter chain that the
|
<para>The <replaceable>chain-designator</replaceable> indicates the
|
||||||
entry applies to and may be one of the following:</para>
|
Netfilter chain that the entry applies to and may be one of the
|
||||||
|
following:</para>
|
||||||
|
|
||||||
<variablelist>
|
<variablelist>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
@@ -112,10 +113,14 @@
|
|||||||
url="/manpages6/shorewall6.conf.html">shorewall6.conf(5)</ulink>,
|
url="/manpages6/shorewall6.conf.html">shorewall6.conf(5)</ulink>,
|
||||||
and FORWARD when MARK_IN_FORWARD_CHAIN=Yes.</para>
|
and FORWARD when MARK_IN_FORWARD_CHAIN=Yes.</para>
|
||||||
|
|
||||||
<para>A chain-designator may not be specified if the SOURCE or DEST
|
<para>A <replaceable>chain-designator</replaceable> may not be
|
||||||
columns begin with '$FW'. When the SOURCE is $FW, the generated rule
|
specified if the SOURCE or DEST columns begin with '$FW'. When the
|
||||||
is always placed in the OUTPUT chain. If DEST is '$FW', then the
|
SOURCE is $FW, the generated rule is always placed in the OUTPUT
|
||||||
rule is placed in the INPUT chain.</para>
|
chain. If DEST is '$FW', then the rule is placed in the INPUT chain.
|
||||||
|
Additionally, a <replaceable>chain-designator</replaceable> may not
|
||||||
|
be specified in an action body unless the action is declared as
|
||||||
|
<option>inline</option> in <ulink
|
||||||
|
url="shorewall6-actions.html">shorewall6-actions</ulink>(5).</para>
|
||||||
|
|
||||||
<para>Where a command takes parameters, those parameters are
|
<para>Where a command takes parameters, those parameters are
|
||||||
enclosed in parentheses ("(....)") and separated by commas.</para>
|
enclosed in parentheses ("(....)") and separated by commas.</para>
|
||||||
@@ -124,6 +129,21 @@
|
|||||||
following.</para>
|
following.</para>
|
||||||
|
|
||||||
<variablelist>
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><emphasis
|
||||||
|
role="bold"><replaceable>action</replaceable>[([<replaceable>param</replaceable>[,...])]</emphasis></term>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Added in Shorewall 5.0.7.
|
||||||
|
<replaceable>action</replaceable> must be an action declared
|
||||||
|
with the <option>mangle</option> option in <ulink
|
||||||
|
url="manpages6/shorewall6-actions.html">shorewall6-actions(5)</ulink>.
|
||||||
|
If the action accepts paramaters, they are specified as a
|
||||||
|
comma-separated list within parentheses following the
|
||||||
|
<replaceable>action</replaceable> name.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><emphasis
|
<term><emphasis
|
||||||
role="bold">ADD(<replaceable>ipset</replaceable>:<replaceable>flags</replaceable>)</emphasis></term>
|
role="bold">ADD(<replaceable>ipset</replaceable>:<replaceable>flags</replaceable>)</emphasis></term>
|
||||||
|
@@ -32,6 +32,8 @@
|
|||||||
|
|
||||||
<year>2013</year>
|
<year>2013</year>
|
||||||
|
|
||||||
|
<year>2015-2016</year>
|
||||||
|
|
||||||
<holder>Thomas M. Eastep</holder>
|
<holder>Thomas M. Eastep</holder>
|
||||||
</copyright>
|
</copyright>
|
||||||
|
|
||||||
@@ -397,6 +399,27 @@ REDIRECT net - tcp 80 - 1.2.3.4</programlisting>
|
|||||||
url="configuration_file_basics.htm#ActionVariables">Action Variables
|
url="configuration_file_basics.htm#ActionVariables">Action Variables
|
||||||
section</ulink> of the Configuration Basics article.</para>
|
section</ulink> of the Configuration Basics article.</para>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<title>Mangle Actions</title>
|
||||||
|
|
||||||
|
<para>Beginning with Shorewall 5.0.7, actions may be used in <ulink
|
||||||
|
url="manpages/shorewall-mangle.html">shorewall-mangle(5)</ulink> and
|
||||||
|
<ulink
|
||||||
|
url="manpages6/shorewall6-mangle.html">shorewall6-mangle(5)</ulink>.
|
||||||
|
Because the rules and mangle files have different column layouts,
|
||||||
|
actions can be defined to be used in one file or the other but not in
|
||||||
|
both. To designate an action to be used in the mangle file, specify the
|
||||||
|
<option>mangle</option> option in the action's entry in <ulink
|
||||||
|
url="manpages/shorewall-actions.html">shorewall-actions</ulink>(5) or
|
||||||
|
<ulink
|
||||||
|
url="manpages6/shorewall6-actions.html">shorewall6-actions</ulink>(5).</para>
|
||||||
|
|
||||||
|
<para>To create a mangle action, follow the steps in the preceding
|
||||||
|
section, but use the
|
||||||
|
<filename>/usr/share/shorewall/action.mangletemplate</filename> file.
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section id="Logging">
|
<section id="Logging">
|
||||||
|
@@ -2168,6 +2168,31 @@ SSH(ACCEPT) net:$MYIP $FW
|
|||||||
<lines to be included if all three expressions evaluate to false.
|
<lines to be included if all three expressions evaluate to false.
|
||||||
|
|
||||||
?ENDIF</programlisting>
|
?ENDIF</programlisting>
|
||||||
|
|
||||||
|
<para>Beginning in Shorewall 5.0.7, an error can be raised using the
|
||||||
|
?ERROR directive:</para>
|
||||||
|
|
||||||
|
<programlisting>?ERROR <replaceable>message</replaceable></programlisting>
|
||||||
|
|
||||||
|
<para>Variables in the message are evaluated and the result appears in a
|
||||||
|
standard Shorewall ERROR: message. </para>
|
||||||
|
|
||||||
|
<para>Example from the 5.0.7 action.GlusterFS:</para>
|
||||||
|
|
||||||
|
<programlisting>?if @1 !~ /^\d+/ || ! @1 || @1 > 1024
|
||||||
|
?error Invalid value for Bricks (@1)
|
||||||
|
?elsif @2 !~ /^[01]$/
|
||||||
|
?error Invalid value for IB (@2)
|
||||||
|
?endif
|
||||||
|
</programlisting>
|
||||||
|
|
||||||
|
<para>The above code insures that the first action paramater is a non-zero
|
||||||
|
number <= 1024 and that the second parameter is either 0 or 1. If 2000
|
||||||
|
is passed for the first parameter, the following error message is
|
||||||
|
generated:</para>
|
||||||
|
|
||||||
|
<programlisting> ERROR: Invalid value for Bricks (2000) /usr/share/shorewall/action.GlusterFS (line 15)
|
||||||
|
from /etc/shorewall/rules (line 45)</programlisting>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section id="Embedded">
|
<section id="Embedded">
|
||||||
|
Reference in New Issue
Block a user