]> git.proxmox.com Git - pve-firewall.git/blobdiff - src/PVE/Firewall.pm
remove unneccessary iptables code
[pve-firewall.git] / src / PVE / Firewall.pm
index 97b15b064db06fc2d52bb55ef5f74bfdfe9d5bb2..ff95cea2fe3c38a18134b6d222c45a09e912a7f8 100644 (file)
@@ -791,12 +791,6 @@ sub enable_bridge_firewall {
 
 my $rule_format = "%-15s %-30s %-30s %-15s %-15s %-15s\n";
 
-sub iptables {
-    my ($cmd) = @_;
-
-    run_command("/sbin/iptables $cmd", outfunc => sub {}, errfunc => sub {});
-}
-
 sub iptables_restore_cmdlist {
     my ($cmdlist) = @_;
 
@@ -880,6 +874,7 @@ sub iptables_chain_digest {
 
 sub ipset_chain_digest {
     my ($rules) = @_;
+
     my $digest = Digest::SHA->new('sha1');
     foreach my $rule (sort @$rules) { # note: sorted
        $digest->add($rule);
@@ -915,28 +910,6 @@ sub ipset_get_chains {
     return $res;
 }
 
-sub iptables_chain_exist {
-    my ($chain) = @_;
-
-    eval{
-       iptables("-n --list $chain");
-    };
-    return undef if $@;
-
-    return 1;
-}
-
-sub iptables_rule_exist {
-    my ($rule) = @_;
-
-    eval{
-       iptables("-C $rule");
-    };
-    return undef if $@;
-
-    return 1;
-}
-
 sub ruleset_generate_cmdstr {
     my ($ruleset, $chain, $rule, $actions, $goto) = @_;
 
@@ -2258,24 +2231,12 @@ sub compile {
 }
 
 sub get_ruleset_status {
-    my ($ruleset, $verbose, $ipset) = @_;
-
-    my $active_chains = undef;
-    if($ipset){
-       $active_chains = ipset_get_chains();
-    }else{
-       $active_chains = iptables_get_chains();
-    }
+    my ($ruleset, $active_chains, $digest_fn, $verbose) = @_;
 
     my $statushash = {};
 
     foreach my $chain (sort keys %$ruleset) {
-       my $sig;
-       if ($ipset) {
-           $sig = ipset_chain_digest($ruleset->{$chain});
-       } else {
-           $sig = iptables_chain_digest($ruleset->{$chain});
-       }
+       my $sig = &$digest_fn($ruleset->{$chain});
 
        $statushash->{$chain}->{sig} = $sig;
 
@@ -2318,8 +2279,9 @@ sub get_ruleset_cmdlist {
     my ($ruleset, $verbose) = @_;
 
     my $cmdlist = "*filter\n"; # we pass this to iptables-restore;
-
-    my $statushash = get_ruleset_status($ruleset, $verbose);
+    my ($active_chains, $hooks) = iptables_get_chains();
+    my $statushash = get_ruleset_status($ruleset, $active_chains, \&iptables_chain_digest, $verbose);
 
     # create missing chains first
     foreach my $chain (sort keys %$ruleset) {
@@ -2330,18 +2292,10 @@ sub get_ruleset_cmdlist {
        $cmdlist .= ":$chain - [0:0]\n";
     }
 
-    my $rule = "INPUT -j PVEFW-INPUT";
-    if (!PVE::Firewall::iptables_rule_exist($rule)) {
-       $cmdlist .= "-A $rule\n";
-    }
-    $rule = "OUTPUT -j PVEFW-OUTPUT";
-    if (!PVE::Firewall::iptables_rule_exist($rule)) {
-       $cmdlist .= "-A $rule\n";
-    }
-
-    $rule = "FORWARD -j PVEFW-FORWARD";
-    if (!PVE::Firewall::iptables_rule_exist($rule)) {
-       $cmdlist .= "-A $rule\n";
+    foreach my $h (qw(INPUT OUTPUT FORWARD)) {
+       if (!$hooks->{$h}) {
+           $cmdlist .= "-A $h -j PVEFW-$h\n";
+       }
     }
 
     foreach my $chain (sort keys %$ruleset) {
@@ -2376,7 +2330,7 @@ sub get_ruleset_cmdlist {
     }
 
     my $changes = $cmdlist ne "*filter\n" ? 1 : 0;
+
     $cmdlist .= "COMMIT\n";
 
     return wantarray ? ($cmdlist, $changes) : $cmdlist;
@@ -2387,7 +2341,8 @@ sub get_ipset_cmdlist {
 
     my $cmdlist = "";
 
-    my $statushash = get_ruleset_status($ruleset, $verbose, 1);
+    my $active_chains = ipset_get_chains();
+    my $statushash = get_ruleset_status($ruleset, $active_chains, \&ipset_chain_digest, $verbose);
 
     foreach my $chain (sort keys %$ruleset) {
        my $stat = $statushash->{$chain};
@@ -2446,7 +2401,8 @@ sub apply_ruleset {
     iptables_restore_cmdlist($cmdlist);
 
     # test: re-read status and check if everything is up to date
-    my $statushash = get_ruleset_status($ruleset);
+    my $active_chains = iptables_get_chains();
+    my $statushash = get_ruleset_status($ruleset, $active_chains, \&iptables_chain_digest, $verbose);
 
     my $errors;
     foreach my $chain (sort keys %$ruleset) {