[pve-devel] [PATCH v2 firewall 3/4] integrate logging into ruleset_addrule

Wolfgang Bumiller w.bumiller at proxmox.com
Wed Sep 27 09:53:55 CEST 2017


On Wed, Sep 27, 2017 at 12:02:32AM +0200, Tom Weber wrote:
> ---
>  src/PVE/Firewall.pm | 33 ++++++++++-----------------------
>  1 file changed, 10 insertions(+), 23 deletions(-)
> 
> diff --git a/src/PVE/Firewall.pm b/src/PVE/Firewall.pm
> index f1aecef..f8a9300 100644
> --- a/src/PVE/Firewall.pm
> +++ b/src/PVE/Firewall.pm
> @@ -2002,10 +2002,14 @@ sub ruleset_addrule_old {
>  }
>  
>  sub ruleset_addrule {
> -   my ($ruleset, $chain, $match, $action, $log) = @_;
> +   my ($ruleset, $chain, $match, $action, $log, $logmsg, $vmid) = @_;
>  
>     die "no such chain '$chain'\n" if !$ruleset->{$chain};
>  
> +   if (defined($log) && $log) {

Did you mean to also check $logmsg? (As a sanity check this would probably
be useful). Because the 'defined($log)' part is redundant since `undef`
is false anyway.

> +	my $logaction = get_log_rule_base($chain, $vmid, $logmsg, $log);
> +	push @{$ruleset->{$chain}}, "-A $chain $match $logaction";
> +   }
>     push @{$ruleset->{$chain}}, "-A $chain $match $action";
>  }
>  
> @@ -2020,27 +2024,15 @@ sub ruleset_insertrule {
>  sub get_log_rule_base {
>      my ($chain, $vmid, $msg, $loglevel) = @_;
>  
> -    die "internal error - no log level" if !defined($loglevel);
> -
>      $vmid = 0 if !defined($vmid);
> +    $msg = "" if !defined($msg);
>  
>      # Note: we use special format for prefix to pass further
> -    # info to log daemon (VMID, LOGVELEL and CHAIN)
> +    # info to log daemon (VMID, LOGLEVEL and CHAIN)
>  
>      return "-j NFLOG --nflog-prefix \":$vmid:$loglevel:$chain: $msg\"";
>  }
>  
> -sub ruleset_addlog {
> -    my ($ruleset, $chain, $vmid, $msg, $loglevel, $match) = @_;
> -
> -    return if !defined($loglevel);
> -
> -    my $logaction = get_log_rule_base($chain, $vmid, $msg, $loglevel);
> -
> -    $match = "" if !defined $match;
> -    ruleset_addrule($ruleset, $chain, $match, $logaction);
> -}
> -
>  sub ruleset_add_chain_policy {
>      my ($ruleset, $chain, $ipversion, $vmid, $policy, $loglevel, $accept_action) = @_;
>  
> @@ -2053,15 +2045,11 @@ sub ruleset_add_chain_policy {
>  
>  	ruleset_addrule($ruleset, $chain, "", "-j PVEFW-Drop");
>  
> -	ruleset_addlog($ruleset, $chain, $vmid, "policy $policy: ", $loglevel);
> -
> -	ruleset_addrule($ruleset, $chain, "", "-j DROP");
> +	ruleset_addrule($ruleset, $chain, "", "-j DROP", $loglevel, "policy $policy: ", $vmid);
>      } elsif ($policy eq 'REJECT') {
>  	ruleset_addrule($ruleset, $chain, "", "-j PVEFW-Reject");
>  
> -	ruleset_addlog($ruleset, $chain, $vmid, "policy $policy: ", $loglevel);
> -
> -	ruleset_addrule($ruleset, $chain, "", "-g PVEFW-reject");
> +	ruleset_addrule($ruleset, $chain, "", "-g PVEFW-reject", $loglevel, "policy: $policy", $vmid);

typo: "policy: $policy" vs "policy $policy: "

>      } else {
>  	# should not happen
>  	die "internal error: unknown policy '$policy'";
> @@ -2093,8 +2081,7 @@ sub ruleset_chain_add_input_filters {
>      if ($cluster_conf->{ipset}->{blacklist}){
>  	if (!ruleset_chain_exist($ruleset, "PVEFW-blacklist")) {
>  	    ruleset_create_chain($ruleset, "PVEFW-blacklist");
> -	    ruleset_addlog($ruleset, "PVEFW-blacklist", 0, "DROP: ", $loglevel) if $loglevel;
> -	    ruleset_addrule($ruleset, "PVEFW-blacklist", "", "-j DROP");
> +	    ruleset_addrule($ruleset, "PVEFW-blacklist", "", "-j DROP", $loglevel, "DROP: ");
>  	}
>  	my $ipset_chain = compute_ipset_chain_name(0, 'blacklist', $ipversion);
>  	ruleset_addrule($ruleset, $chain, "-m set --match-set ${ipset_chain} src", "-j PVEFW-blacklist");
> -- 
> 2.7.4




More information about the pve-devel mailing list