]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - html/cgi-bin/ids.cgi
Add urlfilter.cgi to core37.
[people/pmueller/ipfire-2.x.git] / html / cgi-bin / ids.cgi
index 7469b0d462bac2b47ac9591c4e405234c74fab36..011878381bcbfe611eb9e59a5dd6ae1adafb6da9 100644 (file)
@@ -1,11 +1,24 @@
 #!/usr/bin/perl
-#
-# SmoothWall CGIs
-#
-# This code is distributed under the terms of the GPL
-#
-# (c) The SmoothWall Team
-#
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2007  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        #
+# the Free Software Foundation, either version 3 of the License, or           #
+# (at your option) any later version.                                         #
+#                                                                             #
+# This program is distributed in the hope that it will be useful,             #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
+# GNU General Public License for more details.                                #
+#                                                                             #
+# You should have received a copy of the GNU General Public License           #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
+
 
 use LWP::UserAgent;
 use File::Copy;
@@ -51,7 +64,6 @@ $snortsettings{'GUARDIAN_ALERTFILE'} = '/var/log/snort/alert';
 $snortsettings{'GUARDIAN_IGNOREFILE'} = '/var/ipfire/guardian/guardian.ignore';
 $snortsettings{'GUARDIAN_TARGETFILE'} = '/var/ipfire/guardian/guardian.target';
 $snortsettings{'GUARDIAN_TIMELIMIT'} = '86400';
-$snortsettings{'GUARDIAN_IGNOREFILE_CONTENT'} = `cat $snortsettings{'GUARDIAN_IGNOREFILE'}`;
 $snortsettings{'ACTION'} = '';
 $snortsettings{'ACTION2'} = '';
 $snortsettings{'RULES'} = '';
@@ -92,10 +104,10 @@ if (-e "/etc/snort/snort.conf") {
     if ( $temp =~ /$_/ ){next;}
     else { push(@snortconfig,"#include \$RULE_PATH/".$_);}
        }
-       
+
        # Loop over each line
        foreach my $line (@snortconfig) {
-       # Trim the line
+               # Trim the line
                chomp $line;
 
                # Check for a line with .rules
@@ -213,6 +225,7 @@ if (-e "/etc/snort/snort.conf") {
                                if (!exists $snortsettings{"SNORT_RULE_$rule"}) {
                                        $line = "# $line";
                                }
+
                        }
 
                        # Check for rule state
@@ -250,9 +263,11 @@ if (-e "/etc/snort/snort.conf") {
 #######################  End added for snort rules control  #################################
 
 if ($snortsettings{'RULES'} eq 'subscripted') {
-       $url="http://www.snort.org/pub-bin/oinkmaster.cgi/$snortsettings{'OINKCODE'}/snortrules-snapshot-CURRENT_s.tar.gz";
+       $url="http://dl.snort.org/sub-rules/snortrules-snapshot-2.8_s.tar.gz?oink_code=$snortsettings{'OINKCODE'}";
+       #$url="http://www.snort.org/pub-bin/oinkmaster.cgi/$snortsettings{'OINKCODE'}/snortrules-snapshot-2.8_s.tar.gz";
 } elsif ($snortsettings{'RULES'} eq 'registered') {
-       $url="http://www.snort.org/pub-bin/oinkmaster.cgi/$snortsettings{'OINKCODE'}/snortrules-snapshot-CURRENT.tar.gz";
+       $url="http://dl.snort.org/reg-rules/snortrules-snapshot-2.8.tar.gz?oink_code=$snortsettings{'OINKCODE'}";
+       #$url="http://www.snort.org/pub-bin/oinkmaster.cgi/$snortsettings{'OINKCODE'}/snortrules-snapshot-2.8.tar.gz";
 } else {
        $url="http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/Community-Rules-CURRENT.tar.gz";
 }
@@ -269,25 +284,31 @@ if ($snortsettings{'ACTION'} eq $Lang::tr{'save'} && $snortsettings{'ACTION2'} e
                system ('/usr/bin/touch', "${General::swroot}/snort/enable");
        } else {
                unlink "${General::swroot}/snort/enable";
-       } 
+       }
        if ($snortsettings{'ENABLE_SNORT_GREEN'} eq 'on')
        {
                system ('/usr/bin/touch', "${General::swroot}/snort/enable_green");
        } else {
                unlink "${General::swroot}/snort/enable_green";
-       } 
+       }
        if ($snortsettings{'ENABLE_SNORT_BLUE'} eq 'on')
        {
                system ('/usr/bin/touch', "${General::swroot}/snort/enable_blue");
        } else {
                unlink "${General::swroot}/snort/enable_blue";
-       } 
+       }
        if ($snortsettings{'ENABLE_SNORT_ORANGE'} eq 'on')
        {
                system ('/usr/bin/touch', "${General::swroot}/snort/enable_orange");
        } else {
                unlink "${General::swroot}/snort/enable_orange";
        }
+       if ($snortsettings{'ENABLE_PREPROCESSOR_HTTP_INSPECT'} eq 'on')
+       {
+               system ('/usr/bin/touch', "${General::swroot}/snort/enable_preprocessor_http_inspect");
+       } else {
+               unlink "${General::swroot}/snort/enable_preprocessor_http_inspect";
+       }
        if ($snortsettings{'ENABLE_GUARDIAN'} eq 'on')
        {
                system ('/usr/bin/touch', "${General::swroot}/guardian/enable");
@@ -295,11 +316,11 @@ if ($snortsettings{'ACTION'} eq $Lang::tr{'save'} && $snortsettings{'ACTION2'} e
                unlink "${General::swroot}/guardian/enable";
        }
 
-               system('/usr/local/bin/snortctrl restart >/dev/null');
+       system('/usr/local/bin/snortctrl restart >/dev/null');
 
 } elsif ($snortsettings{'ACTION'} eq $Lang::tr{'save'} && $snortsettings{'ACTION2'} eq "guardian" ){
                        open(IGNOREFILE, ">$snortsettings{'GUARDIAN_IGNOREFILE'}") or die "Unable to write guardian ignore file $snortsettings{'GUARDIAN_IGNOREFILE'}";
-                               print IGNOREFILE $snortsettings{'GUARDIAN_IGNOREFILE_CONTENT'};
+                               print IGNOREFILE $snortsettings{'IGNOREFILE_CONTENT'};
                        close(IGNOREFILE);
                        open(GUARDIAN, ">/var/ipfire/guardian/guardian.conf") or die "Unable to write guardian conf /var/ipfire/guardian/guardian.conf";
                                print GUARDIAN <<END
@@ -314,10 +335,9 @@ END
 ;
                        close(GUARDIAN);
                system('/usr/local/bin/snortctrl restart >/dev/null');
-} else {
+}
         # INSTALLMD5 is not in the form, so not retrieved by getcgihash
        &General::readhash("${General::swroot}/snort/settings", \%snortsettings);
-}
 
 if ($snortsettings{'ACTION'} eq $Lang::tr{'download new ruleset'}) {
        $md5 = &getmd5;
@@ -329,8 +349,8 @@ if ($snortsettings{'ACTION'} eq $Lang::tr{'download new ruleset'}) {
                        $realmd5 = `/usr/bin/md5sum $filename`;
                        chomp ($realmd5);
                        $realmd5 =~ s/^(\w+)\s.*$/$1/;
-                       if ($md5 ne $realmd5) {
-                               $errormessage = "$Lang::tr{'invalid md5sum'}";
+                       if ( $md5 ne $realmd5 ) {
+                               $errormessage = "$Lang::tr{'invalid md5sum'} - $md5 - $realmd5";
                        } else {
                                $results = "<b>$Lang::tr{'installed updates'}</b>\n<pre>";
                                $results .=`/usr/local/bin/oinkmaster.pl -s -u file://$filename -C /var/ipfire/snort/oinkmaster.conf -o /etc/snort/rules 2>&1`;
@@ -367,7 +387,7 @@ $selected{'RULES'}{$snortsettings{'RULES'}} = "selected='selected'";
 ####################### Added for snort rules control #################################
 print "<SCRIPT LANGUAGE='JavaScript' SRC='/include/snortupdateutility.js'></SCRIPT>";
 print <<END
-<STYLE TYPE="text/css">   
+<STYLE TYPE="text/css">
 <!--
 .section {
        border: groove;
@@ -435,9 +455,8 @@ print <<END
 </tr>
 <tr>
        <td><br />
-               $Lang::tr{'ids rules license'} <a href='http://www.snort.org/' target='_blank'>http://www.snort.org</a>.<br />
-               <br />
-               $Lang::tr{'ids rules license2'} <a href='http://www.snort.org/reg-bin/userprefs.cgi' target='_blank'>USER PREFERENCES</a>, $Lang::tr{'ids rules license3'}<br />
+               $Lang::tr{'ids rules license'} <a href='https://www.snort.org/signup' target='_blank'>www.snort.org</a>$Lang::tr{'ids rules license1'}<br /><br />
+               $Lang::tr{'ids rules license2'} <a href='https://www.snort.org/account/oinkcode' target='_blank'>Get an Oinkcode</a>, $Lang::tr{'ids rules license3'}
        </td>
 </tr>
 <tr>
@@ -486,7 +505,12 @@ print <<END
 <tr><td align='left' width='40%'>$Lang::tr{'guardian timelimit'}</td><td align='left'><input type='text' name='TIMELIMIT' value='$snortsettings{'GUARDIAN_TIMELIMIT'}' size="30" /></td></tr>
 <tr><td align='left' width='40%'>$Lang::tr{'guardian logfile'}</td><td align='left'><input type='text' name='LOGFILE' value='$snortsettings{'GUARDIAN_LOGFILE'}' size="30" /></td></tr>
 <tr><td align='left' width='40%'>$Lang::tr{'guardian alertfile'}</td><td align='left'><input type='text' name='ALERTFILE' value='$snortsettings{'GUARDIAN_ALERTFILE'}' size="30" /></td></tr>
-<tr><td align='left' width='40%'>$Lang::tr{'guardian ignorefile'}</td><td align='left'><textarea name='IGNOREFILE_CONTENT' cols='32' rows='6' wrap='off'></textarea></td></tr>
+<tr><td align='left' width='40%'>$Lang::tr{'guardian ignorefile'}</td><td align='left'><textarea name='IGNOREFILE_CONTENT' cols='32' rows='6' wrap='off'>
+END
+;
+       print `cat /var/ipfire/guardian/guardian.ignore`;
+print <<END
+</textarea></td></tr>
 <tr><td align='center' colspan='2'><input type='hidden' name='ACTION2' value='guardian' /><input type='submit' name='ACTION' value='$Lang::tr{'save'}' /></td></tr>
 </table>
 </form>
@@ -503,7 +527,7 @@ if ( -e "${General::swroot}/snort/enable" || -e "${General::swroot}/snort/enable
        &Header::openbox('100%', 'LEFT', $Lang::tr{'intrusion detection system rules'});
                # Output display table for rule files
                print "<TABLE width='100%'><TR><TD VALIGN='TOP'><TABLE>";
-               
+
                print "<form method='post'>";
 
                # Local vars
@@ -615,7 +639,7 @@ if ( -e "${General::swroot}/snort/enable" || -e "${General::swroot}/snort/enable
                                        # Increment count
                                        $ruledefdisplaycnt++;
                                }
-       
+
                                # If do not have second rule for row, create empty cell
                                if (($ruledefdisplaycnt % 2) != 0) {
                                        print "<TD CLASS='base'></TD>";
@@ -654,18 +678,27 @@ END
 
 sub getmd5 {
        # Retrieve MD5 sum from $url.md5 file
-       #
-       my $md5buf = &geturl("$url.md5");
+
+       my $md5buf;
+       if ($snortsettings{'RULES'} eq 'subscripted') {
+               $md5buf = &geturl("http://dl.snort.org/reg-rules/snortrules-snapshot-2.8_s.tar.gz.md5?oink_code=$snortsettings{'OINKCODE'}");
+       } elsif ($snortsettings{'RULES'} eq 'registered') {
+               $md5buf = &geturl("http://dl.snort.org/reg-rules/snortrules-snapshot-2.8.tar.gz.md5?oink_code=$snortsettings{'OINKCODE'}");
+       } else {
+               $md5buf = &geturl("http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/Community-Rules-CURRENT.tar.gz.md5");
+       }
+
        return undef unless $md5buf;
 
        if (0) { # 1 to debug
                my $filename='';
                my $fh='';
-               ($fh, $filename) = tempfile('/tmp/XXXXXXXX',SUFFIX => '.md5' );
+               ($fh, $filename) = tempfile('/var/tmp/XXXXXXXX',SUFFIX => '.md5' );
                binmode ($fh);
                syswrite ($fh, $md5buf->content);
                close($fh);
        }
+
        return $md5buf->content;
 }
 sub downloadrulesfile {
@@ -679,7 +712,7 @@ sub downloadrulesfile {
 
        my $filename='';
        my $fh='';
-       ($fh, $filename) = tempfile('/tmp/XXXXXXXX',SUFFIX => '.tar.gz' );#oinkmaster work only with this extension
+       ($fh, $filename) = tempfile('/var/tmp/XXXXXXXX',SUFFIX => '.tar.gz' );#oinkmaster work only with this extension
        binmode ($fh);
        syswrite ($fh, $return->content);
        close($fh);