É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
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -47,8 +47,6 @@ archive
|
||||||
gestion/logreader/
|
gestion/logreader/
|
||||||
lc_ldap/
|
lc_ldap/
|
||||||
wifi_new/
|
wifi_new/
|
||||||
|
|
||||||
# Devrait être remplacé par l'intranet2
|
|
||||||
intranet/
|
intranet/
|
||||||
|
|
||||||
# rebuts
|
# rebuts
|
||||||
|
@ -64,6 +62,7 @@ var/
|
||||||
monit
|
monit
|
||||||
squid/errors/
|
squid/errors/
|
||||||
surveillance/mac_prises/output/
|
surveillance/mac_prises/output/
|
||||||
|
doc/build/
|
||||||
|
|
||||||
# etat_* de la connexion de secours
|
# etat_* de la connexion de secours
|
||||||
secours/etat_*
|
secours/etat_*
|
||||||
|
|
|
@ -23,6 +23,7 @@ Les commandes sont :
|
||||||
import sys, os, re
|
import sys, os, re
|
||||||
sys.path.append('/usr/scripts/gestion')
|
sys.path.append('/usr/scripts/gestion')
|
||||||
import config
|
import config
|
||||||
|
import config.mails
|
||||||
from email_tools import send_email, parse_mail_template
|
from email_tools import send_email, parse_mail_template
|
||||||
|
|
||||||
# Fonctions d'affichage
|
# Fonctions d'affichage
|
||||||
|
@ -142,7 +143,7 @@ def spammer():
|
||||||
to = adh.email()
|
to = adh.email()
|
||||||
print to
|
print to
|
||||||
if not debug:
|
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'))
|
connexion.sendmail("ca@crans.org",to,data.encode('iso-8859-15'))
|
||||||
|
|
||||||
def __usage(message=None):
|
def __usage(message=None):
|
||||||
|
|
|
@ -32,7 +32,7 @@ __version__ = '1'
|
||||||
|
|
||||||
import sys, syslog, os.path
|
import sys, syslog, os.path
|
||||||
sys.path.append('/usr/scripts/gestion')
|
sys.path.append('/usr/scripts/gestion')
|
||||||
import config
|
import config.impression
|
||||||
import cout
|
import cout
|
||||||
from crans.utils import QuoteForPOSIX as escapeForShell
|
from crans.utils import QuoteForPOSIX as escapeForShell
|
||||||
import crans.utils.logs
|
import crans.utils.logs
|
||||||
|
|
|
@ -19,7 +19,9 @@ import os
|
||||||
|
|
||||||
import config
|
import config
|
||||||
year = config.ann_scol
|
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
|
# 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']
|
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()
|
to = clandestin.mail()
|
||||||
if not "@" in to:
|
if not "@" in to:
|
||||||
to += "@crans.org"
|
to += "@crans.org"
|
||||||
mail = config.upload.message_demenagement % {"from" : "respbats@crans.org",
|
mail = config.mails.demenagement.message_demenagement % {"from" : "respbats@crans.org",
|
||||||
"chambre" : exchambre,
|
"chambre" : exchambre,
|
||||||
"jours" : int(ttl/86400) + 1,
|
"jours" : int(ttl/86400) + 1,
|
||||||
"to" : to}
|
"to" : to}
|
||||||
|
|
|
@ -1,890 +0,0 @@
|
||||||
# -*- python -*-
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
############################################
|
|
||||||
## Définition du comportement des scripts ##
|
|
||||||
############################################
|
|
||||||
|
|
||||||
from time import localtime
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
# Fichier généré
|
|
||||||
from config_srv import adm_only, role
|
|
||||||
|
|
||||||
# Pour les emails
|
|
||||||
import email.Header
|
|
||||||
|
|
||||||
##### 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 = 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'
|
|
||||||
mac_g = '00:0f:1f:66:e5:92'
|
|
||||||
|
|
||||||
## Serveur principal de bcfg2
|
|
||||||
bcfg2_main = "bcfg2.adm.crans.org"
|
|
||||||
## Compatibilité inverse
|
|
||||||
cfengine_main = bcfg2_main
|
|
||||||
|
|
||||||
## 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"
|
|
||||||
|
|
||||||
# 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 charactère 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,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
## Impression
|
|
||||||
class impression:
|
|
||||||
"""Cette classe contient toutes les variables
|
|
||||||
de prix concernant l'impression"""
|
|
||||||
|
|
||||||
# l'imprimante utilisée
|
|
||||||
imprimante = "canon"
|
|
||||||
|
|
||||||
# Découvert autorisé (en euro)
|
|
||||||
decouvert = 0.
|
|
||||||
|
|
||||||
###### Variables de prix (tout est exprimé en centimes) ######
|
|
||||||
|
|
||||||
# Cout 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
|
|
||||||
|
|
||||||
# Cout d'une feuille A4
|
|
||||||
# 25.06 euros les 2500 feuilles
|
|
||||||
c_a4 = 1.0024 + amm
|
|
||||||
|
|
||||||
# Cout d'une feuille A3
|
|
||||||
# 53.76 euros les 2500 feuilles
|
|
||||||
c_a3 = 2.1504 + amm
|
|
||||||
|
|
||||||
# Cout d'un transparent
|
|
||||||
# 15.85 euros les 100 transparents
|
|
||||||
c_trans = 15.85 + amm
|
|
||||||
|
|
||||||
c_face_couleur = 9.4484
|
|
||||||
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
|
|
||||||
state_msg = [u"L'impression recto/verso (ou livret) A3 est déconseillée"]
|
|
||||||
|
|
||||||
## Pour le controle d'upload et d'autres trucs qui n'ont en fait rien à foutre là…
|
|
||||||
class upload:
|
|
||||||
|
|
||||||
# liste des exemptations 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
|
|
||||||
|
|
||||||
# envoi des mails à disconnect@
|
|
||||||
disconnect_mail_soft = False
|
|
||||||
disconnect_mail_hard = True
|
|
||||||
|
|
||||||
# expéditeur des mails de déconnexion
|
|
||||||
expediteur = "disconnect@crans.org"
|
|
||||||
|
|
||||||
# textes des mails
|
|
||||||
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"""
|
|
||||||
|
|
||||||
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"""
|
|
||||||
|
|
||||||
|
|
||||||
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"""
|
|
||||||
|
|
||||||
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"""
|
|
||||||
|
|
||||||
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"""
|
|
||||||
|
|
||||||
demenagement_delai = 8
|
|
||||||
# Nombre de jours après le passage en chambre ???? où on supprime les machines
|
|
||||||
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")])
|
|
||||||
|
|
||||||
class mac_prise:
|
|
||||||
# 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...
|
|
||||||
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 suspect"
|
|
||||||
# Le paramètre chambre signifie "combien de macs doivent traverser une même chambre pour que ça soit 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_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_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)"},
|
|
||||||
}
|
|
||||||
|
|
||||||
# Classe pour les paramètres du firewall #
|
|
||||||
##########################################
|
|
||||||
class conf_fw:
|
|
||||||
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.now()
|
|
||||||
if now.hour >= 6 and now.hour < 19 and now.weekday() < 5:
|
|
||||||
debit_max = 95 * 1024 / 8 # kbytes per second en connexion de jour
|
|
||||||
debit_jour=True
|
|
||||||
else:
|
|
||||||
debit_max = 500 * 1024 / 8 # connexion de nuit et du week-end
|
|
||||||
debit_jour=False
|
|
||||||
#~ debit_max = 95 * 1024 / 8 # connexion de nuit http://www.speedtest.net/result/2318350458.png
|
|
||||||
|
|
||||||
# Classe pour la détection des virus #
|
|
||||||
######################################
|
|
||||||
class virus:
|
|
||||||
# Nombre de Flood Par heure
|
|
||||||
flood = 100
|
|
||||||
virus = 10
|
|
||||||
|
|
||||||
# Classe pour la détection du p2p #
|
|
||||||
###################################
|
|
||||||
#Le traffic udp vers les ip (v4 et v6) des hotes dans la liste suivante 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',
|
|
||||||
]
|
|
||||||
class p2p :
|
|
||||||
# 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"
|
|
||||||
|
|
||||||
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"""
|
|
||||||
|
|
||||||
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"""
|
|
||||||
|
|
||||||
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"""
|
|
||||||
|
|
||||||
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"""
|
|
||||||
|
|
||||||
|
|
||||||
#############################
|
|
||||||
## 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 recouvrant
|
|
||||||
'fil' : (0, 2047),
|
|
||||||
# Rid pour les machines fixes
|
|
||||||
'adherents' : (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'],
|
|
||||||
'serveurs-v6': [ '2a01:240:fe3d:4::/64' ],
|
|
||||||
'fil' : [ '2a01:240:fe3d:4::/64' ],
|
|
||||||
'adherents' : [ '2a01:240:fe3d:4::/64' ],
|
|
||||||
'adm' : [ '2a01:240:fe3d:c804::/64' ],
|
|
||||||
'adm-v6' : [ '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']},
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## gestion du dns
|
|
||||||
class dns:
|
|
||||||
parents=[ # ariane et ariane2 pour la zone parente
|
|
||||||
'138.231.176.4',
|
|
||||||
'138.231.176.54',
|
|
||||||
]
|
|
||||||
master='10.231.136.9'
|
|
||||||
slaves=[
|
|
||||||
'10.231.136.8', # ovh
|
|
||||||
'10.231.136.14', # titanic aka freebox
|
|
||||||
]
|
|
||||||
|
|
||||||
master_tv=master
|
|
||||||
slaves_tv=slaves
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
#######################
|
|
||||||
## 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
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
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_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"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
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"""
|
|
||||||
|
|
||||||
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"""
|
|
|
@ -1,9 +0,0 @@
|
||||||
# -*- 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']}
|
|
|
@ -1,67 +0,0 @@
|
||||||
#!/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')
|
sys.path.append('/usr/scripts/gestion')
|
||||||
from affich_tools import cprint, anim, OK, WARNING, ERREUR
|
from affich_tools import cprint, anim, OK, WARNING, ERREUR
|
||||||
import config
|
import config
|
||||||
|
import config.mails
|
||||||
from time import strftime
|
from time import strftime
|
||||||
from ldap_crans import hostname, crans_ldap
|
from ldap_crans import hostname, crans_ldap
|
||||||
|
|
||||||
|
@ -172,7 +173,7 @@ class mail_bienvenue:
|
||||||
else:
|
else:
|
||||||
To += '@crans.org'
|
To += '@crans.org'
|
||||||
conn=smtplib.SMTP('localhost')
|
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()
|
conn.quit()
|
||||||
print OK
|
print OK
|
||||||
except Exception, c:
|
except Exception, c:
|
||||||
|
@ -198,11 +199,11 @@ class mail_ajout_droits:
|
||||||
To = login
|
To = login
|
||||||
if To.find('@') == -1: To += '@crans.org'
|
if To.find('@') == -1: To += '@crans.org'
|
||||||
print Droit +"\n"
|
print Droit +"\n"
|
||||||
if Droit in config.pages_infos_droits:
|
if Droit in config.mails.pages_infos_droits:
|
||||||
print "envoi du mail"
|
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=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()
|
conn.quit()
|
||||||
print OK
|
print OK
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -12,6 +12,7 @@ from socket import gethostname
|
||||||
from gen_confs import gen_config
|
from gen_confs import gen_config
|
||||||
|
|
||||||
import config
|
import config
|
||||||
|
import config.dns
|
||||||
from iptools import AddrInNet, AddrInNets
|
from iptools import AddrInNet, AddrInNets
|
||||||
import ip6tools
|
import ip6tools
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ from ldap_crans import AssociationCrans, Machine, MachineWifi, BorneWifi
|
||||||
from affich_tools import *
|
from affich_tools import *
|
||||||
from commands import getstatusoutput
|
from commands import getstatusoutput
|
||||||
from iptools import AddrInNet, NetSubnets, IpSubnet
|
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')
|
syslog.openlog('firewall')
|
||||||
|
|
||||||
debug = 1
|
debug = 1
|
||||||
|
|
|
@ -25,9 +25,8 @@ import sys, re, os, pwd
|
||||||
sys.path.append('/usr/scripts/gestion')
|
sys.path.append('/usr/scripts/gestion')
|
||||||
|
|
||||||
from ldap_crans import hostname
|
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 authorized_icmpv6, mac_wifi, adm_only, adm_users
|
||||||
from config import udp_torrent_tracker
|
|
||||||
from ipt import *
|
from ipt import *
|
||||||
|
|
||||||
# On invoque Ip6tables
|
# On invoque Ip6tables
|
||||||
|
@ -43,7 +42,7 @@ Usage:
|
||||||
""" % { 'script' : sys.argv[0].split('/')[-1] }
|
""" % { 'script' : sys.argv[0].split('/')[-1] }
|
||||||
|
|
||||||
def tracker_torrent(ip6tables):
|
def tracker_torrent(ip6tables):
|
||||||
for tracker in udp_torrent_tracker:
|
for tracker in p2p.udp_torrent_tracker:
|
||||||
for dest in gethostbyname(tracker)[1]:
|
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 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)
|
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 affich_tools import *
|
||||||
from commands import getstatusoutput
|
from commands import getstatusoutput
|
||||||
from iptools import AddrInNet, NetSubnets, IpSubnet
|
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 ipset import IpsetError, Ipset
|
||||||
from lc_ldap import lc_ldap
|
from lc_ldap import lc_ldap
|
||||||
from ipt import gethostbyname
|
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])
|
iptables('-A FILTRE_P2P -m ipp2p --%s -j REJECT --reject-with icmp-admin-prohibited' % filtre[0])
|
||||||
self.anim.cycle()
|
self.anim.cycle()
|
||||||
#on rejetes les trackeur udp les plus connus
|
#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]:
|
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 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)
|
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 lock import *
|
||||||
from affich_tools import anim, cprint, OK
|
from affich_tools import anim, cprint, OK
|
||||||
from time import localtime, strftime, time, sleep
|
from time import localtime, strftime, time, sleep
|
||||||
import config
|
|
||||||
import ridtools
|
import ridtools
|
||||||
from inspect import getargspec
|
from inspect import getargspec
|
||||||
from syslog import *
|
from syslog import *
|
||||||
|
|
|
@ -23,7 +23,6 @@ import commands
|
||||||
import lock
|
import lock
|
||||||
|
|
||||||
import lc_ldap
|
import lc_ldap
|
||||||
import config
|
|
||||||
import secrets
|
import secrets
|
||||||
|
|
||||||
class IpsetError(Exception):
|
class IpsetError(Exception):
|
||||||
|
|
|
@ -22,8 +22,6 @@
|
||||||
|
|
||||||
import netaddr
|
import netaddr
|
||||||
|
|
||||||
import config
|
|
||||||
|
|
||||||
def mac_to_ipv6(ipv6_prefix, mac_address):
|
def mac_to_ipv6(ipv6_prefix, mac_address):
|
||||||
"""Convert a MAC address (EUI48) to an IPv6 (prefix::EUI64)."""
|
"""Convert a MAC address (EUI48) to an IPv6 (prefix::EUI64)."""
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ import ldap, ldap.modlist, ldap_passwd
|
||||||
import netaddr
|
import netaddr
|
||||||
|
|
||||||
import annuaires_pg as annuaires
|
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 chgpass import chgpass
|
||||||
from affich_tools import coul, prompt, cprint
|
from affich_tools import coul, prompt, cprint
|
||||||
from email_tools import send_email
|
from email_tools import send_email
|
||||||
|
|
|
@ -33,7 +33,6 @@ import time
|
||||||
# Fin
|
# Fin
|
||||||
import sys, tempfile, os, commands, shutil, syslog, stat
|
import sys, tempfile, os, commands, shutil, syslog, stat
|
||||||
sys.path.append('/usr/scripts/gestion')
|
sys.path.append('/usr/scripts/gestion')
|
||||||
import config
|
|
||||||
from crans.utils import QuoteForPOSIX as escapeForShell
|
from crans.utils import QuoteForPOSIX as escapeForShell
|
||||||
def __init__():
|
def __init__():
|
||||||
pass
|
pass
|
||||||
|
@ -43,7 +42,7 @@ def __init__():
|
||||||
# ########################################################### #
|
# ########################################################### #
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
import config
|
import config.impression
|
||||||
COUT_UNITE_COULEUR = config.impression.c_coul
|
COUT_UNITE_COULEUR = config.impression.c_coul
|
||||||
COUT_UNITE_NOIRE = config.impression.c_noir
|
COUT_UNITE_NOIRE = config.impression.c_noir
|
||||||
COUT_PASSAGE_TAMBOUR_NOIR = config.impression.c_tambour_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 :
|
Script de déconnection automatique des machines du crans pour les raisons :
|
||||||
- upload
|
- upload
|
||||||
- p2p
|
- p2p (plus maintenant)
|
||||||
- flood
|
- flood
|
||||||
- virus
|
- virus
|
||||||
|
|
||||||
|
@ -20,7 +20,8 @@ import commands
|
||||||
import sys
|
import sys
|
||||||
import psycopg2
|
import psycopg2
|
||||||
sys.path.append('/usr/scripts/gestion')
|
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 ipt
|
||||||
import smtplib
|
import smtplib
|
||||||
from ldap_crans import crans_ldap
|
from ldap_crans import crans_ldap
|
||||||
|
@ -242,14 +243,14 @@ for elupload, eltype, elid in uploadeurs:
|
||||||
################################
|
################################
|
||||||
mail = connectsmtp()
|
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')
|
corps = corps.encode('utf-8')
|
||||||
mail.sendmail(upload.expediteur, proprio.email(), corps)
|
mail.sendmail(upload.expediteur, proprio.email(), corps)
|
||||||
|
|
||||||
# On envoie un mail à disconnect
|
# On envoie un mail à disconnect
|
||||||
################################
|
################################
|
||||||
if upload.disconnect_mail_hard:
|
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')
|
corps = corps.encode('utf-8')
|
||||||
mail.sendmail(upload.expediteur, upload.expediteur, corps)
|
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()))
|
+ "/usr/scripts/surveillance/fiche_deconnexion/generate.py --upload aid=%d" % int(proprio.id()))
|
||||||
|
|
||||||
# Envoi du mail à disconnect
|
# 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')
|
corps = corps.encode('utf-8')
|
||||||
mail.sendmail(upload.expediteur, upload.expediteur, corps)
|
mail.sendmail(upload.expediteur, upload.expediteur, corps)
|
||||||
|
|
||||||
|
@ -298,14 +299,14 @@ for elupload, eltype, elid in uploadeurs:
|
||||||
################################
|
################################
|
||||||
mail = connectsmtp()
|
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')
|
corps = corps.encode('utf-8')
|
||||||
mail.sendmail(upload.expediteur, proprio.email(), corps)
|
mail.sendmail(upload.expediteur, proprio.email(), corps)
|
||||||
|
|
||||||
# On envoie un mail à disconnect
|
# On envoie un mail à disconnect
|
||||||
################################
|
################################
|
||||||
if upload.disconnect_mail_soft:
|
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')
|
corps = corps.encode('utf-8')
|
||||||
mail.sendmail(upload.expediteur, upload.expediteur, corps)
|
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
|
print "Suppression de %s des machines infectees, mais aucune blackliste"%hostname
|
||||||
requete = "DELETE FROM avertis_virus where ip_crans='%s'"%IP
|
requete = "DELETE FROM avertis_virus where ip_crans='%s'"%IP
|
||||||
curseur.execute(requete)
|
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
|
import psycopg2
|
||||||
sys.path.append('/usr/scripts/gestion')
|
sys.path.append('/usr/scripts/gestion')
|
||||||
sys.path.append('/usr/scripts/surveillance')
|
sys.path.append('/usr/scripts/surveillance')
|
||||||
import config
|
import config.virus
|
||||||
import smtplib
|
import smtplib
|
||||||
import socket
|
import socket
|
||||||
import time, random, hashlib
|
import time, random, hashlib
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue