Commit 2ce18572 authored by Vincent Le gallic's avatar Vincent Le gallic

Éclatement de config.py en plusieurs sous-module de config. L'API reste à peu...

É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.
parent 51a3e7e8
......@@ -47,8 +47,6 @@ archive
gestion/logreader/
lc_ldap/
wifi_new/
# Devrait être remplacé par l'intranet2
intranet/
# rebuts
......@@ -64,6 +62,7 @@ var/
monit
squid/errors/
surveillance/mac_prises/output/
doc/build/
# etat_* de la connexion de secours
secours/etat_*
......@@ -23,6 +23,7 @@ Les commandes sont :
import sys, os, re
sys.path.append('/usr/scripts/gestion')
import config
import config.mails
from email_tools import send_email, parse_mail_template
# Fonctions d'affichage
......@@ -142,7 +143,7 @@ def spammer():
to = adh.email()
print to
if not debug:
data = config.txt_charte_MA % {'From' : u"ca@crans.org", 'To' : to}
data = config.mails.txt_charte_MA % {'From' : u"ca@crans.org", 'To' : to}
connexion.sendmail("ca@crans.org",to,data.encode('iso-8859-15'))
def __usage(message=None):
......
......@@ -32,7 +32,7 @@ __version__ = '1'
import sys, syslog, os.path
sys.path.append('/usr/scripts/gestion')
import config
import config.impression
import cout
from crans.utils import QuoteForPOSIX as escapeForShell
import crans.utils.logs
......
......@@ -19,7 +19,9 @@ import os
import config
year = config.ann_scol
delai = config.upload.demenagement_delai
delai = config.demenagement_delai
import config.mails.demenagement
# On récupère ceux qui n'ont pas payé cette année
bad_boys_e_s = conn.search('chbre=????&paiement=%d&paiement!=%d' % (year-1,year))['adherent']
......@@ -49,7 +51,7 @@ for clandestin in bad_boys_e_s:
to = clandestin.mail()
if not "@" in to:
to += "@crans.org"
mail = config.upload.message_demenagement % {"from" : "respbats@crans.org",
mail = config.mails.demenagement.message_demenagement % {"from" : "respbats@crans.org",
"chambre" : exchambre,
"jours" : int(ttl/86400) + 1,
"to" : to}
......
This diff is collapsed.
# -*- python -*-
# -*- coding: utf-8 -*-
# Généré par gestion/extractionbcfg2.py sur bcfg2, à partir de Metadata/groups.xml
# Fichier obsolète (backward comp ftw)
adm_only = []
role = {'zamok': ['adherents-server'], 'dyson': ['sniffer'], 'titanic': ['failover-proxy'], 'komaz': ['wifi-router', 'appt-proxy', 'main-router'], 'dhcp': ['appt-proxy'], 'ovh': ['externe'], 'routeur': ['appt-proxy']}
#!/usr/bin/python
# -*- coding: utf-8 -*-
# © Olivier Huber, 2010
# Licence MIT
""" Ce script va chercher la correspondance entre des attributs et des serveurs"""
from lxml import etree
template = """# -*- python -*-
# -*- coding: utf-8 -*-
# Généré par gestion/extractionbcfg2.py sur bcfg2, à partir de Metadata/groups.xml
adm_only = %(adm_list)s
role = %(role_dict)s
"""
srvDict = { 'external' : [],
'connection-main' : [],
'failover-proxy-server' : [],
'vlan-ens' : [],
'users' : [],
'sniffer' : [],
'router-wifi' : []
}
tr = { 'external' : 'externe',
'connection-main' : 'main-router',
'vlan-ens' : 'appt-proxy',
'failover-proxy-server' : 'failover-proxy',
'router-wifi' : 'wifi-router',
'users' : 'adherents-server',
'sniffer' : 'sniffer'
}
fin = open('/var/lib/bcfg2/Metadata/groups.xml')
# La gestion des exceptions est laissée en exercice pour ceux qui vont
# casser Metadata/groups.xml
parsedGroups = etree.parse(fin)
for key in srvDict.keys():
srvDict[key] = parsedGroups.xpath('//Group[@name="%s"]/../@name' % key)
if srvDict[key] == []:
print "Erreur, il n'y a pas de serveur associé à l'attribut %s" % key
exit(1)
# On cherche les serveurs qui sont seulement sur le vlan adm
admOnly = parsedGroups.xpath('//Group[@name="adm-only"]/../@name')
fin.close()
out = {}
for key, values in srvDict.items():
for value in values:
if value in out.keys():
out[value].append(tr[key])
else:
out[value] = [tr[key]]
fout = open('/usr/scripts/gestion/config_srv.py', 'w')
fout.write(template % {'adm_list': admOnly.__str__(), 'role_dict' : out.__str__()})
fout.close()
......@@ -8,6 +8,7 @@ import smtplib, sys, commands, shutil, os, traceback
sys.path.append('/usr/scripts/gestion')
from affich_tools import cprint, anim, OK, WARNING, ERREUR
import config
import config.mails
from time import strftime
from ldap_crans import hostname, crans_ldap
......@@ -172,7 +173,7 @@ class mail_bienvenue:
else:
To += '@crans.org'
conn=smtplib.SMTP('localhost')
conn.sendmail(From, To, config.txt_mail_bienvenue.encode('utf-8') % { 'From': From, 'To': To })
conn.sendmail(From, To, config.mails.txt_mail_bienvenue.encode('utf-8') % { 'From': From, 'To': To })
conn.quit()
print OK
except Exception, c:
......@@ -198,11 +199,11 @@ class mail_ajout_droits:
To = login
if To.find('@') == -1: To += '@crans.org'
print Droit +"\n"
if Droit in config.pages_infos_droits:
if Droit in config.mails.pages_infos_droits:
print "envoi du mail"
Page = config.pages_infos_droits[Droit.encode('utf-8')]
Page = config.mails.pages_infos_droits[Droit.encode('utf-8')]
conn=smtplib.SMTP('localhost')
conn.sendmail(From, To, config.txt_ajout_droits.encode('utf-8') % { 'From': From, 'To': To , 'Droit': Droit, 'Page': Page})
conn.sendmail(From, To, config.mails.txt_ajout_droits.encode('utf-8') % { 'From': From, 'To': To , 'Droit': Droit, 'Page': Page})
conn.quit()
print OK
else:
......
......@@ -12,6 +12,7 @@ from socket import gethostname
from gen_confs import gen_config
import config
import config.dns
from iptools import AddrInNet, AddrInNets
import ip6tools
......
......@@ -35,7 +35,7 @@ from ldap_crans import AssociationCrans, Machine, MachineWifi, BorneWifi
from affich_tools import *
from commands import getstatusoutput
from iptools import AddrInNet, NetSubnets, IpSubnet
from config import NETs, mac_komaz, mac_wifi, mac_titanic, mac_g, conf_fw, p2p, vlans, debit_max_radin, adm_users
from config import NETs, mac_komaz, mac_wifi, mac_titanic, conf_fw, p2p, vlans, debit_max_radin, adm_users
syslog.openlog('firewall')
debug = 1
......
......@@ -25,9 +25,8 @@ import sys, re, os, pwd
sys.path.append('/usr/scripts/gestion')
from ldap_crans import hostname
from config import conf_fw, rid, prefix, role, file_pickle, open_ports
from config import conf_fw, rid, prefix, role, file_pickle, open_ports, p2p
from config import authorized_icmpv6, mac_wifi, adm_only, adm_users
from config import udp_torrent_tracker
from ipt import *
# On invoque Ip6tables
......@@ -43,7 +42,7 @@ Usage:
""" % { 'script' : sys.argv[0].split('/')[-1] }
def tracker_torrent(ip6tables):
for tracker in udp_torrent_tracker:
for tracker in p2p.udp_torrent_tracker:
for dest in gethostbyname(tracker)[1]:
ip6tables.filter.tracker_torrent('-p udp -d %s -j LOG --log-level notice --log-prefix "TRACKER:%s "' % (dest,(tracker[:20]) if len(tracker) > 20 else tracker))
ip6tables.filter.tracker_torrent('-p udp -d %s -j REJECT --reject-with icmp6-adm-prohibited' % dest)
......
......@@ -37,7 +37,7 @@ from ldap_crans import AssociationCrans, Machine, MachineWifi, BorneWifi
from affich_tools import *
from commands import getstatusoutput
from iptools import AddrInNet, NetSubnets, IpSubnet
from config import NETs, mac_komaz, mac_wifi, mac_titanic, mac_g, conf_fw, p2p, vlans, debit_max_radin, adm_users, accueil_route, blacklist_sanctions, blacklist_sanctions_soft, periode_transitoire, udp_torrent_tracker
from config import NETs, mac_komaz, mac_wifi, mac_titanic, conf_fw, p2p, vlans, debit_max_radin, adm_users, accueil_route, blacklist_sanctions, blacklist_sanctions_soft, periode_transitoire
from ipset import IpsetError, Ipset
from lc_ldap import lc_ldap
from ipt import gethostbyname
......@@ -1240,7 +1240,7 @@ class firewall_komaz(firewall_crans) :
iptables('-A FILTRE_P2P -m ipp2p --%s -j REJECT --reject-with icmp-admin-prohibited' % filtre[0])
self.anim.cycle()
#on rejetes les trackeur udp les plus connus
for tracker in udp_torrent_tracker:
for tracker in p2p.udp_torrent_tracker:
for dest in gethostbyname(tracker)[0]:
iptables('-A FILTRE_P2P -p udp -d %s -j LOG --log-level notice --log-prefix "TRACKER:%s "' % (dest,(tracker[:20]) if len(tracker) > 20 else tracker))
iptables('-A FILTRE_P2P -p udp -d %s -j REJECT --reject-with icmp-admin-prohibited' % dest)
......
......@@ -21,7 +21,6 @@ from ldap_crans import crans_ldap, hostname
from lock import *
from affich_tools import anim, cprint, OK
from time import localtime, strftime, time, sleep
import config
import ridtools
from inspect import getargspec
from syslog import *
......
......@@ -23,7 +23,6 @@ import commands
import lock
import lc_ldap
import config
import secrets
class IpsetError(Exception):
......
......@@ -22,8 +22,6 @@
import netaddr
import config
def mac_to_ipv6(ipv6_prefix, mac_address):
"""Convert a MAC address (EUI48) to an IPv6 (prefix::EUI64)."""
......
......@@ -15,7 +15,7 @@ import ldap, ldap.modlist, ldap_passwd
import netaddr
import annuaires_pg as annuaires
import config, iptools, ip6tools, cPickle, config_mail
import config, config.impression, iptools, ip6tools, cPickle, config_mail
from chgpass import chgpass
from affich_tools import coul, prompt, cprint
from email_tools import send_email
......
......@@ -33,7 +33,6 @@ import time
# Fin
import sys, tempfile, os, commands, shutil, syslog, stat
sys.path.append('/usr/scripts/gestion')
import config
from crans.utils import QuoteForPOSIX as escapeForShell
def __init__():
pass
......@@ -43,7 +42,7 @@ def __init__():
# ########################################################### #
#
#
import config
import config.impression
COUT_UNITE_COULEUR = config.impression.c_coul
COUT_UNITE_NOIRE = config.impression.c_noir
COUT_PASSAGE_TAMBOUR_NOIR = config.impression.c_tambour_noir
......
......@@ -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)
......@@ -18,7 +18,7 @@ import sys, os
import psycopg2
sys.path.append('/usr/scripts/gestion')
sys.path.append('/usr/scripts/surveillance')
import config
import config.virus
import smtplib
import socket
import time, random, hashlib
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment