forked from extern/shorewall_code
More IPv6 Changes
git-svn-id: https://shorewall.svn.sourceforge.net/svnroot/shorewall/trunk@8947 fbd18981-670d-0410-9b5c-8dc0c1a9a2bb
This commit is contained in:
parent
d87daead38
commit
f86d6273a2
@ -256,6 +256,7 @@ our $mode;
|
|||||||
our %targets4;
|
our %targets4;
|
||||||
our %targets6;
|
our %targets6;
|
||||||
our $targets;
|
our $targets;
|
||||||
|
our $chain_family;
|
||||||
|
|
||||||
sub use_ipv4_chains() {
|
sub use_ipv4_chains() {
|
||||||
$chain_table = \%chain_table4;
|
$chain_table = \%chain_table4;
|
||||||
@ -263,6 +264,7 @@ sub use_ipv4_chains() {
|
|||||||
$mangle_table = $chain_table->{mangle};
|
$mangle_table = $chain_table->{mangle};
|
||||||
$filter_table = $chain_table->{filter};
|
$filter_table = $chain_table->{filter};
|
||||||
$targets = \%targets4;
|
$targets = \%targets4;
|
||||||
|
$chain_family = F_INET;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub use_ipv6_chains() {
|
sub use_ipv6_chains() {
|
||||||
@ -271,6 +273,7 @@ sub use_ipv6_chains() {
|
|||||||
$mangle_table = $chain_table->{mangle};
|
$mangle_table = $chain_table->{mangle};
|
||||||
$filter_table = $chain_table->{filter};
|
$filter_table = $chain_table->{filter};
|
||||||
$targets = \%targets6;
|
$targets = \%targets6;
|
||||||
|
$chain_family = F_INET6;
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -1979,7 +1982,16 @@ sub expand_rule( $$$$$$$$$$$ )
|
|||||||
if ( $source ) {
|
if ( $source ) {
|
||||||
if ( $source eq '-' ) {
|
if ( $source eq '-' ) {
|
||||||
$source = '';
|
$source = '';
|
||||||
} elsif ( $source =~ /^([^:]+):([^:]+)$/ ) {
|
} elsif ( $chain_family == F_INET ) {
|
||||||
|
if ( $source =~ /^([^:]+):([^:]+)$/ ) {
|
||||||
|
$iiface = $1;
|
||||||
|
$inets = $2;
|
||||||
|
} elsif ( $source =~ /\+|~|\..*\./ ) {
|
||||||
|
$inets = $source;
|
||||||
|
} else {
|
||||||
|
$iiface = $source;
|
||||||
|
}
|
||||||
|
} elsif ( $source =~ /^([^;]+);([^;]+)$/ ) {
|
||||||
$iiface = $1;
|
$iiface = $1;
|
||||||
$inets = $2;
|
$inets = $2;
|
||||||
} elsif ( $source =~ /\+|~|\..*\./ ) {
|
} elsif ( $source =~ /\+|~|\..*\./ ) {
|
||||||
@ -2051,7 +2063,16 @@ sub expand_rule( $$$$$$$$$$$ )
|
|||||||
}
|
}
|
||||||
|
|
||||||
$dest = '';
|
$dest = '';
|
||||||
} elsif ( $dest =~ /^([^:]+):([^:]+)$/ ) {
|
} elsif ( $chain_family == F_INET ) {
|
||||||
|
if ( $dest =~ /^([^:]+):([^:]+)$/ ) {
|
||||||
|
$diface = $1;
|
||||||
|
$dnets = $2;
|
||||||
|
} elsif ( $dest =~ /\+|~|\..*\./ ) {
|
||||||
|
$dnets = $dest;
|
||||||
|
} else {
|
||||||
|
$diface = $dest;
|
||||||
|
}
|
||||||
|
} elsif ( $dest =~ /^([^;]+);([^;]+)$/ ) {
|
||||||
$diface = $1;
|
$diface = $1;
|
||||||
$dnets = $2;
|
$dnets = $2;
|
||||||
} elsif ( $dest =~ /\+|~|\..*\./ ) {
|
} elsif ( $dest =~ /\+|~|\..*\./ ) {
|
||||||
@ -2062,7 +2083,6 @@ sub expand_rule( $$$$$$$$$$$ )
|
|||||||
} else {
|
} else {
|
||||||
$dest = '';
|
$dest = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Verify Destination Interface, if any
|
# Verify Destination Interface, if any
|
||||||
#
|
#
|
||||||
|
@ -79,6 +79,7 @@ sub use_ipv4() {
|
|||||||
use_ipv4_chains;
|
use_ipv4_chains;
|
||||||
use_ipv4_interfaces;
|
use_ipv4_interfaces;
|
||||||
use_ipv4_policies;
|
use_ipv4_policies;
|
||||||
|
use_ipv4_rules;
|
||||||
$family = F_INET;
|
$family = F_INET;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,6 +88,7 @@ sub use_ipv6() {
|
|||||||
use_ipv6_chains;
|
use_ipv6_chains;
|
||||||
use_ipv6_interfaces;
|
use_ipv6_interfaces;
|
||||||
use_ipv6_policies;
|
use_ipv6_policies;
|
||||||
|
use_ipv6_rules;
|
||||||
$family = F_INET;
|
$family = F_INET;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -730,6 +732,124 @@ EOF
|
|||||||
copy $globals{SHAREDIRPL} . 'prog.footer' unless $test;
|
copy $globals{SHAREDIRPL} . 'prog.footer' unless $test;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Process the configuration for the current address family (F_INET or F_INET6)
|
||||||
|
#
|
||||||
|
sub process_family( $ ) {
|
||||||
|
my $chains = shift;
|
||||||
|
#
|
||||||
|
# Process the interfaces file(s).
|
||||||
|
#
|
||||||
|
validate_interfaces_file ( $globals{EXPORT} );
|
||||||
|
#
|
||||||
|
# Process the hosts file.
|
||||||
|
#
|
||||||
|
validate_hosts_file;
|
||||||
|
#
|
||||||
|
# Report zone contents
|
||||||
|
#
|
||||||
|
zone_report;
|
||||||
|
#
|
||||||
|
# Do action pre-processing.
|
||||||
|
#
|
||||||
|
process_actions1;
|
||||||
|
#
|
||||||
|
# Process the Policy File(s).
|
||||||
|
#
|
||||||
|
validate_policy;
|
||||||
|
#
|
||||||
|
# Compile the 'stop_firewall()' function
|
||||||
|
#
|
||||||
|
compile_stop_firewall;
|
||||||
|
#
|
||||||
|
# Start Second Part of script
|
||||||
|
#
|
||||||
|
generate_script_2 unless $command eq 'check';
|
||||||
|
#
|
||||||
|
# Do all of the zone-independent stuff
|
||||||
|
#
|
||||||
|
add_common_rules;
|
||||||
|
#
|
||||||
|
# /proc stuff
|
||||||
|
#
|
||||||
|
setup_arp_filtering;
|
||||||
|
setup_route_filtering;
|
||||||
|
setup_martian_logging;
|
||||||
|
setup_source_routing;
|
||||||
|
#
|
||||||
|
# Proxy Arp
|
||||||
|
#
|
||||||
|
setup_proxy_arp;
|
||||||
|
#
|
||||||
|
# Handle MSS setings in the zones file
|
||||||
|
#
|
||||||
|
setup_zone_mss;
|
||||||
|
#
|
||||||
|
# [Re-]establish Routing
|
||||||
|
#
|
||||||
|
setup_providers;
|
||||||
|
#
|
||||||
|
# TOS
|
||||||
|
#
|
||||||
|
process_tos 'tos';
|
||||||
|
#
|
||||||
|
# ECN
|
||||||
|
#
|
||||||
|
setup_ecn if $capabilities{MANGLE_ENABLED} && $config{MANGLE_ENABLED};
|
||||||
|
#
|
||||||
|
# Setup Masquerading/SNAT
|
||||||
|
#
|
||||||
|
setup_masq;
|
||||||
|
#
|
||||||
|
# MACLIST Filtration
|
||||||
|
#
|
||||||
|
setup_mac_lists 1;
|
||||||
|
#
|
||||||
|
# Process the rules file.
|
||||||
|
#
|
||||||
|
process_rules;
|
||||||
|
#
|
||||||
|
# Add Tunnel rules.
|
||||||
|
#
|
||||||
|
setup_tunnels;
|
||||||
|
#
|
||||||
|
# Post-rules action processing.
|
||||||
|
#
|
||||||
|
process_actions2;
|
||||||
|
process_actions3;
|
||||||
|
#
|
||||||
|
# MACLIST Filtration again
|
||||||
|
#
|
||||||
|
setup_mac_lists 2;
|
||||||
|
#
|
||||||
|
# Apply Policies
|
||||||
|
#
|
||||||
|
apply_policy_rules;
|
||||||
|
#
|
||||||
|
# TCRules and Traffic Shaping
|
||||||
|
#
|
||||||
|
setup_tc;
|
||||||
|
#
|
||||||
|
# Setup Nat
|
||||||
|
#
|
||||||
|
setup_nat;
|
||||||
|
#
|
||||||
|
# Setup NETMAP
|
||||||
|
#
|
||||||
|
setup_netmap;
|
||||||
|
#
|
||||||
|
# Accounting.
|
||||||
|
#
|
||||||
|
setup_accounting;
|
||||||
|
#
|
||||||
|
# We generate the matrix even though we don't write out the rules. That way, we insure that
|
||||||
|
# a compile of the script won't blow up during that step.
|
||||||
|
#
|
||||||
|
generate_matrix;
|
||||||
|
|
||||||
|
generate_script_3( $chains ) unless $command eq 'check';
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# The Compiler.
|
# The Compiler.
|
||||||
#
|
#
|
||||||
@ -816,126 +936,17 @@ sub compiler {
|
|||||||
# Process the zones file.
|
# Process the zones file.
|
||||||
#
|
#
|
||||||
determine_zones;
|
determine_zones;
|
||||||
#
|
|
||||||
# Process the interfaces file(s).
|
|
||||||
#
|
|
||||||
use_ipv4;
|
use_ipv4;
|
||||||
validate_interfaces_file ( 'interfaces', $export );
|
|
||||||
#
|
|
||||||
# Process the hosts file.
|
|
||||||
#
|
|
||||||
my $ipsec = validate_hosts_file( 'hosts' );
|
|
||||||
|
|
||||||
$capabilities{POLICY_MATCH} = '' unless $ipsec || haveipseczones;
|
|
||||||
#
|
|
||||||
# Report zone contents
|
|
||||||
#
|
|
||||||
zone_report;
|
|
||||||
#
|
|
||||||
# Do action pre-processing.
|
|
||||||
#
|
|
||||||
process_actions1;
|
|
||||||
#
|
|
||||||
# Process the Policy File(s).
|
|
||||||
#
|
|
||||||
validate_policy 'policy';
|
|
||||||
#
|
|
||||||
# Compile the 'stop_firewall()' function
|
|
||||||
#
|
|
||||||
compile_stop_firewall;
|
|
||||||
#
|
|
||||||
# Start Second Part of script
|
|
||||||
#
|
|
||||||
generate_script_2 unless $command eq 'check';
|
|
||||||
#
|
|
||||||
# Do all of the zone-independent stuff
|
|
||||||
#
|
|
||||||
add_common_rules;
|
|
||||||
#
|
|
||||||
# /proc stuff
|
|
||||||
#
|
|
||||||
setup_arp_filtering;
|
|
||||||
setup_route_filtering;
|
|
||||||
setup_martian_logging;
|
|
||||||
setup_source_routing;
|
|
||||||
#
|
|
||||||
# Proxy Arp
|
|
||||||
#
|
|
||||||
setup_proxy_arp;
|
|
||||||
#
|
|
||||||
# Handle MSS setings in the zones file
|
|
||||||
#
|
|
||||||
setup_zone_mss;
|
|
||||||
#
|
|
||||||
# [Re-]establish Routing
|
|
||||||
#
|
|
||||||
setup_providers;
|
|
||||||
#
|
|
||||||
# TOS
|
|
||||||
#
|
|
||||||
process_tos;
|
|
||||||
#
|
|
||||||
# ECN
|
|
||||||
#
|
|
||||||
setup_ecn if $capabilities{MANGLE_ENABLED} && $config{MANGLE_ENABLED};
|
|
||||||
#
|
|
||||||
# Setup Masquerading/SNAT
|
|
||||||
#
|
|
||||||
setup_masq;
|
|
||||||
#
|
|
||||||
# MACLIST Filtration
|
|
||||||
#
|
|
||||||
setup_mac_lists 1;
|
|
||||||
#
|
|
||||||
# Process the rules file.
|
|
||||||
#
|
|
||||||
process_rules;
|
|
||||||
#
|
|
||||||
# Add Tunnel rules.
|
|
||||||
#
|
|
||||||
setup_tunnels;
|
|
||||||
#
|
|
||||||
# Post-rules action processing.
|
|
||||||
#
|
|
||||||
process_actions2;
|
|
||||||
process_actions3;
|
|
||||||
#
|
|
||||||
# MACLIST Filtration again
|
|
||||||
#
|
|
||||||
setup_mac_lists 2;
|
|
||||||
#
|
|
||||||
# Apply Policies
|
|
||||||
#
|
|
||||||
apply_policy_rules;
|
|
||||||
#
|
|
||||||
# TCRules and Traffic Shaping
|
|
||||||
#
|
|
||||||
setup_tc;
|
|
||||||
#
|
|
||||||
# Setup Nat
|
|
||||||
#
|
|
||||||
setup_nat;
|
|
||||||
#
|
|
||||||
# Setup NETMAP
|
|
||||||
#
|
|
||||||
setup_netmap;
|
|
||||||
#
|
|
||||||
# Accounting.
|
|
||||||
#
|
|
||||||
setup_accounting;
|
|
||||||
#
|
|
||||||
# We generate the matrix even though we don't write out the rules. That way, we insure that
|
|
||||||
# a compile of the script won't blow up during that step.
|
|
||||||
#
|
|
||||||
generate_matrix;
|
|
||||||
|
|
||||||
|
process_family $chains;
|
||||||
|
|
||||||
if ( $command eq 'check' ) {
|
if ( $command eq 'check' ) {
|
||||||
progress_message3 "Shorewall configuration verified";
|
progress_message3 "Shorewall configuration verified";
|
||||||
} else {
|
} else {
|
||||||
#
|
#
|
||||||
# Finish the script.
|
# Finish the script.
|
||||||
#
|
#
|
||||||
generate_script_3( $chains );
|
|
||||||
finalize_object ( $export );
|
finalize_object ( $export );
|
||||||
#
|
#
|
||||||
# And generate the auxilary config file
|
# And generate the auxilary config file
|
||||||
|
@ -1928,14 +1928,14 @@ sub get_configuration( $ ) {
|
|||||||
} elsif ( $config{IPV6} =~ /keep/i ) {
|
} elsif ( $config{IPV6} =~ /keep/i ) {
|
||||||
$config{IPV6} = '';
|
$config{IPV6} = '';
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
$config{IPV6} = 'Off';
|
||||||
}
|
}
|
||||||
|
|
||||||
default_yes_no 'DISABLE_IPV6' , '';
|
default_yes_no 'DISABLE_IPV6' , '';
|
||||||
|
|
||||||
fatal_error "Incompatible settings of IPV6 (On) and DISABLE_IPV6 (Yes)" if $config{IPV6} eq 'On' && $config{DISABLE_IPV6} eq 'Yes';
|
fatal_error "Incompatible settings of IPV6 (On) and DISABLE_IPV6 (Yes)" if $config{IPV6} eq 'On' && $config{DISABLE_IPV6} eq 'Yes';
|
||||||
|
|
||||||
$config{IPV6} = $config{DISABLE_IPV6} ? 'Off' : '' unless defined $config{IPV6};
|
|
||||||
|
|
||||||
unsupported_yes_no 'DYNAMIC_ZONES';
|
unsupported_yes_no 'DYNAMIC_ZONES';
|
||||||
unsupported_yes_no 'BRIDGING';
|
unsupported_yes_no 'BRIDGING';
|
||||||
unsupported_yes_no 'SAVE_IPSETS';
|
unsupported_yes_no 'SAVE_IPSETS';
|
||||||
|
@ -169,9 +169,8 @@ sub print_policy($$$$) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub validate_policy( $ )
|
sub validate_policy()
|
||||||
{
|
{
|
||||||
my $filename = shift;
|
|
||||||
my %validpolicies = (
|
my %validpolicies = (
|
||||||
ACCEPT => undef,
|
ACCEPT => undef,
|
||||||
REJECT => undef,
|
REJECT => undef,
|
||||||
@ -223,7 +222,7 @@ sub validate_policy( $ )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
my $fn = open_file $filename;
|
my $fn = open_file( $policy_family == F_INET ? 'policy' : '6policy');
|
||||||
|
|
||||||
first_entry "$doing $fn...";
|
first_entry "$doing $fn...";
|
||||||
|
|
||||||
|
@ -35,7 +35,9 @@ use Shorewall::Proc;
|
|||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
our @ISA = qw(Exporter);
|
our @ISA = qw(Exporter);
|
||||||
our @EXPORT = qw( process_tos
|
our @EXPORT = qw( use_ipv4_rules
|
||||||
|
use_ipv6_rules
|
||||||
|
process_tos
|
||||||
setup_ecn
|
setup_ecn
|
||||||
add_common_rules
|
add_common_rules
|
||||||
setup_mac_lists
|
setup_mac_lists
|
||||||
@ -55,6 +57,7 @@ our $sectioned;
|
|||||||
our $macro_nest_level;
|
our $macro_nest_level;
|
||||||
our $current_param;
|
our $current_param;
|
||||||
our @param_stack;
|
our @param_stack;
|
||||||
|
our $rules_family;
|
||||||
|
|
||||||
#
|
#
|
||||||
# When splitting a line in the rules file, don't pad out the columns with '-' if the first column contains one of these
|
# When splitting a line in the rules file, don't pad out the columns with '-' if the first column contains one of these
|
||||||
@ -63,6 +66,14 @@ our @param_stack;
|
|||||||
my %rules_commands = ( COMMENT => 0,
|
my %rules_commands = ( COMMENT => 0,
|
||||||
SECTION => 2 );
|
SECTION => 2 );
|
||||||
|
|
||||||
|
sub use_ipv4_rules() {
|
||||||
|
$rules_family = F_INET;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub use_ipv6_rules() {
|
||||||
|
$rules_family = F_INET6;
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Initialize globals -- we take this novel approach to globals initialization to allow
|
# Initialize globals -- we take this novel approach to globals initialization to allow
|
||||||
# the compiler to run multiple times in the same process. The
|
# the compiler to run multiple times in the same process. The
|
||||||
@ -77,6 +88,7 @@ sub initialize() {
|
|||||||
$macro_nest_level = 0;
|
$macro_nest_level = 0;
|
||||||
$current_param = '';
|
$current_param = '';
|
||||||
@param_stack = ();
|
@param_stack = ();
|
||||||
|
use_ipv4_rules;
|
||||||
}
|
}
|
||||||
|
|
||||||
INIT {
|
INIT {
|
||||||
@ -85,7 +97,8 @@ INIT {
|
|||||||
|
|
||||||
use constant { MAX_MACRO_NEST_LEVEL => 5 };
|
use constant { MAX_MACRO_NEST_LEVEL => 5 };
|
||||||
|
|
||||||
sub process_tos() {
|
sub process_tos( $ ) {
|
||||||
|
my $filename = shift;
|
||||||
my $chain = $capabilities{MANGLE_FORWARD} ? 'fortos' : 'pretos';
|
my $chain = $capabilities{MANGLE_FORWARD} ? 'fortos' : 'pretos';
|
||||||
my $stdchain = $capabilities{MANGLE_FORWARD} ? 'FORWARD' : 'PREROUTING';
|
my $stdchain = $capabilities{MANGLE_FORWARD} ? 'FORWARD' : 'PREROUTING';
|
||||||
|
|
||||||
@ -95,7 +108,7 @@ sub process_tos() {
|
|||||||
'minimize-cost' => 0x02 ,
|
'minimize-cost' => 0x02 ,
|
||||||
'normal-service' => 0x00 );
|
'normal-service' => 0x00 );
|
||||||
|
|
||||||
if ( my $fn = open_file 'tos' ) {
|
if ( my $fn = open_file $filename ) {
|
||||||
my $first_entry = 1;
|
my $first_entry = 1;
|
||||||
|
|
||||||
my ( $pretosref, $outtosref );
|
my ( $pretosref, $outtosref );
|
||||||
@ -121,8 +134,10 @@ sub process_tos() {
|
|||||||
|
|
||||||
my $restriction = NO_RESTRICT;
|
my $restriction = NO_RESTRICT;
|
||||||
|
|
||||||
my ( $srczone , $source , $remainder ) = split( /:/, $src, 3 );
|
my ( $srczone , $source , $remainder );
|
||||||
|
|
||||||
|
( $srczone , $source , $remainder ) = split( $rules_family == F_INET ? /:/ : /;/, $src, 3 );
|
||||||
|
|
||||||
fatal_error 'Invalid SOURCE' if defined $remainder;
|
fatal_error 'Invalid SOURCE' if defined $remainder;
|
||||||
|
|
||||||
if ( $srczone eq firewall_zone ) {
|
if ( $srczone eq firewall_zone ) {
|
||||||
@ -267,8 +282,8 @@ sub setup_rfc1918_filteration( $ ) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setup_blacklist() {
|
sub setup_blacklist( $ ) {
|
||||||
|
my $filename = shift;
|
||||||
my $hosts = find_hosts_by_option 'blacklist';
|
my $hosts = find_hosts_by_option 'blacklist';
|
||||||
my $chainref;
|
my $chainref;
|
||||||
my ( $level, $disposition ) = @config{'BLACKLIST_LOGLEVEL', 'BLACKLIST_DISPOSITION' };
|
my ( $level, $disposition ) = @config{'BLACKLIST_LOGLEVEL', 'BLACKLIST_DISPOSITION' };
|
||||||
@ -290,7 +305,7 @@ sub setup_blacklist() {
|
|||||||
|
|
||||||
BLACKLIST:
|
BLACKLIST:
|
||||||
{
|
{
|
||||||
if ( my $fn = open_file 'blacklist' ) {
|
if ( my $fn = open_file $filename ) {
|
||||||
|
|
||||||
my $first_entry = 1;
|
my $first_entry = 1;
|
||||||
|
|
||||||
@ -516,7 +531,7 @@ sub add_common_rules() {
|
|||||||
|
|
||||||
run_user_exit1 'initdone';
|
run_user_exit1 'initdone';
|
||||||
|
|
||||||
setup_blacklist;
|
setup_blacklist 'blacklist';
|
||||||
|
|
||||||
$list = find_hosts_by_option 'nosmurfs';
|
$list = find_hosts_by_option 'nosmurfs';
|
||||||
|
|
||||||
@ -699,7 +714,7 @@ sub setup_mac_lists( $ ) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
my $fn = open_file 'maclist';
|
my $fn = open_file( $rules_family == F_INET ? 'maclist' : '6maclist');
|
||||||
|
|
||||||
first_entry "$doing $fn...";
|
first_entry "$doing $fn...";
|
||||||
|
|
||||||
|
@ -152,12 +152,14 @@ our $interface_list;
|
|||||||
our $interface_table;
|
our $interface_table;
|
||||||
our $bport_zones;
|
our $bport_zones;
|
||||||
our $zone_family;
|
our $zone_family;
|
||||||
|
our $zone_family_name;
|
||||||
|
|
||||||
sub use_ipv4_interfaces() {
|
sub use_ipv4_interfaces() {
|
||||||
$interface_list = \@interfaces4;
|
$interface_list = \@interfaces4;
|
||||||
$interface_table = \%interfaces4;
|
$interface_table = \%interfaces4;
|
||||||
$bport_zones = \@bport_zones4;
|
$bport_zones = \@bport_zones4;
|
||||||
$zone_family = F_INET;
|
$zone_family = F_INET;
|
||||||
|
$zone_family_name = 'IPv4';
|
||||||
}
|
}
|
||||||
|
|
||||||
sub use_ipv6_interfaces() {
|
sub use_ipv6_interfaces() {
|
||||||
@ -165,6 +167,7 @@ sub use_ipv6_interfaces() {
|
|||||||
$interface_table = \%interfaces6;
|
$interface_table = \%interfaces6;
|
||||||
$bport_zones = \@bport_zones6;
|
$bport_zones = \@bport_zones6;
|
||||||
$zone_family = F_INET6;
|
$zone_family = F_INET6;
|
||||||
|
$zone_family_name = 'IPv6';
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -401,51 +404,6 @@ sub haveipseczones() {
|
|||||||
0;
|
0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
|
||||||
# Report about zones.
|
|
||||||
#
|
|
||||||
sub zone_report()
|
|
||||||
{
|
|
||||||
progress_message2 "Determining Hosts in Zones...";
|
|
||||||
|
|
||||||
for my $zone ( @zones )
|
|
||||||
{
|
|
||||||
my $zoneref = $zones{$zone};
|
|
||||||
my $hostref = $zoneref->{hosts};
|
|
||||||
my $type = $zoneref->{type};
|
|
||||||
my $optionref = $zoneref->{options};
|
|
||||||
|
|
||||||
progress_message " $zone ($type)";
|
|
||||||
|
|
||||||
my $printed = 0;
|
|
||||||
|
|
||||||
if ( $hostref ) {
|
|
||||||
for my $type ( sort keys %$hostref ) {
|
|
||||||
my $interfaceref = $hostref->{$type};
|
|
||||||
|
|
||||||
for my $interface ( sort keys %$interfaceref ) {
|
|
||||||
my $arrayref = $interfaceref->{$interface};
|
|
||||||
for my $groupref ( @$arrayref ) {
|
|
||||||
my $hosts = $groupref->{hosts};
|
|
||||||
if ( $hosts ) {
|
|
||||||
my $grouplist = join ',', ( @$hosts );
|
|
||||||
progress_message " $interface:$grouplist";
|
|
||||||
$printed = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unless ( $printed ) {
|
|
||||||
fatal_error "No bridge has been associated with zone $zone" if $type =~ /^bport*/ && ! $zoneref->{bridge};
|
|
||||||
warning_message "*** $zone is an EMPTY ZONE ***" unless $type eq 'firewall';
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub dump_zone_contents()
|
sub dump_zone_contents()
|
||||||
{
|
{
|
||||||
for my $zone ( @zones )
|
for my $zone ( @zones )
|
||||||
@ -605,13 +563,58 @@ sub firewall_zone() {
|
|||||||
$firewall_zone;
|
$firewall_zone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Report about zones.
|
||||||
|
#
|
||||||
|
sub zone_report()
|
||||||
|
{
|
||||||
|
progress_message2 "Determining Hosts in $zone_family_name Zones...";
|
||||||
|
|
||||||
|
for my $zone ( all_zones )
|
||||||
|
{
|
||||||
|
my $zoneref = $zones{$zone};
|
||||||
|
my $hostref = $zoneref->{hosts};
|
||||||
|
my $type = $zoneref->{type};
|
||||||
|
my $optionref = $zoneref->{options};
|
||||||
|
|
||||||
|
progress_message " $zone ($type)";
|
||||||
|
|
||||||
|
my $printed = 0;
|
||||||
|
|
||||||
|
if ( $hostref ) {
|
||||||
|
for my $type ( sort keys %$hostref ) {
|
||||||
|
my $interfaceref = $hostref->{$type};
|
||||||
|
|
||||||
|
for my $interface ( sort keys %$interfaceref ) {
|
||||||
|
my $arrayref = $interfaceref->{$interface};
|
||||||
|
for my $groupref ( @$arrayref ) {
|
||||||
|
my $hosts = $groupref->{hosts};
|
||||||
|
if ( $hosts ) {
|
||||||
|
my $grouplist = join ',', ( @$hosts );
|
||||||
|
progress_message " $interface:$grouplist";
|
||||||
|
$printed = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unless ( $printed ) {
|
||||||
|
fatal_error "No bridge has been associated with zone $zone" if $type =~ /^bport*/ && ! $zoneref->{bridge};
|
||||||
|
warning_message "*** $zone is an EMPTY ZONE ***" unless $type eq 'firewall';
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Parse the interfaces file.
|
# Parse the interfaces file.
|
||||||
#
|
#
|
||||||
|
|
||||||
sub validate_interfaces_file( $$ )
|
sub validate_interfaces_file( $ )
|
||||||
{
|
{
|
||||||
my ( $filename, $export ) = @_;
|
my $export = shift;
|
||||||
my $num = 0;
|
my $num = 0;
|
||||||
|
|
||||||
use constant { SIMPLE_IF_OPTION => 1,
|
use constant { SIMPLE_IF_OPTION => 1,
|
||||||
@ -654,7 +657,7 @@ sub validate_interfaces_file( $$ )
|
|||||||
mss => NUMERIC_IF_OPTION,
|
mss => NUMERIC_IF_OPTION,
|
||||||
);
|
);
|
||||||
|
|
||||||
my $fn = open_file $filename;
|
my $fn = open_file ($zone_family == F_INET ? 'interfaces' : '6interfaces');
|
||||||
|
|
||||||
my $first_entry = 1;
|
my $first_entry = 1;
|
||||||
|
|
||||||
@ -974,10 +977,8 @@ sub set_interface_option( $$$ ) {
|
|||||||
#
|
#
|
||||||
# Validates the hosts file. Generates entries in %zone{..}{hosts}
|
# Validates the hosts file. Generates entries in %zone{..}{hosts}
|
||||||
#
|
#
|
||||||
sub validate_hosts_file( $ )
|
sub validate_hosts_file()
|
||||||
{
|
{
|
||||||
my $filename = shift;
|
|
||||||
|
|
||||||
my %validoptions = (
|
my %validoptions = (
|
||||||
blacklist => 1,
|
blacklist => 1,
|
||||||
maclist => 1,
|
maclist => 1,
|
||||||
@ -994,7 +995,7 @@ sub validate_hosts_file( $ )
|
|||||||
my $ipsec = 0;
|
my $ipsec = 0;
|
||||||
my $first_entry = 1;
|
my $first_entry = 1;
|
||||||
|
|
||||||
my $fn = open_file $filename;
|
my $fn = open_file ($zone_family == F_INET ? 'hosts' : '6hosts');
|
||||||
|
|
||||||
while ( read_a_line ) {
|
while ( read_a_line ) {
|
||||||
|
|
||||||
@ -1013,7 +1014,16 @@ sub validate_hosts_file( $ )
|
|||||||
|
|
||||||
my $interface;
|
my $interface;
|
||||||
|
|
||||||
if ( $hosts =~ /^([\w.@%-]+\+?):(.*)$/ ) {
|
if ( $zone_family == F_INET ) {
|
||||||
|
if ( $hosts =~ /^([\w.@%-]+\+?):(.*)$/ ) {
|
||||||
|
$interface = $1;
|
||||||
|
$hosts = $2;
|
||||||
|
$zoneref->{options}{complex} = 1 if $hosts =~ /^\+/;
|
||||||
|
fatal_error "Unknown interface ($interface)" unless $interface_table->{$interface}{root};
|
||||||
|
} else {
|
||||||
|
fatal_error "Invalid HOST(S) column contents: $hosts";
|
||||||
|
}
|
||||||
|
} elsif ( $hosts =~ /^([\w.@%-]+\+?);(.*)$/ ) {
|
||||||
$interface = $1;
|
$interface = $1;
|
||||||
$hosts = $2;
|
$hosts = $2;
|
||||||
$zoneref->{options}{complex} = 1 if $hosts =~ /^\+/;
|
$zoneref->{options}{complex} = 1 if $hosts =~ /^\+/;
|
||||||
@ -1073,7 +1083,7 @@ sub validate_hosts_file( $ )
|
|||||||
progress_message " Host \"$currentline\" validated";
|
progress_message " Host \"$currentline\" validated";
|
||||||
}
|
}
|
||||||
|
|
||||||
return $ipsec;
|
$capabilities{POLICY_MATCH} = '' unless $ipsec || haveipseczones;
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
|
Loading…
Reference in New Issue
Block a user