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.

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 :

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

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;

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.

   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