B.T.S Informatique de Gestion Option Administrateur de Réseaux Locaux d Entreprise Session 2004/2005 EPREUVE PRATIQUE DES TECHNIQUES INFORMATIQUES Nom et prénom du candidat : TAGLIAFERRI Eric ACTIVITE N 1 Thème de l activité : Configuration d un firewall Compétences professionnelles mises en œuvre : C21 : Installer et configurer un micro-ordinateur C22 : Installer et configurer un réseau C23 : Installer et configurer un dispositif de sécurité C25 : Installer un applicatif C26 : Installer un périphérique C31 : Assurer les fonctions de base de l administration d un réseau C32 : Assurer les fonctions de l exploitation P : Programmation
ACTIVITE N 1 : CONFIGURATION D UN FIREWALL CONTEXTE DE L ACTIVITE Le domaine de vacances "Le Drakkar", situé dans la presqu'île du Cotentin (Normandie), est classé par la Fédération de Camping Caravaning dans la catégorie 3 étoiles. Il propose à ses clients des locations à la semaine avec trois possibilités d'hébergement : l'appartement, le bungalow ou la caravane pour un total de 150 emplacements. Le domaine dispose d une connexion à Internet permettant d héberger en interne le site Web de l Entreprise (réservation en ligne), et de proposer aux clients la location d un ordinateur relié au Web. Il serait jugé bon de pouvoir administrer à distance et de manière graphique le firewall gérant la sécurité du réseau. Cela permettrait de réduire le temps consacré à la configuration de ce dernier. OBJECTIFS Le travail à réaliser consiste à programmer une interface graphique pour iptables, qui est un firewall fonctionnant sous Linux. Le langage de programmation sera le langage Perl et le script devra permettre la communication à distance entre l application serveur et l application cliente fonctionnant sur la machine de l administrateur réseau, d adresse 192.168.200.10. Seule cette machine sera habilitée à configurer le pare-feu pour des raisons évidentes de sécurité. De même, une authentification par mot de passe serait souhaitable. Les machines ayant accès à Internet seront dotées d adresses privées afin de limiter le nombre d adresses IP publiques (trop onéreuses). Le routage NAT (Network Address Translation) devra donc être activé sur le routeur/firewall pour le réseau 192.168.200.0/24, la politique de sécurité par défaut étant de tout bloquer, à l exception des communications sur le port TCP 80 (http), et UDP 53 (DNS pour la résolution de noms). Un bouton sur l interface graphique devra permettre de réinitialiser les règles, en bloquant toutes les connexions par défaut sauf celles citées précédemment. Ces règles devront par ailleurs être réinitialisées lors du redémarrage de la machine. Le serveur Web, situé dans une DMZ (zone démilitarisée), devra être accessible depuis l extérieur afin de permettre la réservation en ligne des emplacements. On redirigera donc tout le trafic arrivant sur le port 80 de l adresse IP publique du routeur/firewall vers le port 80 de la machine d adresse 192.168.100.9. 1 LAN 192.168.200.0/24 INTERNET 1 DMZ 192.168.100.0/24 Serveur Web 192.168.100.9
ARCHITECTURES MATERIELLE ET LOGICIELLE Le routeur/firewall tournera sur la distribution Mandrake 10 de Linux. Il devra être doté de 3 interfaces réseau. On veillera à ce que Perl soit installé, tout comme sur la machine cliente (Windows 2000 Professionnel). Quant au serveur Web, Apache sera installé (configuration par défaut). REALISATION DU PROJET Programmation des scripts serveur et client On souhaite avoir une communication à distance entre les deux applications. Pour cela, une socket devra être créée en utilisant le module IO::Socket ::INET de Perl. Une socket est définie par une adresse IP et un port sur laquelle elle va écouter, ainsi qu un protocole de communication (ici TCP). Le client ira se connecter sur cet hôte distant (PeerHost) et sur le même port : $socket=io::socket::inet->new( PeerAddr=> 192.168.200.1, PeerPort=>5001, Proto=>'tcp') or die ("Impossible de se connecter au firewall!!") ; L interface graphique est quant à elle programmée grâce au module Tk. Ce qui sera saisi graphiquement sera envoyé au serveur grâce à cette socket donc par exemple pour modifier l adresse IP de l interface eth2 à distance : print $socket "ifconfig eth2 192.168.100.1" ; Installation du module Tk sur la station d administration Lors de l installation de Perl, par défaut le module Tk (qui servira pour l interface graphique) n est pas installé. Pour cela on utilise la commande ppm (ppm install Tk). Configuration du firewall Iptables Iptables est un pare-feu libre de droit pouvant s installer sur des systèmes Linux. On crée un script shell /PTI/reinit.sh contenant les règles de filtrage, et pour configurer le firewall automatiquement au démarrage il convient de rajouter dans le script /etc/rc.local une ligne indiquant l exécution de ce script au démarrage. Il est bien entendu d exécuter toutes ces commandes grâce à l interface graphique programmée. Ce script est disponible en annexe. On distingue plusieurs étapes lors de la configuration d un firewall :
On configure les adresses (fixes) des interfaces (grâce à ifconfig). On rajoute une passerelle par défaut (commande route add) On active le routage (echo 1 > /proc/sys/net/ipv4/ip_forward) On vide les chaînes de leurs règles (iptables F nom_chaîne) On fixe la politique de sécurité par défaut (iptables P nom_chaîne DROP) On active le routage NAT pour notre réseau local 192.168.200.0/24 On active le routage PAT à destination de notre serveur Web iptables A PREROUTING t nat d 192.168.1.81/32 p tcp -dport 80 j DNAT -to-destination 192.168.100.9:80 On autorise les connexions de notre réseau local à destinations des ports tcp 80 (http) et udp 53 (DNS) en utilisant la chaîne FORWARD (puisque les paquets seront routés). On ajoute chaque règle en fin de chaîne (iptables A FORWARD paramètres). On fait de même pour notre serveur Web. On autorise l administration à distance de notre firewall grâce à notre application (en utilisant les chaînes INPUT et OUTPUT). On exécute notre programme Perl en tâche de fond. L administration d un firewall iptables ne se limite pas aux commandes décrites dans le script précédent. On doit pouvoir également : Supprimer une règle de filtrage (iptables D nom_chaine numéro_règle) Modifier une règle de filtrage (iptables R nom_chaine numéro_règle nouveaux_paramètres) Visionner les règles de filtrage (iptables v L n --line-number) Afficher et modifier la configuration IP et la table de routage Ajouter ou retirer des réseaux accédant à Internet grâce au NAT, et accessible depuis Internet grâce au PAT (et visionner ces règles de filtrage). Le choix est maintenant offert à l administrateur réseau de configurer iptables soit en mode texte (en prenant par exemple le contrôle à distance du firewall grâce à ssh), ou en mode graphique :
ANNEXE 1-A : script serveur #!/usr/bin/perl use IO::Socket::INET; $SIG'CHLD' ='IGNORE'; #permet d'éliminer les processus fils en cas de déconnexion du client $socket = new IO::Socket::INET ( LocalHost => '192.168.200.9', LocalPort => 5001, Proto => 'tcp', Listen => 5, Reuse => 1 ) or die "impossible de creer la socket\n"; $socket -> autoflush ( 1 ); while ($chat = $socket -> accept ()) $pid_fils = fork (); if ($pid_fils == 0 ) while (defined ($message = <$chat>)) $ip = $chat -> peerhost (); ($passwd,$commande) = split (/\*/,$message); chomp $commande; print "ip $ip commande.$commande.\n"; if (($passwd eq "PT2NFVY2.5Qqw") && ($ip eq "192.168.200.10") && ($commande ne '')) print "client connecte \n"; @requete = `$commande`; print $chat "@requete"; $socket->autoflush(1); print $chat "fin\n"; elsif (($passwd eq "PT2NFVY2.5Qqw") && ($commande eq '')) $date = `date`; chomp $date; print "$date\n"; `echo "$ip : $date : authentification reussie" >> access.log`; print $chat "fin\n"; else $date = `date`; chomp $date; `echo "$ip : $date : commande : $commande : mot de passe ou ip incorecte" >> erreur.log`; print $chat "Erreur, mot de passe incorrect\n"; exit (0);
ANNEXE 1-B : script de démarrage #!/bin/sh #Tagliaferri Eric, BTS Informatique de Gestion 2005 #Configuration IP et table de routage printf "Configuration IP du firewall:\n"; ifconfig eth0 192.168.1.81 ifconfig eth1 192.168.200.1 ifconfig eth2 192.168.100.1 route add -net 0.0.0.0/0 gw 192.168.1.254 dev eth0 #Activation du routage echo 1 > /proc/sys/net/ipv4/ip_forward printf "Application des règles du firewall\n"; #On vide les chaines de leurs règles iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD #Règles de sécurité par défaut (tout est refusé) iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP #Réinitialisation de la table nat iptables -t nat -F #Activation du routage NAT pour le réseau 192.168.200.0/24 iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -j MASQUERADE #Activation du routage PAT vers le serveur Web iptables A PREROUTING t nat d 192.168.100.9/32 p tcp -dport 80 j DNAT -to-destination 192.168.100.9:80 # Le réseau 192.168.200.0/24 a le droit de surfer (port 80 ET 53) #Consultation des pages Web sur le port 80 iptables -A FORWARD -s 192.168.200.0/24 -d 0.0.0.0/0 -p tcp --sport 1024:65535 --dport 80 -j ACCEPT -m state --state NEW,ESTABLISHED iptables -A FORWARD -s 0.0.0.0/0 -d 192.168.200.0/24 -p tcp --sport 80 -- dport 1024:65535 -j ACCEPT -m state --state ESTABLISHED #Résolution de noms DNS (UDP 53) iptables -A FORWARD -s 192.168.200.0/24 -d 0.0.0.0/0 -p udp --sport 1024:65535 --dport 53 -j ACCEPT -m state --state NEW,ESTABLISHED iptables -A FORWARD -s 0.0.0.0/0 -d 192.168.200.0/24 -p udp --sport 53 -- dport 1024:65535 -j ACCEPT -m state --state ESTABLISHED #Configuration à distance du firewall iptables -A INPUT -s 192.168.200.10/32 -d 192.168.200.9/32 -p tcp --sport 1024:65535 --dport 5001 -j ACCEPT -m state --state NEW,ESTABLISHED iptables -A OUTPUT -s 192.168.200.9/32 -d 192.168.200.10/32 -p tcp --sport 5001 --dport 1024:65535 -j ACCEPT -m state --state ESTABLISHED printf "Firewall configuré correctement\n"; #Lancement du programme serveur d'administration à distance du firewall printf "Lancement du prgramme serveur d'administration à distance du firewall\n"; killall perl perl /PTI/serveur.pl&