WikiMiNET

La documentation technique et administrative

Outils pour utilisateurs

Outils du site


wiki:services:arpwatch

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
wiki:services:arpwatch [2015/10/06 18:18]
Thithib
wiki:services:arpwatch [2020/06/27 18:16] (Version actuelle)
Ligne 1: Ligne 1:
 +====== 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
 +
 +<WRAP info round>
 +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)
 +</WRAP>
 +
 +Pour recompiler, exécutez ces commandes :
 +
 +<code bash>
 +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
 +</code>
 +
 +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.
 +
 +<code bash>
 +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/
 +</code>
 +
 +  - On l'ajoute dans ''/etc/snmp/snmp.conf''
 +
 +<code bash>
 +#
 +# 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
 +</code>
 +
 +  - On modifie ''/etc/snmp/snmpd.conf''
 +
 +<code bash>
 +###############################################################################
 +#  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
 +
 +</code>
 +
 +  - Et enfin on installe **ssmtp** pour que arpwatch puisse envoyer des mail : 
 +
 +<code bash>
 +root=arpwatch@minet.net
 +
 +mailhub=smtp.minet.net
 +
 +rewriteDomain=minet.net
 +
 +hostname=arpwatch.minet.net
 +
 +AuthUser=arp
 +AuthPass=arpown
 +</code>
 +
 +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''
 +
 +<code bash>
 +#!/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
 +</code>
 +
 +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.