Infrastructure réseau du CNF d'Alger
1. Description générale
Le CNF d'Alger est équipé d'une Liaison Spécialisée (Algerie Telecom) de 1Mb/s et d'une liaison ADSL allant jusqu'à 20 Mbps.
- - Le réseau est constitué de 3 serveurs :
- Un serveur Services Communs "tassili.dz.auf.org" (DNS, Messagerie, TOIP, Web, FTP, Listes)
- Un serveur Pare-Feu "hoggar.dz.auf.org" (SNAT, DHCP, DNS interne, RPV)
Un serveur Services Communs "tam.dz.auf" : NFS, NssMysql, Application AufDjangoUsers.
- - Le LAN est constitué de 2 réseaux, le 10.59.1.0/20 réservé à l'usage du personnel du CNF, le 172.16.0.0/24 réservé à l'usage du public et des formations.
- Le réseau 172.16.0.0/24 est distribué par le serveur "tam.dz.auf", configuré pour l'authentification NssMysql et les espaces NFS.
- - Un accès WIFI/WPA configuré sur le modem/routeur ADSL du réseau 192.168.1.0/24 rayonne sur le campus en permanence pour les accès nomades.
La gestion des comptes de messagerie "@dz.auf.org" est opérée à Montréal et une synchronisation des bases est réalisée toutes les 10 minutes entre les serveurs d'Alger et de Montréal. (Cf. conception du service de messagerie de Paris ZEO/Paris/Bureautique/MigrationThunderbirdLeopold/LesPlus)
2. Plan d'adressage
Le CNF d'Alger dispose d'une plage 196.20.71.80/28 divisée en deux DMZs :
- - 196.20.71.88/29 correspondant aux principaux services du CNF
- - 196.20.71.80/29 correspondant aux serveurs pare-feu/routeur et aux serveurs temporaires (formations)
Le Pare-feu assure le lien entre la DMZ 196.20.71.80/29 et la DMZ 196.20.71.88/29
|----(DMZ Services Communs 196.20.71.88/29) |----(LAN Alger 10.59.1.0/20) (((INTERNET)))----(LS)----[ROUTEUR AUF]---(DMZ 196.20.71.80/29)----[PARE-FEU]----(RPV Paris 10.72.0.0/24) |----(RPV Montréal 10.36.0.0/24) |----(LAN Accès Libre/Formation 172.16.0.0/24) (((INTERNET)))----(ADSL)--[ROUTEUR/MODEM ADSL]------------------------------(LAN public WIFI 192.168.1.0/24)
Configuration de routage du Routeur 196.20.71.81
- ip route 0.0.0.0 0.0.0.0 Serial0
- ip route 196.20.71.80 255.255.255.248 Ethernet0
- ip route 196.20.71.88 255.255.255.248 196.20.71.82
Hôte |
IP |
Gateway |
Système |
Description |
n/a |
196.20.71.81 |
n/a |
n/a |
Routeur 3com Algerie Telecom |
hoggar.dz.auf.org |
196.20.71.82 |
196.20.72.81 |
Debian 5.0.2 Lenny (2.6.26-2-686) |
Pare-feu, SNAT, DHCP, DNS interne, RPV, mise en service 2006 |
visio.dz.auf.org |
196.20.71.91 |
194.20.71.89 |
n/a |
Système de Visio Conférence, mise en service 2006 |
tassili.dz.auf.org |
196.20.71.90 |
194.20.71.89 |
Debian 5.0.2 Lenny (2.6.26-2-686) |
DNS, Messagerie, Web, FTP, Listes, mise en service 2006 |
tam.dz.auf |
172.16.0.2 |
172.16.0.1 |
Debian 5.0.2 Lenny (2.6.26-2-686) |
NFS, NssMysql, Application AufDjangoUsers, mise en service 2006 |
3. Exploitation
Clients |
Nb |
Systèmes d'exploitation |
Description |
Espace formation |
40 |
Dual boot Windows XP / Ubuntu HJaunty 9.04 |
mise en service 2006 |
Espace public |
12 |
Ubuntu HJaunty 9.04 |
mise en service 2006 |
Personnels CNF |
5 |
Ubuntu Jaunty 9.04, Dual boot Windows XP/Ubuntu Jaunty 9.04 |
mise en service 2006 |
La gestion et la maintenance de l'infrastructure informatique du CNF d'Alger seront réalisées par deux étudiants de Master. Imène Toumi & Omar Akham.
1. Outil de déploiement et d'intégration de masse
Appliquer ce script correspond à créer les mêmes répertoires utilisateurs pour tous les comptes utilisateurs abonnés en masse par l'application AufDjangoUsers.
Appel de la base : requete.sql
CONNECT auth SELECT username FROM users quit
Script de création des répertoires utilisateurs : script-users.sh
#!/bin/bash ### Réalisé par : Imène Toumi & Omar Akham #recuperer la liste des utilisateurs mysql -u root -p < requete.sql > list sed -i '1d' list #supprimer le nom de la colonne "username" générer par la commande mysql #Extraire les nouveaux utilisateurs users=$(comm -3 list list.old | sed 's/[\t \n]\+//g') #creation des repertoires utilisateurs et copie de la configuration de base #Boucle FOR in LIST HOME_DIR=/home/CNF for USER in $users do mkdir $HOME_DIR/$USER cp -R .[^.]* $HOME_DIR/$USER chown -R $USER:users $HOME_DIR/$USER done #mettre list en list.old mv list list.old exit 0;
Nb : - Les fichiers de configuration de l'apparence sont des repertoires et des fichiers cachés, ne pas oublier de les mettres dans le même répertoire que le script.
- - Un fichier list.old doit être créer (une seule fois). Si des répertoires pour certains utilisateurs ont déjà été créer, mettre les noms de ces utilisateurs dans ce fichier (un nom d'utilisateur par ligne), sinon à laisser vide.
4. Script Conversion de notices
Convertir en format tableur, en reportant chaque référence (NODOC) sur une ligne d'un tableau, comprenant l'ensemble des champs, en prenant en compte le fait que tous les champs ne sont pas présents, ni en nombre égal pour chaque référence.
- - On devra retrouver dans une même colonne tous les champs qui ont le même intitulé (NODOC, AUTS, TITORS, LOCED, PAGIN, DESNAT, etc...)
- - Les champs qui portent le même nom et numéro, devront être regroupé dans une cellule et séparé par un point-virgule (;) : c'est le cas en particulier pour les champs : LOCED, DESNAT, COTE.
1 #!/usr/bin/env python
2 #@auteur: Omar AKHAM (CNF Alger)
3 #Programme Conversion de Notices
4
5 import sys, os, re
6
7 def usage():
8 """ Comment utiliser le programme"""
9 print('Utilisation : %s <fichier_entree> <-1|-2>' % sys.argv[0])
10 print('\t* -1 : Fichier de type ETIQUETTE (CODE):VALEUR')
11 print('\t* -2 : Fichier de type CODE:VALEUR')
12
13 entete_dict ={'100':'NODOC','102':'NIVBI','103':'TYPBI','104':'INDBI', '200':'AUTS','201':'AFIS','202':'COLS','203':'TITORS','204':'TIFRAS','210':'AUTG','213':'TITORG','220':'TISER','221':'VOLUM','222':'NUMER','223':'ISSN','230':'LANTE','231':'LANRE','240':'NOMED','241':'LOCED','242':'ISBN','243':'NOED','250':'DATE','251':'DA','252':'PAGIN','253':'COLAT','254':'NOTE','255':'DIPLO','260':'NOCOL','262':'LOCOL','263':'DACOL',
14 '304':'FIN','310':'DESNAT','311':'CDESNAT','312':'GEONAT','313':'LOCNAT','314':'NAT','320':'LARES','321':'RES','330':'BULL1','331':'BULL2',
15 '400':'COTE','401':'DISPO','402':'DIFF','403':'NOBEX','404':'MICRO'
16 }
17
18 entete_triee = sorted(entete_dict, key=lambda x: eval(x))
19
20 if len(sys.argv) != 3:
21 usage()
22 exit()
23
24 fichier_entree = sys.argv[1]
25 fichier_sortie = os.path.splitext(fichier_entree)[0]+'_convert.csv'
26 if sys.argv[2] == '-1':
27 exp_reg = r'\w+\s\((?P<code>\d{3})\):(?P<valeur>.+)'
28 elif sys.argv[2] == '-2':
29 exp_reg = r'\s*(?P<code>\d{3}):\s*(?P<valeur>.+)'
30 else:
31 usage()
32 exit()
33
34 contenu_doc = {}
35 for cle in entete_triee:
36 contenu_doc[cle] = ''
37
38 texte_entree = [x for x in open(fichier_entree,'rU').read().split('\n') if x]
39 texte_sortie = ''
40
41 # Boucle pour mettre l entete du fichier
42 for cle in entete_triee:
43 texte_sortie += entete_dict[cle]+'('+cle+');'
44 texte_sortie += '\n'
45
46 # Remplissage des enregistrements
47 for line in texte_entree:
48 matcher = re.match(exp_reg,line)
49 if matcher is None:
50 continue
51 result_dict = matcher.groupdict()
52 code = result_dict['code']
53 valeur = result_dict['valeur'].replace('"',"'")
54 if code == '100':
55 if contenu_doc[code] != '':
56 for cle in entete_triee:
57 texte_sortie += '"'+contenu_doc[cle]+'";'
58 contenu_doc[cle] = ''
59 texte_sortie += '\n'
60 if contenu_doc[code] == '':
61 contenu_doc[code] = valeur
62 else:
63 contenu_doc[code] = contenu_doc[code]+', '+valeur
64
65 #Remplir le dernier enregistrement
66 if contenu_doc['100'] != '':
67 for cle in entete_triee:
68 texte_sortie += '"'+contenu_doc[cle]+'";'
69 texte_sortie += '\n'
70
71 #Mettre le resultat sur fichier
72 f = open(fichier_sortie,'w')
73 f.write(texte_sortie)
74 f.close()
5. DNS Chroot Script
Ce script permet d'installer un DNS BIND chrooté sous Debian (testé sous Squeeze).
# Author: Omar AKHAM (akham.omar@gmail.com) 2012 ## Install a chrooted Bind9 on Debian (Squeeze tested) script ## Source : http://wiki.debian.org/Bind9#Bind_Chroot #install bind9 apt-get install bind9 bind9utils && #Stop bind service /etc/init.d/bind9 stop #Switch Bind9 to use the chroot sed -i 's/OPTIONS="-u bind"/OPTIONS="-u bind -t \/var\/bind9\/chroot"/g' /etc/default/bind9 #Create chroot mkdir -p /var/bind9/chroot/{etc,dev,var/cache/bind,var/run/bind/run} chown -R bind:bind /var/bind9/chroot/var/* mknod /var/bind9/chroot/dev/null c 1 3 mknod /var/bind9/chroot/dev/random c 1 8 chmod 660 /var/bind9/chroot/dev/{null,random} #Move config file to chroot mv /etc/bind /var/bind9/chroot/etc ln -s /var/bind9/chroot/etc/bind /etc/bind chown -R bind:bind /etc/bind/* #Set correct PIDFILE sed -i 's/PIDFILE=\/var\/run\/named\/named.pid/PIDFILE=\/var\/bind9\/chroot\/var\/run\/named\/named.pid/g' /etc/init.d/bind9 #Tell rsyslog to listen to the bind logs in the correct place echo "\$AddUnixListenSocket /var/bind9/chroot/dev/log" > /etc/rsyslog.d/bind-chroot.conf #Start services /etc/init.d/rsyslog restart; /etc/init.d/bind9 start
Notre procédure officielle à l'AuF pour sécuriser le DNS se trouve sur la page DNS/Sécurisation. -- ProgFou