====== Arpwatch ======
==== Présentation ====
Ce service garde une trace de la correspondance entre adresse physique (mac) et addresse IP et envoie une alerte par mail sur la liste arpwatch2@listes.minet.net dès que cette correspondance change. Pour celà, il écoute et traite chaque trame utilisant le protocole [[http://fr.wikipedia.org/wiki/Address_Resolution_Protocol | ARP]].
Ceci nous permet surtout de détecter les utilisateurs qui configurent leurs PC avec une adresse IP qui ne leur est pas réservée manuellement causant ainsi l'instabilité de la connexion de la personne qui possède cette adresse IP. Ce genre de pratique est sanctionné par une semaine de coupure de connexion.
Ce service a été recompilé afin de vérifier que les couples MAC / IP sont bien présents dans ADH5.
- Il commence par créer un nouveau processus,
- Puis interroge adh5
- Parse la réponse qui est en JSon
- Et vérifie la correspondance et adapte le mail en fonction
Il sera nécessaire de recompiler en cas de :
* ajout de VLAN : modifier adh5.c, fonction is_adh
* modification de la page DHCP d'adh5 (idem : adh5.c + json.c)
* modification de l'adresse d'envoi (address.h)
Pour recompiler, exécutez ces commandes :
cd /root/compiler/arpwatch
./configure
make
gcc -O -DDEBUG -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_MEMORY_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_BCOPY=1 -DHAVE_STRERROR=1 -DRETSIGTYPE=void -DRETSIGVAL= -DHAVE_SIGSET=1 -Dsignal=sigset -DDECLWAITSTATUS=int -DARPDIR=\"/usr/local/arpwatch\" -DPATH_SENDMAIL=\"/usr/sbin/sendmail\" -I. -Ilinux-include -c ./json.c -std=c99
make
gcc -O -DDEBUG -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_MEMORY_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_BCOPY=1 -DHAVE_STRERROR=1 -DRETSIGTYPE=void -DRETSIGVAL= -DHAVE_SIGSET=1 -Dsignal=sigset -DDECLWAITSTATUS=int -DARPDIR=\"/usr/local/arpwatch\" -DPATH_SENDMAIL=\"/usr/sbin/sendmail\" -I. -Ilinux-include -o arpsnmp arpsnmp.o db.o dns.o ec.o file.o intoa.o machdep.o util.o report.o setsignal.o adh5.o json.o version.o -lcurl -ljson
mv arpsnmp /usr/sbin/arpsnmp
Une sauvegarde de l'arpwatch d'origine est disponible
===== Configuration =====
Création d'une interface par vlan, dans le fichier /etc/network/interfaces :
* Configuration [[wiki:services:arpwatch:traditionnelle]]
Je vous présente la configuration actuelle de arpwatch. Actuellement plutôt que de faire passer les vlan 41 à 47 sur le cluster ce qui pourrait entrainer des dérives il a été préférer d'utiliser arpsnmp et arpfetch qui sont deux programmes incluent dans le package arpwatch. Ils permettent en gros de faire pareil mais en récupérant la table ARP à distance, ici sur le routeur minet.
==== Récupérer les données arp ====
- Installez **snmp** et la mib associée... Cette Mib permettra de gérer le protocole **snmp** des switchs cisco.
apt-get install snmpd
apt-get install snmp-mibs-downloader
mkdir /root/.snmp
mkdir /root/.snmp/mibs
cp /var/lib/mibs/ietf/RFC1213-MIB /root/.snmp/mibs/
- On l'ajoute dans ''/etc/snmp/snmp.conf'' :
#
# As the snmp packages come without MIB files due to license reasons, loading
# of MIBs is disabled by default. If you added the MIBs you can reenable
# loaging them by commenting out the following line.
mibs +RFC1213-MIB
- On modifie ''/etc/snmp/snmpd.conf'' :
###############################################################################
# AGENT BEHAVIOUR
agentAddress udp:127.0.0.1:161
view systemonly included .1.3.6.1.2.1.1
view systemonly included .1.3.6.1.2.1.25.1
#rocommunity public localhost
rocommunity public default -V systemonly
local
#rocommunity secret 10.0.0.0/16
rouser authOnlyUser
above
# Note that setting these values here, results in the corresponding MIB objects being 'read-only'
sysLocation Sitting on the Dock of the Bay
sysContact Me
# Application + End-to-End layers
sysServices 72
# Process Monitoring
# At least one 'mountd' process
proc mountd
# No more than 4 'ntalkd' processes - 0 is OK
proc ntalkd 4
# At least one 'sendmail' process, but no more than 10
proc sendmail 10 1
# 10MBs required on root disk, 5% free on /var, 10% free on all other disks
disk / 10000
disk /var 5%
includeAllDisks 10%
# Unacceptable 1-, 5-, and 15-minute load averages
load 12 10 5
# ACTIVE MONITORING
trapsink localhost public
iquerySecName internalUser
rouser internalUser
defaultMonitors yes
linkUpDownNotifications yes
extend test1 /bin/echo Hello, world!
extend-sh test2 echo Hello, world! ; echo Hi there ; exit 35
master agentx
/master
- Et enfin on installe **ssmtp** pour que arpwatch puisse envoyer des mail :
root=arpwatch@minet.net
mailhub=smtp.minet.net
rewriteDomain=minet.net
hostname=arpwatch.minet.net
AuthUser=arp
AuthPass=arpown
Vous pouvez passez à l'étape d'après : le script custom !!!
===== Un poil plus tordu =====
Voici le script cron qui s'occupe de cette tache : ''/etc/arpwatch/arpwatch-minet.sh''
#!/bin/sh
ARPSNMP="/usr/sbin/arpsnmp" #utilise ssmtp
ARPFETCH=/usr/sbin/arpfetch
community=arpwatch
BASE=/etc/arpwatch/
for host in "192.168.102.1"
do
$ARPFETCH $host $community | grep -v "157.159.40." > $BASE$host.fetch
touch $BASE$host.dat # file must exist
$ARPSNMP -f $BASE$host.dat $BASE$host.fetch
done
La communauté snmp utilisée est arpwatch en Read only. Un script personnalisé est lancé par un cron toutes les 5 minutes. Ce script ainsi que la table ARP téléchargée se trouvent dans le dossier /etc/arpwatch Les mails sont envoyés grace a sSMTP jusqu'au serveur smtp de minet qui distribuera à la liste arpwatch2
====Pour plus tard====
Lorsque l'image ios12.3+ sera sur le routeur de minet on pourra utiliser la commande logging server-arp pour renvoyer sur le serveur log les messages arp et ensuite faire des alertes.