En cas de deconnexion pour virus, on reedite la blackliste si l'adherent a u

npassif

darcs-hash:20051012184914-6d78a-d18ff92fec3c28bf12858ce0e3a5842e3c5ed52f.gz
This commit is contained in:
pessoles 2005-10-12 20:49:14 +02:00
parent eccb55c441
commit b7c3587b7b

View file

@ -15,6 +15,19 @@ from ldap_crans import crans_ldap, crans, invite, base_classes_crans
from time import * from time import *
# quelques fonctions
####################
def machine_online(machine) :
"""
Retourne True si la machine est connectée au réseau et False si elle ne l'est pas
"""
# les wifi sont toujours online
if machine.ipsec() :
return True
# arping pour les fixes
return not commands.getstatusoutput('/usr/sbin/arping -c 3 %s' % machine.mac())[0]
# Connections : # Connections :
############### ###############
pgsql = PgSQL.connect(host='/var/run/postgresql', database='filtrage', user='crans') pgsql = PgSQL.connect(host='/var/run/postgresql', database='filtrage', user='crans')
@ -234,6 +247,7 @@ if veroles:
machine = ldap.search('ipHostNumber=%s' % ip,'w' )['machine'][0] machine = ldap.search('ipHostNumber=%s' % ip,'w' )['machine'][0]
hostname = machine.nom() hostname = machine.nom()
proprio = machine.proprietaire() proprio = machine.proprietaire()
bl = proprio.blacklist()
# Inscription dans la table des infectes # Inscription dans la table des infectes
requete="INSERT INTO avertis_virus (ip_crans,date) VALUES ('%s','now')" % ip1 requete="INSERT INTO avertis_virus (ip_crans,date) VALUES ('%s','now')" % ip1
curseur.execute(requete) curseur.execute(requete)
@ -241,10 +255,20 @@ if veroles:
curseur.execute(requete) curseur.execute(requete)
infectes = curseur.fetchall() infectes = curseur.fetchall()
# Blacklistage # Blacklistage
date = time() for ligne in bl:
debut = localtime(date) # On réédite si possible les lignes existantes pour ne pas charger la blackliste
proprio.blacklist(["%d/%d/%d %d:%d" % (debut[2],debut[1],debut[0],debut[3],debut[4]),'-','virus',"Virus (auto)"]) if ',virus,' in ligne :
proprio.save() liste=ligne.split(',')
argument=['now','-',virus,hostname]
print argument,IP
index = bl.index(ligne)
proprio.blacklist((index,argument))
proprio.save()
else :
date = time()
debut = localtime(date)
proprio.blacklist(["%d/%d/%d %d:%d" % (debut[2],debut[1],debut[0],debut[3],debut[4]),'-','virus',hostname])
proprio.save()
# Flood # Flood
@ -283,8 +307,9 @@ if veroles:
# Blacklistage # Blacklistage
date = time() date = time()
debut = localtime(date) debut = localtime(date)
proprio.blacklist(["%d/%d/%d %d:%d" % (debut[2],debut[1],debut[0],debut[3],debut[4]),'-','virus',"Virus_flood (auto)"]) proprio.blacklist(["%d/%d/%d %d:%d" % (debut[2],debut[1],debut[0],debut[3],debut[4]),'-','virus',hostname)
proprio.save() proprio.save()
# Reconnexion si le virus a disparu # Reconnexion si le virus a disparu
@ -302,24 +327,28 @@ for i in range(1,len(infectes)):
curseur.execute(requete2) curseur.execute(requete2)
nb_flood = curseur.fetchall() nb_flood = curseur.fetchall()
# On traite que les IP qui sont descendues en dessoys des seuils # On traite que les IP qui sont descendues en dessoys des seuils
if nb_virus[0][0] < virus.virus and nb_flood[0][0] < virus.flood: if nb_virus[0][0] < virus.virus and nb_flood[0][0] < virus.flood :
machine = ldap.search('ipHostNumber=%s' % IP,'w' )['machine'][0] machine = ldap.search('ipHostNumber=%s' % IP,'w' )['machine'][0]
proprio = machine.proprietaire() # si la machine n'est pas online, on ne reconnecte pas
bl = proprio.blacklist() if not machine_online(machine) :
hostname = machine.nom() continue
# On stoppe la sanction pour une ligne existante de la blackliste proprio = machine.proprietaire()
# En prenant en compte le fait que d'autres lignes de blackliste bl = proprio.blacklist()
# ont pu s'ajouter. hostname = machine.nom()
for ligne in bl: # On stoppe la sanction pour une ligne existante de la blackliste
if ',-,virus,' in ligne: # En prenant en compte le fait que d'autres lignes de blackliste
liste=ligne.split(',') # ont pu s'ajouter.
argument=[liste[0],'now',liste[2],liste[3]] for ligne in bl:
print argument,IP if ',-,virus,%s'%hostname in ligne:
index = bl.index(ligne) liste=ligne.split(',')
proprio.blacklist((index,argument)) argument=[liste[0],'now',liste[2],liste[3]]
proprio.save() print argument,IP
requete="DELETE FROM avertis_virus where ip_crans='%s'"%IP index = bl.index(ligne)
curseur.execute(requete) proprio.blacklist((index,argument))
proprio.save()
requete="DELETE FROM avertis_virus where ip_crans='%s'"%IP
curseur.execute(requete)
# Gestion du P2P : # Gestion du P2P :
################## ##################
@ -353,7 +382,7 @@ if pair :
curseur.execute(requete) curseur.execute(requete)
protocole = curseur.fetchall() protocole = curseur.fetchall()
protocole=protocole[0][0] protocole=protocole[0][0]
corps = p2p.avertissement % { 'From': upload.expediteur, corps = p2p.avertissement % { 'From': upload.expediteur,
'To': upload.expediteur, 'To': upload.expediteur,
'protocole': protocole, 'protocole': protocole,
'hostname':hostname} 'hostname':hostname}
@ -371,7 +400,7 @@ if pair :
# 7 jours # 7 jours
fin = localtime(date+60*60*24*7) fin = localtime(date+60*60*24*7)
# proprio.blacklist(["%d/%d/%d %d:%d" % (debut[2],debut[1],debut[0],debut[3],debut[4]),"%d/%d/%d %d:%d" % (fin[2],fin[1],fin[0],fin[3],fin[4]),'p2p',"P2P (auto)" % protocole]) # proprio.blacklist(["%d/%d/%d %d:%d" % (debut[2],debut[1],debut[0],debut[3],debut[4]),"%d/%d/%d %d:%d" % (fin[2],fin[1],fin[0],fin[3],fin[4]),'p2p',"P2P (auto)" % protocole])
# proprio.save() # proprio.save()
mail.quit() mail.quit()