]> git.proxmox.com Git - pve-firewall.git/commitdiff
Add ndp option to host and VM firewall options
authorWolfgang Bumiller <w.bumiller@proxmox.com>
Fri, 19 Feb 2016 08:43:32 +0000 (09:43 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 19 Feb 2016 08:59:40 +0000 (09:59 +0100)
It's is enabled by default.

src/PVE/API2/Firewall/Host.pm
src/PVE/API2/Firewall/VM.pm
src/PVE/Firewall.pm

index 37a63b7035c28c0dbac7a0e5a99509d52cf4299d..130ca023b6ad9022e45918534fb74c88d526b48f 100644 (file)
@@ -84,7 +84,12 @@ my $option_properties = {
        type => 'integer',
        optional => 1,
        minimum => 7875,
-    }
+    },
+    ndp => {
+       description => "Enable NDP.",
+       type => 'boolean',
+       optional => 1,
+    },
 };
 
 my $add_option_properties = sub {
index f4834918b35212e270c359257311139150b698ef..9cca0c66084f69e6651d95d4bd774bcba64d3815 100644 (file)
@@ -28,6 +28,11 @@ my $option_properties = {
        type => 'boolean',
        optional => 1,
     },
+    ndp => {
+       description => "Enable NDP.",
+       type => 'boolean',
+       optional => 1,
+    },
     policy_in => {
        description => "Input policy.",
        type => 'string',
index 5b94052c6938b41d9f2e3f845a8aa055ae2f2930..25f1cc9e4a88a136872cd242a5d48843957bdc27 100644 (file)
@@ -1869,6 +1869,16 @@ sub ruleset_add_chain_policy {
     }
 }
 
+sub ruleset_chain_add_ndp {
+    my ($ruleset, $chain, $ipversion, $options) = @_;
+    return if $ipversion != 6 || (defined($options->{ndp}) && !$options->{ndp});
+
+    ruleset_addrule($ruleset, $chain, "-p icmpv6 --icmpv6-type router-solicitation -j ACCEPT");
+    ruleset_addrule($ruleset, $chain, "-p icmpv6 --icmpv6-type router-advertisement -j ACCEPT");
+    ruleset_addrule($ruleset, $chain, "-p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT");
+    ruleset_addrule($ruleset, $chain, "-p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT");
+}
+
 sub ruleset_chain_add_conn_filters {
     my ($ruleset, $chain, $accept) = @_;
 
@@ -1931,6 +1941,8 @@ sub ruleset_create_vm_chain {
 
     }
 
+    ruleset_chain_add_ndp($ruleset, $chain, $ipversion, $options);
+
     if ($direction eq 'OUT') {
        if (defined($macaddr) && !(defined($options->{macfilter}) && $options->{macfilter} == 0)) {
            ruleset_addrule($ruleset, $chain, "-m mac ! --mac-source $macaddr -j DROP");
@@ -2095,6 +2107,7 @@ sub enable_host_firewall {
 
     ruleset_addrule($ruleset, $chain, "-i lo -j ACCEPT");
 
+    ruleset_chain_add_ndp($ruleset, $chain, $ipversion, $options);
     ruleset_chain_add_conn_filters($ruleset, $chain, 'ACCEPT');
     ruleset_chain_add_input_filters($ruleset, $chain, $ipversion, $options, $cluster_conf, $loglevel);
 
@@ -2153,6 +2166,7 @@ sub enable_host_firewall {
 
     ruleset_addrule($ruleset, $chain, "-o lo -j ACCEPT");
 
+    ruleset_chain_add_ndp($ruleset, $chain, $ipversion, $options);
     ruleset_chain_add_conn_filters($ruleset, $chain, 'ACCEPT');
 
     # we use RETURN because we may want to check other thigs later
@@ -2327,7 +2341,7 @@ sub parse_vmfw_option {
 
     my $loglevels = "emerg|alert|crit|err|warning|notice|info|debug|nolog";
 
-    if ($line =~ m/^(enable|dhcp|macfilter|ips):\s*(0|1)\s*$/i) {
+    if ($line =~ m/^(enable|dhcp|ndp|macfilter|ips):\s*(0|1)\s*$/i) {
        $opt = lc($1);
        $value = int($2);
     } elsif ($line =~ m/^(log_level_in|log_level_out):\s*(($loglevels)\s*)?$/i) {
@@ -2353,7 +2367,7 @@ sub parse_hostfw_option {
 
     my $loglevels = "emerg|alert|crit|err|warning|notice|info|debug|nolog";
 
-    if ($line =~ m/^(enable|nosmurfs|tcpflags):\s*(0|1)\s*$/i) {
+    if ($line =~ m/^(enable|nosmurfs|tcpflags|ndp):\s*(0|1)\s*$/i) {
        $opt = lc($1);
        $value = int($2);
     } elsif ($line =~ m/^(log_level_in|log_level_out|tcp_flags_log_level|smurf_log_level):\s*(($loglevels)\s*)?$/i) {