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 *
# 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 :
###############
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]
hostname = machine.nom()
proprio = machine.proprietaire()
bl = proprio.blacklist()
# Inscription dans la table des infectes
requete="INSERT INTO avertis_virus (ip_crans,date) VALUES ('%s','now')" % ip1
curseur.execute(requete)
@ -241,11 +255,21 @@ if veroles:
curseur.execute(requete)
infectes = curseur.fetchall()
# Blacklistage
date = time()
debut = localtime(date)
proprio.blacklist(["%d/%d/%d %d:%d" % (debut[2],debut[1],debut[0],debut[3],debut[4]),'-','virus',"Virus (auto)"])
proprio.save()
for ligne in bl:
# On réédite si possible les lignes existantes pour ne pas charger la blackliste
if ',virus,' in ligne :
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
########
@ -283,8 +307,9 @@ if veroles:
# Blacklistage
date = time()
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.save()
proprio.blacklist(["%d/%d/%d %d:%d" % (debut[2],debut[1],debut[0],debut[3],debut[4]),'-','virus',hostname)
proprio.save()
# Reconnexion si le virus a disparu
@ -302,25 +327,29 @@ for i in range(1,len(infectes)):
curseur.execute(requete2)
nb_flood = curseur.fetchall()
# 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:
machine = ldap.search('ipHostNumber=%s' % IP,'w' )['machine'][0]
proprio = machine.proprietaire()
bl = proprio.blacklist()
hostname = machine.nom()
# On stoppe la sanction pour une ligne existante de la blackliste
# En prenant en compte le fait que d'autres lignes de blackliste
# ont pu s'ajouter.
for ligne in bl:
if ',-,virus,' in ligne:
liste=ligne.split(',')
argument=[liste[0],'now',liste[2],liste[3]]
print argument,IP
index = bl.index(ligne)
proprio.blacklist((index,argument))
proprio.save()
requete="DELETE FROM avertis_virus where ip_crans='%s'"%IP
curseur.execute(requete)
if nb_virus[0][0] < virus.virus and nb_flood[0][0] < virus.flood :
machine = ldap.search('ipHostNumber=%s' % IP,'w' )['machine'][0]
# si la machine n'est pas online, on ne reconnecte pas
if not machine_online(machine) :
continue
proprio = machine.proprietaire()
bl = proprio.blacklist()
hostname = machine.nom()
# On stoppe la sanction pour une ligne existante de la blackliste
# En prenant en compte le fait que d'autres lignes de blackliste
# ont pu s'ajouter.
for ligne in bl:
if ',-,virus,%s'%hostname in ligne:
liste=ligne.split(',')
argument=[liste[0],'now',liste[2],liste[3]]
print argument,IP
index = bl.index(ligne)
proprio.blacklist((index,argument))
proprio.save()
requete="DELETE FROM avertis_virus where ip_crans='%s'"%IP
curseur.execute(requete)
# Gestion du P2P :
##################
# Dans le table virus on sélectionne les ip_src qui appartiennent au reseau
@ -353,7 +382,7 @@ if pair :
curseur.execute(requete)
protocole = curseur.fetchall()
protocole=protocole[0][0]
corps = p2p.avertissement % { 'From': upload.expediteur,
corps = p2p.avertissement % { 'From': upload.expediteur,
'To': upload.expediteur,
'protocole': protocole,
'hostname':hostname}
@ -371,7 +400,7 @@ if pair :
# 7 jours
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.save()
# proprio.save()
mail.quit()