X-Git-Url: http://git.ipfire.org/?p=people%2Fpmueller%2Fipfire-2.x.git;a=blobdiff_plain;f=html%2Fcgi-bin%2Fids.cgi;h=1cf5b8dec5bcf88e574847115be9064ad5ac52c7;hp=750514ed7a89b4b56d1923804fd347e97ebc0d99;hb=d192af92100ad3a7a712e2b22b3a12342b68a907;hpb=4e17adadcd3c3942e7c2222485fbf88608a4477f diff --git a/html/cgi-bin/ids.cgi b/html/cgi-bin/ids.cgi index 750514ed7a..1cf5b8dec5 100644 --- a/html/cgi-bin/ids.cgi +++ b/html/cgi-bin/ids.cgi @@ -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 . # +# # +############################################################################### + use LWP::UserAgent; use File::Copy; @@ -13,8 +26,8 @@ use File::Temp qw/ tempfile tempdir /; use strict; # enable only the following on debugging purpose -use warnings; -use CGI::Carp 'fatalsToBrowser'; +#use warnings; +#use CGI::Carp 'fatalsToBrowser'; require '/var/ipfire/general-functions.pl'; require "${General::swroot}/lang.pl"; @@ -43,7 +56,17 @@ $snortsettings{'ENABLE_SNORT'} = 'off'; $snortsettings{'ENABLE_SNORT_GREEN'} = 'off'; $snortsettings{'ENABLE_SNORT_BLUE'} = 'off'; $snortsettings{'ENABLE_SNORT_ORANGE'} = 'off'; +$snortsettings{'ENABLE_GUARDIAN'} = 'off'; +$snortsettings{'GUARDIAN_INTERFACE'} = `cat /var/ipfire/red/iface`; +$snortsettings{'GUARDIAN_HOSTGATEWAYBYTE'} = '1'; +$snortsettings{'GUARDIAN_LOGFILE'} = '/var/log/guardian/guardian.log'; +$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'} = ''; $snortsettings{'OINKCODE'} = ''; $snortsettings{'INSTALLDATE'} = ''; @@ -52,7 +75,7 @@ $snortsettings{'INSTALLMD5'} = ''; &Header::getcgihash(\%snortsettings, {'wantfile' => 1, 'filevar' => 'FH'}); ####################### Added for snort rules control ################################# -my $snortrulepath; +my $snortrulepath; # change to "/etc/snort/rules" - maniac my @snortconfig; my $restartsnortrequired = 0; my %snortrules; @@ -67,12 +90,22 @@ my $border = ''; my $checkboxname = ''; if (-e "/etc/snort/snort.conf") { + + # Open snort.conf file, read it in, close it, and re-open for writing open(FILE, "/etc/snort/snort.conf") or die 'Unable to read snort config file.'; @snortconfig = ; close(FILE); open(FILE, ">/etc/snort/snort.conf") or die 'Unable to write snort config file.'; + my @rules = `cd /etc/snort/rules/ && ls *.rules`; # With this loop the rule might be display with correct rulepath set + foreach (@rules) { + chomp $_; + my $temp = join(";",@snortconfig); + if ( $temp =~ /$_/ ){next;} + else { push(@snortconfig,"#include \$RULE_PATH/".$_);} + } + # Loop over each line foreach my $line (@snortconfig) { # Trim the line @@ -193,6 +226,7 @@ if (-e "/etc/snort/snort.conf") { if (!exists $snortsettings{"SNORT_RULE_$rule"}) { $line = "# $line"; } + } # Check for rule state @@ -223,23 +257,23 @@ if (-e "/etc/snort/snort.conf") { close(FILE); if ($restartsnortrequired) { - system('/usr/local/bin/snortctrl','restart'); + system('/usr/local/bin/snortctrl restart >/dev/null'); } } ####################### 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/reg-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"; -} elsif ($snortsettings{'RULES'} eq 'bleeding') { - $url="http://www.bleedingsnort.com/bleeding.rules.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"; } -if ($snortsettings{'ACTION'} eq $Lang::tr{'save'}) +if ($snortsettings{'ACTION'} eq $Lang::tr{'save'} && $snortsettings{'ACTION2'} eq "snort" ) { $errormessage = $Lang::tr{'invalid input for oink code'} unless ( ($snortsettings{'OINKCODE'} =~ /^[a-z0-9]+$/) || @@ -270,13 +304,41 @@ if ($snortsettings{'ACTION'} eq $Lang::tr{'save'}) } 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"); + } else { + unlink "${General::swroot}/guardian/enable"; + } - system('/usr/local/bin/snortctrl','restart'); - -} else { + 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'}; + close(IGNOREFILE); + open(GUARDIAN, ">/var/ipfire/guardian/guardian.conf") or die "Unable to write guardian conf /var/ipfire/guardian/guardian.conf"; + print GUARDIAN </dev/null'); +} # 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; @@ -288,8 +350,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 = "$Lang::tr{'installed updates'}\n
";
 				$results .=`/usr/local/bin/oinkmaster.pl -s -u file://$filename -C /var/ipfire/snort/oinkmaster.conf -o /etc/snort/rules 2>&1`;
@@ -312,8 +374,10 @@ $checked{'ENABLE_SNORT_BLUE'}{$snortsettings{'ENABLE_SNORT_BLUE'}} = "checked='c
 $checked{'ENABLE_SNORT_ORANGE'}{'off'} = '';
 $checked{'ENABLE_SNORT_ORANGE'}{'on'} = '';
 $checked{'ENABLE_SNORT_ORANGE'}{$snortsettings{'ENABLE_SNORT_ORANGE'}} = "checked='checked'";
+$checked{'ENABLE_GUARDIAN'}{'off'} = '';
+$checked{'ENABLE_GUARDIAN'}{'on'} = '';
+$checked{'ENABLE_GUARDIAN'}{$snortsettings{'ENABLE_GUARDIAN'}} = "checked='checked'";
 $selected{'RULES'}{'nothing'} = '';
-$selected{'RULES'}{'bleeding'} = '';
 $selected{'RULES'}{'community'} = '';
 $selected{'RULES'}{'registered'} = '';
 $selected{'RULES'}{'subscripted'} = '';
@@ -359,35 +423,22 @@ if ($errormessage) {
 &Header::openbox('100%', 'left', $Lang::tr{'intrusion detection system2'});
 print <
-
-	
-
+
-
-END
-;
+  print "         BLUE Snort";
 }
 if ($netsettings{'ORANGE_DEV'} ne '') {
-print <
-	
-
-END
-;
+  print "         ORANGE Snort";
 }
+  print "         RED Snort";
+if ( -e "/var/ipfire/guardian/guardian.conf" ) {
+  print "        Guardian";
+}
+
 print <
-	
-
+
@@ -397,7 +448,6 @@ print <
 	
- GREEN Snort
GREEN Snort END ; if ($netsettings{'BLUE_DEV'} ne '') { -print < - - BLUE Snort
- ORANGE Snort
- RED Snort

- - - +
  -   -
@@ -451,6 +497,33 @@ if ($results ne '') { } &Header::closebox(); + +####################### Added for guardian control #################################### +if ( -e "/var/ipfire/guardian/guardian.conf" ) { + &Header::openbox('100%', 'LEFT', $Lang::tr{'guardian configuration'}); +print < + + + + + + +
$Lang::tr{'guardian interface'}
$Lang::tr{'guardian timelimit'}
$Lang::tr{'guardian logfile'}
$Lang::tr{'guardian alertfile'}
$Lang::tr{'guardian ignorefile'}
+ +END +; + &Header::closebox(); +} + + + + ####################### Added for snort rules control ################################# if ( -e "${General::swroot}/snort/enable" || -e "${General::swroot}/snort/enable_green" || -e "${General::swroot}/snort/enable_blue" || -e "${General::swroot}/snort/enable_orange" ) { &Header::openbox('100%', 'LEFT', $Lang::tr{'intrusion detection system rules'}); @@ -470,7 +543,7 @@ if ( -e "${General::swroot}/snort/enable" || -e "${General::swroot}/snort/enable my $rulechecked = ''; # Check if reached half-way through rule file rules to start new column - if ($ruledisplaycnt > $rulecnt) { + if ($ruledisplaycnt > $rulecnt) { print "
"; $ruledisplaycnt = 0; } @@ -576,15 +649,14 @@ if ( -e "${General::swroot}/snort/enable" || -e "${General::swroot}/snort/enable # Close display table print "
"; - } + } # Close display table print ""; # Increment ruledisplaycnt - $ruledisplaycnt++; + $ruledisplaycnt++; } - print ""; print < @@ -601,24 +673,34 @@ END ; &Header::closebox(); } + ####################### End added for snort rules control ################################# &Header::closebigbox(); &Header::closepage(); 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 { @@ -632,7 +714,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);