#!/bin/bash
##########################################################
# Objet : Ajouter une IP au FireWall et verifier 
#         que l'IP est unique
#  
# Auteur : 
# Date   : 
##########################################################
vers="0.0"

# Verifier la validite de l'adresse passee
if [ $# -ne 1 ]
then
	echo "Passer une adresse et une seule !"
	exit
else
	ip=$1
fi

# Compter le nombre de '.' dans $ip
if [ $(echo $ip | grep -o '.'  |grep '\.' | wc -l) -ne 3 ]
then
	echo "Une adresse IP possede 4 elements separes par ."
	exit
fi
# Verifier la structure numerique des 3 premiers nombres < 255
ndot=1
while [ $ndot -le 3 ]
do
	xdot=$(echo $ip | cut -d '.' -f $ndot)
	if [[ $xdot =~ ^[+-]?[0-9]+$ ]] 
	then
		if [ $xdot -ge 255 ]
		then
			echo "Dans $ip => $xdot valeur incorrecte"
			exit
		fi
	else
		echo "Dans $ip => $xdot is not an integer"
		exit
	fi
	let ndot++
done
# Le derneier groupe est soit 1 <= nbr <= 254
# ou de type 0/(integer)
xdot=$(echo $ip | cut -d '.' -f 4)
echo $xdot | grep "/" > /dev/null
if [ $? -eq 0 ]
then
	# cas 0/x
	if [ $(echo $xdot | cut -d "/" -f 1) -ne 0 ]
	then
		echo "dans $ip le dernier groupe doit debuter par 0"
		exit
	fi
else
	if [ $xdot -ge 255 ]
	then
		echo "Dans $ip => $xdot valeur incorrecte"
                exit
	fi
fi

# L'adresse IP semble correcte.
# Construire la liste des adresses banies

DEST_IP=/home/jlc/fwip.txt
DEST_LS=/home/jlc/fw.txt
DEST_OW="jlc:jlc"

ufw status numbered | grep '\[' > $DEST_LS
chown $DEST_OW $DEST_LS
chmod 600 $DEST_LS

ufw status numbered | grep '\.' | sed 's/  */ /g' | cut -d "N" -f 3 | sort -n > $DEST_IP
chown $DEST_OW $DEST_IP
chmod 600 $DEST_IP

# Verifier son absence dans la liste de ufw
echo "On teste $ip dans $DEST_IP"
cat $DEST_IP | grep $ip
cat $DEST_IP | grep $ip > /dev/null
if [ $? -eq 0 ]
then
	echo "Adresse IP $ip deja presente dans ufw"
	exit
fi

# Remonter la liste jusqu'a la premiere adresse trouvee
line=$(cat $DEST_LS | grep -n '\.' | tail -1 | cut -d: -f 1)
echo "Last ip at $line"

# Inserer l'IP passee apres la derniere IP
let line++
echo "==================================="
echo "passer la commande suivante "
echo "sudo ufw insert $line deny from $ip"
echo "==================================="

exit

# Ce qui suit est obsolete, je ne sais pas
# faire fonctionner ufw dans un script
ufw --force enable INSERT DENY FROM $ip AT $line
if [ $? -ne 0 ]
then
	echo "Erreur dans la commande ufw"
	exit
fi

# Mettre a jour la table de ufw
ufw status numbered | grep '\[' > $DEST_LS
chown $DEST_OW $DEST_LS
chmod 600 $DEST_LS

ufw status numbered | grep '\.' | sed 's/  */ /g' | cut -d "N" -f 3 | sort -n > $DEST_IP
chown $DEST_OW $DEST_IP
chmod 600 $DEST_IP

echo "Nouvelle liste des IP bannies"
cat $DEST_IP
