]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blobdiff - html/cgi-bin/firewall.cgi
Firewall: rebuild complete counter procedure in firewall-groups. This way the counter...
[people/teissler/ipfire-2.x.git] / html / cgi-bin / firewall.cgi
index 0b7c6fc44495a39a466f88c570c96228e22f193b..28a7f0bd2eba15296adea1963caa11aae6754cf6 100755 (executable)
@@ -251,17 +251,6 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule')
                        }
                }
                if (!$errormessage){
-                       &checkcounter($fwdfwsettings{'oldgrp1a'},$fwdfwsettings{'oldgrp1b'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}});
-                       if ($fwdfwsettings{'nobase'} ne 'on'){
-                               &checkcounter($fwdfwsettings{'oldgrp2a'},$fwdfwsettings{'oldgrp2b'},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}});
-                       }
-                       if($fwdfwsettings{'oldusesrv'} eq '' &&  $fwdfwsettings{'USESRV'} eq 'ON'){
-                               &checkcounter(0,0,$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}});
-                       }elsif ($fwdfwsettings{'USESRV'} eq '' && $fwdfwsettings{'oldusesrv'} eq 'ON') {
-                               &checkcounter($fwdfwsettings{'oldgrp3a'},$fwdfwsettings{'oldgrp3b'},0,0);
-                       }elsif ($fwdfwsettings{'oldusesrv'} eq $fwdfwsettings{'USESRV'} && $fwdfwsettings{'oldgrp3b'} ne $fwdfwsettings{$fwdfwsettings{'grp3'}} && $fwdfwsettings{'updatefwrule'} eq 'on'){
-                               &checkcounter($fwdfwsettings{'oldgrp3a'},$fwdfwsettings{'oldgrp3b'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}});
-                       }
                        if($fwdfwsettings{'nosave2'} ne 'on'){
                                &saverule(\%configinputfw,$configinput);
                        }
@@ -307,18 +296,6 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule')
                }
                #increase counters
                if (!$errormessage){
-                &checkcounter($fwdfwsettings{'oldgrp1a'},$fwdfwsettings{'oldgrp1b'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}});
-                &checkcounter($fwdfwsettings{'oldgrp2a'},$fwdfwsettings{'oldgrp2b'},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}});
-                       if($fwdfwsettings{'oldusesrv'} eq '' &&  $fwdfwsettings{'USESRV'} eq 'ON'){
-                               &checkcounter(0,0,$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}});
-                       }elsif ($fwdfwsettings{'USESRV'} eq '' && $fwdfwsettings{'oldusesrv'} eq 'ON') {
-                               &checkcounter($fwdfwsettings{'oldgrp3a'},$fwdfwsettings{'oldgrp3b'},0,0);
-                       }elsif ($fwdfwsettings{'oldusesrv'} eq $fwdfwsettings{'USESRV'} && $fwdfwsettings{'oldgrp3b'} ne $fwdfwsettings{$fwdfwsettings{'grp3'}} && $fwdfwsettings{'updatefwrule'} eq 'on'){
-                               &checkcounter($fwdfwsettings{'oldgrp3a'},$fwdfwsettings{'oldgrp3b'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}});
-                       }
-                       if ($fwdfwsettings{'nobase'} eq 'on'){
-                               &checkcounter(0,0,$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}});
-                       }
                        if ($fwdfwsettings{'nosave2'} ne 'on'){
                                &saverule(\%configoutgoingfw,$configoutgoing);
                        }
@@ -364,18 +341,6 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule')
                }
                #increase counters
                if (!$errormessage){
-                       &checkcounter($fwdfwsettings{'oldgrp1a'},$fwdfwsettings{'oldgrp1b'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}});
-                       &checkcounter($fwdfwsettings{'oldgrp2a'},$fwdfwsettings{'oldgrp2b'},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}});
-                       if($fwdfwsettings{'oldusesrv'} eq '' &&  $fwdfwsettings{'USESRV'} eq 'ON'){
-                               &checkcounter(0,0,$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}});
-                       }elsif ($fwdfwsettings{'USESRV'} eq '' && $fwdfwsettings{'oldusesrv'} eq 'ON') {
-                               &checkcounter($fwdfwsettings{'oldgrp3a'},$fwdfwsettings{'oldgrp3b'},0,0);
-                       }elsif ($fwdfwsettings{'oldusesrv'} eq $fwdfwsettings{'USESRV'} && $fwdfwsettings{'oldgrp3b'} ne $fwdfwsettings{$fwdfwsettings{'grp3'}} && $fwdfwsettings{'updatefwrule'} eq 'on'){
-                               &checkcounter($fwdfwsettings{'oldgrp3a'},$fwdfwsettings{'oldgrp3b'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}});
-                       }
-                       if ($fwdfwsettings{'nobase'} eq 'on'){
-                               &checkcounter(0,0,$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}});
-                       }
                        if ($fwdfwsettings{'nosave2'} ne 'on'){
                                &saverule(\%configfwdfw,$configfwdfw);
                        }
@@ -497,8 +462,6 @@ sub changerule
        $fwdfwsettings{'config'}=$oldchain;
        $fwdfwsettings{'nobase'}='on';
        &deleterule;
-       &checkcounter(0,0,$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}});
-       &checkcounter(0,0,$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}});
 }
 sub checksource
 {
@@ -855,12 +818,7 @@ sub checkrule
                        }
                }
        }
-       #When using source- or targetport, the protocol has to be TCP or UDP
-       if (($fwdfwsettings{'USESRV'} eq 'ON' || $fwdfwsettings{'USE_SRC_PORT'} eq 'ON') && ($fwdfwsettings{'SRC_PORT'} ne '' || $fwdfwsettings{'TGT_PORT'} ne '') && ($fwdfwsettings{'PROT'} ne 'TCP' && $fwdfwsettings{'PROT'} ne 'UDP')){
-               $errormessage.=$Lang::tr{'fwdfw err prot_port1'};
-               return;
-       }
-       #when icmp selected, no targetport allowed
+       #when icmp selected, no source and targetport allowed
        if (($fwdfwsettings{'PROT'} ne '' && $fwdfwsettings{'PROT'} ne 'TCP' && $fwdfwsettings{'PROT'} ne 'UDP' && $fwdfwsettings{'PROT'} ne 'template') && ($fwdfwsettings{'USESRV'} eq 'ON' || $fwdfwsettings{'USE_SRC_PORT'} eq 'ON')){
                $errormessage.=$Lang::tr{'fwdfw err prot_port'};
                return;
@@ -930,41 +888,14 @@ sub checkrule
                $fwdfwsettings{'ICMP_TYPES'}='';
                $fwdfwsettings{'USESRV'}='';
                $fwdfwsettings{'TGT_PORT'}='';
-       }elsif($fwdfwsettings{'PROT'} ne 'TCP' && $fwdfwsettings{'PROT'} ne 'UDP' && $fwdfwsettings{'PROT'} ne 'ICMP'){
+       }elsif($fwdfwsettings{'PROT'} ne 'TCP' && $fwdfwsettings{'PROT'} ne 'UDP'){
                $fwdfwsettings{'ICMP_TYPES'}='';
-               $fwdfwsettings{'PROT'} = '';
+               $fwdfwsettings{'SRC_PORT'}='';
+               $fwdfwsettings{'TGT_PORT'}='';
        }elsif($fwdfwsettings{'PROT'} ne 'ICMP'){
                $fwdfwsettings{'ICMP_TYPES'}='';
        }
 }
-sub checkcounter
-{
-       my ($base1,$val1,$base2,$val2) = @_;
-               
-       if($base1 eq 'cust_net_src' || $base1 eq 'cust_net_tgt'){
-               &dec_counter($confignet,\%customnetwork,$val1);
-       }elsif($base1 eq 'cust_host_src' || $base1 eq 'cust_host_tgt'){
-               &dec_counter($confighost,\%customhost,$val1);
-       }elsif($base1 eq 'cust_grp_src' || $base1 eq 'cust_grp_tgt'){
-               &dec_counter($configgrp,\%customgrp,$val1);
-       }elsif($base1 eq 'cust_srv'){
-               &dec_counter($configsrv,\%customservice,$val1);
-       }elsif($base1 eq 'cust_srvgrp'){
-               &dec_counter($configsrvgrp,\%customservicegrp,$val1);   
-       }
-
-       if($base2 eq 'cust_net_src' || $base2 eq 'cust_net_tgt'){
-               &inc_counter($confignet,\%customnetwork,$val2);
-       }elsif($base2 eq 'cust_host_src' || $base2 eq 'cust_host_tgt'){
-               &inc_counter($confighost,\%customhost,$val2);
-       }elsif($base2 eq 'cust_grp_src' || $base2 eq 'cust_grp_tgt'){
-               &inc_counter($configgrp,\%customgrp,$val2);
-       }elsif($base2 eq 'cust_srv'){
-               &inc_counter($configsrv,\%customservice,$val2);
-       }elsif($base2 eq 'cust_srvgrp'){
-               &inc_counter($configsrvgrp,\%customservicegrp,$val2);   
-       }
-}
 sub checkvpn
 {
        my $ip=shift;
@@ -996,15 +927,6 @@ sub deleterule
        my %delhash=();
        &General::readhasharray($fwdfwsettings{'config'}, \%delhash);
        foreach my $key (sort {$a <=> $b} keys %delhash){
-               if ($key == $fwdfwsettings{'key'}){
-                       #check hosts/net and groups
-                       &checkcounter($delhash{$key}[3],$delhash{$key}[4],,);
-                       &checkcounter($delhash{$key}[5],$delhash{$key}[6],,);
-                       #check services and groups
-                       if ($delhash{$key}[11] eq 'ON'){
-                               &checkcounter($delhash{$key}[14],$delhash{$key}[15],,);
-                       }
-               }
                if ($key >= $fwdfwsettings{'key'}) {
                        my $next = $key + 1;
                        if (exists $delhash{$next}) {
@@ -1037,21 +959,6 @@ sub disable_rule
        &General::writehasharray("$configfwdfw", \%configfwdfw);
        &General::firewall_config_changed();
 }
-sub dec_counter
-{
-       my $config=shift;
-       my %hash=%{(shift)};
-       my $val=shift;
-       my $pos;
-       &General::readhasharray($config, \%hash);
-       foreach my $key (sort { uc($hash{$a}[0]) cmp uc($hash{$b}[0]) }  keys %hash){
-               if($hash{$key}[0] eq $val){
-                       $pos=$#{$hash{$key}};
-                       $hash{$key}[$pos] = $hash{$key}[$pos]-1;
-               }
-       }
-       &General::writehasharray($config, \%hash);
-}
 sub error
 {
        if ($errormessage) {
@@ -1186,7 +1093,7 @@ END
        if ($show eq '1'){$show='';print"</select></td></tr>";}
        #IPsec netze
        foreach my $key (sort { ncmp($ipsecconf{$a}[1],$ipsecconf{$b}[1]) } keys %ipsecconf) {
-               if ($ipsecconf{$key}[3] eq 'net' || $optionsfw{'SHOWDROPDOWN'} eq 'on'){
+               if ($ipsecconf{$key}[3] eq 'net' || ($optionsfw{'SHOWDROPDOWN'} eq 'on' && $ipsecconf{$key}[3] ne 'host')){
                        print"<tr><td valign='top'><input type='radio' name='$grp' value='ipsec_net_$srctgt' $checked{$grp}{'ipsec_net_'.$srctgt}></td><td >$Lang::tr{'fwhost ipsec net'}</td><td align='right'><select name='ipsec_net_$srctgt' style='width:200px;'>" if ($show eq '');
                        $show='1';
                        print "<option ";
@@ -1376,6 +1283,12 @@ sub getcolor
                }elsif ($val eq 'IPFire' ){
                        $tdcolor="style='background-color: $Header::colourred;color:white;'";
                        return;
+               }elsif ($val eq 'OpenVPN-Dyn' ){
+                       $tdcolor="style='background-color: $Header::colourovpn;color:white;'";
+                       return;
+               }elsif ($val eq 'IPsec RW' ){
+                       $tdcolor="style='background-color: $Header::colourvpn;color:white;'";
+                       return;
                }elsif($val =~ /^(.*?)\/(.*?)$/){
                        my ($sip,$scidr) = split ("/",$val);
                        if ( &General::IpInSubnet($sip,$netsettings{'ORANGE_ADDRESS'},$netsettings{'ORANGE_NETMASK'})){
@@ -2355,22 +2268,21 @@ sub validremark
        if ($remark !~ /^[a-zäöüA-ZÖÄÜ0-9-.:;\|_()\/\s]*$/) {
                return 0;}
        # First character can only be a letter or a digit
-       if (substr ($remark, 0, 1) !~ /^[a-zäöüA-ZÖÄÜ0-9]*$/) {
+       if (substr ($remark, 0, 1) !~ /^[a-zäöüA-ZÖÄÜ0-9(]*$/) {
                return 0;}
        # Last character can only be a letter or a digit
        if (substr ($remark, -1, 1) !~ /^[a-zöäüA-ZÖÄÜ0-9.:;_)]*$/) {
                return 0;}
        return 1;
 }
-
-sub viewtablerule {
+sub viewtablerule
+{
        &General::readhash("/var/ipfire/ethernet/settings", \%netsettings);
 
        &viewtablenew(\%configfwdfw, $configfwdfw, $Lang::tr{'firewall rules'});
        &viewtablenew(\%configinputfw, $configinput, $Lang::tr{'external access'});
        &viewtablenew(\%configoutgoingfw, $configoutgoing, $Lang::tr{'outgoing firewall'});
 }
-
 sub viewtablenew
 {
        my $hash=shift;
@@ -2397,6 +2309,7 @@ sub viewtablenew
                my $rulecolor;
                my $tooltip;
                my @tmpsrc=();
+               my @tmptgt=();
                my $coloryellow='';
 
                print <<END;
@@ -2426,33 +2339,61 @@ END
                foreach my $key (sort  {$a <=> $b} keys %$hash){
                        $tdcolor='';
                        @tmpsrc=();
+                       @tmptgt=();
                        #check if vpn hosts/nets have been deleted
                        if($$hash{$key}[3] =~ /ipsec/i || $$hash{$key}[3] =~ /ovpn/i){
                                push (@tmpsrc,$$hash{$key}[4]);
                        }
                        if($$hash{$key}[5] =~ /ipsec/i || $$hash{$key}[5] =~ /ovpn/i){
-                               push (@tmpsrc,$$hash{$key}[6]);
+                               push (@tmptgt,$$hash{$key}[6]);
                        }
                        foreach my $host (@tmpsrc){
-                               if($$hash{$key}[3] eq  'ipsec_net_src' || $$hash{$key}[5] eq 'ipsec_net_tgt'){
+                               if($$hash{$key}[3] eq  'ipsec_net_src'){
                                        if(&fwlib::get_ipsec_net_ip($host,11) eq ''){
                                                $coloryellow='on';
                                                &disable_rule($key);
                                                $$hash{$key}[2]='';
                                        }
-                               }elsif($$hash{$key}[3] eq  'ovpn_net_src' || $$hash{$key}[5] eq 'ovpn_net_tgt'){
+                               }elsif($$hash{$key}[3] eq  'ovpn_net_src'){
                                        if(&fwlib::get_ovpn_net_ip($host,1) eq ''){
                                                $coloryellow='on';
                                                &disable_rule($key);
                                                $$hash{$key}[2]='';
                                        }
-                               }elsif($$hash{$key}[3] eq  'ovpn_n2n_src' || $$hash{$key}[5] eq 'ovpn_n2n_tgt'){
+                               }elsif($$hash{$key}[3] eq  'ovpn_n2n_src'){
                                        if(&fwlib::get_ovpn_n2n_ip($host,27) eq ''){
                                                $coloryellow='on';
                                                &disable_rule($key);
                                                $$hash{$key}[2]='';
                                        }
-                               }elsif($$hash{$key}[3] eq  'ovpn_host_src' || $$hash{$key}[5] eq 'ovpn_host_tgt'){
+                               }elsif($$hash{$key}[3] eq  'ovpn_host_src'){
+                                       if(&fwlib::get_ovpn_host_ip($host,33) eq ''){
+                                               $coloryellow='on';
+                                               &disable_rule($key);
+                                               $$hash{$key}[2]='';
+                                       }
+                               }
+                       }
+                       foreach my $host (@tmptgt){
+                               if($$hash{$key}[5] eq 'ipsec_net_tgt'){
+                                       if(&fwlib::get_ipsec_net_ip($host,11) eq ''){
+                                               $coloryellow='on';
+                                               &disable_rule($key);
+                                               $$hash{$key}[2]='';
+                                       }
+                               }elsif($$hash{$key}[5] eq 'ovpn_net_tgt'){
+                                       if(&fwlib::get_ovpn_net_ip($host,1) eq ''){
+                                               $coloryellow='on';
+                                               &disable_rule($key);
+                                               $$hash{$key}[2]='';
+                                       }
+                               }elsif($$hash{$key}[5] eq 'ovpn_n2n_tgt'){
+                                       if(&fwlib::get_ovpn_n2n_ip($host,27) eq ''){
+                                               $coloryellow='on';
+                                               &disable_rule($key);
+                                               $$hash{$key}[2]='';
+                                       }
+                               }elsif($$hash{$key}[5] eq 'ovpn_host_tgt'){
                                        if(&fwlib::get_ovpn_host_ip($host,33) eq ''){
                                                $coloryellow='on';
                                                &disable_rule($key);
@@ -2463,7 +2404,7 @@ END
                        $$hash{'ACTIVE'}=$$hash{$key}[2];
                        $count++;
                        if($coloryellow eq 'on'){
-                               print"<tr bgcolor='$color{'color14'}' >";
+                               $color="$color{'color14'}";
                                $coloryellow='';
                        }elsif($coloryellow eq ''){
                                if ($count % 2){ 
@@ -2548,8 +2489,14 @@ END
                                }
                        }elsif ($$hash{$key}[4] eq 'RED1'){
                                print "$ipfireiface $Lang::tr{'fwdfw red'}";
+                       }elsif ($$hash{$key}[4] eq 'ALL'){
+                               print "$ipfireiface $Lang::tr{'all'}";
                        }else{
-                               print "$$hash{$key}[4]";
+                               if ($$hash{$key}[4] eq 'GREEN' || $$hash{$key}[4] eq 'ORANGE' || $$hash{$key}[4] eq 'BLUE' || $$hash{$key}[4] eq 'RED'){
+                                       print "$ipfireiface $Lang::tr{lc($$hash{$key}[4])}";
+                               }else{
+                                       print "$ipfireiface $$hash{$key}[4]";
+                               }
                        }
                        $tdcolor='';
                        #SOURCEPORT
@@ -2594,15 +2541,12 @@ END
                                }
                                print"<br>-&gt;";
                        }
-                       if ($$hash{$key}[5] eq 'ipfire'){
-                               $ipfireiface='Interface';
-                       }
-                       if ($$hash{$key}[5] eq 'std_net_tgt' || $$hash{$key}[5] eq 'ipfire'  || $$hash{$key}[6] eq 'RED1' || $$hash{$key}[6] eq 'GREEN' || $$hash{$key}[6] eq 'ORANGE' || $$hash{$key}[6] eq 'BLUE' ){
+                       if ($$hash{$key}[5] eq 'std_net_tgt' || $$hash{$key}[5] eq 'ipfire'){
                                if ($$hash{$key}[6] eq 'RED1'){
-                                       print "$ipfireiface $Lang::tr{'red1'}";
-                               }elsif ($$hash{$key}[6] eq 'GREEN' || $$hash{$key}[6] eq 'ORANGE' || $$hash{$key}[6] eq 'BLUE'|| $$hash{$key}[6] eq 'ALL')
+                                       print "$Lang::tr{'red1'}";
+                               }elsif ($$hash{$key}[6] eq 'GREEN' || $$hash{$key}[6] eq 'ORANGE' || $$hash{$key}[6] eq 'BLUE'|| $$hash{$key}[6] eq 'ALL' || $$hash{$key}[6] eq 'RED')
                                {
-                                       print "$ipfireiface ".&get_name($$hash{$key}[6]);
+                                       print &get_name($$hash{$key}[6]);
                                }else{
                                        print $$hash{$key}[6];
                                }
@@ -2847,9 +2791,9 @@ END
 
                $message = $Lang::tr{'fwdfw pol allow'};
 
-       } elsif ($config eq '/var/ipfire/firewall/outgoing') {
+       } elsif ($config eq '/var/ipfire/firewall/outgoing' && ($fwdfwsettings{'POLICY1'} ne 'MODE1')) {
                $message = $Lang::tr{'fwdfw pol allow'};
-
+               $colour = "bgcolor='green'";
        } else {
                $message = $Lang::tr{'fwdfw pol block'};
                $colour = "bgcolor='darkred'";