]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - config/outgoingfw/outgoingfw.pl
Merge branch 'kernel2.6.32.8' into next
[people/pmueller/ipfire-2.x.git] / config / outgoingfw / outgoingfw.pl
index 5344ae35661e23ef1e555c1f0515ece64e35c416..ac27a58fe57b3681a0cb0238bbcec4c7fd32d33d 100644 (file)
@@ -2,7 +2,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2009  Michael Tremer & Christian Schmidt                      #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -64,6 +64,7 @@ $outfwsettings{'DISPLAY_DPORT'} = '';
 $outfwsettings{'DISPLAY_SMAC'} = '';
 $outfwsettings{'DISPLAY_SIP'} = '';
 $outfwsettings{'POLICY'} = 'MODE0';
+
 my $SOURCE = "";
 my $DESTINATION = "";
 my $PROTO = "";
@@ -72,12 +73,14 @@ my $DEV = "";
 my $MAC = "";
 my $POLICY = "";
 my $DO = "";
+my $DAY = "";
 
 # read files
 &General::readhash("${General::swroot}/outgoing/settings", \%outfwsettings);
 &General::readhash("${General::swroot}/ethernet/settings", \%netsettings);
 
 $netsettings{'RED_DEV'}=`cat /var/ipfire/red/iface`;
+$netsettings{'RED_IP'}=`cat /var/ipfire/red/local-ipaddress`;
 
 open( FILE, "< $configfile" ) or die "Unable to read $configfile";
 @configs = <FILE>;
@@ -122,6 +125,9 @@ foreach $configentry (sort @configs)
                if ($configline[2] eq 'green') {
                        $SOURCE = "$netsettings{'GREEN_NETADDRESS'}/$netsettings{'GREEN_NETMASK'}";
                        $DEV = $netsettings{'GREEN_DEV'};
+               } elsif ($configline[2] eq 'red') {
+                       $SOURCE = "$netsettings{'RED_IP'}";
+                       $DEV = "";
                } elsif ($configline[2] eq 'blue') {
                        $SOURCE = "$netsettings{'BLUE_NETADDRESS'}/$netsettings{'BLUE_NETMASK'}";
                        $DEV = $netsettings{'BLUE_DEV'};
@@ -142,17 +148,22 @@ foreach $configentry (sort @configs)
                        @proto = ("tcp");
                } elsif ($configline[3] eq 'udp') {
                        @proto = ("udp");
+               } elsif ($configline[3] eq 'esp') {
+                       @proto = ("esp");
+               } elsif ($configline[3] eq 'gre') {
+                       @proto = ("gre");
                } else {
-                       @proto = ("tcp", "udp");
+                       @proto = ("tcp","udp");
                }
+                 
                
                foreach $PROTO (@proto) {
                        $CMD = "/sbin/iptables -A OUTGOINGFW -s $SOURCE -d $DESTINATION -p $PROTO";
        
-                       if ($configline[8]) {
+                        if ($configline[8] && $configline[3] ne 'esp' && $configline[3] ne 'gre') {
                                $DPORT = "$configline[8]";
                                $CMD = "$CMD --dport $DPORT";
-                       }
+                        }
                        
                        if ($DEV) {
                                $CMD = "$CMD -i $DEV";
@@ -163,6 +174,17 @@ foreach $configentry (sort @configs)
                                $CMD = "$CMD -m mac --mac-source $MAC";
                        }
                        
+                       if ($configline[17] && $configline[18]) {
+                               if ($configline[10]){$DAY = "Mon,"}
+                               if ($configline[11]){$DAY .= "Tue,"}
+                               if ($configline[12]){$DAY .= "Wed,"}
+                               if ($configline[13]){$DAY .= "Thu,"}
+                               if ($configline[14]){$DAY .= "Fri,"}
+                               if ($configline[15]){$DAY .= "Sat,"}
+                               if ($configline[16]){$DAY .= "Sun"}
+                               $CMD = "$CMD -m time --timestart $configline[17] --timestop $configline[18] --weekdays $DAY";
+                       }
+                       
                        $CMD = "$CMD -o $netsettings{'RED_DEV'}";
 
                        if ($configline[9] eq "aktiv") {
@@ -228,4 +250,4 @@ if ( $outfwsettings{'POLICY'} eq 'MODE1' ) {
        } else {
                system("$CMD");
        }
-}
+}
\ No newline at end of file