Académique Documents
Professionnel Documents
Culture Documents
Administration Et Supervision Des Reseaux v2020
Administration Et Supervision Des Reseaux v2020
Samuel OUYA
Plan du Cours
La supervision vise à :
• Faciliter la gestion du réseau
• Améliorer la Qos, la fiabilité et la disponibilité du réseau
• Garantir le respect du contrat de service signé avec les prestataires
• Prévenir les tentatives d’intrusion non autorisées
1.7. Méthodes de supervision Réseau
1.7.1. La méthode Ad hoc qui consiste à utiliser des outils classiques tels que :
Ping, traceroute, netstat, telnet, ssh, whois, dig, nslookup … et les fichiers log et les systèmes de
log
1.7.2. La méthode basée sur l’utilisation d ‘un protocole de gestion de réseau tel que
SNMP (Simple Network Management Protocol)
• /var/log/auth.log qui contient toutes les tentatives d’accès au serveur. Il peut être
utile de filtrer le contenu, par exemple : cat /var/log/auth.log | grep authentication
failure ;
• /var/log/message et /var/log/syslog contient un peu de tout (erreurs, bugs,
informations, etc) ;
• /var/log/fail2ban est le log d’alerte du service fail2ban qui permet de controler les
tentatives de connexion sur des services linux. Cherchez notamment : cat
/var/log/fail2ban | grep ban ;
• /var/log/snort/alert vous indiquera les logs d’alertes de Snort qui est un detecteur
d’intruision;
• /var/log/rkhunter pour voir les rapports quotidiens de Rkhunter qui est un detecteur
de programme qui accède frauduleusement à un système appelé rootkit. Faites
attention aux erreurs trouvées, ce n’est pas bon signe (même si le risque de faux positifs
existe ici).
2.2. Surveillance de log de services de base :
2.2.1. Les fichiers log : serveurs de bases de données, serveurs Web,
serveurs de mail, serveur FTP etc...
Il est aussi important d’activer des fichiers logs des principaux serveurs tels que :
Serveurs de bases de données, serveurs Web, serveurs de mail, serveur FTP etc, pour se
familiariser avec les fichiers logs on vous demande d’effectuer les manipulations suivantes :
Nous allons modifier ce fichier comme suite en décommantant les deux lignes comme suit
.
On démarre apache2 avec service apache2 start puis on se rend dans un navigateur
Pour visualiser notre journal log on revient sur le terminal et on tape tail.
/var/log/apach2/access.log
• Activation du fichier log de postfix
On vérifie si la visualisation du fichier log de postfix est activer pour cela on se rend dans
/etc/postfix/postfix.script
Après avoir effectué quelque configuration on se rend dans /var/log/ puis on lance les
commandes suivants avec tail.
1.3. Les firewalls
Il est important de quand on gère un ensemble de serveurs de disposer d’un firewall pour filtrer
les trafics en autorisant que les échanges permis par l’administrateur.
Un firewall analyse tout le trafic et vérifie si chaque si chaque paquet échangé respecte bien les
critères de filtrage fixés.
Les critères peuvent être divers (filtrer les ports, les protocoles, les adresses IP, etc…
En règle générale un bon firewall doit tout bloquer par défaut et l’administrateur ne doit
autoriser que certain trafic.
Sous linux on utilise l’utilitaire Iptables soit mettre en place un firewall ou faire la translation
d’adresse ou port appelé NAT ou PAT
Exemple :
❖ Outils iptables:
• On bloque par défaut tout le trafic : si vous êtes en ssh, bien entendu, n’exécutez pas
encore le script
Plus nous serons précis, plus nous serons sécurisés. Renseigner ces quelques options est donc le
minimum. Ainsi, une règle simple aura la forme suivante :
Notez enfin que si vous voulez un échange, il faut toujours ouvrir le port dans les deux sens (INPUT
et OUTPUT)... logique.
Exemple si l’on a un serveur web (port 80) :
Il ne vous reste qu’à spécifier toutes les règles nécessaires. Voici un petit tableau pour vous
aider (il s’agit de données par défaut) :
❖ Outil netstat
Netstat –anp | grep –w numero_port permet de voir le ou les services qui utilisent ce port
❖ nmap
nmap address_IP permet d’avoir la liste de tous les ports ouverts sur une machine dont l’adresse
a été spécifiée
img5
En fait nmap permet de faire un scan de tous les ports ouverts.
On peut aussi limiter un tant soit peu le scan de ports (qui consiste à tester tous vos ports afin
de détecter ceux qui sont ouverts). Pour cela, une règle de ce genre irait :
Ce genre d’attaque vise à surcharger la machine de requête. Il est possible de s’en prémunir
pas mal directement au niveau du firewall :
La démarche qui va suivre va vous montrer comment réagir à chaque étape d’une tentative
intrusion classique, à savoir
Cet utilitaire permet de bloquer en temps réel la plupart des scans de port connus (même
très discrets et échappant aux règles de filtrage du firewall basiques). Je rappelle au passage
que scanner les ports signifie tester tous les ports d’une machine afin de déterminer ceux
qui sont ouverts (les portes d’entrées en gros). Cependant, il ne faut pas paniquer si votre
serveur est la cible d’un simple scan de port, cela sera monnaie courante, et si vous êtes bien
protégé, le pirate passera sa route.
Pour le configurer :
o nano /etc/portsentry/portsentry.conf
Ainsi, Portsentry ajoutera une règle dans le firewall (iptables) pour rejeter les paquets en
cas de scans.
On démarre le logiciel (il faut le lancer deux fois, pour TCP et UDP) :
o portsentry –audp
o portsentry –atcp
Vous pouvez tester tout ça avec nmap (si vous voulez tester en local, il vous faut modifier le
fichier portsentry.ignore en enlevant le localhost).
1.4.2. L’outil fail2ban
Définition : fail2ban
fail2ban est un service permettant de contrôler les tentatives de connexion de divers
services sous linux (ssh, apache, mail etc).
On peut limiter le nombre de tentatives consécutives à un service d'une même personne et
la bloquer pour un temps plus ou moins long.
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
Ici donc nous avons géré la prison SSH, c'est à dire l'authentification à votre serveur. Pour
activer celle-ci, il suffit de passer le paramètre enabled à true. Nous avons reduit le
nombre de tentatives à avant le blocage de l'IP de l'intrus avec le paramètre maxretry.
Le paramètre port contient pour l'instant "ssh" qui est en réalité un alias de 22, qui est le
port par défaut de SSH sous linux.
Ce qui nous donne une fois terminé notre configuration :
[apache]
enabled = false
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6
On peut aussi des prisons fail2ban pour se premunir r contre les scans d'url à la recherche
de faille de sécurité et contre les attaques de type DDOS sur beaucoup de services réseaux.
• Tester la configuration
Commençons par redémarrer le service pour que notre configuration soit prise en
compte :
fail2ban-client reload
Maintenant nous allons consulter le fichier log de fail2ban pour vérifier que tout est OK :
tail -n 300 /var/log/fail2ban.log
o Interdire les utilisateurs sans mot de passe (ce sont d’énormes failles potentielles)
o toujours choisir de bons mots de passe : 8 caractères minimum, pas un mot qui se
trouve dans le dictionnaire, si possible des chiffres, des majuscules, des
symboles... au besoin, un outil comme pwgen vous en génèrera automatiquement
des bons (apt-get install pwgen)
SSH
En premier lieu, il faut regarder du côté de ssh, puisque c’est tout de même un accès direct
à votre machine.
Pour ce faire...
nano /etc/ssh/sshd_config
... et il est conseillé de changer les champs suivants :
- Port : le port par défaut est 22... et n’importe quel attaquant le sait. Changer le port force à effectuer
un scan (ou équivalent) avant de réfléchir à attaquer (attention de bien changer le port dans le
firewall) ;
- PermitRootLogin : mettre à « no » afin d’interdire le login en root ;
- AllowUsers : indique une liste d’utilisateur autorisé à se connecter via ssh. Cela peut être utile si
vous avez des utilisateurs qui ne sont pas censés se connecter sur la machine.
Et on redémarre :
/etc/init.d/ssh restart
Apache
Apache - le serveur web le plus courant - donne par défaut de nombreuses informations à quiconque
s’y connecte. Vu que cela ne sert à rien que votre serveur web donne au monde votre distribution
Linux, autant limiter cela :
nano /etc/apache2/apache2.conf
Passez ServerSignature à « off » et ServerTokens à « Prod » pour rendre votre serveur web plus
discret.
/etc/init.d/apache2 restart
Autres
Pour la plupart des logiciels de base, il existe quelques recommandations de prudence. Voici une liste
non exhaustive :
service conseil
interdire les accès sans mot de passe (on peut exécuter l’utilitaire
mysql
/usr/bin/mysql_secure_installation fourni avec mysql-server)
Les backdoors. Si par malheur un attaquant arrive à prendre possession d ‘une machine il y laisse
une backdoor (porte dérobée) qui lui permettrait d’en reprendre le contrôle plus tard, ainsi qu’un
rootkit pour la dissimuler : l’attaquant maintient ainsi un accès frauduleux à la machine a laquelle
il ya eu intrusion.
Un rootkit est un programme qui maintient un accès frauduleux à un système informatique et cela
le plus discrètement possible, leur détection est difficile, parfois même impossible tant que le
système d'exploitation fonctionne. Certains rootkits résistent même au formatage car ils peuvent
s'introduire directement dans le BIOS. Ils existent sous Linux depuis longtemps (car le noyau est
ouvert et modulaire).
Un Webkit quant à lui permet de prendre l'accès d'une machine via une faille puis par port http et
de prendre l'accès sur le système.
Rkhunter est un utilitaire qui est chargé de détecter d’éventuels rootkits sur votre serveur. Il est
relativement léger (s’exécute une fois par jour par défaut).
apt-get install rkhunter
L’utilitaire nmap permet de decouvrir des ports qui sont ouverts sur une machine donnée :
L’utilitaire netstat aussi de donner des informations sur un service qui tourne sur un serveur
Netstat –anp | grep –w 80 : permet de voir le service qui tourne sur port 80 de la machine
• SNMP permet
o de surveiller « à chaud » les éléments du réseau (routeur, station de travail,
imprimante…) en collectant des informations sur leurs états et leurs
comportements
o de gérer la configuration des éléments du réseau
• SNMP est un protocole d’administration se voulant simple et donc facile à implémenter
• En termes de modélisation, SNMP définit un format universel de représentation des
informations d’administration
• En termes de transport, SNMP définit un protocole permettant l’échange de ces
informations pour n’importe quel terminal.
Historique
❖ Historique SNMPv1
Historiquement, la version initiale SNMPv1 sortie en 1998, est devenue et reste le standard
de facto dans la communauté Internet
Cette version est largement critiquée du fait du manque de sécurité :
o L’authentification se base sur un mot de passe (champs community string)
transporté en clair sur le réseau
❖ Historique - SNMPv2
SNMPv2 reprend le modèle de SNMPv1 et comble ces lacunes fonctionnelles :
o Introduit une communication entre managers
o Améliore la modélisation des objets (qui reste proche de SNMPv1)
o Introduit une primitive limitant le nombre d’objets regroupés et envoyés sur le
réseau
o Améliore la structure des messages de notifications
o SNMPv2C est la version expérimentale/intermédiaire majoritairement utilisée.
Or, elle n’inclut pas le nouveau modèle de sécurité de l’époque qui est très
controversé
❖ Historique - SNMPv3
• Fait basculer le modèle client-serveur de SNMPv1/v2 dans le modèle peer-to-peer et
modulaire
o la notion de maître/esclave est remplacée au profit de celle d’entité
o L’ensemble des fonctionnalités est décomposée en modules
• Fournit un réel support en matière de sécurité : confidentialité, authentification, intégrité
des messages
3.2 Architecture client-serveur SNMP
Client Serveur
Manager
Le rôle du manager est soit :
• d’envoyer des commandes de contrôle aux agents pour en recevoir des réponses
• de recevoir des notifications venant des agents
Agent
Fig. 3.5 : Lien entre Agent et MIB
• L’agent fournit un accès à un objet local MIB qui reflète l’état des ressources et
l’activité de l’hôte
• L’agent répond aux commandes du manager en retournant les valeurs de la MIB et en
assignant des valeurs
• Exemples d’objets :
o un compteur comptabilise le nombre de messages reçus sur un lien (permet
au manager de surveiller l’activité/la charge du réseau au niveau d’un nœud)
o L’état du lien peut être placé en mode inactif en assignant la valeur
correspondante
Compatibilité entre les versions 1 et 2 de SNMP
SNMPv3 et la sécurité
• Les algorithmes de hachage MD5 et Secure Hash (SHA) sont utilisés pour calculer des
hashs.
o Se prémunir contre des attaques modifiant les données
o Fournir indirectement une authentification de l’origine
o Se défendre contre des attaques de type mascarade
• Une synchronisation avec des indicateurs de temporisation permet de se prémunir de
certaines attaques de modificati$$$$$on de flux. A cet effet, un mécanisme de
synchronisation d’horloge sans intervention d’un tiers est proposé :
o Les messages sont chiffrés en ayant recours à DES (Data Encryption Standard)
o Un contrôle d’accès aux informations et aux terminaux administrés est
proposé
3.3 Protocole SNMP
Modèle d’interaction
• SNMP se base sur 5 primitives lui permettant de réaliser des actions sur une MIB
• Notifications est le message non sollicité (asynchrone) envoyé par l’agent au manager
o Trap : indication de déroutement
o SNMPv2-trap : indication de déroutement provenant d’un agent SNMPv2
• Information non sollicitée envoyée entre 2 managers
o InformRequest (avec SNMP v2)
• Le PDU est constitué de 5 champs dont varbin List (pour variable binding list) qui est de
type construit (séquence de Varbin)
• Varbind list :
• Séquence constituée de la paire OID-valeur
o Représente une liste de variables
o Suivant le type de message, la valeur diffère.
• Par exemple, pour
o SetRequest : la valeur correspond à celle de l’OID spécifiée
o GetRequest : valeur est NULL
o GetResponse la valeur correspond à celle de l’OID de l’agent SNMP spécifié
Code d’erreur – SNMPv1
• Avec SNMPv2, la structure d’une trap se simplifie : les informations sont stockées dans le
champs Varbin list sous la forme d’attributs (OID-valeur)
Tab.3.5 : Format d’une trap – SNMPv2
• SNMP formalise les échanges possibles entre les « entités » SNMP : agent(s) et un (ou
plusieurs) manager(s)
• SNMP modélise aussi les informations d’administration. A cet effet, il définie la structure
des objets administrés (MIB) en se basant sur la syntaxe SMI (Structure of Management
Information)
3.4 Représentation des données MIB
Les paramètres pouvant être examinés ou modifiés par l’agent sont définis dans une MIB
(Management Information Base), qui est un document décrivant ces différentes paramètres,
leur type (nombre entier, chaîne de caractères...), s’ils sont modifiables ou non (dans l’absolu,
indépendamment des droits d’accès), etc.
La MIB la plus utilisée est certainement la MIB-II, décrite dans le RFC 1213, qui définit un
ensemble cohérent de paramètres communs à tous les équipements. C’est cette MIB que nous
étudierons par la suite.
Chaque élément d’une MIB est défini par un nom et un numéro (comme d’habitude, on
retrouve cette dualité, les noms étant plus faciles à manipuler pour nous, pauvres humains,
et les nombres plus faciles à manipuler par les ordinateurs). Ainsi, dans la MIB-II, l’objet
sysContact, indiquant le nom de la personne responsable d’un équipement, est défini ainsi :
SYNTAX indique le type de l’objet selon la syntaxe ASN.1 (Abstract Syntax Notation One).
ACCESS indique le mode d’accès à l’objet. Les valeurs suivantes sont possibles :
• read-only
• read-write
• write-only
• not-accessible
STATUS : Indique si l’objet doit obligatoirement être présent dans toute implémenta-tion
de la MIB ou pas. Les valeurs suivantes sont possibles :
• mandatory
• optional
• obsolete
DESCRIPTION : est un texte destiné à l’administrateur et qui décrit l’objet.
• La racine de la hiérarchie n’a pas de nom et est désignée simplement par un point.
• iso (1) désigne l’International Organization for Standardization.
• org (3) a été créé par l’ISO à l’intention de divers organismes.
• dod (6) a été attribué au ministère de la Défense des États-Unis (Department of
Defense).
• internet (1) regroupe tout ce qui touche à l’Internet.
• mgmt (2), enfin, est utilisé pour les standards de l’IAB.
Sous .iso.org.dod.internet.mgmt, la MIB-II a pour nom mib-2 et pour numéro 1, de telle sorte
que l’objet sysContact a pour nom absolu :
En pratique, cet objet est d’un type discret (ce n’est pas un tableau et il ne contient donc
qu’une valeur) donc on lui ajoute un .0 final, ce qui donne comme nom absolu :
Les objets pouvant contenir plusieurs valeurs se voient ajouter à leur nom un .1 pour la
première valeur, .2 pour la deuxième et ainsi de suite.
Les opérations
Sans rentrer dans le détail du protocole et des formats de paquets, il est néan-moins
intéressant de savoir un minimum comment fonctionne le dialogue entre un agent SNMP et
un logiciel d’administration.
Il existe grosso modo quatre types de messages :
Get permet de récupérer un objet bien précis.
Get next renvoie l’objet suivant (dans l’ordre lexicographique) celui passé en paramètre.
Ceci est particulièrement utile pour passer en revue toute une MIB.
Set permet de modifier la valeur d’un objet.
Trap permet à un agent d’envoyer un signal au logiciel d’administration et ce de son propre
chef. Les trois types de messages précédents étaient envoyés par le logiciel d’administration
à l’agent, celui-ci fonctionne en sens inverse. Il est très utile pour efectuer une surveillance
passive du réseau, les équipements se plaignant si nécessaire.
Les communautés
Dans SNMPv2, le contrôle d’accès est fait en fournissant dans chaque message un mot de
passe appelé communauté. Il existe généralement deux communautés, l’une utilisée pour les
accès en lecture (c’est par défaut la chaîne de caractères public), l’autre utilisée pour les accès
en écriture (c’est par défaut la chaîne de caractères private). Il est évidemment essentiel de
modifier ces valeurs et de les tenir secrètes.
net-snmp
La plupart des équipements réseau intègrent un agent SNMP. Certains logiciels également,
de même que les systèmes d’exploitation commerciaux. Les UNIX libres, quant à eux,
utilisent la suite logicielle net-snmp. Celle-ci regroupe un agent, divers outils d’interrogation
ainsi qu’une bibliothèque de fonctions C permettant de construire des agents SNMP ou
d’intégrer des capacités d’interrogation dans d’autres logiciels.
Nous étudierons en TP l’agent net-snmp ainsi que les outils qu’il fournit.
Chapitre 4 : Étude détaillée d’un outil de
supervision réseau (NAGIOS)
• Introduction à NAGIOS
NAGIOS a été développé par Ethan GALSTAD et débute sont histoire en 1999 sous le nom de
TetSaint. Libre sous licence GLP et multiplateformes, NAGIOS est utilisé dans les grandes
entreprises comme Toshiba, Sony Yahoo, …
NAGIOS est une application permettant la supervision des systèmes et réseaux informatiques
de l’entreprise.
Composé d’un moteur d’application, d’une interface web et des plugins, NAGIOS sert aussi
de méthode d’alerte par sms, email et notification …..
a) Windows
L’agent NSClient.
Client windows
Quelques switchs et hubs bon marché non manageables n'ont pas d'adresse IP et sont invisibles
sur votre réseau, il n'y a donc aucun moyen de les superviser. Les routeurs et switchs plus chers
ont une adresse assignée et peuvent donc être supervisés en les pingant ou en utilisant les agents
SNMP préinstallés SNMP pour avoir les informations de statut.
VUE GLOBALE
Vous pouvez ajouter maintenant quelques définitions de services (dans le même fichier de
configuration) pour superviser différents aspects de votre switch. Si c’est le *premier*
switch que vous supervisez, vous pouvez simplement modifier l’exemple de définition
d’hôte dans switch.cfg.
Remplacez linksys-srw224p dans les exemples de définitions ci-dessous par le nom que
vous avez renseigné dans le paramètre host_name que vous venez d’ajouter dans la
définition d’hôte.
a) WEB
Il y a de bonnes chances que vous ayez envie de superviser des serveurs web - que ce
soit le vôtre ou celui de quelqu'un d'autre. Le plugin check_http est juste fait pour ça.
Il fonctionne avec le protocole HTTP et peut superviser un temps de réponse, des
codes d'erreurs, des chaînes de caractères dans la réponse HTML, des certificats de
serveurs, et beaucoup plus encore.
Le fichier commands.cfg contient une définition de commande pour utiliser le plugin
check_http. Il ressemble à ceci:
Une définition simple de service pour superviser un service HTTP sur la machine
remotehost pourrait ressembler à ceci:
..1. SSH
Quand vous avez besoin de superviser des serveurs SSH, vous pouvez utiliser le plugin
check_ssh. Le fichier commands.cfg contient une définition de commande pour utiliser le
plugin check_ssh qui ressemble à ceci:
Une définition simple de service pour superviser un serveur SSH sur remotehost devrait
ressembler à ceci:
Cette définition de service va superviser le service SSH et générer des alertes si le serveur
ne répond pas dans les 10 secondes.
Une définition de service plus avancée est donnée ci-dessous. Ce service va vérifier le
serveur SSH et générer une alerte si le serveur ne répond pas dans les 5 secondes ou si le
numéro de version ne correspond pas à OpenSSH_4.2.
..2. SMTP
Le plugin check_smtp peut être utilisé pour superviser vos serveurs de messagerie. Le
fichier commands.cfg une définition de commande pour utiliser le plugin check_smtp qui
ressemble à ceci:
Une définition simple de service pour superviser un serveur SMTP sur remotehost devrait
ressembler à ceci:
Cette définition de service va superviser le service SMTP et générer des alertes si le serveur
SMTP ne répond pas dans les 10 secondes.
Une définition de service plus avancée est donnée ci-dessous. Ce service va vérifier le
serveur SMTP et générer une alerte si le serveur ne répond pas dans les 5 secondes ou si la
réponse du serveur ne contient pas la chaîne de caractères mygreatmailserver.com.
..3. POP3
Le plugin check_pop peut être utilisé pour superviser le service POP3 de vos
serveurs de messagerie. Le fichier commands.cfg une définition de commande pour utiliser
le plugin check_pop qui ressemble à ceci:
Une définition simple de service pour superviser un serveur POP3 sur remotehost devrait
ressembler à ceci:
Cette définition de service va superviser le service POP3 et générer des alertes si le serveur
POP3 ne répond pas dans les 10 secondes.
Une définition de service plus avancée est donnée ci-dessous. Ce service va vérifier le serveur
POP3 et générer une alerte si le serveur ne répond pas dans les 5 secondes ou si la réponse
du serveur ne contient pas la chaîne de caractères mygreatmailserver.com.
..4. IMAP
Le plugin check_imap peut être utilisé pour superviser le service IMAP4 sur vos serveurs
de messagerie. Le fichier commands.cfg une définition de commande pour utiliser le plugin
check_imap qui ressemble à ceci:
Une définition simple de service pour superviser un serveur IMAP4 sur remotehost devrait
ressembler à ceci:
Cette définition de service va superviser le service IMAP4 et générer des alertes si le serveur
IMAP ne répond pas dans les 10 secondes.
Une définition de service plus avancée est donnée ci-dessous. Ce service va vérifier le
service IMAP4 et générer une alerte si le serveur ne répond pas dans les 5 secondes ou si la
réponse du serveur ne contient pas la chaîne de caractères mygreatmailserver.com.
..5. FTP
Quand vous avez besoin de superviser des serveurs FTP, vous pouvez utiliser le plugin
check_ftp. Le fichier commands.cfg une définition de commande pour utiliser le plugin
check_ftp qui ressemble à ceci:
Une définition simple de service pour superviser un serveur FTP sur remotehost devrait
ressembler à ceci:
Cette définition de service va superviser le service FTP et générer des alertes si le serveur
FTP ne répond pas dans les 10 secondes.
Une définition de service plus avancée est donnée ci-dessous. Ce service va vérifier le
serveur FTP en écoute sur le port 1023 de remotehost. Une alerte sera émise si le serveur
ne répond pas dans les 5 secondes ou si la réponse que fait le serveur ne contient pas la
chaîne de caractère Pure-FTPd [TLS].
• Alerte (notification par mail, sms)
Conclusion – SNMP