From 230e01cc1ba98d8e699e57cac86124ba1676160f Mon Sep 17 00:00:00 2001 From: glondu Date: Sun, 26 Mar 2006 06:07:22 +0200 Subject: [PATCH] Pour viter toute confusion future, on stocke les dates de blacklist en nombre de secondes coules depuis Epoch. darcs-hash:20060326040722-68412-25d9d48ded7ffc0279da4fbbeb74bdf610a33b2f.gz --- gestion/gen_confs/firewall.py | 50 +++++++++++++++++------------------ gestion/gen_confs/generate.py | 10 +++---- surveillance/deconnexion.py | 36 ++++++++++++++----------- 3 files changed, 50 insertions(+), 46 deletions(-) diff --git a/gestion/gen_confs/firewall.py b/gestion/gen_confs/firewall.py index 001dc73f..d4bfdd10 100755 --- a/gestion/gen_confs/firewall.py +++ b/gestion/gen_confs/firewall.py @@ -133,7 +133,7 @@ class firewall_crans : def filter_table(self) : """ Remplit la table filter """ - self.anim = anim(' Structure de la table filter') + self.anim = anim('\tStructure de la table filter') print OK def filter_table_tweaks(self) : @@ -177,17 +177,17 @@ class firewall_crans : # On peux router self.post_start_hook() - cprint(" -> fin de la procédure de démarrage",'vert') + cprint("\t -> fin de la procédure de démarrage",'vert') def stop(self): """ Arrête le firewall """ cprint("Arrêt du firewall",'gras') self.pre_stop_hook() self.exception_catcher(self.__stop) - cprint(" -> fin de la procédure d'arrêt",'vert') + cprint("\t -> fin de la procédure d'arrêt",'vert') def __stop(self) : - self.anim = anim(" Suppression regles") + self.anim = anim("\tSuppression regles") iptables("-t nat -P PREROUTING ACCEPT") iptables("-F") iptables("-t nat -F") @@ -198,7 +198,7 @@ class firewall_crans : def test_mac_ip(self) : """ Reconstruit la correspondance MAC-IP des machines des adhérents """ - self.anim = anim(' Chaine TEST_MAC-IP',len(self.__machines())+1) + self.anim = anim('\tChaine TEST_MAC-IP',len(self.__machines())+1) iptables("-t nat -P PREROUTING ACCEPT") iptables("-t nat -F TEST_MAC-IP") self.anim.cycle() @@ -263,7 +263,7 @@ class firewall_crans : def mac_ip_maj(self,ip_list) : """ Mise à jour de la correspondance MAC-IP pour les ip fournies """ ## Que faut-il faire ? - self.anim = anim(' Analyse travail à effectuer') + self.anim = anim('\tAnalyse travail à effectuer') if ip_list == [''] : print OK + ' (rien à faire)' return @@ -305,7 +305,7 @@ class firewall_crans : if mac_ip_maj or serveur_maj : def procedure() : warn = '' - self.anim = anim(' Actualisation TEST_MAC-IP') + self.anim = anim('\tActualisation TEST_MAC-IP') for regle in iptables("-t nat -L TEST_MAC-IP -n").split('\n')[2:] : regle = regle.split() ip = regle[3] @@ -356,7 +356,7 @@ class firewall_crans : print OK def build_chaine(self,chaine, methode) : - self.anim = anim(' Chaîne %s' % chaine,len(self.__machines())+1) + self.anim = anim('\tChaîne %s' % chaine,len(self.__machines())+1) iptables("-F %s" % chaine) self.anim.cycle() def procedure() : @@ -437,7 +437,7 @@ class firewall_komaz(firewall_crans) : def reseaux_non_routables(self) : """ Construction de RESEAUX_NON_ROUTABLES_{DST,SRC} """ - self.anim = anim(' Filtrage ip non routables',len(self.liste_reseaux_non_routables)) + self.anim = anim('\tFiltrage ip non routables',len(self.liste_reseaux_non_routables)) for reseau in self.liste_reseaux_non_routables : iptables("-t nat -A RESEAUX_NON_ROUTABLES_DST -d %s -j DROP" % reseau) iptables("-t nat -A RESEAUX_NON_ROUTABLES_SRC -s %s -j DROP" % reseau) @@ -446,7 +446,7 @@ class firewall_komaz(firewall_crans) : print OK def nat_table(self) : - self.anim = anim(' Structure de la table nat') + self.anim = anim('\tStructure de la table nat') for chaine in [ 'TEST_MAC-IP', 'RESEAUX_NON_ROUTABLES_SRC', 'RESEAUX_NON_ROUTABLES_DST', 'TEST_VIRUS_FLOOD', 'LOG_VIRUS', 'LOG_FLOOD' ] : iptables('-t nat -N %s' % chaine) @@ -476,7 +476,7 @@ class firewall_komaz(firewall_crans) : print OK def filter_table_tweaks(self) : - self.anim = anim(' règles spécifiques à komaz') + self.anim = anim('\trègles spécifiques à komaz') for chaine in [ 'ADMIN_VLAN', 'EXT_VERS_SERVEURS', 'SERVEURS_VERS_EXT' , 'EXT_VERS_CRANS', 'CRANS_VERS_EXT', 'BLACKLIST_SRC', 'BLACKLIST_DST' , 'FILTRE_P2P' ] : iptables('-N %s' % chaine) iptables("-A FORWARD -i lo -j ACCEPT") @@ -497,7 +497,7 @@ class firewall_komaz(firewall_crans) : print OK def post_start_hook(self) : - self.anim = anim(" Mise en place routage") + self.anim = anim("\tMise en place routage") warn = '' for cmd in [ 'echo 1 > /proc/sys/net/ipv4/ip_forward' , 'echo 65536 > /proc/sys/net/ipv4/ip_conntrack_max' , @@ -514,7 +514,7 @@ class firewall_komaz(firewall_crans) : print OK def pre_stop_hook(self) : - self.anim = anim(" Arret routage") + self.anim = anim("\tArret routage") status,output=getstatusoutput('echo 0 > /proc/sys/net/ipv4/ip_forward') if status : print ERREUR @@ -544,7 +544,7 @@ class firewall_komaz(firewall_crans) : def log_chaines(self) : """ Construction des chaines de log (LOG_VIRUS et LOG_FLOOD) """ - self.anim = anim(' Création des chaines de log') + self.anim = anim('\tCréation des chaines de log') for filtre in [ 'VIRUS', 'FLOOD' ] : # Vidage de la chaîne iptables('-t nat -F LOG_%s' % filtre) @@ -557,7 +557,7 @@ class firewall_komaz(firewall_crans) : def test_virus_flood(self) : """ Construction de la chaîne TEST_VIRUS """ iptables('-t nat -F TEST_VIRUS_FLOOD') - self.anim = anim(' Filtrage virus et floods') + self.anim = anim('\tFiltrage virus et floods') for proto, ports in self.ports_virus.items() : for port in ports : @@ -599,7 +599,7 @@ class firewall_komaz(firewall_crans) : nounou_machines.append(machine.ip()) iptables("-A ADMIN_VLAN -j REJECT") - self.anim = anim(' Chaîne ADMIN_VLAN', len(nounou_machines)) + self.anim = anim('\tChaîne ADMIN_VLAN', len(nounou_machines)) for machine in nounou_machines : self.anim.cycle() iptables("-I ADMIN_VLAN -p tcp -s %s --dport ssh -j ACCEPT" % machine) @@ -672,7 +672,7 @@ class firewall_komaz(firewall_crans) : def blacklist(self): """ Construit les chaines de blackliste (BLACKLIST_{DST,SRC}) """ - self.anim = anim(" Blackliste") + self.anim = anim("\tBlackliste") iptables('-F BLACKLIST_DST') iptables('-F BLACKLIST_SRC') @@ -701,7 +701,7 @@ class firewall_komaz(firewall_crans) : def filtre_p2p(self): """ Construit la chaines de filtrage du p2p (FILTRE_P2P) """ - self.anim = anim(" Filtrage p2p") + self.anim = anim("\tFiltrage p2p") iptables('-F FILTRE_P2P') # On ne filtre que ce qui passe sur l'interface externe @@ -743,7 +743,7 @@ class firewall_zamok(firewall_crans) : eth_adm = "eth0.2" def serv_out_adm(self) : - self.anim = anim(' Output vers VLAN adm', len(self.adm_users)) + self.anim = anim('\tOutput vers VLAN adm', len(self.adm_users)) # Supression des éventuelles règles iptables("-t filter -F SERV_OUT_ADM") @@ -770,7 +770,7 @@ class firewall_zamok(firewall_crans) : print OK def nat_table(self) : - self.anim = anim(' Structure de la table nat') + self.anim = anim('\tStructure de la table nat') iptables('-t nat -N TEST_MAC-IP') iptables('-t filter -N SERV_OUT_ADM') @@ -799,7 +799,7 @@ class firewall_zamok(firewall_crans) : self.serv_out_adm() def filter_table_tweaks(self) : - self.anim = anim(' regles specifiques a zamok') + self.anim = anim('\tRegles specifiques a zamok') iptables("-P INPUT ACCEPT") iptables("-P FORWARD DROP") print OK @@ -826,7 +826,7 @@ class firewall_rouge(firewall_crans) : eth_adm = "eth0.2" def nat_table(self) : - self.anim = anim(' Structure de la table nat') + self.anim = anim('\tStructure de la table nat') iptables('-t nat -N TEST_MAC-IP') iptables("-t nat -P PREROUTING ACCEPT") @@ -842,7 +842,7 @@ class firewall_rouge(firewall_crans) : print OK def filter_table_tweaks(self) : - self.anim = anim(' regles specifiques a rouge') + self.anim = anim('\tRegles specifiques a rouge') iptables("-P INPUT ACCEPT") iptables("-P FORWARD DROP") print OK @@ -868,7 +868,7 @@ class firewall_vert(firewall_crans) : eth_pub = "eth0" def nat_table(self) : - self.anim = anim(' Structure de la table nat') + self.anim = anim('\tStructure de la table nat') iptables('-t nat -N TEST_MAC-IP') iptables("-t nat -P PREROUTING ACCEPT") @@ -884,7 +884,7 @@ class firewall_vert(firewall_crans) : print OK def filter_table_tweaks(self) : - self.anim = anim(' regles specifiques a vert') + self.anim = anim('\tRegles specifiques a vert') iptables("-P INPUT ACCEPT") iptables("-P FORWARD DROP") print OK diff --git a/gestion/gen_confs/generate.py b/gestion/gen_confs/generate.py index 1cfa787a..0f187f4b 100755 --- a/gestion/gen_confs/generate.py +++ b/gestion/gen_confs/generate.py @@ -306,17 +306,17 @@ if __name__ == '__main__': elif opt == '--reconnect': # Personnes à reconnecter print 'Recherche des personnes en fin de sanction...' - hier = strftime('%d/%m/%Y %H:%M'.split()[0], localtime(time() - 60*60*24)) - c = db.search('blacklist=*,%s*' % hier) + c = db.search('blacklist=*') services = [] + hier = time() - 24*3600 for a_reco in c['adherent'] + c['machine'] + c['club']: for bl in a_reco.blacklist(): - fin, sanction = bl.split(',')[1:3] - if fin.split()[0] == hier and sanction not in services: + fin, sanction = bl.split('$')[1:3] + if fin > hier and sanction not in services: services.append(sanction) for s in services: print "Ajout de blacklist_%s pour reconfiguration" % s - db.services_to_restart('blacklist_%s' % s.encode()) + db.services_to_restart('blacklist_%s' % s) sys.exit(0) elif opt == '--add': diff --git a/surveillance/deconnexion.py b/surveillance/deconnexion.py index 7445d91d..45ac42a5 100755 --- a/surveillance/deconnexion.py +++ b/surveillance/deconnexion.py @@ -61,10 +61,14 @@ def generate_ps(sanction, proprio): template = template.replace('~mail~', proprio.email().encode('iso8859-15')) template = template.replace('~debut~', strftime(format_date, localtime())) template = template.replace('~fin~', strftime(format_date, localtime(time()+14*86400))) - historique = [ bl.encode('iso-8859-15').split(',') for bl in proprio.blacklist() if bl.split(',')[2] == 'autodisc_upload' ] # filtrage des autodisc - historique = [ (strftime('%A %d %B %Y', strptime(bl[0], '%d/%m/%Y %H:%M')), bl[-1].split(' ')[-2]) for bl in historique ] # transfomation en tupple (date, upload) - historique = [ '%s & %s & Mo'%(bl[0], bl[1]) for bl in historique ] # tranformation en ligne - historique = '\\\\\n'.join(historique) # assemblage des lignes + # filtrage des autodisc + historique = [ bl.encode('iso-8859-15').split('$') for bl in proprio.blacklist() if bl.split('$')[2] == 'autodisc_upload' ] + # transfomation en tuple (date, upload) + historique = [ (strftime('%A %d %B %Y', localtime(int(bl[0]))), bl[-1].split(' ')[-2]) for bl in historique ] + # tranformation en ligne + historique = [ '%s & %s & Mo'%(bl[0], bl[1]) for bl in historique ] + # assemblage des lignes + historique = r'\\\n'.join(historique) template = template.replace('~historique~', historique) template = template.replace('~limitehard~', str(upload.hard)) template = template.replace('~nbadher~', str(len(ldap.search('paiement=ok')['adherent']))) @@ -219,9 +223,9 @@ for elupload, eltype, elid in uploadeurs: # On sanctionne ############### - debut = localtime(time()) - fin = localtime(time()+60*60*24) - proprio.blacklist(["%.2d/%.2d/%.4d %.2d:%.2d" % (debut[2], debut[1], debut[0], debut[3], debut[4]), "%.2d/%.2d/%.4d %.2d:%.2d" % (fin[2], fin[1], fin[0], fin[3], fin[4]), 'autodisc_upload', "Déconn auto. %s Mo" % elupload]) + debut = int(time()) + fin = debut + 24*3600 + proprio.blacklist([debut, fin, 'autodisc_upload', "Déconn auto. %s Mo" % elupload]) proprio.save() # On envoie un mail à l'adhérent @@ -239,7 +243,7 @@ for elupload, eltype, elid in uploadeurs: # Vérification du nombre de déconnexions ######################################### - nb_decos = len([ x for x in proprio.blacklist() if mktime(strptime(x.split(',')[0], '%d/%m/%Y %H:%M')) > mktime(localtime())-30*24*60*60 and x.split(',')[2] == 'autodisc_upload' ]) + nb_decos = len([ x for x in proprio.blacklist() if int(x.split('$')[0]) > time()-30*24*3600 and x.split('$')[2] == 'autodisc_upload' ]) if nb_decos >= 3: # Génération du fichier postscript @@ -329,7 +333,7 @@ for ip, nombre in infectes: index = [blacklist.index(x) for x in blacklist if 'virus' in x ] if index: # L'adhérent est déjà blacklisté - proprio.blacklist(( index[0] , ['now', '-', 'virus', hostname] )) + proprio.blacklist((index[0], ['now', '-', 'virus', hostname])) proprio.save() else: # L'adhérent n'est pas encore blacklisté @@ -367,10 +371,10 @@ for ip, nombre in infectes: curseur.execute(requete) # On récupère les index des lignes de bl où il y a marqué virus - index = [blacklist.index(x) for x in blacklist if 'virus' in x ] + index = [ blacklist.index(x) for x in blacklist if 'virus' in x ] if index: # L'adhérent est déjà blacklisté - proprio.blacklist(( index[0] , ['now', '-', 'virus', hostname] )) + proprio.blacklist((index[0], ['now', '-', 'virus', hostname])) proprio.save() else: # L'adhérent n'est pas encore blacklisté @@ -410,8 +414,8 @@ for IP in infectes: # 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(',') + if '$-$virus$%s' % hostname in ligne: + liste = ligne.split('$') argument = [liste[0], 'now', liste[2], liste[3]] index = bl.index(ligne) proprio.blacklist((index, argument)) @@ -480,7 +484,7 @@ for ip, id_p2p, nombre in fraudeurs: # Vérification du nombre de déconnexions ######################################### - nb_decos = len([ x for x in proprio.blacklist() if mktime(strptime(x.split(',')[0], '%d/%m/%Y %H:%M')) > mktime(localtime())-365*24*60*60 and x.split(',')[2] == 'autodisc_p2p' ]) + 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: fichier_ps = generate_ps('p2p', proprio) @@ -494,6 +498,6 @@ for ip, id_p2p, nombre in fraudeurs: mail.sendmail(p2p.expediteur, p2p.expediteur, corps) # L'adhérent n'est pas encore blacklisté - fin = localtime(time()+60*60*24) - proprio.blacklist(['now', "%.2d/%.2d/%.4d %.2d:%.2d" % (fin[2], fin[1], fin[0], fin[3], fin[4]), 'autodisc_p2p', hostname]) + fin = int(time()) + 24*3600 + proprio.blacklist(['now', fin, 'autodisc_p2p', hostname]) proprio.save()