Éclatement de config.py. Quand on git add les fichiers, c'est mieux.

This commit is contained in:
Vincent Le Gallic 2013-03-26 16:59:15 +01:00
parent 076f466fdb
commit e042224b6b
17 changed files with 1013 additions and 0 deletions

0
gestion/__init__.py Normal file
View file

View file

@ -0,0 +1,5 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from config import *

300
gestion/config/config.py Normal file
View file

@ -0,0 +1,300 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
""" Définition de variables de configuration et de comportement des scripts Cr@ns """
import time
import datetime
# Fichier généré à partir de bcfg2
from config_srv import adm_only, role
##### Gestion des câblages
# Selon la date, on met :
# -ann_scol : Année scolaire en cours
# -periode_transitoire : on accepte ceux qui ont payé l'année dernière
# Ne modifier que les dates !
dat = time.localtime()
if dat[1] < 8 or dat[1] == 8 and dat[2] < 16:
# Si pas encore début août, on est dans l'année précédente
ann_scol = dat[0]-1
periode_transitoire = False
# sinon on change d'année
elif dat[1] < 10 or (dat[1] == 10 and dat[2] < 4):
# Si pas encore octobre, les gens ayant payé l'année précédente sont
# acceptés
ann_scol = dat[0]
periode_transitoire = True
else:
# Seulement ceux qui ont payé cette année sont acceptés
ann_scol = dat[0]
periode_transitoire = False
## Bloquage si carte d'étudiants manquante pour l'année en cours
# /!\ Par sécurité, ces valeurs sont considérées comme False si
# periode_transitoire est True
# Soft (au niveau du Squid)
bl_carte_et_actif = True
# Hard (l'adhérent est considéré comme paiement pas ok)
bl_carte_et_definitif = True
#Sursis pour les inscription après le 1/11 pour fournir la carte étudiant
sursis_carte=8*24*3600
# Gel des cableurs pas a jour de cotisation
# Les droits ne sont pas retires mais il n'y a plus de sudo
bl_vieux_cableurs = False
##Création de comptes
# Gid des comptes créés
gid=100
club_gid=120
# Shell
login_shell='/bin/zsh'
club_login_shell='/usr/bin/rssh'
# Longueur maximale d'un login
maxlen_login=15
# Quels droits donnent l'appartenance à quel groupe Unix ?
droits_groupes = {'adm' : [u'Nounou'],
'respbats' : [u'Imprimeur', u'Cableur', u'Nounou'],
'moderateurs' : [u'Moderateur'],
'disconnect' : [u'Bureau'],
'imprimeurs' : [u'Imprimeur', u'Nounou', u'Tresorier'],
'bureau' : [u'Bureau'],
'webadm' : [u'Webmaster'],
'webradio' : [u'Webradio'],
}
####### Les ML
# Le + devant un nom de ML indique une synchronisation
# ML <-> fonction partielle : il n'y a pas d'effacement automatique
# des abonnés si le droit est retiré
droits_mailing_listes = {'roots' : [ u'Nounou', u'Apprenti'],
'mailman' : [ u'Nounou'],
'+nounou' : [ u'Nounou', u'Apprenti'],
'respbats' : [ u'Cableur', u'Nounou', u'Bureau'],
'+moderateurs' : [ u'Moderateur', u'Bureau'],
'+disconnect' : [ u'Nounou', u'Bureau'],
'+impression' : [ u'Imprimeur'],
'bureau' : [u'Bureau'],
'tresorier' : [u'Tresorier'],
'+ca' : [u'Bureau', u'Apprenti', u'Nounou', u'Cableur'],
'+federez' : [u'Bureau', u'Apprenti', u'Nounou'],
'+install-party' : [u'Bureau', u'Apprenti', u'Nounou'],
# Correspondance partielle nécessaire... Des adresses non-crans sont inscrites à ces ML.
'+dsi-crans' : [u'Nounou', u'Bureau'],
'+crous-crans' : [u'Nounou', u'Bureau'],
'+wrc' : [u'Webradio'],
}
#: Répertoire de stockage des objets détruits
cimetiere = '/home/cimetiere'
#: Adresses mac utiles
mac_komaz = '00:19:BB:31:3B:80'
mac_wifi = '00:0f:1f:66:e0:e8'
mac_titanic = 'aa:73:65:63:6f:76'
#: Serveur principal de bcfg2
bcfg2_main = "bcfg2.adm.crans.org"
#: Fichier de mapping lun/nom de volume iscsi
ISCSI_MAP_FILE = "/usr/scripts/var/iscsi_names.py"
ISCSI_MAP_FILE_TEMPLATE = "/usr/scripts/var/iscsi_names_%s.py"
#: Algorithmes de hashage pour le champ SSHFP
# format : { algorithm : (IANA_id, ssh_algo) }
# où algorithm est tel qu'il apparait dans les fichiers /etc/ssh/ssh_host_%s_key.pub % algorithm
# IANA_id correspond à l'entier attribué par l'IANA pour l'algorithm dans les champs DNS SSHFP
# ssh_algo correspond a la première chaine de caractères donnant le nom de l'algorithme de chiffrement lorsque la clef ssh est dans le format openssh (algo key comment)
sshfp_algo = {
"rsa" : (1, "ssh-rsa"),
"dsa" : (2, "ssh-dss"),
}
sshkey_max_age=2*(365.25*24*3600)
sshkey_size = {
'rsa':4096,
'dsa':1024,
}
#: Nombre de jours après le passage en chambre ???? où on supprime les machines
demenagement_delai = 8
#############################
## Paramètres des machines ##
#############################
## >>>>>>>>>>>>>>> La modification des paramètres suivants doit se
## >> ATTENTION >> faire avec précaution, il faut mettre la base à
## >>>>>>>>>>>>>>> jour en parralèle de ces modifs.
# Sous réseaux alloués à chaque type de machine ou bâtiment
# Pour la zone wifi, il faut penser à modifier le /etc/network/interfaces
# de sable, zamok et komaz pour ajouter les zones en plus (et de
# faire en sorte qu'ils prennent effet immédiatement ; c'est important pour
# komaz car c'est la route par défaut mais aussi pour zamok et sable
# à cause de leur firewall et de leur patte wifi.
_filaire_adh = [ '138.231.137.0/24', '138.231.138.0/24', '138.231.139.0/24','138.231.140.0/22' ]
NETs = { 'serveurs' : [ '138.231.136.0/24' ],
'adherents' : _filaire_adh,
'bornes' : [ '138.231.148.0/24' ],
'adm' : [ '10.231.136.0/24' ],
'wifi-adh' : [ '138.231.144.0/24', '138.231.145.0/24', '138.231.146.0/24',
'138.231.147.0/24', '138.231.149.0/24', '138.231.150.0/24', '138.231.151.0/24' ],
'fil' : [ '138.231.136.0/21' ],
'gratuit': [ '10.42.0.0/16' ],
'wifi': [ '138.231.144.0/21' ],
'accueil': ['10.51.0.0/16' ],
'isolement': ['10.52.0.0/16' ],
'personnel-ens': ['10.2.9.0/24' ],
'ens' : ['138.231.135.0/24'],
'all' : [ '138.231.136.0/21', '138.231.144.0/21' ],
'multicast' : ['239.0.0.0/8'],
}
NETs_regexp = { 'all' : '^138\.231\.1(3[6789]|4[0123456789]|5[01])\.\d+$' }
# Classes de rid
# Merci d'essayer de les faire correspondre avec les réseaux
# ci-dessus...
rid = {
# Rid pour les machines fixes
'fil' : (256, 2047),
# Rid pour les machines wifi
'wifi' : (2048, 4095),
# Rid pour les machines du vlan adm
'adm' : (51200, 53247),
# Rid pour les machines des personnels ens
'personnel-ens' : (55296, 55551),
# Mid pour les machines du vlan gratuit
'gratuit' : (53248, 55295),
# Rid pour machines spéciales
'special' : (4096, 6143),
# Rid pour les filaires v6-only
'fil-v6' : (16384, 24575),
# Rid pour les wifi v6-only
'wifi-v6' : (24576, 32767),
# Rid pour les serveurs
'serveurs' : (0, 255),
}
# rid pour les machines spéciales (classe 'special' ci-dessus)
rid_machines_speciales = {
# freebox.crans.org
4096: '82.225.39.54',
# ovh.crans.org
4097: '91.121.84.138',
}
ipv6_machines_speciales = {
# freebox
4096: 'fe80::210:5aff:feaf:a979',
# ovh
4097: 'fe80::219:d1ff:fea2:b611',
}
# Les préfixes ipv6
prefix = { 'subnet' : [ '2a01:240:fe3d::/48' ],
'serveurs' : [ '2a01:240:fe3d:4::/64'],
'fil' : [ '2a01:240:fe3d:4::/64' ],
'adm' : [ '2a01:240:fe3d:c804::/64' ],
'wifi' : [ '2a01:240:fe3d:c04::/64' ],
'fil-v6' : [ '2a01:240:fe3d:4::/64' ],
'wifi-v6' : [ '2a01:240:fe3d:c04::/64' ],
'personnel-ens' : [ '2a01:240:fe3d:4::/64' ],
'sixxs2' : [ '2a01:240:fe00:68::/64' ],
'evenementiel' : [ '2a01:240:fe3d:d2::/64' ],
}
# Domaines dans lesquels les machines sont placées suivant leur type
domains = { 'machineFixe': 'crans.org',
'machineCrans': 'crans.org',
'machineWifi': 'wifi.crans.org',
'borneWifi': 'wifi.crans.org' }
# VLans
vlans = {
# VLan d'administration
'adm' : 2,
# VLan pour le wifi
'wifi' : 3,
# VLan pour le wifi de l'ens
'hotspot' : 4,
# VLan des gens qui paient
'adherent' : 1,
# VLan des inconnus
'accueil' : 7,
# VLan de la connexion gratuite
'gratuit' : 6,
'radin' : 6,
# Vlan isolement
'isolement' : 9,
# Vlan de tests de chiffrement DSI
'chiffrement': 11,
# VLan des appartements de l'ENS
'appts': 21,
# Vlan evenementiel (install-party, etc)
'event': 10,
# Vlan zone routeur ens (zrt)
'zrt': 1132
}
filter_policy = { 'komaz' : { 'policy_input' : 'ACCEPT',
'policy_forward' : 'ACCEPT',
'policy_output' : 'ACCEPT'
},
'zamok' : { 'policy_input' : 'ACCEPT',
'policy_forward' : 'DROP',
'policy_output' : 'ACCEPT'
},
'default' : { 'policy_input' : 'ACCEPT',
'policy_forward' : 'ACCEPT',
'policy_output' : 'ACCEPT'
}
}
# Cf RFC 4890
authorized_icmpv6 = ['echo-request', 'echo-reply', 'destination-unreachable',
'packet-too-big', 'ttl-zero-during-transit', 'parameter-problem']
output_file = { 4 : '/tmp/ipt_rules',
6 : '/tmp/ip6t_rules'
}
file_pickle = { 4 : '/tmp/ipt_pickle',
6 : '/tmp/ip6t_pickle'
}
blacklist_sanctions = ['upload', 'warez', 'p2p', 'autodisc_p2p','autodisc_virus','virus','autodisc_upload', 'bloq']
blacklist_sanctions_soft = ['autodisc_virus','ipv6_ra','mail_invalide','virus',
'upload', 'warez', 'p2p', 'autodisc_p2p', 'autodisc_upload', 'bloq','carte_etudiant','chambre_invalide']
adm_users = [ 'root', 'identd', 'daemon', 'postfix', 'freerad', 'amavis',
'nut', 'respbats', 'list', 'sqlgrey', 'ntpd', 'lp' ]
open_ports = { 'tcp' : '22' }
# Debit max sur le vlan de la connexion gratuite
debit_max_radin = 1000000
debit_max_gratuit = 1000000
###############################
## Vlan accueil et isolement ##
###############################
accueil_route = {
'138.231.136.1':{'tcp':['80','443'],'hosts':['intranet.crans.org']},
'138.231.136.67':{'tcp':['80','443'],'hosts':['www.crans.org', 'wiki.crans.org', 'wifi.crans.org']},
'138.231.136.98':{'tcp':['20','21','80','111','1024:65535'],'udp':['69','1024:65535'], 'hosts':['ftp.crans.org']},
'138.231.136.130':{'tcp':['80','443'],'hosts':['intranet2.crans.org']},
'138.231.136.18':{'tcp':['80','443'],'hosts':['cas.crans.org', 'login.crans.org', 'auth.crans.org']},
}

View file

@ -0,0 +1,9 @@
# -*- 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']}

43
gestion/config/dns.py Normal file
View file

@ -0,0 +1,43 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
""" Variables de configuration pour la gestion du DNS """
#: ariane et ariane2 pour la zone parente
parents = [
'138.231.176.4',
'138.231.176.54',
]
#: DNS master
master = '10.231.136.9'
#: DNS slaves (ovh et titanic /aka/ freebox)
slaves = [
'10.231.136.8', # ovh
'10.231.136.14', # titanic aka freebox
]
#: DNS master de la zone tv
master_tv = master
#: DNS slaves de la zone tv
slaves_tv = slaves
#: DNS en connexion de secours
secours_relay='10.231.136.14';
# résolution directe
zones_direct = [ 'crans.org', 'crans.ens-cachan.fr', 'wifi.crans.org', 'ferme.crans.org' , 'clubs.ens-cachan.fr', 'adm.crans.org','crans.eu','wifi.crans.eu', 'tv.crans.org' ]
# Zones signée par opendnssec sur le serveur master
zones_dnssec = [
'crans.org', 'v6.crans.org', 'wifi.crans.org', 'wifi.v6.crans.org', 'adm.crans.org', 'adm.v6.crans.org', 'ferme.crans.org', 'ferme.v6.crans.org',
'tv.crans.org', 'crans.eu','wifi.crans.eu','v6.crans.eu','wifi.v6.crans.eu'
]
# Zones alias pour les enregistrements A AAAA CNAME TXT et SSHFP
zone_alias = {
'crans.org' : ['crans.eu'],
'wifi.crans.org' : ['wifi.crans.eu'],
}
# Résolution inverse
zones_reverse = NETs["all"] + NETs["adm"] + NETs["personnel-ens"] + NETs['multicast']
zones_reverse_v6 = prefix['fil'] + prefix['wifi'] + prefix ['adm'] + prefix['personnel-ens'] # à modifier aussi dans bind.py
recursiv = ['138.231.136.98', '138.231.136.247'] # charybde et gordon

View file

@ -0,0 +1,67 @@
#!/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()

View file

@ -0,0 +1,30 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
""" Variables de configuration pour le firewall """
import datetime
#: Pour marquer les paquets
mark = { 'https-radin': '0x3',
'https-gratuit' : '0x3',
'proxy' : '0x2',
'secours' : '0x4',
'bittorrent' : '0x1' }
#: Valeur du masque utilisé pour créer un arbre dans les filtres
mask = [24]
# Empiriquement, 95 correspond à un débit de 100Mbit/s
# sur des outils tels que munin
now=datetime.datetime.now()
if now.hour >= 6 and now.hour < 19 and now.weekday() < 5:
#: Débit maximal autorisé
debit_max = 95 * 1024 / 8 # kbytes per second en connexion de jour
#: Est-ce qu'on est en connexion de jour ou de nuit/week-end ?
debit_jour = True
else:
#: Débit maximal autorisé
debit_max = 500 * 1024 / 8 # connexion de nuit et du week-end
#: Est-ce qu'on est en connexion de jour ou de nuit/week-end ?
debit_jour = False

View file

@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
""" Définition des variables d'impression utilisées par les scripts, l'intranet… """
#: L'imprimante utilisée
imprimante = "canon"
#: Découvert autorisé (en euro)
decouvert = 0.
## Variables de prix (tout est exprimé en centimes)
#: Coût de l'imprimante : 2024 euros pour 30 mois - 19136 euros de partenariat.
#:
#: 5 000 pages par mois.
#: Donc ammortissement : 1.3493 centimes par pages.
amm = 1.3493
#: Coût d'une feuille A4 : 25.06 euros les 2500 feuilles
c_a4 = 1.0024 + amm
#: Coût d'une feuille A3 : 53.76 euros les 2500 feuilles
c_a3 = 2.1504 + amm
#: Coût d'un transparent : 15.85 euros les 100 transparents
c_trans = 15.85 + amm
#: Coût d'impression d'une face en couleur
c_face_couleur = 9.4484
#: Coût d'impression d'une face en noir & blanc
c_face_nb = 0.9568
#: Prix d'une agrafe : 200 euros les 15 000
c_agrafe = 1.3333
### Fin des variables de prix
#: L'adresse mail de l'imprimante
From_imprimante = 'impression@crans.org'
#: Informations supplémentaires sur l'état de l'imprimante, affichée sur l'intranet
state_msg = [u"L'impression recto/verso (ou livret) A3 est déconseillée"]

View file

@ -0,0 +1,52 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
""" Variables de configuration pour mac_prises. """
#: Pour spammer, mettre à true.
hargneux = True
#: Si pour une chambre donnée, il y a plus de 300 entrées filaires
#: n'appartenant pas à l'adhérent propriétaire de la mac, on prévient.
max_inconnues_par_jour = 300
#: Titre utilisé dans le corps du message
titre_mac_inconnue = u"Repérage de macs potentiellement non désirées dans les chambres suivantes."
#: Pour la recherche dans postgres
delay = { 'instant': '2 min',
'heuristique': '30 min',
'journalier': '1 day',
}
#: Contient trois dictionnaire. Le paramètre mac signifie "combien de chambres doivent voir la même mac pour que ça soit suspect"
#: Le paramètre chambre signifie "combien de macs doivent traverser une même chambre pour que ça soit suspect"
suspect = { 'instant':{'mac': 2, 'chambre': 2},
'heuristique':{'mac': 2, 'chambre': 2},
'journalier':{'mac': 2, 'chambre': 2},
}
#: Contient trois dictionnaire. Le paramètre mac signifie "combien de chambres doivent voir la même mac pour que ça soit très suspect"
#: Le paramètre chambre signifie "combien de macs doivent traverser une même chambre pour que ça soit très suspect"
tres_suspect = { 'instant':{'mac': 3, 'chambre': 3},
'heuristique':{'mac': 3, 'chambre': 3},
'journalier':{'mac': 3, 'chambre': 3},
}
#: Le point central des analyses.
rapport_suspect = { 'instant':{'mac': 0.51, 'chambre': 0.51},
'heuristique':{'mac': 0.4, 'chambre': 0.55},
'journalier':{'mac': 0.2, 'chambre': 0.58},
}
#: Titre des paragraphes suspects
titre_suspect = { 'instant':{'mac': u"Macs se baladant un peu trop entre les chambres (instantanné)", 'chambre': u"Chambres avec un peu trop de macs (instantanné)"},
'heuristique':{'mac': u"Macs se baladant un peu trop entre les chambres (délai moyen)", 'chambre': u"Chambres avec un peu trop de macs (délai moyen)"},
'journalier':{'mac': u"Macs s'étant peut-être un peu trop baladées aujourd'hui", 'chambre': u"Chambres avec un peu trop de macs sur un jour"},
}
#: Titre des paragraphes très suspects
titre_tres_suspect = { 'instant':{'mac': u"/!\ Spoof potentiel des macs suivantes dans les chambres ci-après (instantanné)", 'chambre': u"/!\ Les chambres ci-après contiennent étrangement trop de macs inconnues ! (instantanné)"},
'heuristique':{'mac': u"/!\ Spoof potentiel des macs suivantes dans les chambres ci-après (délai moyen)", 'chambre': u"/!\ Les chambres ci-après contiennent étrangement trop de macs inconnues ! (délai moyen)"},
'journalier':{'mac': u"/!\ Spoof probable des macs suivantes dans les chambres ci-après aujourd'hui !!", 'chambre': u"/!\ Les chambres suivantes contiennent trop de macs inconnues (sur un jour)"},
}

View file

@ -0,0 +1,4 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from mails import *

View file

@ -0,0 +1,35 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
""" Template de mail envoyé en cas de déménagement mais présence de machines. """
import email.Header
message_demenagement = u"""From: %%(from)s
To: %%(to)s
Subject: %s
Content-Type: text/plain; charset="utf-8"
Bonjour,
Un adhérent au Cr@ns a déclaré résider dans la chambre %%(chambre)s,
que tu occupais précédemment. Cela signifie que nous ne disposons
plus d'informations de résidence valides à ton sujet.
Si tu souhaites conserver ton accès au Cr@ns :
- et que tu as déménagé hors du campus : il te suffit de nous préciser
ta nouvelle adresse, ton déménagement sera pris en compte.
- et que tu as déménagé vers une chambre du campus : tu dois passer
à une permanence pour signer une autorisation de câblage pour ta nouvelle
chambre.
Si tu ne souhaites pas conserver ton accès au Cr@ns, un simple message de
ta part et nous supprimerons les machines que tu possèdes de notre base de données.
Cette suppression aura automatiquement lieu dans %%(jours)s jours en l'absence de
réponse.
S'il s'agit d'une erreur de notre part, préviens-nous au plus vite afin que nous
puissions corriger le problème.
--\u0020
Les membres actifs du Crans""" % email.Header.make_header([("Déménagement non déclaré", "utf8")])

View file

@ -0,0 +1,139 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
""" Templates de mails. """
#: Mail de bienvenue
#:
#: (From est respbats@crans.org)
txt_mail_bienvenue = u"""From: Crans <%(From)s>
To: %(To)s
Subject: [CRANS] Bienvenue au Cr@ns !
Content-Type: text/plain; charset="utf-8"
Bienvenue !
Si tu lis ce mail, c'est que ton inscription à l'association
s'est déroulée correctement.
Le CR@NS est une association gérée, autant d'un point de vue
administratif que technique, par des étudiants bénévoles pour les
étudiants résidant sur le campus.
Ses membres actifs s'occupent de la maintenance du réseau, et des adhésions
(câblages), ainsi que de plusieurs services mis à la
disposition de tous ses adhérents :
* La connexion à Internet en filaire et en wifi
<https://wiki.crans.org/WiFi>
* Un wiki, regroupant plein d'informations diverses concernant la vie ici.
<https://wiki.crans.org>
* Les news, fora de discussion abordant divers thèmes
<https://wiki.crans.org/VieCrans/ForumNews>
* Un canal IRC <https://wiki.crans.org/VieCrans/UtiliserIrc>
* Un client de messagerie instantanée Jabber
<https://wiki.crans.org/VieCrans/UtiliserJabber>
* Un service de messagerie : une adresse mail @crans.org disponible à
vie, fiable, et avec possibilité d'installer des filtres très précis**
* Un espace personnel *de 2Go sur le serveur des adhérents *
<https://wiki.crans.org/VieCrans/GestionCompte>
* Un service d'impression, 24h/24 7j/7, A3 ou A4, couleur ou noir et
blanc, avec ou sans agrafe, à prix coûtant
<https://wiki.crans.org/VieCrans/Intranet>
* La télévision par le réseau <https://wiki.crans.org/TvReseau>
Afin *d'assurer le bon fonctionnement de ces services*, il est
nécessaire que chaque membre respecte la charte signée lors de son
inscription. <https://wiki.crans.org/CransAdministratif/CharteDuCrans>
La notice d'utilisation des services du CR@NS est disponible ici :
https://wiki.crans.org/CransPratique. Nous conseillons vivement de s'y reporter
aussi bien pour apprendre à utiliser les différents services que pour
résoudre les problèmes éventuellement rencontrés.
* Chaque membre intéressé par le fonctionnement de l'association peut par
exemple contacter l'équipe technique à nounous@crans.org ou l'équipe
administrative à ca@crans.org et/ou se rendre aux réunions publiques du
CR@NS. <https://wiki.crans.org/CompteRendusCrans>. Aucune
connaissance technique préalable n'est requise pour participer ! *
*A noter* : l'accès aux news et au wiki est limité à un usage interne
au campus.
Pour accéder depuis l'extérieur
* au wiki, il faut se créer un compte
<http://wiki.crans.org/?action=newaccount>
* aux news, il faut s'identifier
(Utilisateur : Vivelapa / Mot de passe : ranoia!)
--\u0020
Les membres actifs.
PS: Il t'est conseillé de conserver ce mail à toutes fins utiles
"""
#: Mail envoyé à un adhérent qui obtient de nouveaux droits.
txt_ajout_droits = u"""From: Crans <%(From)s>
To: %(To)s
Subject: [CRANS] Ajout des droits %(Droit)s
Content-Type: text/plain; charset="utf-8"
Bonjour,
Tu viens d'être doté des droits %(Droit)s au Cr@ns.
Une description de ces droits et de la manière
de les utiliser est disponible sur la page :
%(Page)s
Si tu as des questions, n'hésite pas à les poser
à d'autres câbleurs ou aux nounous.
--\u0020
Les nounous"""
#: Pages wiki explicatives sur les droits
pages_infos_droits = { "Cableur" : "https://wiki.crans.org/%C3%8AtreC%C3%A2bleur",
"Imprimeur" : "https://wiki.crans.org/%C3%8AtreC%C3%A2bleur/%C3%8AtreImprimeur",
"Bureau" : "https://wiki.crans.org/%C3%8AtreC%C3%A2bleur/%C3%8AtreLeBureau",
"Moderateur" : "https://wiki.crans.org/CransTechnique/ModerationDesNews"
}
#: Mail de rappel envoyé à un adhérent ayant des droits mais n'ayant pas encore signé sa charte membre actifs
txt_charte_MA = u"""From: Crans <%(From)s>
To: %(To)s
Subject: [CRANS] Charte des membres actifs
Content-Type: text/plain; charset="utf-8"
Bonjour,
Il semble que tu es membre actif du CRANS et que tu n'as pas
signé la charte des membres actifs. Si tu n'es pas membre actif
ou si tu as signé la charte des membres actifs, merci de nous le
signaler. Sinon, il faudrait signer la charte et nous la rendre
rapidement. Tu peux l'imprimer à partir du fichier suivant :
https://wiki.crans.org/CransAdministratif?action=AttachFile&do=get&target=charte_ma.pdf
Merci par avance,
--\u0020
Le bureau du CRANS"""
#: Mail envoyé à un adhérent à qui on a retiré ses droits.
txt_menage_cableurs = u"""From: Crans <%(From)s>
To: %(To)s
Subject: [CRANS] Suppression de droits
Content-Type: text/plain; charset="utf-8"
Bonjour,
Les droits que tu avais sur ton compte CRANS ont été retirés
car tu ne cotises pas cette année et que tes droits ne semblent
pas être utiles pour une utilisation à distance. Si nous avons
commis une erreur, nous te prions de nous en excuser. Si tu
souhaites par la suite retrouver des droits, nous serons bien sûr
heureux de te les remettre.
Cordialement,
--\u0020
Le bureau du CRANS"""

View file

@ -0,0 +1,93 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
""" Templates des mails envoyés en cas de p2p. """
#: Envoyé à la ML disconnect@ en cas de déconnexion pour p2p
avertissement = u"""From: %(From)s
To: %(To)s
Subject: =?iso-8859-1?Q?D=E9tection?= de p2p sur la machine %(hostname)s
Content-Type: text/plain; charset="utf-8"
La machine %(hostname)s a été déconnectée pendant 24h pour
utilisation du protocole %(protocole)s.
Nombre de paquets : %(nb_paquets)s paquets depuis le %(datedebut)s.
Chambre (si machine fixe) : %(chambre)s
--\u0020
Message créé par deconnexion.py"""
#: Envoyé à l'adhérent en cas de déconnexion pour p2p
deconnexion = u"""From: %(From)s
To: %(To)s
Subject: Avis de =?iso-8859-15?Q?D=E9connexion?=
Content-Type: text/plain; charset="utf-8"
Bonjour,
Nous avons détecté que ta machine, %(hostname)s utilisait le
*protocole* %(protocole)s.
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.
Lorsqu'un seul des adhérents du CR@NS utilise des protocoles interdits,
il pénalise l'ensemble des adhérents de l'association.
Tu seras donc déconnecté 24h.
--\u0020
Disconnect Team"""
#: Envoyé à l'adhérent en cas de détection de p2p
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"""
#: Envoyé à la ML disconnect@ en cas de déconnexion pour p2p plusieurs fois
message_disconnect_multi = u"""From: %(from)s
To: %(to)s
Subject: %(proprio)s a =?iso-8859-15?Q?=E9t=E9=20d=E9connect=E9?= %(nbdeco)d fois pour p2p en un an !
Content-Type: text/plain; charset="utf-8"
L'adhérent %(proprio)s a été déconnecté %(nbdeco)d fois pour p2p en un an !
Le PS a été généré et se trouve sur zamok :
%(ps)s
--\u0020
Message créé par deconnexion.py"""

View file

@ -0,0 +1,114 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
""" Templates des mails envoyés en cas d'upload. """
#: Envoyé à l'adhérent en cas de dépassement de la limite soft
message_soft = u"""From: %(from)s
To: %(to)s
Subject: [CRANS] Attention !!
Content-Type: text/plain; charset="utf-8"
Bonjour %(proprio)s,
Nous t'informons que ta (tes) machine(s) envoie(nt) une quantité
importante de données vers l'extérieur (%(upload)s Mo en 24 heures).
*Ce message t'est envoyé à titre informatif, il ne te sanctionne pas.*
Il signifie que tu as envoyé plus de 300 Mo au cours des dernières 24
heures. Cela peut venir du fait que, *par exemple*, tu essaies
d'envoyer des fichiers de grosse taille à l'extérieur de la zone
crans, ou encore que tu as fait une utilisation importante de
logiciels envoyant une très grande quantité de petites données
(vidéo-conférence par exemple). Il peut y avoir d'autres raisons.
Si cela continuait, et que tu dépassais la limite acceptable des 4096
Mo sur 24 heures, tu serais automatiquement déconnecté du réseau pour
une durée de 24 heures. Il t'appartient donc de surveiller cela de
plus près et de faire en sorte que tes machines n'uploadent pas de
manière excessive à l'avenir.
Pour plus d'informations, tu peux consulter la page:
http://wiki.crans.org/VieCrans/DéconnexionPourUpload
Si tu as des questions, contacte disconnect@crans.org
N.B. : L'upload consiste en l'envoi de données vers des machines n'étant
pas branchées sur le CRANS.
--\u0020
Disconnect team"""
#: Envoyé à l'adhérent en cas de dépassement de la limite hard
message_hard = u"""From: %(from)s
To: %(to)s
Subject: [CRANS] =?iso-8859-1?Q?D=E9connexion?= temporaire
Content-Type: text/plain; charset="utf-8"
Bonjour %(proprio)s,
Tu as temporairement été déconnecté du réseau en raison de l'envoi trop
important de données vers l'extérieur (%(upload)s Mo en 24h).
Tu as toujours accès au web ainsi qu'à tes mails crans mais tous les
autres services te sont suspendus. Si cela devait se renouveler trop
souvent, tu serais déconnecté complètement pour une durée plus
importante. Il t'appartient donc de surveiller cela de plus près et de
faire en sorte que ta machine n'uploade plus de manière excessive à
l'avenir.
Pour plus d'informations, tu peux consulter la page :
http://wiki.crans.org/VieCrans/DéconnexionPourUpload
Si tu as des questions, contacte disconnect@crans.org
N.B. : L'upload consiste en l'envoi de données vers des machines n'étant
pas branchées sur le CRANS.
--\u0020
Disconnect team"""
#: Envoyé à la ML disconnect@ en cas de dépassement de la limite soft (désactivé)
message_disconnect_soft = u"""From: %(from)s
To: %(to)s
Subject: %(proprio)s uploade
Content-Type: text/plain; charset="utf-8"
%(proprio)s uploade actuellement %(upload)s Mo.
--\u0020
Message créé par deconnexion.py"""
#: Envoyé à la ML disconnect@ en cas de dépassement de la limite hard
message_disconnect_hard = u"""From: %(from)s
To: %(to)s
Subject: %(proprio)s a =?iso-8859-1?Q?=E9t=E9=20d=E9connect=E9?=
Content-Type: text/plain; charset="utf-8"
%(proprio)s a été déconnecté pour upload (%(upload)s Mo).
Ses machines ont été aperçues pour la dernière fois à ces endroits :
%(mdc)s
La chambre de l'adhérent est %(chambre)s.
--\u0020
Message créé par deconnexion.py"""
#: Envoyé à la ML disconnect@ en cas de dépassement de la limite hard plusieurs fois
message_disconnect_multi = u"""From: %(from)s
To: %(to)s
Subject: %(proprio)s a =?iso-8859-1?Q?=E9t=E9=20d=E9connect=E9?=
%(nbdeco)d fois pour upload en un mois !
Content-Type: text/plain; charset="utf-8"
L'adhérent %(proprio)s a été déconnecté %(nbdeco)d fois pour upload en un mois !
Le PS a été généré et se trouve sur zamok :
%(ps)s
--\u0020
Message créé par deconnexion.py"""

48
gestion/config/p2p.py Normal file
View file

@ -0,0 +1,48 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
""" Variables de configuration pour la détection du peer-to-peer """
#: Le traffic udp vers les ip (v4 et v6) des hotes dans cette liste est bloqué
udp_torrent_tracker = [
'tracker.openbittorrent.com',
'tracker.ccc.de',
'tracker.istole.it',
'tracker.publicbt.com',
'tracker.1337x.org',
'fr33domtracker.h33t.com',
'tracker.torrentbox.com',
'11.rarbg.com',
'exodus.desync.com',
'fr33dom.h33t.com',
'torrentbay.to',
'tracker.ex.ua',
'tracker.ilibr.org',
'tracker.prq.to',
'tracker.publichd.eu',
'tracker.yify-torrents.com',
]
#: Limite de débit pour l'ensemble du p2p classifié, en octets/s
#: identique en upload et download
debit_max = 1000000 # = 1 Mb/s = 125 ko/s
debit_adh = 12000 # = 12 Kb/s = 1500 o/s (>= MTU [1500 bytes])
#: Limite de paquets acceptés par protocole P2P en deux heures
limite = {'Bittorrent': 100,
'AppleJuice': 50,
'SoulSeek': 500,
'WinMX': 50,
'eDonkey': 50,
'DirectConnect': 50,
'KaZaa': 50,
'Ares': 50,
'GNUtella': 50 }
#: Envoi des mails à disconnect@
disconnect_mail = True
#: Expéditeur des mails de déconnexion
expediteur = "disconnect@crans.org"

22
gestion/config/upload.py Normal file
View file

@ -0,0 +1,22 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
""" Définitions des variables pour le contrôle d'upload. """
#: liste des exemptions générales
exempt = [ ['138.231.136.0/21', '138.231.0.0/16'],
['138.231.148.0/22', '138.231.0.0/16'] ]
#: limite soft
soft = 300
#: limite hard
hard = 4096
#: envoyer des mails à disconnect@ en cas de dépassement soft ?
disconnect_mail_soft = False
#: envoyer des mails à disconnect@ en cas de dépassement hard ?
disconnect_mail_hard = True
#: expéditeur des mails de déconnexion
expediteur = "disconnect@crans.org"

9
gestion/config/virus.py Normal file
View file

@ -0,0 +1,9 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
""" Définitions des variables pour la détection des virus. """
#: Nombre de flood par heure pour déclencher une entrée dans la base
flood = 100
#: Nombre d'entrées dans la base pour détecter un virus
virus = 10