vendredi 25 mai 2012, 17:21:00 (UTC+0200)

Compte utilisateur local & accès SSH sur un équipement Cisco

Les équipements réseau Cisco disposent d'un mode d'authentification minimal avec plusieurs niveaux de «privilèges». Historiquement, les deux niveaux couramment utilisés sont le premier et le dernier. Le niveau 1, baptisé User EXEC mode, est comparable à l'utilisateur normal d'un système GNU/Linux. Il ne donne accès qu'à la consultation d'informations telles que l'état des interfaces ou la table de routage. Le niveau 15, baptisé Privileged EXEC mode, est comparable au super utilisateur d'un même système GNU/Linux.

Comme les capacités d'un équipement réseau en matière d'usages multimédias sur l'Internet sont pour le moins limitées, l'utilisation du compte utilisateur normal ne présente pratiquement aucun intérêt. Si on se connecte à un équipement, c'est fatalement pour effectuer une opération de configuration qui nécessite des droits étendus sur le système. Voici donc la liste des commandes à implanter pour accéder directement au niveau Privileged EXEC mode tout en chiffrant les communications à l'aide du protocole SSH.

! Activation du modèle d'authentification AAA
aaa new-model

! Création de la liste d'authentification par défaut.
! Elle est appliquée automatiquement à toutes les interfaces.
! Elle utilise les comptes utilisateurs définis localement.
aaa authentication login default local

! Définition de la base locale comme source d'information
! sur les autorisations.
aaa authorization exec default local

! Création du compte utilisateur local avec les droits étendus.
username myusername privilege 15 secret mysecretpassword

! Définition du nom de domaine nécessaire pour la génération
! des clés SSH
ip domain name my-own.lab

! Génération des clés SSH
crypto key generate rsa label SSH-KEY modulus 4096

! Paramétrage du protocole SSH
! . version 2
ip ssh version 2
! . temps d'attente maximum pendant l'établissement de la connexion
ip ssh time-out 60
! . nombre maximum de tentatives de connexion avant réinitialisation
!   de l'interface
ip ssh authentication-retries 4

! Paramétrage interface d'accès console
! . déconnexion automatique après 5 minutes d'inactivité
! . entrée directe au niveau super utilisateur
! . synchronisation des messages système et de la journalisation
line con 0
 exec-timeout 5
 privilege level 15
 logging synchronous

! Paramétrage interface d'accès distant
! . déconnexion automatique après 5 minutes d'inactivité
! . accès via le protocole SSH uniquement
line vty 0 4
 exec-timeout 5 0
 transport input ssh

Voilà pour ce billet sur le mode pense-bête dont le code peut être copié/collé facilement.

vendredi 4 mai 2012, 19:15:54 (UTC+0200)

Introduction aux systèmes GNU/Linux

Vue architecture système

L'édition 2012 de la première présentation d'une série de 6 sur l'introduction aux systèmes GNU/Linux est disponible à la rubrique présentations. J'ai essayé de rendre «le propos» plus attrayant que lors des éditions précédentes réalisées avec Magicpoint.

Cette nouvelle publication a entraîné une révision des règles de construction des documents. La génération du fichier PDF correspondant au document source ODP se fait par un appel direct à libreoffice dans une règle de Makefile.


$(MAIN_DIR)/pdf/%.pdf: %.odp
        @if [ -z $(libreoffice) ]; then echo 'libreoffice indisponible'; exit 1; fi
        # Génération du fichier imprimable PDF
        @$(libreoffice) --headless --invisible --convert-to pdf -outdir $(MAIN_DIR)/pdf $?

Pour la création des images associées à chaque vue, pdftoppm a été abandonné au profit de convert, un des outils de la famille imagemagick. Avec convert, il est possible de contrôler la qualité du rendu des photos et autres graphiques en les «échantillonnant» avec des résolutions différentes. Pour les présantations publiées ici, la règle est la suivante.

$(OUTPUT)/$(BASENAME)-00.png: $(MAIN_DIR)/pdf/$(BASENAME).pdf
        # Génération d'un fichier image par vue
        @if [ ! -d $(OUTPUT) ]; then mkdir $(OUTPUT); fi
        @convert -density 720 $? -resample 150 $(OUTPUT)/$(BASENAME)-%02d.png

Le temps de traitement est le seul défaut de cette méthode.

Toutes les règles de traitement sont données dans le fichier Makefile.Rules.


Voilà pour ce court billet. Comme pour tous les autres documents du site, si vous avez des remarques sur la forme et le contenu, n'hésitez pas !

Voir la présentation ...

samedi 10 mars 2012, 18:06:10 (UTC+0100)

Adresses IP réservées pour la documentation et les maquettes

Jusqu'à présent, je n'avais pas été très rigoureux sur le choix des adresses IP utilisées dans les documents publiés. J'ai corrigé cette erreur en utilisant les préconisations des RFC dédiées à cette question.

En plus du contexte strict de la documentation, il est aussi possible d'utiliser les adresses privées ou locales qui ne doivent pas être routées sur l'Internet.

Après avoir usé et abusé de la traduction d'adresses IPv4 ces dernières années, le fait d'utiliser des adresses IPv6 publiques routables dans une infrastructure de travaux pratiques semble «bizarre». Heureusement, le filtrage avec ip6tables permet de bloquer les accès depuis l'extérieur du périmètre. Du point de vue rédaction de documentation, on n'utilise que les adresses issues de son propre préfixe et on ne risque pas empiéter sur le plan d'adressage d'autrui.

Si vous êtes à la recherche de préfixes IPv6, la valeur des services tels que SixXS - IPv6 Deployment & Tunnel Broker ou Hurricane Electric Free IPv6 Tunnel Broker est inestimable. Le service SixXS distribue même gratuitement des préfixes /48 ; soit 65536 réseaux en /64. Voilà de quoi monter quelques maquettes d'interconnexion réseau.


Posté par Philippe Latu | permalien et commentaires | dans : réseau | Read it in english with Google

mercredi 22 février 2012, 18:32:04 (UTC+0100)

Initiation au développement réseau

Je viens de publier une version entièrement revue et corrigée du document Les sockets en Langage C.

comparaison modélisation réseau contemporaine et architecture noyau

Le document ne contient vraiment rien d'extraordinaire pour un développeur chevronné. L'objectif ici est de démystifier ce type de développement et d'amener un étudiant de niveau bac+2 à considérer que l'utilisation des sockets est tout à fait abordable.

Je suis satisfait de l'idée des échanges de chaînes de caractères entre deux hôtes réseau. Les étudiants voient ça comme une sorte de chat et «accrochent» plutôt bien. Pour cette édition 2012, je suis passé à un code 100% C puisque les entrées/sorties formatées doivent être réutilisées par la suite dans d'autres enseignements.

Je suis cependant embarrassé avec l'utilisation de scanf pour la saisie de chaînes de caractères comprenant des espaces ou des tabulations. J'ai abouti à la syntaxe suivante, qui n'est pas vraiment adaptée au débutant en Langage C. Je n'ai pas voulu faire de compromis avec les éventuels débordements de la mémoire tampon du flux d'entrée standard.

#include <stdio.h>

#define MAX_MSG 100
// 2 caractères pour les codes ASCII '\n' et '\0'
#define MSG_ARRAY_SIZE (MAX_MSG+2)
// Utilisation d'une constante x dans la définition
// du format de saisie
#define str(x) # x
#define xstr(x) str(x)

int main() {

  char msg[MSG_ARRAY_SIZE];

// snip
  puts("Saisie du message : ");
  memset(msg, 0x0, MSG_ARRAY_SIZE); // Mise à zéro du tampon
  scanf(" %"xstr(MAX_MSG)"[^\n]%*c", msg);
// snip

  return 0;
}

L'utilisation de ce support la semaine prochaine viendra clore la série de cours, travaux dirigés et travaux pratiques sur les réseaux de télécommunications en seconde année de DUT Génie Électrique & Informatique Industrielle à Toulouse. Certains supports comme celui sur la technologie Ethernet sont à retravailler. Bref, j'ai encore du pain sur la planche.

mardi 31 janvier 2012, 22:27:58 (UTC+0100)

Autoconfiguration IPv6 vs /etc/network/interfaces

Existe-t-il une meilleure façon d'implanter l'autoconfiguration IPv6 d'une interface réseau au niveau système ?

Mes recherches ont été infructueuses et je n'ai pas trouvé d'option adaptée pour le type inet6 ni dans les pages de manuels du fichier interfaces ni dans les exemples fournis avec le paquet ifupdown.

J'ai finalement obtenu un fonctionnement correct avec la syntaxe suivante :

# cat /etc/network/interfaces 
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet6 manual
    post-up ip link set dev eth0 up

Après redémarrage, on obtient bien le résultat attendu :

# ip -6 addr ls
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2001:db8:feb2:1:b8ad:ff:feca:fe02/64 scope global dynamic 
       valid_lft 2591527sec preferred_lft 604327sec
    inet6 fe80::b8ad:ff:feca:fe02/64 scope link 
       valid_lft forever preferred_lft forever

Chers lecteurs, toute proposition est la bienvenue.