From acef69c7da797f1dc10a761610c082ba11e281a7 Mon Sep 17 00:00:00 2001 From: Michel Blockelet Date: Tue, 8 Mar 2011 00:36:11 +0100 Subject: [PATCH] =?UTF-8?q?[deconnexion.py]=20On=20ne=20d=C3=A9connecte=20?= =?UTF-8?q?plus=20pour=20Bittorrent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Maintenant ils reçoivent seulement un mail d'avertissement darcs-hash:20110307233611-ddb99-be4482514f3f841735ec695e36a8b45f63c878fc.gz --- gestion/config.py | 33 +++++++++++++++++++++++++ surveillance/deconnexion.py | 49 ++++++++++++++++++++++++++++++++++++- 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/gestion/config.py b/gestion/config.py index caf9b462..ff7261ca 100644 --- a/gestion/config.py +++ b/gestion/config.py @@ -369,6 +369,7 @@ Nombre de paquets : %(nb_paquets)s paquets depuis le %(datedebut)s. --\u0020 Message créé par deconnexion.py""" + deconnexion = u"""From: %(From)s To: %(To)s Subject: Avis de =?iso-8859-15?Q?D=E9connexion?= @@ -393,6 +394,38 @@ il pénalise l'ensemble des adhérents de l'association. Tu seras donc déconnecté 24h. +--\u0020 +Disconnect Team""" + + avertissement_bt = u"""From: %(From)s +To: %(To)s +Subject: Avertissement d'utilisation du protocole Bittorrent +Content-Type: text/plain; charset="utf-8" + +Bonjour, +Nous avons détecté que ta machine, %(hostname)s utilisait le +*protocole* %(protocole)s. + +*Ce message t'est envoyé à titre informatif, il ne te sanctionne pas.* + +Cela signifie : + - Ou bien que tu utilises le logiciel qui a le même nom + que ce protocole, + - Ou bien que tu utilises un logiciel qui utilise le + protocole en question pour partager des fichiers. + +Or l'usage de *protocoles* de type peer to peer est interdit +sur notre réseau, conformément aux documents que tu as acceptés +en adhérant au CR@NS. + +Nous empêchons donc ce trafic Bittorrent de sortir du réseau Cr@ns, +rendant inopérant les logiciels l'utilisant. + +Si tu es à l'origine de ce trafic, merci de couper les logiciels en +question. Sinon, il est possible qu'un logiciel malveillant en soit la +cause, nous te conseillons d'installer un anti-virus et un pare-feu afin +d'arrêter la source de ce trafic. + --\u0020 Disconnect Team""" diff --git a/surveillance/deconnexion.py b/surveillance/deconnexion.py index bf556f03..efc22804 100644 --- a/surveillance/deconnexion.py +++ b/surveillance/deconnexion.py @@ -417,7 +417,7 @@ for IP in infectes: ################################################################################ # 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' GROUP BY ip_src,id_p2p ORDER BY ip_src" % ip_src_in_crans +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() @@ -501,3 +501,50 @@ for ip, id_p2p, nombre in fraudeurs: '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)