IUP GMI Avignon Projet - IUPBox II Tuteur : Rachid Elazouzi Rémy FREROT, Charles-Henri FLORET, Mbao Makhtar 2007-2008
Sommaire 1. Introduction... 4 2. Présentation du sujet... 4 2.1. Cahier des charges... 4 2.1.1. 1ère partie... 4 2.1.2. 2ème partie... 4 2.2. Objectif du projet... 4 3. Mise en place du réseau test : septnains.fr... 5 3.1. Note sur les noms utilisés... 5 3.2. Topologie physique... 5 3.3. Configuration matérielle... 5 3.4. Configuration logicielle... 6 3.5. Topologie réseau... 6 3.5.1. Adressage... 6 3.5.2. Fonctionnement général... 7 3.6. Configuration du serveur... 7 3.6.1. IPv6... 7 3.6.2. FTP, HTTP, DNS, POSTFIX, SMTP, IMAP, POP... 8 4. Mise en place du FAI... 9 4.1. Gestion des abonnés : LDAP... 9 4.1.1. Pourquoi un annuaire LDAP?... 9 4.1.2. Installation d OpenLDAP et structure de l annuaire... 9 4.2. Le Webmail Horde : installation... 10 4.3. Sécurité... 11 4.3.1. Activation du SSL dans Apache... 11 4.3.2. Génération des certificats... 12 5. Asterisk... 13 5.1. Contexte actuel de la VoIP... 13 5.2. Historique d Asterisk... 13 5.3. Intégration d Asterisk... 14 5.4. Serveur principal... 14 5.4.1. Stockage des utilisateurs et des plans d appel... 14 2
5.4.2. Installation d Asterisk... 16 5.5. La SeptBox... 17 5.6. Matériel et softphones utilisés... 18 5.7. Services de téléphonie... 18 6. Services annexes... 20 6.1. Envoi de SMS... 20 6.2. Envoi de fax... 21 7. Interface WEB... 22 7.1. Fonctionnalités gérées... 22 7.2. Mécanismes d administration... 22 7.2.1. Ldap... 22 7.2.2. ssh2... 24 8. Conclusion... 24 3
1. Introduction Pour ce dernier semestre de cours à l IUP, notre groupe de projet a travaillé sur le sujet intitulé IUPBox. La problématique de ce projet est très simple : réaliser en peux de temps, en effet le semestre est court, un fournisseur d accès Internet utilisant des technologies et des architecture inédites, autrement dit : proposer des services totalement nouveaux à partir de technologies nouvelles ou peut utilisées mais cependant prometteuses. 2. Présentation du sujet 2.1. Cahier des charges 2.1.1. 1ère partie Dans cette première partie, l objectif était d établir un mini réseau full IPv6, ayant un serveur DNS, un serveur WEB, un serveur mail, Webmail, ainsi qu un serveur LDAP. Le réseau test comporte entre autre : Un serveur LDAP, un serveur mail sous Postfix, un serveur HTTP fonctionnant sous Apache, un serveur DNS BIND 9, un Webmail permettant d'accéder à ses mails de n'importe où grâce à un simple navigateur avec LDAP, un serveur FTP. 2.1.2. 2ème partie Cette deuxième partie a consisté à la création d un fournisseur d'accès Internet : Proxy SIP, PABX, Messagerie Electronique, Serveur FTP, SMS. 2.2. Objectif du projet Développer une interface web permettant aux utilisateurs : de s inscrire de modifier leurs options réseaux de gérer leurs options téléphoniques de façon avancée 4
Mettre en place l'infrastructure nécessaire pour que les abonnés du service d'accès Internet puissent consulter/envoyer des courriers électroniques. Permettre aux utilisateurs d'avoir la possibilité d'utiliser leur forfait téléphonique pour appeler de partout même de l'étranger. Permettre aux utilisateurs de recevoir les messages vocaux à leurs comptes email. 3. Mise en place du réseau test : septnains.fr 3.1. Note sur les noms utilisés Le caractère incongru des noms mérite peut-être une petite explication. En effet à l origine nous n avons pas vraiment pensé donner un nom au FAI, en revanche lors de l installation de l OS nous nous sommes retrouvés confronté au problème pour des informaticiens sans imagination - du nommage des machines. C est ainsi qu après une courte réflexion nous les avons nommées : farceur / serveur, grincheux / Box, joyeux / client. De fil en aiguille lorsqu il a fallu donner un nom au domaine nous l avons appelé septnains.fr. 3.2. Topologie physique 3.3. Configuration matérielle Comme on peut le voir sur le schéma ci-dessus notre réseau expérimental est constitué d un serveur, qui fournit l accès à Internet, d une Box et d un client. 5
En pratique les trois machines sont des DELL GX respectivement 850/250/250. Le serveur étant bien entendu plus puissant que les autres machines, puisqu il est destiné à accueillir l essentiel des services du réseau. 3.4. Configuration logicielle Nous avons choisi d installer la distribution GNU/Linux Debian Etch sur tous nos postes. Le choix de Linux pour le serveur était une évidence pour les mêmes raisons que celles qui ont poussé tous les fournisseurs d accès à Internet à l utiliser : robustesse, souplesse, adaptation, possibilité de configuration fine et poussée. Linux est totalement adapté pour la mise en place de serveur réseau. Pour la box aussi c était une évidence : nous n avions besoin que d une configuration minimal, très légère et sans serveur graphique, permettant à partir d un shell toutes les configurations réseau possible et inimaginable. Enfin est-il besoin de préciser que Linux est disponible sous licence GPL. Une fois notre choix arrêté sur Linux pour le serveur et la box nous avons décidé d utiliser Debian Etch car c est une distribution que nous connaissons bien. De plus Debian inclus IPv6 en natif depuis plusieurs années : nous étions certain de trouver moins de bug, plus d outil et plus de documentation que dans d autres distributions. Le client aussi à été mis sous Debian : il n était pas assez puissant pour accueillir un Windows. Pour les tests sous cet OS nous avions nos ordinateurs portables. 3.5. Topologie réseau 3.5.1. Adressage Comme on peut le constater sur le schéma de notre réseau (voir Topologie physique), notre adressage comporte des adresses IPv6 et IPv4. Les raisons qui nous ont poussé à choisir d avoir une double pile seront détaillées plus loin dans ce rapport. Notre choix d adressage IPv6 a été très simple. En effet la quantité d adresse disponible pour IPv6 est incroyable, de plus comme nous étions sur un réseau test nous avions une entière liberté quand à l adressage. Nous avons donc choisi pour d utiliser 2002:0:0:2::1/64 pour notre serveur. L adressage IPv6 comportant des mécanismes évolué pour gérer les adresses, toutes les autres adresses du réseau sont attribué par DHCPv6 : dibbler, et sont de la forme 2002::2:x:x:x:x/64. L adressage IPv4 a été choisi de façon arbitraire : du côté FAI les adresses sont de type 172.16.0.1 pour le serveur et 172..16.X.X, côté box. Du côté du réseau client les adresses sont de type 192.168.0.X. 6
3.5.2. Fonctionnement général Notre serveur, c'est-à-dire le FAI, reçoit sa connexion internet de l IUP en IPv4 sur l interface eth0. Pour des raisons que nous expliquerons dans la partie IPv6 du rapport, internet est ensuite acheminé sur la septbox, qui la distribue elle-même aux clients potentiels. Internet est donc distribué en IPv4 sur le réseau. Tous les autres services sont IPv6 en revanche. La septbox pour sa part embarque une distribution Linux minimale, qui se contente du point de vue réseau de gérer un point d accès Wifi, une carte TDM pour le téléphone et la configuration réseau de la zone client. Elle sert d interface entre notre serveur et les clients. Les cartes eth0 et eth1 sont d ailleurs reliées par un pont : br0. Comme nous avons opté pour une double pile IPv4, IPv6, la zone client possède un intranet IPv4. Les adresses IPv6 sont fournies par DHCPv6 : Dibbler mais nous aurions pu utiliser radvd. 3.6. Configuration du serveur 3.6.1. IPv6 Pour la mise en place des services réseau de base nous nous sommes heurtés à une difficulté majeure : IPv6. En effet IPv6, bien qu existant depuis longtemps, reste peu utilisé. Certes il existe différentes implémentations des services mais ceux-ci en sont encore trop souvent au stade expérimental. Dibbler par exemple pour fournir du dhcpv6, qui fonctionne mais qui n est pas tout à fait au point. On peut aussi noter la difficulté à partir de routeur logiciel à mettre en place des mécanismes d échange entre des réseaux IPv6 et IPv4. La coexistence des deux protocoles n est pas toujours évidente. Des mécanismes comme NAT-PT, Network Address Translation- Protocol Translator, permettent d encapsuler des paquets IPv6 dans des paquets IPv4 et des les désencapsuler. En fait cela fonctionne sur le même principe que le NAT en IPv4. Cependant l intérêt de ce concept reste limité puisque IPv6 est sensé supprimer la translation d adresse. Néanmoins pour notre problématique nous avons essayé de mettre en place ce mécanisme. En effet tous les équipements de l IUP sont en IPv4, notre adresse côté IUP étant 10.101.33.221 par exemple. Pour avoir un réseau test totalement en IPv6 et autonome NAT- PT était particulièrement adapté. Malheureusement nous n avons pas trouvé le moyen de le faire tourner de façon logiciel sur nos machines. Les seuls exemples que nous ayons eu où NAT-PT fonctionnait correctement était les cas où celui-ci était implémenté sur des routeurs matériel. A la suite de cela estimant que nous avions déjà perdu trop de temps il a été décidé de distribuer internet dans notre réseau grâce à la mise en place d une double pile IPv4, IPv6. 7
En effet au début du projet nous avons perdu pas mal de temps à appréhender IPv6 que nous ne connaissions pas du tout. 3.6.2. FTP, HTTP, DNS, POSTFIX, SMTP, IMAP, POP Nous avons déjà configuré maintes et maintes fois ces services depuis que nous sommes étudiants, aucune difficulté majeure n a été rencontrée si ce n est se mettre à jour pour les configurer aussi en IPv6. Serveurs utilisés ftp http dns pop, imap smtp pure-ftp apache2 bind9 courier postfix On peut noter quelques petites choses intéressantes pour la configuration du serveur DNS : à la place des enregistrements «A @IPV4», il faut mettre «AAAA @IPV6», et pour les enregistrement PTR» ip6.arpa..». De plus pour activer IPv6 il faut ajouter dans la section options de names.conf : «listen-on-v6 {any ;} ;. Un outil très intéressant existe pour effectuer divers calculs d adresse IPv6 comme par exemple calculer le reverse d une adresse IPv6 : ipv6calc. Ex : ipv6calc --out=revnibbles.arpa 2001:6f8:379:0:213:ceff:fe0d:355b No input type specified, try autodetection...found type: ipv6addr b.5.5.3.d.0.e.f.f.f.e.c.3.1.2.0.0.0.0.0.9.7.3.0.8.f.6.0.1.0.0.2.ip6.arpa. 8
4. Mise en place du FAI 4.1. Gestion des abonnés : LDAP 4.1.1. Pourquoi un annuaire LDAP? Un annuaire LDAP est une structure arborescente contenant des entités telles que des personnes (cn), des unités organisationnelles (ou) ou des groupes (o). Chaque entité est définie par des attributs (nom, prénom, numéro de téléphone ) et une ou plusieurs classes (type de compte utilisateur par exemple). Les annuaires LDAP contiennent généralement des personnes et des groupes de personnes, mais peuvent également être utilisés pour définir une structure DNS. La tendance actuelle est d ailleurs d utiliser le nommage DNS pour les éléments de base de l annuaire (racine et premières branches). Pour gérer des groupes d utilisateurs, un annuaire LDAP nous a ainsi paru plus indiqué et surtout plus pratique qu une base de données SQL. Nous avons choisi le serveur OpenLDAP. Il sera utilisé pour le serveur de courriel Postfix, le serveur FTP PureFTP et le PBX Asterisk. 4.1.2. Installation d OpenLDAP et structure de l annuaire OpenLDAP est disponible dans la liste des packages Debian, son installation est donc très simple. La racine de l annuaire est définie logiquement par dc=septnains,dc=fr, et l administrateur principal par cn=admin,dc=septnains,dc=fr. Une unité organisationnelle ou=utilisateurs,dc=septnains,dc=fr rassemble les trois types de groupes d utilisateurs (ou=ftp ; ou=mail ; ou=pbx), lesquels regroupent respectivement les comptes utilisateurs FTP, e-mail et Asterisk. Afin de permettre la création de chacun des trois types de comptes, il est nécessaire d inclure dans OpenLDAP trois schémas différents : l un pour PostFix, l un pour PureFTP et l autre pour Asterisk. Ils sont disponibles sous la forme de trois fichiers à copier dans le répertoire /etc/ldap/schema. Une modification du fichier de configuration /etc/ldap/slapd.conf et un redémarrage du daemon slapd permettent leur prise en compte effective par OpenLDAP. Chaque compte utilisateur est créé via l interface Web lorsqu un client s inscrit. De plus, l interface Web PhpLdapAmin (uniquement accessible à l administrateur en HTTPS) permet d avoir une vue globale de l annuaire et de modifier à la volée quelques champs : 9
4.2. Le Webmail Horde : installation Nous avons choisi le groupware Horde, qui rassemble le webmail IMP et divers outils comme un calendrier et un gestionnaire de contacts. Nous nous sommes appuyés sur le tutoriel disponible à l adresse : http://starbridge.org/spip/spip.php?article35. Horde nécessite la librairie PHP Pear ainsi qu une base de données MySQL pour stocker les préférences des utilisateurs. Nous ne détaillerons pas l installation et la configuration de MySQL, qui se résument à installer quelques packages Debian. On décompresse l archive de Horde dans le répertoire var/www/horde, puis on exécute la page var/www/horde/test.php qui va permettre de vérifier notre configuration (librairies PHP installées, adresses des serveurs POP, IMAP et SMTP ). Si la configuration est OK, on passe à la configuration de Horde en exécutant : php /var/www/horde/scripts/setup.php Cette configuration comporte plusieurs étapes : Sélection de l utilisateur de la base : horde Création de la base par l utilisateur MySQL root Sélection de l administrateur du webmail 10
On crée finalement l utilisateur horde dans MySQL : mysql -u root -p GRANT SELECT, INSERT, UPDATE, DELETE ON horde.* TO 'horde'@'localhost' IDENTIFIED BY 'chfchf'; FLUSH PRIVILEGES; quit Le webmail est désormais pleinement utilisable à l adresse http://septnains.fr/horde! 4.3. Sécurité Il nous a paru important d apporter un minimum de sécurité au serveur Web, du moins pour l accès à la console de gestion de compte utilisateur et le webmail. Exception faite du paiement en ligne, les opérateurs actuels font en effet trop souvent l impasse sur cet aspect, permettant ainsi la libre circulation des données personnelles des utilisateurs. Pourtant, la mise en place d un serveur sécurisé (SSL ou TLS) est une fonctionnalité du serveur Apache ne nécessitant pas la mise en place d une infrastructure particulière. Afin de mettre en place ce serveur sécurisé, nous nous sommes appuyés là aussi sur le tutoriel disponible à l adresse : http://starbridge.org/spip/spip.php?article35. 4.3.1. Activation du SSL dans Apache On exécute la commande : a2enmod ssl Puis on crée un virtual host en éditant le fichier /etc/apache2/sites-available/ssl, et on ajoute la ligne listen 443 dans etc/apache2/ports.conf, qui est le port par défaut du HTTPS. On active le virtual host par la commande a2ensite ssl. 11
4.3.2. Génération des certificats Pour un serveur en production, il est préférable d utiliser un véritable certificat fourni et signé par une autorité de confiance (comme VeriSign). Ce service étant payant, nous génèrerons nous-mêmes nos certificats. En premier lieu, on commence par générer un certificat racine, qui sert à signer les certificats : /usr/lib/ssl/misc/ca.pl -newca On crée maintenant une clé privée pour le serveur ainsi qu un certificat public non signé. On prend bien soin de créer un certificat avec le même nom que celui utilisé pour la connexion : www.septnains.fr. On signe ensuite le certificat public avec le certificat racine : cd ~/CERT openssl req -new -nodes -keyout septnains-key-www.pem -out septnains-reqwww.pem -days 3650 puis : cd ~ openssl ca -out CERT/ septnains -cert-www.pem -infiles CERT/ septnains-reqwww.pem cd CERT/ cat septnains-key-www.pem septnains-cert-www.pem > septnains-certkeywww.pem mkdir /etc/apache2/ssl cp septnains-certkey-www.pem /etc/apache2/ssl/ chmod 600 /etc/apache2/ssl/ septnains-certkey-www.pem On termine la configuration en redémarrant le serveur Apache. 12
5. Asterisk 5.1. Contexte actuel de la VoIP De nos jours, un service de téléphonie par Internet est devenu incontournable chez un fournisseur d accès. Permettant de bénéficier de tarifs particulièrement avantageux, il est accessible en branchant directement un téléphone analogique sur une «box» haut-débit (ADSL, câble ou fibre optique). 5.2. Historique d Asterisk Asterisk est né en 1999, créé par Mark Spencer, un étudiant de l'université d'auburn (Etats- Unis - Alabama). À la recherche d'un commutateur téléphonique privé pour créer un centre de support technique sur Linux, il est dissuadé par les tarifs trop élevés des solutions existantes, et décide de se créer son propre routeur d'appels sous Linux, le PBX Asterisk. Quelque temps après, il crée la société Digium, fournisseur de cartes FXO et FXS compatibles avec Asterisk. Asterisk est un PBX applicatif open source permettant d'interconnecter en temps réel des réseaux de voix sur IP via plusieurs protocoles (SIP, H323, ADSI, MGCP) et des réseaux de téléphonies classiques via des cartes d'interface téléphonique et tout ceci à moindre coût. Asterisk offre toutes les fonctions d'un PBX et les services associés comme la conférence téléphonique, des répondeurs interactifs, la mise en attente d'appels, des mails vocaux, la musique d'attente, la génération d'enregistrement d'appels pour l'intégration avec des systèmes de facturation, etc... 13
5.3. Intégration d Asterisk Chez notre FAI, septnains.fr, Asterisk est mis en place en tant que proxy SIP sur le serveur principal. Un proxy SIP permet à des clients de VoIP de s enregistrer en échangeant avec ceux-ci des messages SIP, dont la syntaxe est proche de HTTP. Lorsqu un client désire effectuer un appel, il fait une demande auprès du proxy SIP, puis les clients négocient les codecs utilisés pour la conversation et communiquent directement entre eux. La SeptBox utilise également Asterisk afin de relier un téléphone RTC à une carte Digium TDM400P. 5.4. Serveur principal 5.4.1. Stockage des utilisateurs et des plans d appel Asterisk est installé sur le serveur en tant que proxy SIP. La base des utilisateurs se trouve dans l annuaire LDAP du serveur, et les plans d appels dans le fichier de configuration extensions.conf. Annuaire LDAP des utilisateurs SIP : 14
Schéma d un utilisateur SIP : oxypbxaccountcallerid : contient le nom et le numéro de téléphone présentés lorsque cet utilisateur appelle un correspondant. Ce champ peut être vidé via l interface Web si l utilisateur en fait la demande. oxypbxaccountcontext : contexte d appel, c est-à-dire groupe de plans d appels spécifiques à cet utilisateur. oxypbxaccounthost : spécifie si le client SIP est restreint à une seule adresse IP ou bien à n importe laquelle (dynamic). Ce champ ne sera pas modifié. oxypbxaccountmailbox : identifiant du compte de messagerie vocale de l utilisateur. oxypbxaccountsecret : mot de passe SIP de l utilisateur. oxypbxaccounttype : spécifié si l utilisateur peut effectuer des appels entrant et sortant ou bien l un des deux. oxypbxaccountusername : nom d utilisateur SIP. 15
5.4.2. Installation d Asterisk La compilation d Asterisk (version 1.4.13) se fait très simplement. Une fois décompressé le fichier tar.gz, il suffit de se placer dans le dossier où ont été décompressés les fichiers, puis d exécuter les trois commandes suivantes :./configure make make install Toutefois, l obsolescence des machines fournies avec le projet implique un temps de compilation très long. Asterisk ne supportant pas LDAP par défaut, un module LDAP externe en C (res_ldap.c) a dû y être inclus. Ce fichier source doit être copié dans le dossier res du dossier de décompression des fichiers avant la compilation d Asterisk. Le module a toutefois 16
l inconvénient d être mal fini, ce qui fait qu une modification du schéma LDAP d Asterisk a dû être effectuée afin d autoriser l ajout d un utilisateur dans la base LDAP. Ce schéma n est en outre pas fourni avec le module, et a dû être téléchargé sur un forum traitant d Asterisk. Mais le plus gros défaut de ce module est la gestion des plans d appels qui est buggée, en plus d alourdir considérablement l annuaire LDAP. Les plans d appels sont donc restés dans le fichier extensions.conf. 5.5. La SeptBox Asterisk permet d utiliser une carte Digium TDM-400P afin de relier un téléphone analogique à la box. Notre carte TDM comporte un port FXO pour la relier au réseau téléphonique RTC. Nous n utiliserons pas cette fonctionnalité. En revanche, nous utilisons le port FXS qui génère une tonalité et autorise ainsi la connexion d un téléphone analogique. Pour utiliser la carte, il est nécessaire de compiler d abord le module Zaptel (chargé d assurer la communication entre la carte et Asterisk), puis Asterisk. La compilation se déroule exactement de la même manière qu Asterisk. Ensuite, les réglages de la carte (annulation d écho, association des ports aux canaux FXO/FXS, choix du pays d utilisation, 17
activation de l identification de l appelant ) se font dans le fichier de configuration zapata.conf stocké dans la box. Ici, Asterisk (en utilisant le module Zaptel) joue le rôle de PABX, ce qui signifie qu il va permettre la communication entre le réseau VoIP du FAI et le téléphone RTC branché à la SeptBox. Lors de l enregistrement de la box sur le proxy SIP, le serveur principal reconnaît un utilisateur stocké dans l annuaire LDAP. 5.6. Matériel et softphones utilisés Un téléphone sans-fil DECT appartenant à l un des membres du groupe a été utilisé sur la box, tandis que le softphone X-Lite était installé sur le client du FAI. 5.7. Services de téléphonie Tous les services de téléphonie proposés sur l interface Web ont pu être conçus grâce aux plans d appels d Asterisk. Les plans d appels sont une succession de fonctions de téléphonie base s exécutant dans un ordre précis quand un numéro ou une extension est composé. Ils se trouvent dans le fichier extensions.conf. 18
Plusieurs services sont proposés grâce aux plans d appels d Asterisk : Présentation du nom et du numéro : l utilisateur a la possibilité de communiquer au destinataire ses nom et prénom et son numéro de téléphone, mais également de désactiver cette fonctionnalité via l interface Web de gestion de la téléphonie. Une modification du champ oxypbxaccountcallerid dans l annuaire LDAP est nécessaire pour gérer cette fonctionnalité. Transfert d appel : l abonné peut transférer l intégralité des appels reçus en permanence (transfert inconditionnel) ou bien après un temps de non-réponse (transfert après non-réponse). 19
Le plan d appel suivant transfère les appels à destination de l utilisateur remy_frerot vers l utilisateur charleshenri_floret si remy_frerot ne répond pas au bout de 15 secondes, puis raccroche si charleshenri_floret ne répond pas à son tour. exten => 2000,1,Dial(SIP/remy_frerot,15) exten => 2000,2,Dial(SIP/charleshenri_floret,15) exten => 2000,3,HangUp() Restrictions des appels sortant : l abonné a la possibilité d interdire les appels sortant vers les numéros internationaux, les numéros surtaxés et les téléphones mobiles. Le plan d appel suivant interdit tout appel vers les téléphones mobiles : exten => _06.,1,Playback(vm-incorrect,5) exten => _06.,2,HungUp() Messagerie vocale : si l abonné ne répond pas au bout d un certain temps, l appelant a la possibilité de lui laisser un message sur sa boîte vocale. On utilise le plan d appel suivant pour l abonné charleshenri_floret : exten => 2000,1,Dial(SIP/charleshenri_floret,15) exten => 2000,2,VoiceMail(2000@septnains) Le message vocal est ensuite automatiquement envoyé par e-mail en pièce jointe à l abonné, sous forme d un fichier son. La consultation des messages est également possible en composant le 777, puis en tapant son mot de passe à quatre chiffres. 6. Services annexes 6.1. Envoi de SMS Un service d envoi de SMS à partir de l interface Web est disponible. Il s appuie sur un SDK en PHP du prestataire payant http://www.esendex.com. Ensuite, une simple fonction permet l envoi du SMS. 20
6.2. Envoi de fax De même, le service d envoi de fax via le Web fait appel au prestataire http://www.popfax.com. Ici, il est nécessaire d envoyer via une page PHP le fax en pièce jointe par e-mail à popfax.com. La récupération d une fonction PHP permettant l envoi de pièces jointes par e-mail a donc été nécessaire pour pallier aux limitations de la fonction mail() de PHP. Le champ Objet de l e-mail est rempli avec la clé fournie par le prestataire, et le corps de l e-mail permet de renseigner diverses options, par exemple si le document à envoyer contient plutôt du texte ou des images. 21
7. Interface WEB L un des objectifs du projet une fois le FAI opérationnel était de gérer les services de l abonné via une interface d administration Web. Le site du FAI est hébergé par la machine serveur. Celui-ci est disponible à l adresse www.septnains.fr. 7.1. Fonctionnalités gérées Le rapport contient déjà quelques screenshot du site, il est inutile d alourdir encore celui-ci avec de nouvelles captures. Voici un aperçu des fonctionnalités que propose l interface d administration : Création d un nouvel utilisateur Consultation de ses informations Gestion de la septbox Accès au Webmail Gestion des options de téléphonie Envoi de fax Envoi de SMS 7.2. Mécanismes d administration Pour réaliser l interface nous avons utilisé un moteur de template Smarty, php pour le côté dynamique et bien sur xhtml. 7.2.1. Ldap Lors de l ajout d un utilisateur ou de la consultation d un compte, voir pour la modification de certaines partie de la configuration du téléphone, nous avons eu besoin d attaquer la base ldap avec php. Tout le monde sais comment attaquer des bases sql mais il est apparut en faisant un peut de recherche qu il est plus rare de trouver des personnes utilisant ldap. Dans beaucoup d entreprise pourtant ldap est utilisé pour gérer les utilisateurs. L objet ici est donc de détailler de façon bref comment récupérer ou écrire des données d une base. Ldap_bind permet de se connecter à la base. $dn = "cn=admin, dc=septnains, dc=fr"; $r=ldap_bind($ds, $dn, "chfchf"); if (!$r) die("liaison impossible au serveur LDAP..."); 22
Ici on définit des filtres de recherche pour le login et le numéro. Le numéro sert en fait à comparer le password asterisk et le password donné par l utilisateur. Ensuite on utilise les filtre définit avec ldap_search. // Utilisateur ou numéro existe? $dn = "dc=septnains,dc=fr"; $filtre_login = "uid=".$prenom."_".$nom.""; $filtre_numero = "uid=".$numero."-1"; $sr_login = ldap_search($ds, $dn, $filtre_login); $sr_numero = ldap_search($ds, $dn, $filtre_numero); Enfin voice un exemple de creation de compte ftp dans notre base. On remplit un tableau avec les informations puis on appelle ldap_add. // Creation compte ftp $objectclass_ftp = array ( '0' => 'top', '1' => 'inetorgperson', '2' => 'posixaccount' ); $info_ftp = array ( 'cn' => $prenom."_".$nom, 'gidnumber' => '108', 'homedirectory' => '/home/utilisateurs/'.$prenom.'_'.$nom.'/ftp/', 'objectclass' => $objectclass_ftp, 'sn' => $prenom."_".$nom, 'uid' => $prenom.".".$nom, 'uidnumber' => '108', 'userpassword' => $mdp ); $r = ldap_add($ds, "cn=".$prenom."_".$nom.",ou=ftp,ou=utilisateurs,dc=septnains,dc=fr", $info_ftp); 23
7.2.2. ssh2 Pour modifier ou consulter les fichiers de la septbox depuis le serveur où est stocké le site. Il existe une lib très pratique pour ssh et vraiment très puissante : libssh2. Malheureusement il n existe qu un seul moyen de s en servir - sur notre Debian du moins : télécharger les sources de la lib et les compiler. Cette étape effectuée on peut utiliser les fonctions de cette lib, qui s est révélée indispensable pour l interface Web. 8. Conclusion Si nous avons choisi le projet IUPBox, c est parce qu il touchait à des domaines très variés du monde des réseaux : IPv6, LDAP, Apache, serveurs mails, SIP, PHP Et il est clair que ce projet, très long, a grandement amélioré nos connaissances! Nous sommes partis d une connaissance embryonnaire d IPv6, LDAP et Asterisk pour arriver finalement à faire interagir tous ces éléments entre eux. Nous nous étions donné pour but de mettre en place la plupart des services proposés par les FAI actuels, en y apportant des améliorations comme IPv6, sans oublier l indispensable box donnant accès à la VoIP. Nous avons réussi à créer un FAI fonctionnel. 24