#!/usr/bin/perl -w
#
# un-black.pl		par bernard FRIT <bernard@frit.net> le 3 fevrier 2005

# Code inspire par :
# ----------------
# based on mailmgr (c) 2003, Julian Haight, All Rights reserved under GPL license:
# http://www.gnu.org/licenses/gpl.txt
# Modified on 02AUG04 as provided under GNU GPL licensing
# no rights reserved under this modification
#
#  See http://www.pettingers.org/code/SSHBlack.html for details on this
#
# Description :
# ------------
# Ce script lancé par un cron tous les quarts d'heures analyse les Ips blacklistées et
# rétablit celles qui ont été blacklistées depuis plus de 15 minutes (configurable)
#
# Installation :
# -------------
# Répertoire d'installation : /root/bin
# chown root:root un-black.pl
# chmod 700 un-black.pl
# Ce script est lancé depuis le cron de root par le script shell un-blacklist.sh
#
#    #! /bin/bash
#    /root/bin/un-black.pl >>/var/log/blacklisting 2>&1 &
#
# Cela permet d'avoir le log des actions dans /var/log/blacklisting

##############################################################################

use strict;

# path des Ips en cours d'analyse
my($TMP) = '/root/tmp/Ips' ;

# path des Ips blacklistées
my($BLACK) = '/root/tmp/Ips/black' ;

# your kernel-firewall tweaker, see "iptables" func to redefine params used
my($IPTABLES) = '/sbin/iptables';

# durée en minutes du blacklistage ex : pour 15 min -> 15 / (24 * 60) 
my($DELAY) = 15 / (24 * 60);
 
my($HOST) = `uname -n` ;
chop($HOST);

my(@black_list) = `ls -1 $BLACK` ;
my(@ip_list) = `ls -1 $TMP` ;

my ($file) ;

foreach $file (@black_list) {
    chop($file);
    if (-M("$BLACK/$file")) {
	unlink("$BLACK/$file") ;
	delIp($file) ;
	print scalar localtime, " $HOST($$): $file restablished\n";
    }
}
            
foreach $file (@ip_list) {
    chop($file);
    if (-M("$TMP/$file")) {
	unlink("$TMP/$file") ;
    }
}
	

sub delIp {
   my($ip) = @_;

   my(@args) = ($IPTABLES,
                '-D',
                'INPUT', '--source',
                $ip,
                '-j', 'REJECT', '--reject-with', 'icmp-host-prohibited');

#   print "system(@args)\n";

    system(@args) ;

}
