Éclatement de config.py en plusieurs sous-module de config. L'API reste à peu près la même, il faut juste penser à import config.submodule avant d'utilisr config.submodule (confid.dns, config.upload par exemple)
Tous les autres fichiers modifiés le sont pour compatibilité avec ce changement. Ce commit implique des commits du même genre dans l'intranet2, lc_ldap et bcfg2.
This commit is contained in:
parent
51a3e7e858
commit
2ce185720e
19 changed files with 30 additions and 1142 deletions
|
@ -4,7 +4,7 @@
|
|||
"""
|
||||
Script de déconnection automatique des machines du crans pour les raisons :
|
||||
- upload
|
||||
- p2p
|
||||
- p2p (plus maintenant)
|
||||
- flood
|
||||
- virus
|
||||
|
||||
|
@ -20,7 +20,8 @@ import commands
|
|||
import sys
|
||||
import psycopg2
|
||||
sys.path.append('/usr/scripts/gestion')
|
||||
from config import upload, virus, p2p, NETs
|
||||
from config import upload, virus, NETs
|
||||
import config.mails.upload
|
||||
import ipt
|
||||
import smtplib
|
||||
from ldap_crans import crans_ldap
|
||||
|
@ -242,14 +243,14 @@ for elupload, eltype, elid in uploadeurs:
|
|||
################################
|
||||
mail = connectsmtp()
|
||||
|
||||
corps = upload.message_hard % {'from': upload.expediteur, 'to': proprio.email(), 'upload': elupload, 'proprio': proprio.Nom()}
|
||||
corps = config.mails.upload.message_hard % {'from': upload.expediteur, 'to': proprio.email(), 'upload': elupload, 'proprio': proprio.Nom()}
|
||||
corps = corps.encode('utf-8')
|
||||
mail.sendmail(upload.expediteur, proprio.email(), corps)
|
||||
|
||||
# On envoie un mail à disconnect
|
||||
################################
|
||||
if upload.disconnect_mail_hard:
|
||||
corps = upload.message_disconnect_hard % {'from': upload.expediteur, 'to': upload.expediteur, 'upload': elupload, 'proprio': proprio.Nom(), 'mdc': mdcf, 'chambre': proprio.chbre()}
|
||||
corps = config.mails.upload.message_disconnect_hard % {'from': upload.expediteur, 'to': upload.expediteur, 'upload': elupload, 'proprio': proprio.Nom(), 'mdc': mdcf, 'chambre': proprio.chbre()}
|
||||
corps = corps.encode('utf-8')
|
||||
mail.sendmail(upload.expediteur, upload.expediteur, corps)
|
||||
|
||||
|
@ -266,7 +267,7 @@ for elupload, eltype, elid in uploadeurs:
|
|||
+ "/usr/scripts/surveillance/fiche_deconnexion/generate.py --upload aid=%d" % int(proprio.id()))
|
||||
|
||||
# Envoi du mail à disconnect
|
||||
corps = upload.message_disconnect_multi % {'from': upload.expediteur, 'to': upload.expediteur, 'nbdeco': nb_decos, 'proprio': proprio.Nom(), 'ps': fichier_ps}
|
||||
corps = config.mails.upload.message_disconnect_multi % {'from': upload.expediteur, 'to': upload.expediteur, 'nbdeco': nb_decos, 'proprio': proprio.Nom(), 'ps': fichier_ps}
|
||||
corps = corps.encode('utf-8')
|
||||
mail.sendmail(upload.expediteur, upload.expediteur, corps)
|
||||
|
||||
|
@ -298,14 +299,14 @@ for elupload, eltype, elid in uploadeurs:
|
|||
################################
|
||||
mail = connectsmtp()
|
||||
|
||||
corps = upload.message_soft % {'from': upload.expediteur, 'to': proprio.email(), 'upload': elupload, 'proprio': proprio.Nom()}
|
||||
corps = config.mails.upload.message_soft % {'from': upload.expediteur, 'to': proprio.email(), 'upload': elupload, 'proprio': proprio.Nom()}
|
||||
corps = corps.encode('utf-8')
|
||||
mail.sendmail(upload.expediteur, proprio.email(), corps)
|
||||
|
||||
# On envoie un mail à disconnect
|
||||
################################
|
||||
if upload.disconnect_mail_soft:
|
||||
corps = upload.message_disconnect_soft % {'from': upload.expediteur, 'to': upload.expediteur, 'upload': elupload, 'proprio': proprio.Nom()}
|
||||
corps = config.mails.upload.message_disconnect_soft % {'from': upload.expediteur, 'to': upload.expediteur, 'upload': elupload, 'proprio': proprio.Nom()}
|
||||
corps = corps.encode('utf-8')
|
||||
mail.sendmail(upload.expediteur, upload.expediteur, corps)
|
||||
|
||||
|
@ -458,148 +459,3 @@ for IP in infectes:
|
|||
print "Suppression de %s des machines infectees, mais aucune blackliste"%hostname
|
||||
requete = "DELETE FROM avertis_virus where ip_crans='%s'"%IP
|
||||
curseur.execute(requete)
|
||||
|
||||
################################################################################
|
||||
# Gestion du peer to peer #
|
||||
################################################################################
|
||||
|
||||
# Dans la table p2p on sélectionne les ip_src qui appartiennent au réseau
|
||||
requete = "SELECT ip_src,id_p2p,count(ip_src) FROM p2p WHERE %s AND date > timestamp 'now' - interval '2 hours' AND id_p2p != 1 GROUP BY ip_src,id_p2p ORDER BY ip_src" % ip_src_in_crans
|
||||
curseur.execute(requete)
|
||||
fraudeurs = curseur.fetchall()
|
||||
|
||||
# Récupération des fraudeurs pour ne pas les resanctionner
|
||||
requete = "SELECT ip_crans,protocole FROM avertis_p2p WHERE date > timestamp 'now' - interval '3 hours'"
|
||||
curseur.execute(requete)
|
||||
avertisp2p = curseur.fetchall()
|
||||
|
||||
for ip, id_p2p, nombre in fraudeurs:
|
||||
|
||||
# On récupére le protocole de p2p :
|
||||
requete = "SELECT nom FROM protocole_p2p WHERE id_p2p=%d" % id_p2p
|
||||
curseur.execute(requete)
|
||||
protocole = curseur.fetchall()[0][0]
|
||||
|
||||
# On ne prend pas en compte s'il est sous le seuil admis, ou
|
||||
#s'il est averti
|
||||
if nombre <= p2p.limite[protocole] or (ip, protocole) in avertisp2p:
|
||||
continue
|
||||
|
||||
# Récupération des ref de la machine
|
||||
machines = ldap.search('ipHostNumber=%s' % ip, 'w' )['machine']
|
||||
if len(machines) == 0:
|
||||
# La machine a ete supprimee entre temps
|
||||
continue
|
||||
machine = machines[0]
|
||||
hostname = machine.nom()
|
||||
proprio = machine.proprietaire()
|
||||
blacklist = proprio.blacklist()
|
||||
|
||||
if isinstance(machine, MachineFixe):
|
||||
_, chambre = reperage_chambre(machine.mac())
|
||||
else:
|
||||
chambre = 'machine wifi'
|
||||
|
||||
|
||||
# Envoi du mail à disconnect
|
||||
mail = connectsmtp()
|
||||
|
||||
if p2p.disconnect_mail:
|
||||
requete = "select date from p2p where date > timestamp 'now' - interval '2 hours' and ip_src='%s' order by date limit 1"%ip
|
||||
curseur.execute(requete)
|
||||
date = curseur.fetchall()[0][0]
|
||||
corps = p2p.avertissement % { 'From': upload.expediteur,
|
||||
'To': upload.expediteur,
|
||||
'protocole': protocole,
|
||||
'hostname': hostname,
|
||||
'nb_paquets': nombre,
|
||||
'datedebut': date,
|
||||
'chambre': chambre,
|
||||
}
|
||||
corps = corps.encode('utf-8')
|
||||
mail.sendmail(upload.expediteur, upload.expediteur, corps)
|
||||
|
||||
# Inscription dans la base des avertis
|
||||
requete = "INSERT INTO avertis_p2p (ip_crans,date,protocole) VALUES ('%s','now','%s')" % (ip, protocole)
|
||||
curseur.execute(requete)
|
||||
|
||||
# On envoie un mail a l'adhérent
|
||||
################################
|
||||
corps = p2p.deconnexion % { 'From': p2p.expediteur,
|
||||
'To': proprio.email(),
|
||||
'protocole': protocole,
|
||||
'hostname': hostname }
|
||||
corps = corps.encode('utf-8')
|
||||
mail.sendmail(p2p.expediteur, proprio.email(), corps)
|
||||
|
||||
# L'adhérent n'est pas encore blacklisté
|
||||
fin = int(time()) + 24*3600
|
||||
proprio.blacklist(['now', fin, 'autodisc_p2p', hostname])
|
||||
proprio.save()
|
||||
|
||||
# Vérification du nombre de déconnexions
|
||||
#########################################
|
||||
nb_decos = len([ x for x in proprio.blacklist() if int(x.split('$')[0]) > time()-365*24*3600 and x.split('$')[2] == 'autodisc_p2p' ])
|
||||
if nb_decos >= 3:
|
||||
# Génération du fichier postscript
|
||||
try:
|
||||
fichier_ps = generate_ps('p2p', proprio, ldap)
|
||||
except:
|
||||
fichier_ps = ("ERREUR lors de la génération. Merci de regénérer manuellement la fiche avec la commande :\n"
|
||||
+ "/usr/scripts/surveillance/fiche_deconnexion/generate.py --p2p aid=%d" % int(proprio.id()))
|
||||
|
||||
# Envoi du mail à disconnect
|
||||
corps = p2p.message_disconnect_multi % { 'from': p2p.expediteur,
|
||||
'to': p2p.expediteur,
|
||||
'nbdeco': nb_decos,
|
||||
'proprio':proprio.Nom(),
|
||||
'ps': fichier_ps }
|
||||
corps = corps.encode('utf-8')
|
||||
mail.sendmail(p2p.expediteur, p2p.expediteur, corps)
|
||||
|
||||
################################################################################
|
||||
# Gestion du bittorrent #
|
||||
################################################################################
|
||||
|
||||
# Dans la table p2p on sélectionne les ip_src qui appartiennent au réseau
|
||||
requete = "SELECT ip_src,count(ip_src) FROM p2p WHERE %s AND date > timestamp 'now' - interval '2 hours' AND id_p2p = 1 GROUP BY ip_src,id_p2p ORDER BY ip_src" % ip_src_in_crans
|
||||
curseur.execute(requete)
|
||||
fraudeurs = curseur.fetchall()
|
||||
|
||||
# Récupération des fraudeurs pour ne pas les avertir de nouveau
|
||||
requete = "SELECT ip_crans,protocole FROM avertis_p2p WHERE date > timestamp 'now' - interval '14 days'"
|
||||
curseur.execute(requete)
|
||||
avertisp2p = curseur.fetchall()
|
||||
|
||||
for ip, nombre in fraudeurs:
|
||||
# On récupére le protocole de p2p :
|
||||
protocole = 'Bittorrent'
|
||||
|
||||
# On ne prend pas en compte s'il est sous le seuil admis, ou
|
||||
#s'il est averti
|
||||
if nombre <= p2p.limite[protocole] or (ip, protocole) in avertisp2p:
|
||||
continue
|
||||
|
||||
# Récupération des ref de la machine
|
||||
machines = ldap.search('ipHostNumber=%s' % ip, 'w' )['machine']
|
||||
if len(machines) == 0:
|
||||
# La machine a ete supprimee entre temps
|
||||
continue
|
||||
machine = machines[0]
|
||||
hostname = machine.nom()
|
||||
proprio = machine.proprietaire()
|
||||
|
||||
# On envoie un mail a l'adhérent
|
||||
################################
|
||||
mail = connectsmtp()
|
||||
|
||||
corps = p2p.avertissement_bt % { 'From': p2p.expediteur,
|
||||
'To': proprio.email(),
|
||||
'protocole': protocole,
|
||||
'hostname': hostname }
|
||||
corps = corps.encode('utf-8')
|
||||
mail.sendmail(p2p.expediteur, proprio.email(), corps)
|
||||
|
||||
# Inscription dans la base des avertis
|
||||
requete = "INSERT INTO avertis_p2p (ip_crans,date,protocole) VALUES ('%s','now','%s')" % (ip, protocole)
|
||||
curseur.execute(requete)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue