diff --git a/blocklist.pl b/blocklist.pl index a0f94eee7f41a3e6476155459cc0d25949bd8e50..bab3cd3fc8d32f5fc96bc832f9acc060e8b13b4e 100755 --- a/blocklist.pl +++ b/blocklist.pl @@ -10,6 +10,7 @@ my $listUrl = "http://lists.blocklist.de/lists/all.txt"; my $fileName = "Blocklist.txt"; my $tmpDir = "/tmp"; my $file = "$tmpDir/$fileName"; +my $logFile = "/var/log/blocklist"; ## binarys ## my $iptables = "/sbin/iptables"; @@ -19,7 +20,7 @@ my $rm = "/bin/rm"; my $wget = "/usr/bin/wget"; ## plain variables ## -my($row, $Blocklist, $line, $check, $checkLine, $result, $output, $ipRegex); +my($row, $Blocklist, $line, $check, $checkLine, $result, $output, $ipRegex, $message); my ($added, $removed, $skipped); $added = $removed = $skipped = 0; @@ -32,9 +33,15 @@ my @ipsetArray = (); my %ipsetArray; my %fileArray; +my $dateTime; +my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); +my @months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ); +my @days = qw(Sun Mon Tue Wed Thu Fri Sat Sun); + #****************************# #*********** MAIN ***********# #****************************# +logging("Starting blocklist refresh"); &iptablesCheck(); &getFileArray(); &getIpsetArray(); @@ -61,7 +68,8 @@ sub iptablesCheck { ## Do we have an BLOCKLIST/DROP Chain? if (`$iptables -L -n | $grep BLOCKLIST` =~ m/Chain BLOCKLIST/) { } else { - print "Creating Chain BLOCKLIST \n"; + $message = "Creating Chain BLOCKLIST"; + logging($message); `$iptables -N BLOCKLIST`; `$iptables -A BLOCKLIST -m limit --limit 2/min -j LOG --log-prefix "Blocklist Dropped: " --log-level 4`; `$iptables -A BLOCKLIST -j DROP`; @@ -71,14 +79,16 @@ sub iptablesCheck { if(`$ipset list -n | $grep blocklist` =~ m/blocklist/) { } else { `$ipset create blocklist hash:ip hashsize 4096`; - print "Created ipset list blocklist\n"; + $message = "Created ipset list blocklist"; + logging($message); } ## Is there an forwarded from INPUT to BLOCKLIST? if (`$iptables -L INPUT | $grep BLOCKLIST`=~ m/BLOCKLIST/) { } else { - print "Creating forward to BLOCKLIST chain \n"; `$iptables -I INPUT -m set --match-set blocklist src -j BLOCKLIST`; + $message = "Creating forward to BLOCKLIST chain"; + logging($message); } } @@ -132,7 +142,8 @@ sub addIpsToBlocklist { if ($line eq &isIpv4($line)) { $result = `$ipset add blocklist $line`; $added++; - print "added $line\n" + $message = "added $line"; + logging($message); } else { $skipped++; } @@ -151,7 +162,8 @@ sub remIpsFromBlocklist { } else { if ($line eq &isIpv4($line)) { $result = `$ipset del blocklist $line`; - print "removed $line\n"; + $message = "removed $line"; + logging($message); $removed++; } else { $skipped++; @@ -163,12 +175,13 @@ sub remIpsFromBlocklist { ######## END remIpsFromBlocklist ######## -########## cleanup ################ -#### Cleanup: delete tmp file ##### -################################### +################## cleanup ################### +#### Cleanup: move tmp file to new place ##### +############################################## sub cleanup { $result = `$rm $tmpDir/$fileName && echo "Deleted file $tmpDir/$fileName" || echo "Can\t delete file $tmpDir/$fileName"`; - print "\nWe added $added, removed $removed, skipped $skipped Rules\n"; + $message = "We added $added, removed $removed, skipped $skipped Rules"; + logging($message); } ############### END cleanup ###################### @@ -187,4 +200,21 @@ sub isIpv4 { } ######### END isIpv4 ########## +###### log ####### +## log $message ## +################## +sub logging { + my ($message) = @_; + + ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); + + open my $fh, ">>", $logFile + or die "Can't open logfile: $!"; + $dateTime = sprintf("$months[$mon] %02d %02d:%02d:%02d ", $mday,$hour,$min,$sec); + print $fh "$dateTime $message\n"; + print "$message\n"; + + close($fh); +} +#### end log ##### ######### EOF ###########