Skip to content

Linux Attitude

Le libre est un état d'esprit

Archive

Archive for 2010

Niveau :      
Résumé : ip route add .. nexthop via ...

Aujourd'hui on fait des nœuds.

Comme deux exemples valent mieux qu'un, je vous propose d'étudier 2 cas :

  • la personne qui a 2 cartes réseau (wifi, pas wifi) pointant vers le même routeur
  • la personne qui un routeur (genre pour une résidence) pointant vers plusieurs FAI

Comment faire pour répartir les connexions entre les différentes sorties proposées sans tout casser ?

iproute 2

Heureusement tout est dans le noyal ! La table de routage sait faire ce genre de chose.

Contrairement à ce qu'on pourrait croire mettre 2 routes par défaut ne marche pas. Le noyau n'en choisirait qu'une et la garderait jusqu'à ce que quelqu'un intervienne.

Il est par contre possible d'avoir une route vers une destination pointant vers plusieurs intermédiaires en même temps. C'est ce que fait l'option nexthop de la commande ip route.

Deux cartes réseau

Prenons le cas de la personne qui a 2 interfaces vers le même routeur :

$ ip route add default nexthop  via 10.0.0.1 dev eth0 weight 100 nexthop via 10.0.0.1 dev wlan0 weight 1

On choisit un poids de 100 pour faire en sorte d'utiliser presque toujours la première route plutôt que la deuxième. Bien sûr si une des routes est indisponibles, seul l'autre sera utilisée. Mais le système de routage ne le sait que grâce à l'interface elle même, il faut donc que l'interface supporte miimon pour détecter le débranchement d'un câble ou que vous la désactiviez à la main.

Ce genre de problème serait probablement mieux résolu avec un bridge ou du bonding, mais ce le sujet d'un prochain article.

Deux FAI

Plus difficile, prenons le cas de la personne qui a 2 FAI :

$ ip route add default nexthop  via 10.0.0.1 dev eth0 weight 1 nexthop via 192.168.0.1 dev eth1 weight 1

Et n'oubliez pas que pour que ca marche vraiment, il faudra que vous ayez du NAT quelque part (pour ipv6 on en reparle lorsque ça existe).

Il faut savoir que la table de routage dispose d'un cache. L'avantage est qu'il n'y a pas spécialement besoin de bidouiller avec le source routing pour que ça marche, ça fonctionne tel quel. L'inconvénient est qu'il n'y aura qu'une seule route par destination. Le partage de charge ne sera donc pas nécessairement équilibré puisque si tout le monde va sur youtube, un seul FAI sera utilisé.

Pour équilibrer le transfert de paquet il y a l'option equalize, mais elle nécessite d'une part un patch du noyau et d'autre part de passer un certain temps à faire sa configuration réseau car il faut maintenant router à la main les paquets d'une même connexion vers le même FAI (sinon le destinataire est perdu). C'est une solution plus compliquée mais qui peut être utile si vous n'avez que peu d'utilisateur ou de destinataires.

Enfin le failover ne se fait automatiquement que dans un cas, si le réseau est désactivé sur une carte (laquelle doit suporter mii-tools) . Sinon vous devez le faire manuellement :

$ ip link set dev eth0 down

Et si vous voulez le faire automatiquement lorsqu'un FAI ne répond plus, c'est à vous de mettre un script qui va vérifier la connectivité et faire des modifications si besoin.

Niveau :      
Résumé : tcpdump, wireshark

Il y a quelque temps, un ami me dit qu'il a trouvé comment se faire embaucher en passant ses nuits devant des trames réseau.

Tout comme lire des logs sans filtre, lire les dump réseau est une activité qui bousille le cerveau. Je me suis donc dit qu'il était complètement barré.

Puis il y a quelques jours, il m'envoie le dump d'un accès à un site web, je vous le livre légèrement filtré. Devinez ce qu'on trouve dans l'en-tête HTTP de la réponse ...

GET /index.html HTTP/1.1
Host: xxx.wordpress.com

HTTP/1.0 200 OK
Server: nginx
Date: Sat, 13 Nov 2010 12:30:04 GMT
Content-Type: text/html; charset=UTF-8
X-hacker: If you're reading this, you should visit xxx.com/jobs and apply to join the fun, mention this header.

Du boulot !

Je ne vous ai pas mâché le travail et vous ne retrouverez pas le site si facilement.

Vous aussi, passez vos nuit à lire des trames, ou mieux, mettez la même chose sur votre site, pour être sûr d'embaucher quelqu'un un minimum compétent le jour où vous tomberez dessus.

Pour cela, si vous avez un apache allez dans sa conf et ajoutez :

header set X-Hadopi Enfoiré de pirate je vais te couper ta connexion - Un ministre anonyme

Je vous laisse chercher pour les autres serveurs qu'apache.

Pour continuer dans le même ordre d'idée, on peut gagner des netbook en regardant attentivement des vidéos de google.

Niveau :      
Résumé : /dev/random /dev/urandom

Quelle différence y a-t-il entre /dev/random et /dev/urandom ? Et d'abord à quoi servent-il ?

Aléatoire

Qu'est-ce qu'un nombre aléatoire ? C'est un nombre faisant partie d'une série dont on ne peut pas prédire le prochain à partir des nombres précédents de la série.

Il existe de nombreuses méthodes pour créer des nombres aléatoires. Je vous donne la plus mauvaise : rand : i -> 0

Mais il existe aussi des suites moins prévisibles, par exemple prendre le dernier chiffre d'une opération récursive produisant de grands nombres. Voire complètement imprévisible comme utiliser la mesure d'un bruit blanc.

Il existe donc plusieurs niveaux d'"aléatoirité" ou de "prévisibilité". Un bon générateur qui peut par exemple être utilisé en cryptographie est en pratique soit un générateur matériel, soit un générateur basé sur un état interne et une fonction de hachage forte.

Les générateurs logiciels sont appelés PRNG (pseudo random number generator). Puisqu'un tel algorithme est déterministe, il faut l'initialiser avec des valeurs vraiment aléatoires pour éviter qu'on puis en deviner la sortie en devinant comment il a été initialisé.

Entropie

Sous linux il y a deux sources de nombres aléatoires, /dev/random et /dev/urandom.

La première utilise uniquement l'entropie disponible pour fournir des nombres aléatoires et le second est un générateur pseudo aléatoire initialisé avec cette entropie.

Mais qu'est-ce que l'entropie ?


continue reading...

Niveau :      
Résumé : ip rule ; ip route

Le routage IP est communément défini en fonction de la destination. Remarquez c'est logique. La fonction d'un routeur est de faire en sorte que les paquets arrivent à bon port (héhé), la route à prendre ne devrait dépendre que de cette destination.

Mais comme pour les GPS, il peut parfois y avoir quelques options à prendre en compte, êtes vous un camion (passage de tunnels) ou un piéton (passage d'escaliers) ? Pour toutes les options de routage qui ne dépendent pas uniquement de la destination, linux utilise ce qu'il appelle "policy based routing" qui est une option qui doit être activée dans le noyau (c'est le cas pour la plupart des distributions).

Le concept est simple. Vous écrivez des règles pour matcher les paquets, lesquelles vont décider de la table de routage à choisir. La table en question étant une table de routage tout ce qu'il y a de plus standard telle que vous connaissez sous linux.

Les tables

Les tables se créent et se gèrent avec ip route (comme d'hab). Exemple :

$ ip route add default via 10.0.0.1 table 1
$ ip route add default via 10.0.0.2 table 2

Vous avez 255 tables à votre disposition, j'espère que vous saurez en profiter.

Vous pouvez donner un nom plutôt qu'un numéro à votre table. C'est tout simple, il suffit d'éditer le fichier /etc/iproute2/rt_tables. Et voila :

$ ip route del default table matable

Remarquez que les fichiers permettent de nommer de nombreuses choses qui sont représentées par des numéros pour la commande ip.


continue reading...

Niveau :      
Résumé : molly-guard

Je suis sûr qu'un certain nombre d'entre vous ont plusieurs machines en production. Et je suis certain que vous les gérez toutes à distance (merci ssh).

Le risque est grand lorsqu'on a des machines distantes de confondre un terminal avec un autre. Vous pouvez bien sûr personnaliser un prompt différent pour chaque machine, mais je vous propose aujourd'hui une autre solution.

$ apt-get install molly-guard

Et voilà !

Maintenant les commandes shutdown, halt et reboot vous demanderont de taper le nom de la machine que vous voulez vraiment éteindre avant de le faire. Ouf, le serveur mail/dns/web de l'entreprise ne sera pas éteint par erreur à la place de votre serveur de base de données de test.

Cerise sur le gateau, ceci n'arrive pas si vous êtes sur un terminal local sur la machine, puisque vous êtes sensés savoir où vous êtes.

Exercice pratique, faites de même pour les quelques (elles doivent rester rares) commandes critiques sur vos machines.

Niveau :      
Résumé : pam_exec

Vous souvenez-vous de PAM (Pluggable Authentication Modules) ? En plus des nombreux modules déjà présentés, on trouve pam_exec qui permet d'exécuter une commande arbitraire. A partir de là on peut faire pas mal de choses, comme par exemple une notification à chaque session ouverte par un utilisateur (connexion ssh, su, sudo, etc.).


Notification de connexion

Nous allons créer une règle utilisant le module pam_exec pour exécuter un script de notification à l'ouverture d'une nouvelle session.


Script de notification

D'après le manuel de pam_exec, les informations PAM sont passées au script à l'aide des variables d'environnement : PAM_RHOST, PAM_RUSER, PAM_SERVICE, PAM_TTY, PAM_USER et PAM_TYPE. Concevons donc un script simple qui :

  • ne s'intéresse qu'au cas de l'ouverture d'une nouvelle session, soit le type PAM open_session
  • récupère les informations et les envoie par mail à l'administrateur

continue reading...

Niveau :      
Résumé : xvkbd

Les tablettes et les smartphone ont le vent en poupe. Ces petites choses sont uniquement tactiles, elles n'ont pas de clavier physique. Si vous vous amusez à mettre une linux dessus, vous devrez utiliser un serveur ssh pour taper des commandes.

Bon supposons un cas bien plus courant: vous avez perdu votre clavier ... Ce genre de cas est prévu !

L'outil xvkbd vous permet de faire un clavier virtuel. Peu esthétique, mais bien pratique. Pour le lancer :

$ xvkbd

Wahoo trop fort. Maintenant les détails. On veut un clavier en français, donc avant de le lancer :

$ echo "xvkbd.customization:-french" | xrdb

Avec xrdb vient fichier de configuration : ~/.Xdefaults, pensez à y mettre votre entrée xvkbd pour ne pas avoir à taper la commande à chaque fois.

Ensuite on veut éviter de cliquer tout le temps sur une touche sans le vouloir, cliquez sur la touche en bas a droite du clavier "xvkbd", puis "Property..." et là vous avez l'option "automatic clic" qui vous permet de dire au bout de combien de temps d'immobilité du pointeur le clic se fait tout seul. Mettez le à off ou à une valeur assez longue.

En pratique les conf de xvkbd vont dans le fichier ~/.xvkbd

Et voilà ! clavier

Et enfin si comme moi vous avez un window manager qui change le focus avec le mouvement de la souris (ce qui n'est pas une bonne idée si vous n'avez que la souris), vous devrez cliquer sur "Focus", puis sur la fenêtre avant de commencer à l'utiliser, pour être sûr que les touches vont bien à la bonne fenêtre.

Et si vous n'avez pas de clavier, lancez-le automatiquement au démarrage, ce serait dommage d'avoir besoin d'un clavier pour le lancer.