WikiMiNET

La documentation technique et administrative

Outils pour utilisateurs

Outils du site


wiki:services:arpwatch

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 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.

  1. Il commence par créer un nouveau processus,
  2. Puis interroge adh5
  3. Parse la réponse qui est en JSon
  4. 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 :

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

  1. 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/
  1. 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
  1. 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 <me@example.org>
                                                 # 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
  1. 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.

wiki/services/arpwatch.txt · Dernière modification: 2020/06/27 18:16 (modification externe)