X-Git-Url: https://git.proxmox.com/?p=pve-firewall.git;a=blobdiff_plain;f=src%2FPVE%2FFirewall.pm;h=dd6ec61a38e5d02a9dd7e695a4c023f97a8782eb;hp=d5d4950b6aaa4be45c796d37c084dc599452976c;hb=35f0c37e4dfcc017ca3446971efcb5f78155a7e7;hpb=b22130d3fd198a3d5ad9113f87c4ae3cf68c0303 diff --git a/src/PVE/Firewall.pm b/src/PVE/Firewall.pm index d5d4950..dd6ec61 100644 --- a/src/PVE/Firewall.pm +++ b/src/PVE/Firewall.pm @@ -56,6 +56,13 @@ PVE::JSONSchema::register_standard_option('ipset-name', { maxLength => 20, }); +PVE::JSONSchema::register_standard_option('pve-fw-loglevel' => { + description => "Log level.", + type => 'string', + enum => ['emerg', 'alert', 'crit', 'err', 'warning', 'notice', 'info', 'debug', 'nolog'], + optional => 1, +}); + my $security_group_pattern = '[A-Za-z][A-Za-z0-9\-\_]+'; PVE::JSONSchema::register_standard_option('pve-security-group-name', { @@ -1218,7 +1225,7 @@ sub ruleset_generate_cmdstr { push @cmd, "-m iprange --dst-range $dest"; } else { - push @cmd, "-s $dest"; + push @cmd, "-d $dest"; } } @@ -1634,6 +1641,7 @@ sub enable_host_firewall { my $options = $hostfw_conf->{options}; my $cluster_options = $cluster_conf->{options}; my $rules = $hostfw_conf->{rules}; + my $cluster_rules = $cluster_conf->{rules}; # host inbound firewall my $chain = "PVEFW-HOST-IN"; @@ -1659,7 +1667,8 @@ sub enable_host_firewall { # we use RETURN because we need to check also tap rules my $accept_action = 'RETURN'; - foreach my $rule (@$rules) { + # add host rules first, so that cluster wide rules can be overwritten + foreach my $rule (@$rules, @$cluster_rules) { next if $rule->{type} ne 'in'; ruleset_generate_rule($ruleset, $chain, $rule, { ACCEPT => $accept_action, REJECT => "PVEFW-reject" }, undef, $cluster_conf); } @@ -1684,7 +1693,8 @@ sub enable_host_firewall { # we use RETURN because we may want to check other thigs later $accept_action = 'RETURN'; - foreach my $rule (@$rules) { + # add host rules first, so that cluster wide rules can be overwritten + foreach my $rule (@$rules, @$cluster_rules) { next if $rule->{type} ne 'out'; ruleset_generate_rule($ruleset, $chain, $rule, { ACCEPT => $accept_action, REJECT => "PVEFW-reject" }, undef, $cluster_conf); } @@ -2277,6 +2287,7 @@ sub generate_std_chains { # same as shorewall smurflog. my $chain = 'PVEFW-smurflog'; + $pve_std_chains->{$chain} = []; push @{$pve_std_chains->{$chain}}, get_log_rule_base($chain, 0, "DROP: ", $loglevel) if $loglevel; push @{$pve_std_chains->{$chain}}, "-j DROP"; @@ -2284,6 +2295,8 @@ sub generate_std_chains { # same as shorewall logflags action. $loglevel = get_option_log_level($options, 'tcp_flags_log_level'); $chain = 'PVEFW-logflags'; + $pve_std_chains->{$chain} = []; + # fixme: is this correctly logged by pvewf-logger? (ther is no --log-ip-options for NFLOG) push @{$pve_std_chains->{$chain}}, get_log_rule_base($chain, 0, "DROP: ", $loglevel) if $loglevel; push @{$pve_std_chains->{$chain}}, "-j DROP"; @@ -2493,7 +2506,6 @@ sub compile { my $routing_table = read_proc_net_route(); - my $ipset_ruleset = {}; generate_ipset_chains($ipset_ruleset, $cluster_conf);