Scripts IPSET quelques exemples
Scripts IPSET quelques exemples jppScript de récupération des fichiers "emerging threats" et de création du set IP.
#!/bin/bash
#
# Creation IPSET depuis emergingthreat
#
# compromised-ips.txt
# rbn-malvertisers-ips.txt
# emerging-Block-IPs.txt
# ==============================================================================
SORTIE ()
{
DELFIC LISTE
DELFIC LISTE_TMP
DELFIC FICH01
DELFIC FICH02
DELFIC FICH03
if [ $1 -ne 0 ]
then
echo ' '
echo '=========> Sortie en erreur code : '$1
else
echo ' '
echo 'Sortie OK'
fi
exit $1
}
DELFIC ()
{
if [ -f "$1" ]
then
rm -f $1
fi
}
#
# Charge liste des IP recues
# --------------------------
CHARGE_IP ()
{
ret=0
NBR=0
export NBR
echo 'A traiter : '$(wc -l LISTE)
#
# Tri pour elminier les doublons
#
sort -u -t\. -k1n -k2n -k3n -k4n LISTE | while read ADDR
do
NBR=$(expr $NBR + 1)
/sbin/ipset --add $SET $ADDR
ret=$?
if [ $ret -ne 0 ]
then
echo 'ERREUR : '$ret' NBR='$NBR
return $ret
fi
done
return $ret
}
#
# cas des fichiers ne contenant que des IP
# ----------------------------------------
IPSIMPLE ()
{
cd /var/tmp
wget $1 --output-document=LISTE
ret=$?
if [ $ret -ne 0 ]
then
echo 'Fichier en echec : ('$1')'
return $ret
fi
if [ ! -f LISTE ]
then
echo 'LISTE inexistant'
return 100
fi
NBR=$(wc -l LISTE)
echo 'A charger '$NBR' de fichier : '$1
return $ret
}
#
# Cas des fichiers avec commentaires
# et même des reseaux en notation CIDR
# ------------------------------------
IPCOMMENTE ()
{
cd /var/tmp
wget $1 --output-document=LISTE_TMP
ret=$?
if [ $ret -ne 0 ]
then
echo 'Fichier en echec : ('$1')'
return $ret
fi
if [ ! -f LISTE_TMP ]
then
echo 'LISTE_TMP inexistant'
return 100
fi
#
# On elimine les '/CIDR' et les commentaires
#
grep -v '/' LISTE_TMP | awk -f /etc/reseau/CRE_SET_IP.aw1 >LISTE
#
# On garde (a part) les réseaux, sans commentaires
#
grep '/' LISTE_TMP | awk -f /etc/reseau/CRE_SET_IP.aw1 >LISTE_NET
NBR=$(wc -l LISTE)
echo 'A charger '$NBR' de fichier : '$1
return $ret
}
# =============================================================================
SET=W_BLACK_IP
trap "SORTIE" 1 23 4 5 6 7 8 9 10 11 12 13 14 15
cd /var/tmp
DELFIC LISTE_NET
/sbin/ipset -X $SET
/sbin/ipset --create $SET iphash --hashsize 50000
ret=$?
if [ $ret -ne 0 ]
then
echo 'Impossible creer '$SET
SORTIE 99
exit 99
fi
#
# Get the file for compromised IP
# -------------------------------
IPSIMPLE $FICHIER
ret=$?
if [ $ret -ne 0 ]
then
echo 'Erreur fichier '$FICHIER
SORTIE 1
exit 1
fi
mv LISTE FICH01
#
# Get the file for Bad Guys
#
IPSIMPLE $FICHIER
ret=$?
if [ $ret -ne 0 ]
then
echo 'Erreur fichier '$FICHIER
SORTIE 2
exit 2
fi
mv LISTE FICH02
#
# Get the file for IP to block
#
IPCOMMENTE $FICHIER
ret=$?
if [ $ret -ne 0 ]
then
echo 'Erreur fichier '$FICHIER
SORTIE 3
exit 3
fi
mv LISTE FICH03
#
# Concatener les trois fichiers, trier, sans doubles
#
mv FICH01 LISTE_TMP
cat FICH02 >>LISTE_TMP
cat FICH03 >>LISTE_TMP
sort -u -t\. -k1n -k2n -k3n -k4n LISTE_TMP >LISTE
ret=$?
if [ $ret -ne 0 ]
then
echo 'Erreur sur SORT'
SORTIE 4
exit 4
fi
#
# Charger le SET
#
CHARGE_IP
/sbin/ipset -L $SET | sort -t\. -k1n -k2n -k3n -k4n
SORTIE 0
Le script AWK associé.
BEGIN {
}
{
IGN = 0;
if ( match($0,"#") ) { IGN = 1; }
if ( length($0) < 6 ) { IGN = 1; }
if ( IGN == 0 )
{ print $0;
}
}
Script d'insertion des adresses réseau ( format ADR CIDR).
#!/bin/bash
#
# ============================================================================
SORTIE ()
{
DELFIC LISTE
DELFIC LISTE_TMP
DELFIC LISTE_NET
if [ $1 -ne 0 ]
then
echo ' '
echo '=========> Sortie en erreur code : '$1
else
echo ' '
echo 'Sortie OK'
fi
exit $1
}
DELFIC ()
{
if [ -f "$1" ]
then
rm -f $1
fi
}
#
# Charger le SET
# --------------
IPNET ()
{
/sbin/ipset --add $SET $ADDR'/'$MASK
ret=$?
if [ $ret -ne 0 ]
then
echo 'Erreur IPSET code : '$ret
fi
return $ret
}
# ==========================================================================
SET=W_BLACK_NET
trap "SORTIE" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
if [ ! -f /var/tmp/LISTE_NET ]
then
echo 'LISTE_TMP absent dans /var/tmp'
SORTIE 1
exit 1
fi
# set -x
/sbin/ipset --destroy $SET
/sbin/ipset --create $SET nethash --hashsize 4096
ret=$?
if [ $ret -ne 0 ]
then
echo 'Impossible creer '$SET
SORTIE 99
exit 99
fi
#
# Constitution LISTE
# concatener liste reseau de CRE_SET_IP
# plus liste perso
# et tri sans doubles
#
cd /var/tmp
cp LISTE_NET LISTE_TMP
cat /etc/reseau/LISTE_IP >>LISTE_TMP
sort -u -t\. -k1n -k2n -k3n -k4n LISTE_TMP >LISTE
ret=$?
if [ $ret -ne 0 ]
then
echo 'ERREUR SUR SORT'
SORTIE 2
exit 2
fi
echo 'A charger : '$(wc -l LISTE)
#
# Chargement des SET reseaux
#
cat LISTE | sed 's!/! !' | while read ADDR MASK
do
case "$MASK" in
2[0-9]) IPNET $ADDR $MASK
ret=$?
;;
1[2-9]) IPNET $ADDR $MASK
ret=$?
;;
6|7|8|9) IPNET $ADDR $MASK
ret=$?
;;
*) echo '????? ('$MASK')'
ret=9
;;
esac
if [ $ret -ne 0 ]
then
echo 'Erreur trt code : '$ret
SORTIE $ret
exit $ret
fi
done
/sbin/ipset -L $SET
SORTIE 0
Script d'enchainement global :
#!/bin/bash
#
RAC=/etc/reseau
$RAC/CRE_SET_IP
ret=$?
if [ $ret -ne 0 ]
then
exit $ret
fi
$RAC/CRE_SET_NET
ret=$?
if [ $ret -ne 0 ]
then
exit $ret
fi
/sbin/ipset swap W_BLACK_IP BLACK_IP
ret=$?
if [ $ret -ne 0 ]
then
echo 'Erreur SWAP BLACK_IP'
exit $ret
fi
/sbin/ipset --destroy W_BLACK_IP
/sbin/ipset swap W_BLACK_NET BLACK_NET
ret=$?
if [ $ret -ne 0 ]
then
echo 'Erreur SWAP BLACK_NET'
exit $ret
fi
/sbin/ipset --destroy W_BLACK_NET
exit 0