X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=config%2Fforwardfw%2Frules.pl;h=fcaade2d6632f3416ff742b161642e8c72c73ba7;hb=5b0bc4ca3d5609bed04a34284b5f746616f768f1;hp=ba2ac037369ad1e1ba1ed9376b08932cf15caec6;hpb=2ad3c084eef6d82a8690e5d488d84c61e892ef4e;p=people%2Fteissler%2Fipfire-2.x.git diff --git a/config/forwardfw/rules.pl b/config/forwardfw/rules.pl index ba2ac0373..fcaade2d6 100755 --- a/config/forwardfw/rules.pl +++ b/config/forwardfw/rules.pl @@ -213,14 +213,13 @@ sub buildrules } ##get source prot and port $SRC_TGT='SRC'; - $SPROT = &get_prot($hash,$key); $SPORT = &get_port($hash,$key); $SRC_TGT=''; ##get target prot and port $DPROT=&get_prot($hash,$key); - if ($DPROT eq ''){$DPROT=' ';} + if ($DPROT eq ''){$DPROT=' ';} @DPROT=split(",",$DPROT); #get time if defined @@ -252,12 +251,12 @@ sub buildrules #print rules to console foreach my $DPROT (@DPROT){ $DPORT = &get_port($hash,$key,$DPROT); - if ($SPROT ne ''){$PROT=$SPROT;}else{$PROT=$DPROT;} + $PROT=$DPROT; $PROT="-p $PROT" if ($PROT ne '' && $PROT ne ' '); foreach my $a (sort keys %sourcehash){ foreach my $b (sort keys %targethash){ if ($sourcehash{$a}[0] ne $targethash{$b}[0] && $targethash{$b}[0] ne 'none' || $sourcehash{$a}[0] eq '0.0.0.0/0.0.0.0'){ - if($SPROT eq '' || $SPROT eq $DPROT || $DPROT eq ' '){ + if($DPROT ne ''){ if(substr($sourcehash{$a}[0], 3, 3) ne 'mac' && $sourcehash{$a}[0] ne ''){ $STAG="-s";} if(substr($DPORT, 2, 4) eq 'icmp'){ my @icmprule= split(",",substr($DPORT, 12,)); @@ -311,12 +310,12 @@ sub buildrules }elsif($MODE eq '0'){ foreach my $DPROT (@DPROT){ $DPORT = &get_port($hash,$key,$DPROT); - if ($SPROT ne ''){$PROT=$SPROT;}else{$PROT=$DPROT;} + $PROT=$DPROT; $PROT="-p $PROT" if ($PROT ne '' && $PROT ne ' '); foreach my $a (sort keys %sourcehash){ foreach my $b (sort keys %targethash){ if ($sourcehash{$a}[0] ne $targethash{$b}[0] && $targethash{$b}[0] ne 'none' || $sourcehash{$a}[0] eq '0.0.0.0/0.0.0.0'){ - if($SPROT eq '' || $SPROT eq $DPROT || $DPROT eq ' '){ + if($DPROT ne ''){ if(substr($sourcehash{$a}[0], 3, 3) ne 'mac' && $sourcehash{$a}[0] ne ''){ $STAG="-s";} #Process ICMP RULE if(substr($DPORT, 2, 4) eq 'icmp'){ @@ -528,30 +527,24 @@ sub get_prot { my $hash=shift; my $key=shift; - if ($$hash{$key}[7] eq 'ON' && $SRC_TGT eq 'SRC'){ - if ($$hash{$key}[10] ne ''){ - return"$$hash{$key}[8]"; - }elsif($$hash{$key}[9] ne ''){ - return"$$hash{$key}[8]"; - }else{ - return "$$hash{$key}[8]"; - } - }elsif($$hash{$key}[11] eq 'ON' && $SRC_TGT eq ''){ - if ($$hash{$key}[14] eq 'TGT_PORT'){ - if ($$hash{$key}[15] ne '' && $$hash{$key}[8] eq ''){ - return "TCP,UDP"; - }elsif($$hash{$key}[13] ne ''){ - return "$$hash{$key}[8]"; - }elsif($$hash{$key}[15] ne ''){ - return "$$hash{$key}[8]"; - }else{ - return "$$hash{$key}[8]"; - } - }elsif($$hash{$key}[14] eq 'cust_srv'){ + #check AH,GRE,ESP or ICMP + if ($$hash{$key}[7] ne 'ON' && $$hash{$key}[11] ne 'ON'){ + return "$$hash{$key}[8]"; + } + if ($$hash{$key}[7] eq 'ON' || $$hash{$key}[11] eq 'ON'){ + #check if servicegroup or service + if($$hash{$key}[14] eq 'cust_srv'){ return &fwlib::get_srv_prot($$hash{$key}[15]); - }elsif($$hash{$key}[14] eq 'cust_srvgrp'){ return &fwlib::get_srvgrp_prot($$hash{$key}[15]); + }elsif (($$hash{$key}[10] ne '' || $$hash{$key}[15] ne '') && $$hash{$key}[8] eq ''){ #when ports are used and prot set to "all" + return "TCP,UDP"; + }elsif (($$hash{$key}[10] ne '' || $$hash{$key}[15] ne '') && ($$hash{$key}[8] eq 'TCP' || $$hash{$key}[8] eq 'UDP')){ #when ports are used and prot set to "tcp" or "udp" + return "$$hash{$key}[8]"; + }elsif (($$hash{$key}[10] eq '' && $$hash{$key}[15] eq '') && $$hash{$key}[8] ne 'ICMP'){ #when ports are NOT used and prot NOT set to "ICMP" + return "$$hash{$key}[8]"; + }else{ + return "$$hash{$key}[8]"; } } #DNAT @@ -576,10 +569,6 @@ sub get_port return ":$$hash{$key}[10]"; } } - }elsif($$hash{$key}[9] ne '' && $$hash{$key}[9] ne 'All ICMP-Types'){ - return "--icmp-type $$hash{$key}[9] "; - }elsif($$hash{$key}[9] eq 'All ICMP-Types'){ - return; } }elsif($$hash{$key}[11] eq 'ON' && $SRC_TGT eq ''){ if($$hash{$key}[14] eq 'TGT_PORT'){ @@ -595,10 +584,6 @@ sub get_port return ":$$hash{$key}[15]"; } } - }elsif($$hash{$key}[13] ne '' && $$hash{$key}[13] ne 'All ICMP-Types'){ - return "--icmp-type $$hash{$key}[13] "; - }elsif($$hash{$key}[13] ne '' && $$hash{$key}[13] eq 'All ICMP-Types'){ - return; } }elsif($$hash{$key}[14] eq 'cust_srv'){ if ($prot ne 'ICMP'){ @@ -607,10 +592,8 @@ sub get_port }else{ return "--dport ".&fwlib::get_srv_port($$hash{$key}[15],1,$prot); } - }elsif($prot eq 'ICMP' && $$hash{$key}[15] ne 'All ICMP-Types'){ + }elsif($prot eq 'ICMP' && $$hash{$key}[11] eq 'ON'){ #When PROT is ICMP and "use targetport is checked, this is an icmp-service return "--icmp-type ".&fwlib::get_srv_port($$hash{$key}[15],3,$prot); - }elsif($prot eq 'ICMP' && $$hash{$key}[15] eq 'All ICMP-Types'){ - return; } }elsif($$hash{$key}[14] eq 'cust_srvgrp'){ if ($prot ne 'ICMP'){ @@ -621,4 +604,12 @@ sub get_port } } } + #CHECK ICMP + if ($$hash{$key}[7] ne 'ON' && $$hash{$key}[11] ne 'ON' && $SRC_TGT eq ''){ + if($$hash{$key}[9] ne '' && $$hash{$key}[9] ne 'All ICMP-Types'){ + return "--icmp-type $$hash{$key}[9] "; + }elsif($$hash{$key}[9] eq 'All ICMP-Types'){ + return; + } + } }