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