surveillance/ra2.py : pose un bl ipv6_ra, et mail
This commit is contained in:
parent
1a333ad482
commit
8041a39397
7 changed files with 115 additions and 0 deletions
1
gestion/mail/template/deconnex_ra/From/fr
Normal file
1
gestion/mail/template/deconnex_ra/From/fr
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Les nounous du Crans <disconnect@crans.org>
|
1
gestion/mail/template/deconnex_ra/README
Normal file
1
gestion/mail/template/deconnex_ra/README
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Envoyé à l'adhérent lorsque son impression est terminée
|
1
gestion/mail/template/deconnex_ra/Subject/fr
Normal file
1
gestion/mail/template/deconnex_ra/Subject/fr
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[Crans] Deconnexion pour router advertisement
|
1
gestion/mail/template/deconnex_ra/To/fr
Normal file
1
gestion/mail/template/deconnex_ra/To/fr
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{{To}}
|
1
gestion/mail/template/deconnex_ra/X-Mailer/fr
Normal file
1
gestion/mail/template/deconnex_ra/X-Mailer/fr
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{{ mailer }}
|
14
gestion/mail/template/deconnex_ra/body/fr
Normal file
14
gestion/mail/template/deconnex_ra/body/fr
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
Bonjour {{tname}},
|
||||||
|
|
||||||
|
La machine {{mach}} dont tu es le propriétaire a été déconnectée du réseau.
|
||||||
|
|
||||||
|
La raison de cette déconnexion est technique : le comportement de la machine est anormal.
|
||||||
|
Celle-ci émet des annonces signalant aux autres machines qu'elle peut gérer leur connexion
|
||||||
|
internet. Ceci est normalement réservé au routeur du réseau. Cela en compromet donc la
|
||||||
|
stabilité, et peut impacter les autres utilisateurs.
|
||||||
|
|
||||||
|
Pour plus d'information, tu peux nous contacter via diconnect@crans.org.
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
Les membres actifs de l'association
|
96
surveillance/ra2.py
Executable file
96
surveillance/ra2.py
Executable file
|
@ -0,0 +1,96 @@
|
||||||
|
#!/bin/bash /usr/scripts/python.sh
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Réecriture complète de ra.py
|
||||||
|
# On fait tourner ramond. Dès qu'une mac non autorisée fait une ra,
|
||||||
|
# ce script s'execute et pose une blackliste sur la machine.
|
||||||
|
# Prise en compte du nouveau binding.
|
||||||
|
# Envoie de mails au propriétaire et à disconnect
|
||||||
|
# Ecrit par Gabriel Détraz <detraz@crans.org>
|
||||||
|
# Avec l'aide importante de Pierre-elliot Becue <becue@crans.org>
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
# On importe les scripts Crans
|
||||||
|
import lc_ldap.shortcuts
|
||||||
|
from cranslib import clogger
|
||||||
|
from gestion import mail
|
||||||
|
from utils.sendmail import actually_sendmail
|
||||||
|
|
||||||
|
# On règle le nombre de RA admissibles par jour par machine:
|
||||||
|
TOL = 3
|
||||||
|
|
||||||
|
# Chemin du fichier des logs
|
||||||
|
LOGGER = clogger.CLogger('ra2', level='info')
|
||||||
|
|
||||||
|
# On ouvre une connexion LDAP à la base admin/de test une fois pour toute.
|
||||||
|
CONN = lc_ldap.shortcuts.lc_ldap_admin()
|
||||||
|
|
||||||
|
def ra_blacklist(Mac_ra):
|
||||||
|
thetime = time.strftime('%Y-%m-%d', time.localtime())
|
||||||
|
|
||||||
|
# Logs des macs capturées, avec la date
|
||||||
|
LOGGER.info("La mac %s fait des RA" % (Mac_ra,))
|
||||||
|
|
||||||
|
# On cherche la machine correspondante
|
||||||
|
machines = CONN.search(u'(macAddress=%s)' % Mac_ra,mode="rw")
|
||||||
|
|
||||||
|
# On agit que si la machine est connu
|
||||||
|
if machines:
|
||||||
|
machine = machines[0]
|
||||||
|
# print machine
|
||||||
|
|
||||||
|
p = subprocess.Popen(['grep','-c', thetime + '.*.' + Mac_ra, LOGGER.get_file_handler_path()],stdout=subprocess.PIPE)
|
||||||
|
stdout, stderr = p.communicate()
|
||||||
|
# print stdout
|
||||||
|
if int(stdout) <= TOL:
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Sécurité : on évite de poser une bl à un serveur
|
||||||
|
if isinstance(machine.proprio(), lc_ldap.objets.AssociationCrans):
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Cohérence : si il y a déjà un bl, on arrète
|
||||||
|
bl_actif = machine.blacklist_actif()
|
||||||
|
#print bl_actif
|
||||||
|
for blacklist in bl_actif:
|
||||||
|
#print x['type']
|
||||||
|
if blacklist['type'] == 'ipv6_ra':
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# On pose la blackliste sur la machine incriminée
|
||||||
|
machine.blacklist('ipv6_ra', u'auto ra.py : router advertisement', debut='now', fin='-')
|
||||||
|
machine.save()
|
||||||
|
send_mail(machine)
|
||||||
|
|
||||||
|
# On envoie une notification à disconnect et à la personne :
|
||||||
|
def send_mail(machine):
|
||||||
|
adh = machine.proprio()
|
||||||
|
From = 'disconnect@crans.org'
|
||||||
|
To = adh.get_mail()
|
||||||
|
Cc = 'disconnect@crans.org'
|
||||||
|
name = adh.ldap_name
|
||||||
|
mach = unicode(machine['host'][0])
|
||||||
|
if isinstance(adh, lc_ldap.objets.adherent):
|
||||||
|
tname = unicode(adh['prenom'][0]) + " " + unicode(adh['nom'][0])
|
||||||
|
elif isinstance(adh, lc_ldap.objets.club):
|
||||||
|
tname = unicode(adh['nom'][0])
|
||||||
|
mailtxt = mail.generate('deconnex_ra', {
|
||||||
|
'To': To,
|
||||||
|
'From': From,
|
||||||
|
'tname': tname,
|
||||||
|
'mach': mach,
|
||||||
|
})
|
||||||
|
|
||||||
|
actually_sendmail(From, (To,Cc), mailtxt)
|
||||||
|
|
||||||
|
## Si testing :
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# On récupère la mac dans l'env :
|
||||||
|
Mac_ra = os.getenv('SOURCE_MAC')
|
||||||
|
# Mac_ra = sys.argv[1]
|
||||||
|
# print Mac_ra
|
||||||
|
ra_blacklist(Mac_ra)
|
Loading…
Add table
Add a link
Reference in a new issue