Catégories
Open-source Planet-libre Reseau

Le difficile choix des outils de supervision des réseaux

Je viens de lire le mail d’un lecteur concernant ses interrogations sur le choix des logiciels permettant de surveiller son réseau. Comme c’est une question récurrente dans ma boîte mail et que je pense que ses questions et nos réponses peuvent intéresser d’autres personnes, j’ai décidé de lui répondre directement sur le blog.

On commence par le mail en question:

Bonjour Nicolas,

Je me permet de te contacter car je recherche à faire de la supervision sur mon réseau mais je ne sais pas vers quel outils me tourner.

Sachant que mon réseau est relativement petit, quelques switchs, firewalls, routeurs, serveurs, j’aimerais trouver un outils pour surveiller le traffic entrant sortant (réseau LAN connecté à Internet), pinger, savoir la consommation CPU et RAM des serveurs, etc…

J’ai pu voir sur internet et sur ton blog que tu conseillais nagios/centreon/cacti.
Mais j’ai aussi vu une autre solution se commant « The Dude » qui est une appli tournant sur Windows.

Je voulais savoir si avec nagios n’était pas trop lourd pour cela ? Nagios ne nous permet pas de sortir des statistiques sur les performances ? Nous sommes obligé de le couplé à cacti pour que ce soit plus « lisible » ? A ce que j’ai compris Centreon permet de rendre Nagios plus « user frendly », mais qu’apporte-t-il de plus ?

En abstraction de cela, existe-t-il une solution plus simple, plus légère ou plus adapté à ma petite infra au lieu de Nagios ?

Désolé, je sais que vous ne répondez normalement pas aux questions par mail mais je tente quand même ma chance en espérant que vous lisez ce mail un bon jour. 🙂

Kévin

 —

Comme la grande majorité des professionnels de l’informatique, ce lecteur est un peu perdu dans la nébuleuse des solutions de supervision. Ainsi, il mélange la supervision pure (Nagios), la métrologie (Cacti) et les outils de diagnostics élémentaires (ping, iftop…).  A sa décharge, il est vrai qu’il n’y a aucun cours digne de ce nom dans les écoles d’ingénieurs, les DUT ou les cursus universitaires en informatique.

Pour répondre à la question de Kévin, il faut, je pense, commencer par revenir à son besoin.

Il parle de la supervision d’un réseau avec des machines diverses et variées (firewall, routeur, switch, serveurs). On est donc en présence d’un petit réseau (moins de 100 noeuds) avec comme besoin principal un suivi de la consommation des ressources: bande passante de la liaison Internet, CPU et mémoire pour les serveurs. Kévin parle également de ‘ping’, c’est à dire d’un moyen simple de vérifier qu’une machine est bien opérationnelle. D’un autre coté, il n’aborde pas la problématique de la gestion des alertes, c’est à dire des solutions dynamiques pour prévenir une ou plusieurs personnes en cas d’incident.

Dans ce cas précis, je conseillerai donc à Kévin de s’orienter vers la mise en place d’un serveur Munin (lire mon billet sur le sujet), ce qui lui permettra assez facilement de surveiller les serveurs GNU/Linux ou Windows et même les routeurs et switchs Cisco (voir les scripts suivants). Le principal avantage de cette solution est la facilité de mise en place et la légéreté de l’infrastructure. On peut sans problème héberger le serveur Munin sur une machine GNU/Linux existante.

Comme vous pouvez le noter, je ne propose pas de solution pour le ‘ping’ des noeuds. En effet, sans une gestion des alertes, c’est clairement le genre d’outil qui ne sert absolument à rien à moins que Kévin veuille passer ses journée à regarder une page remontant les éventuelles erreurs rencontrées.

Par contre, si son besoin évolue et qu’il est prêt à gérer un véritable serveur de supervision, avec toutes les contraintes de temps et de compétence que cela demande, alors je l’orienterai vers Shinken. Pourquoi Shinken et pas Nagios ? Tout d’abord pour la simplicité de mise en oeuvre (voir mon billet sur l’installation et la configuration initiale de Shinken) mais également pour son module de découverte automatique des noeuds qui est un véritable plus, même pour un petit réseau.

Les informations que je viens de donner ne sont que des pistes et d’autres solutions sont possibles. Je pense notamment à l’utilisation de distributions orientées supervision comme Eyes Of Network ou Fully Automated Nagios (à quand une version Shinken ?).

Qu’en pensez-vous ? Quelles autres pistes pouvez-vous proposer à Kévin ?

Catégories
Open-source Planet-libre Reseau Systeme

De Network Manager à une configuration manuelle

S’il y a bien une fonction que je trouve mal faite dans Gnome c’est le « Network Manager ». Ce logiciel, accessible depuis la barre de menu, permet de configurer, à partir d’une interface graphique, les interfaces réseaux de sa machine. Ce n’est pas la première fois que je tombe sur une configuration que je n’arrive pas à appliquer en utilisant ce logiciel. Il faut dire que celle-ci mélange plusieurs interfaces réseaux avec des configurations DHCP, statiques et des routes spécifiques. J’ai donc décidé de désactiver Network Manager et de configurer mon réseau à la mimine.

Avant de pouvoir configurer manuellement son réseau à partir du fichier /etc/network/interfaces, il faut préalablement désactiver la gestion des interfaces par Network Manager. Nous allons voir comment procéder sur une distribution GNU/Linux Ubuntu 12.04.

Préparation de la manipulation

Avant toute chose, il faut arrêter toutes vos applications. En effet, nous allons toucher à la couche réseau du noyau Linux et il y a de forte chance que vous perdiez la connectivité.  Il est bien sûr totalement impossible de faire cette manip à distance (via SSH ou remote desktop).

Pour pouvoir revenir en arrière, nous allons sauvegarder la configuration de Network Manager:

sudo cp /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.OLD

Désactivation de Network Manager

On commence par éditer le fichier /etc/NetworkManager/NetworkManager.conf:

sudo vi /etc/NetworkManager/NetworkManager.conf

Puis passer la clé de configuration managed à true:

[ifupdown]
managed=true

Configuration manuelle des interfaces réseau

On passe ensuite à la configuration manuelle des interfaces réseau de notre machine en éditant le fichier /etc/network/interfaces. Le contenu du fichier dépend bien sûr de votre besoin. J’avais écris un billet sur le sujet il y a quelques années. Mais le mieux est de lire la documentation officielle et complète sur le site de Debian.

Il ne reste ensuite plus qu’à relancer le démon networking pour appliquer les changements et faire chauffer le semiconducteur de la carte mère:

sudo service networking restart

Bye bye Network Manager et son horrible interface graphique ! Bienvenu au fichier interfaces et sa syntaxe simple et claire.

Revenir en arrière ?

En cas de problème, pour revenir à votre configuration initiale ou les interfaces sont gérées par Network Manager, il suffit de saisir les commandes suivantes:

sudo cp /etc/NetworkManager/NetworkManager.conf.OLD /etc/NetworkManager/NetworkManager.conf
sudo service networking restart
Et hop, retour à la case départ.
Catégories
Nagios Open-source Planet-libre Reseau Systeme

Interview de Jean Gabes pour la sortie de Shinken 1.2

Pour la sortie de Shinken 1.2, Jean Gabes a eu la gentillesse de répondre à quelques questions que je me posais sur cette nouvelle monture.

Salut Jean et tout d’abord merci de nous consacrer un peu de ton temps.

Mais c’est bien normal !

C’est un été plutôt chargé pour toi avec la finalisation de la version 1.2 de Shinken et la rédaction du numéro spécial du GNU Linux Magazine. Comment arrives-tu à gérer cela en parallèle de tes activités professionnelles ?

Ce n’est pas simple, et ça l’est de moins en moins en fait. Avec le recul, même si la rédaction du hors série a pris du temps, c’est surtout la gestion du projet qui est la plus consommatrice en ce qui me concerne. Il y a de plus en plus d’intérêts pour le projet, ce qui est bien, et avec eux de plus en plus de contributeurs, ce qui est encore mieux.

Mais ceci à un coût en terme de temps de gestion, pour faire le “portier“ sur les patchs proposés, et demander (gentiment) par exemple, de revoir ce qui est proposé. Les forums sont de plus en plus actifs, heureusement, on a de plus en plus d’utilisateurs de la première heure qui prennent part au support sur le forum, et c’est une grande aide que j’apprécie vraiment.

Vue la progression de l’activité, je ne pourrais pas rester 100% administrateur et suivre le rythme, je vais devoir faire des choix pas très simples prochainement.

A titre personnel, je trouve que la principale évolution de cette version est apportée par le module de configuration (découverte automatique, gestion par “packs” et SKonf). Peux-tu nous en dire plus sur ce que cela va apporter aux utilisateurs ?

C’est également mon avis. Si l’on regarde bien, au tout début le projet était orienté pour les “power users” de Nagios, avec des modes distribués, plus de performances, des améliorations qui portent sur les très gros environnements. Je pensais que seuls ces utilisateurs avaient de gros soucis. Or ce n’est pas le cas.

Un peu dans la même philosophie que l’interface de visualisation “simple” WebUI, cette nouvelle interface de configuration est une réponse pour la majorité des administrateurs. Même si certains ne lâcheront pas leur sed, vi ou emacs, d’autres seront râvis de pouvoir ajouter dans la supervision une nouvelle machine en quelques secondes, avec des “tags” automatiques comme “Linux”, “Mysql” ou “DMZ”.

Cette tâche était si ingrate et complexe avec les anciens outils de configuration qu’elle était laissée à l’administrateur de la supervision (par exemple moi dans la société où je travaille…). Désormais tout le monde va pouvoir le faire très simplement et en quelques secondes. C’est un peu emprunté de l’esprit DevOps : l’administrateur de supervision va pouvoir définir des “règles” qui vont permettre de tagguer ses machines (par exemple : port 80 ouvert? -> tag http) et d’associer des services à ces tags (tag http? on lance la commande check_http). Les autres administrateurs vont désormais pouvoir ajouter “simplement” leurs hôtes sans avoir à se soucier des (nombreux!) paramètres de supervision, ni même savoir ce qu’est une sonde de supervision.

Un but avoué de l’outil est de ne plus avoir à s’occuper de notions de “services”. Seuls les hôtes et les templates d’hôtes (nos tags) sont importants dans la vie de tous les jours (demander à un administrateur système ce qu’il retient des notions d’hôtes et services Nagios, vous verrez qu’il aura beaucoup de mal au début avec les services, alors que pour l’hôte ce sera immédiat). Le but est donc de rentrer sa liste d’hôte, avec leurs propriétés (liste des volumes disques par exemple), et c’est tout…

Vu que l’outil se base sur la librairie de découverte, ce mode de fonctionnement peut être automatisé, comme par exemple “rescanner” des hôtes rajoutés précédement pour mettre à jour leur liste de volume disques, voir l’intégrer à un workflow automatique de création de machine virtuelle.

Les Packs sont également issus d’un constat que dans le microsome “Nagios” le partage de sondes est central, mais il n’en est rien de la bonne manière de les mettre en place et les utiliser. Si on prend comme exemple la supervision d’un serveur MySQL distant, la plupart des utilisateurs vont s’orienter vers la sonde check_mysql_health.pl, il y a alors beaucoup de manières de la mettre en place, de gérer les comptes et mots de passes, les seuils, etc. De même, comment bien représenter ces informations sur des outils comme PNP4Nagios ou Graphite et avec quel template ?

Les “packs” Shinken sont là pour cela. Ils sont un “concentré de bonnes pratiques” dans un fichier zip. Basiquement ce sont des fichiers de configuration, des icônes et des templates pour les graphiques, il n’y a rien de complexe ou de magique là dedans. C’est juste que lorsque l’on débute dans la supervision ou que l’on a un nouveau système d’exploitation ou autre, il est tout de même plus simple de partir d’un exemple de supervision que d’une page blanche. Les packs sont là pour que l’expérience des uns serve également au reste de la communauté.

Je suis donc tout à fait d’accord sur le fait que la gestion de configuration est bien l’élément central de cette version, bien plus que la page “dashboard” par exemple. Ce point sera encore central un bon moment, car cela reste la problématique N°1 des administrateurs aujourd’hui.

Par rapport à la version 1.0, on sent une certaine maturitée lors de l’utilisation de l’interface graphique de Shinken (WebUI). Quelles sont pour toi les axes d’améliorations encore possible ?

Question intéressante. Si l’on met de côté la nouvelle page de “dashboard”, il n’y a pourtant pas eu de profonds changements dans la manière de montrer les informations. C’est justement tout ce qui fait la complexité des interfaces graphiques. Il y a bien sûr les concepts centraux comme mettre en avant les problèmes importants pour le métier (et non pas la myriade d’impacts), ou encore de baser les droits sur les attributions des notifications pour les contacts.

Mais le ressenti des utilisateurs est également question de “détails” de présentations. Les détails seront par exemple la position des boutons d’actions pour lancer des actions sur la page d’hôte ou de service. Or ce que je nommais “détail” lorsque j’ai débuté WebUI n’en sont pas, et la question est là pour le prouver. Ils sont primordiaux dans le ressenti de l’utilisateur, sur la qualité même de l’interface.

Outre quelques nouvelles pages et widgets, la prochaine version sera encore améliorée un peu partout en terme d’ergonomie, pour que son utilisation soit la plus “naturelle” possible, si tant est qu’utiliser un outil de supervision puisse être “naturel” pour les utilisateurs. Disons qu’elle doit être là pour apporter le plus d’efficacité possible à ses utilisateurs, avec par exemple le fait d’avoir les boutons d’actions facilement utilisables sans que l’utilisateur ait besoin de les chercher un peu partout?

Quels sont les avantages apportés par les nouvelles fonctions de trigger par rapport aux classiques sondes ?

Pour rappel, les triggers sont du code Python fourni par l’utilisateur qui va être exécuté “en interne” de Shinken pour lire des états ou des données de performances d’hôtes et services puis pour ensuite lancer des actions, changer d’autres états ou créer des notifications.

C’est une très bonne question qui revient souvent dès que l’on a commencé à évoquer les triggers. Ils ne sont pas là pour remplacer les sondes de mesure de CPU ou d’espace disques, même si c’est techniquement possible. Dans 95% des cas de supervision, les bonnes vieilles sondes “à la Nagios” seront bien plus efficaces que les triggers, ne serait ce que du fait qu’il est facile des les tester (contrairement aux triggers).

Ils vont être utiles principalement pour deux choses :

  • la corrélation avancée
  • le traitement de données passives

Dans le premier cas, il est parfois utile d’agréger des informations en un seul indicateur. Par exemple si je veux présenter à mon responsable l’état du service mail fourni aux utilisateurs, je ne vais pas lui présenter la dizaine de serveurs et de services qui le composent. Je vais faire une règle “métier” avec des ET et des OU. Mais parfois ce genre d’opérateurs ne suffisent plus, et il faut sortir l’artillerie lourde qui compare des seuils les uns avec les autres pour savoir à quel point la situation est grave pour les utilisateurs. Ici les triggers vont permettre d’utiliser toute la puissance de Python pour “coder” une telle règle.

Dans le second cas, historiquement dans le monde Nagios, les commandes externes permettent de traiter des états envoyés par d’autres outils. Cependant, l’état doit déjà être calculé (comme OK ou CRITICAL). Il n’était pas possible d’importer une information et de l’analyser (comme par exemple un texte d’une TRAP SNMP). Désormais, des outils tiers peuvent envoyer des informations, la “vérification” sera alors faite en interne par Shinken.

Ce qui est intéressant lorsque l’on mélange les deux cas d’utilisation c’est que l’on obtient la définition de certains de l’Hypervision (en gros absorber des données d’outils de supervision, les traiter, les normaliser et en faire des états agrégés). Le plus drole c’est que le code qu’il a fallu pour ajouter les triggers au code de Shinken est ridiculement petit.

L’ouverture de Shinken vers des données recueillies par Collectd est très intéressante. N’as-tu pas peur de multiplier ainsi les interfaces et de complexifier l’administration ?

Dans le cas de Collectd, si ça alourdi la charge de développement, je ne pense pas que ceci ajoute une charge pour l’utilisateur. Il pourra choisir sa méthode de collecte de donnée favorite, et n’aura pas à utiliser les deux. Ce module était plus pour démontrer ce qu’il est possible de faire avec les triggers que pour remplacer les sondes classiques de supervision. Je ne pense pas que collecter les données de performances toutes les 10 secondes soit utile, donc je pense que beaucoup ne vont pas aller regarder du côté de Collectd, et vont se simplifier la vie en restant avec de la supervision “active”.

Le principe est cependant valable pour tout le reste du projet, et on tente d’avoir des fonctionalités le plus “ortogonales” possibles, donc qui ne se recoupent pas. Certains souhaitaient par exemple ajouter dans la configuration par défaut un “pack” linux basé sur le plugin check_by_ssh en plus de celui basé sur SNMP. J’ai refusé une telle chose car la plupart des utilisateurs vont devoir faire un choix qui est loin d’être simple. J’ai déjà raconté le temps qu’il m’avait fallu pour configurer mon premier Nagios (1 semaine pleine pour avoir une configuration convenable !) et je ne souhaite pas que les débutants de 2012 aient à passer par un tel “bizutage”…

Avec la nouvelle procédure d’installation en une ligne de commande, tu sembles vouloir prendre soin de tes utilisateurs. La phase de configuration initiale du réseau est encore longue et relativement complexe, vas-tu proposer des outils pour les aider ?

Grâce au gros travail de David Guenault, l’installation est désormais triviale, et c’est déjà une énorme victoire !

Ensuite vient la phase de configuration qui se passe en deux étapes:

  • identifier les types d’éléments que l’on a (linux, windows, mysql, mssql, exchange, etc etc) et pour chacun mettre en place des sondes de supervision
  • lister ses machines, et les entrer dans l’outil avec les bons types pour qu’elles aient toutes la bonne supervision adaptée et complète (car les soucis viendront toujours de quelque chose que l’on a oublié de supervisé, c’est bien connu).

C’est justement dans cette optique que nous avons développé les “packs” de supervision et la librairie de découverte avec son interface sKonf. Dans un environnement “classique” (linux, windows, mssql, mysql, apache, oracle …), une fois l’installation effectuée, il reste à lancer un scan de son réseaux et à configurer les bons mot de passe pour que l’on ait une supervision “acceptable”. Il restera toujours une phase d’adaptation, mais là où bon nombres d’administrateurs auraient déjà abandonnés avec un Nagios, là ils auront leur premiers résultats, et pourront commencer leur processus d’amélioration continue avec la supervision.

On passe à quelques questions plus générales. Pourquoi avoir choisi la licence Affero GPL pour la diffusion de Shinken ?

Dans bon nombre d’entreprises, la supervision est externalisée à une société de service, sur un serveur fourni par cette entreprise. Avec uniquement la license GPL, les utilisateurs n’auraient pas eu accès aux sources de l’application qui les surveille. Grâce à l’Affero, ils peuvent en exiger les sources, donc même si cela a fâché certaines personnes comme l’auteur de Nagios, j’ai préféré mettre le maximum de droits dans les mains des utilisateurs.

En face de toi, tu as une concurrence qui dispose de gros moyens commerciaux, marketing et de support technique. Comment te positionnes tu par rapport aux clients professionnels qui peuvent s’inquièter de la péréniter de Shinken ?

Heureusement pour le projet Shinken l’effet “communauté” tourne à plein régime et nous n’avons pas à rougir de l’activitéque ce soit en nombres de commits ou de commiters !

Le marketing et l’aspect commercial sont cependant deux points faibles. Ce n’est peut être pas un hasard car si je regarde bien, ceci reflète bien mes propres points faibles…

Or (malheureusement?) la technique ne fait pas tout. Il est bien plus logique pour un décideur d’aller vers une solution bien vendue avec des “petits déjeuners”, de jolies tablettes de présentations et un discours marketing bien rodé, que de prendre des “risques” et partir vers une solution pleinement communautaire, même si elle réponds au besoin.

La seule solution est de monter une structure professionnelle derrière le projet qui permette de rassurer les décideurs avec du support et une assurance de la perénité des produits. Or c’est bien plus complexe que l’on pourrait le croire, car monter un business dans le monde Open Source d’un point de vue “éditeur” est très difficile lorsque l’on se rapproche de la technique comme ici (même si voir la supervision comme de la pure technique est une erreur qui mène un projet de supervision à sa perte soit-dit en passant).

On a l’habitude de dire que la solution vient des “services”, surtout de l’intégration quand on écoute bien. Mais si l’on souhaite monter un pur “éditeur”, là la relation intégrateur-éditeur est très vite déséquilibrée pour l’éditeur, avec des intégrateurs qui vont vendre un pack de support complet avec leur intégration. L’éditeur n’a donc plus que la ressource de développement à la demande, quand ce n’est pas un intégrateur qui s’en occupe 🙂

Une solution simple serait de faire comme l’auteur de Nagios ou d’autres éditeur de supervision “open source” en proposant une surcouche graphique ou des modules sous licenses proprietaires et payantes. Si je comprends parfaitement comment ils en sont arrivés à une telle position, je n’ai pas envie de tomber dans le même piège. Je préfèrerai encore rester un simple administrateur de campagne que de faire de même 🙂

La problématique est complexe, car monter une société n’est pas déjà pas simple, mais quand c’est monter une offre “éditeur” dans ce domaine, c’est carément un défi ! Heureusement les mentalités commencent à bouger, et le projet d’entreprise Shinken est par exemple lauréat du concours de création d’entreprise innovante 2012 du ministère de la recherche!

D’autres solutions existent, comme par exemple monter une offre SaaS, ou la gestion à la RedHat avec un projet communautaire (fedora) et une version toujours libre (RedHat 6 par exemple) mais supportée quelques années. Trouver la solution idéale est l’activité qui occupe le peu de temps libre que j’ai encore. J’avoue que pouvoir travailler à 100% sur Shinken m’intéresse plus que fortement (ndlr: avis aux sponsors !)

Pour finir cette interview, peux-tu nous donner, en avant première mondiale, une ou deux nouveautées que tu souhaites intégrer dans la prochaine version de Shinken ?

 La curiosité est un très bon défaut 🙂

 Outre un gros effort pour “finir” sKonf (par exemple le fait qu’il puisse relancer Shinken serait intéressant….), il va y avoir de nouvelles pages dans WebUI, sur la supervision “End user” à la Cucumber, et une autre sur de la géolocalisation. Les plus curieux peuvent déjà en voir les premières versions déjà présentes dans le code 🙂

Plus proche du coeur de l’outil, une problématique me taraude l’esprit depuis quelques temps : comment changer ses seuils de supervision pendant certaines périodes de temps, genre augmenter les valeurs critique de charge pendant les backups? Un des membres du projet (Olivier Hanesse) a proposé une solution particulièrement élégante qui me plais tellement que je pense qu’elle va arriver très rapidement.

Un petit mot pour finir ?

J’aimerais remercier tous ceux qui font vivre le projet, que ce soit avec des remontées de bugs, des patchs, de la documentation ou même un petit merci par mail, car sans eux un projet ne pourrait pas tenir aussi longtemps et se serait sûrement arrété à la phase de la preuve de concept, il y a près de 3 ans.

S’il y en a qui souhaitent prendre part à cette belle aventure, qu’ils n’hésitent pas à me contacter !

Catégories
Blog Open-source Planet-libre Reseau Systeme Web

Comment sont hébergés les blogs Français ?

On annonce régulièrement que l’avènement du Web 3.0 sonnera comme la fin des blogs, du moins dans la forme dont on les connait actuellement. En attendant cette révolution, les blogs restent, de mon point de vu, la source d’information la plus intéressante sur la World Wide Web. La France n’est pas à la traîne et dispose d’une blogosphère dynamique. Nous allons dans ce billet nous intéresser aux techniques d’hébergements qu’utilisent ces sites.

J’ai compacté les grandes tendances des données obtenues dans le diagramme suivant:

La french blogosphère et son hébérgement en 2012
La french blogosphère et son hébérgement en juillet 2012

 J’ai donc chercher, pour les blogs appartenant au TOP 300 du classement eBuzzing de juillet 2012, les informations suivantes:

  • le nom de l’hébergeur
  • le type de serveur Web utilisé
  • si le blog utilise un proxy/cache Varnish

Pour cela, j’ai écrit des scripts shell (disponible sur le GitHub suivant sous licences LGPL) permettant de récupérer automatiquement la liste des blogs sur le site eBuzzing, de chercher dans la base Whois chez qui le blog est hébergé et enfin d’étudier l’header HTTP renvoyé pour avoir des informations sur le type de serveur Web et l’utilisation éventuelle de Varnish, le proxy/cache à la mode.

Les résultats bruts sont dans ces deux fichiers CSV: hébergeur et type de serveur Web.

Note importante:

Les informations données dans ce graphe sont à prendre avec certaines précautions. En effet, concernant les hébergeurs, l’utilisation de service comme CloudFare (utilisé notamment par Korben.info) masque l’hébergeur. Pour le type de serveur Web, il est tout à fait possible à un administrateur, pour des raisons de sécurité, de masquer ou de transformer les informations renvoyées par l’en-tête HTTP.

Les hébergeurs

OVH, Le leader Français de l’hébergement trône en haut de la plus haute marche du podium avec 21% des blogs parmi le TOP 300 eBuzzing. Il est suivi avec 19% des blogs, par la plate-forme OverBlog qui permet de créer sont blog en quelques clicks. Enfin, dans le même esprit, on retrouve 14% des blogs hébergés par la plate-forme Blogger de Google (a noter que pour ce dernier, l’hébergeur est masqué, mais on voit que ces blogs utilisent le serveur Web GSE, solution spécifique à Google).

Dans les autres hébergeurs, on peut noter la très bonne 6em place du très professionnel hébergeur Typhon avec 3% des blogs.

Les types de serveur Web

Pas de grosses surprises. Apache Web Serveur arrive en tête avec 71% des blogs. Bien qu’il existe des solutions plus légères, surtout pour héberger un simple blog, Apache conserve une solide réputation en terme de fiabilité et de facilité d’administration grâce aux nombreuses sources d’informations que l’on peut trouver sur le Web. Vient ensuite, avec 17% des blogs, Nginx le challenger qui monte. Un solution également très stable mais beaucoup plus légère que j’utilise personnellement depuis quelques années sur ce blog. Enfin, on retrouve, avec 14% des blogs, le serveur GSE de Google, utilisé sur sa plate-forme Blogger (à noter qu’il en existe une implémentation open-source sous licence Apache 2).

Varnish or not Varnish

J’ai été surpris par le nombre assez important (26%)  des blogs utilisant cette superbe solution de proxy/cache qu’est Varnish. En regardant ce chiffre de plus près, il faut noter que la plate-forme OverBlog le met en place par défaut sur l’ensemble de ses serveurs. Vu le gain de performance et l’allègement des ressources CPU qu’il procure sur les blogs à fort trafic, je pense que ce chiffre va fortement évoluer dans les prochains mois.

Et pour les blogs libristes ?

J’ai également exécuté les même scripts de statistiques sur les blogs traitant des logiciels libres en me basant sur le classement Wikio (limité au 60 premiers blogs). Vous pouvez consulter et exploiter les données qui sont disponibles dans les deux fichiers suivants: hébergeurs et type de serveur Web.

Et vous lecteurs/blogueurs, vous êtes chez quel hébergeur ? Quel serveur Web ? Varnish ?

Partager tout cela avec nous dans les commentaires !

Catégories
Open-source Planet-libre Reseau

Simuler un réseau WAN entre deux réseaux LAN

A partir de sa version 2.6, le noyau Linux dispose d’une fonction permettant de simuler certaines caractéristiques comme un délais de transit, une perte de paquets ou même un débit maximal sur une simple interface réseau locale. J’avais déjà parlé de ce sujet il y a quelques temps pour simuler une liaison WAN entre une machine et son réseau. Suite à une question d’un lecteur, voici un billet dans lequel nous allons mettre en place un simulateur de liaison WAN entre deux réseaux LAN. Cette infrastructure pourra être utile à toutes personnes devant valider sur table une architecture inter-site.

De quoi avons nous besoin ?

Pour bâtir cette infrastructure, nous avons besoins de deux réseaux LAN (mais deux PC peuvent suffirent) et d’une machine GNU/Linux disposant de deux interfaces réseaux permettant de faire un pont entre ces deux LAN. Le choix d’une architecture en pont (bridgé) permet d’insérer facilement le simulateur dans une architecture réseau existante.

 

Configuration du bridge

Personnellement, j’ai utilisé une distribution GNU/Linux Debian Squeeze pour mettre en place le simulateur. Mais toutes les distributions GNU/Linux avec une version de Kernel >= 2.6 peuvent faire l’affaire.

Après une installation standard du système d’exploitation Debian, il faut ajouter le paquet bridge-utils pour permettre à ce dernier de créer le pont entre les deux interfaces réseaux:

sudo aptitude install bridge-utils

Il faut ensuite éditer le fichier de configuration /etc/network/interfaces de la manière suivante:

auto lo

iface lo inet loopback

iface eth0 inet manual

iface eth1 inet manual

auto br0

iface br0 inet dhcp

bridge_ports eth0 eth1

Puis on fait prendre en compte cette configuration par le système:

sudo /etc/init.d/networking restart

Note: il faut attendre une trentaine de seconde lors de l’initialisation.

On vient donc de créer une nouvelle interface virtuelle (br0) qui fait un pont entre les deux interfaces physiques (eth0 et eth1).

Si vous connectez en l’état le simulateur entre vos deux LAN, tout le trafic transitera de manière transparente à la vitesse maximale de vos interfaces eth0 et eth1.

Configuration du simulateur

On passe maintenant à la partie intéressante de ce billet: comment simuler un lien WAN à partir de notre simulateur.

Vous allez voir que c’est relativement simple. Nous allons utiliser un script de configuration automatique qui va activer / désactiver le simulateur à la demande. Les caractéristiques du WAN à simuler seront codées en dur dans la section configuration du script. A vous de l’adapter à vos besoins.

Voici le script en question (également disponible sur mon GitHub):

#!/bin/bash
#
# simulwan-bridge.sh
# Nicolargo - 2012
#

##############################################################################

# Nom des interfaces ou l'on doit faire les simulations
# eth0 cote LAN local 
# eth1 cote LAN distant
IF=eth1

# Liaison sortante (UPLOAD) a appliquer sur IF
# Debit sortant
BWU=8mbit
# Délai de transit sortant
DELAYU=15ms
# % de paquets perdus sortant
LOSSU=0.0001%

# Liaison entrante (DOWNLOAD) a appliquer sur IF
# Debit entrant
BWD=1mbit
# Délai de transit entrant
DELAYD=15ms
# % de paquets perdus entrant
LOSSD=0.00001%

##############################################################################

start() {
    modprobe ifb
    ip link set dev ifb0 up

    tc qdisc add dev $IF ingress

    tc filter add dev $IF parent ffff: \
    protocol ip u32 match u32 0 0 flowid 1:1 \
    action mirred egress redirect dev ifb0

    # Liaison entrante
    tc qdisc add dev ifb0 root handle 1:0 \
    netem delay $DELAYD 10ms distribution normal \
    loss $LOSSD 25%

    tc qdisc add dev ifb0 parent 1:1 handle 10: \
    tbf rate $BWD buffer 3200 limit 6000

    # Liaison sortante
    tc qdisc add dev $IF root handle 2:0 \
    netem delay $DELAYU 10ms distribution normal \
    loss $LOSSU 25%

    tc qdisc add dev $IF parent 2:1 handle 10: \
    tbf rate $BWU buffer 3200 limit 6000
}

stop() {
    tc qdisc del dev ifb0 root
    tc qdisc del dev $IF root
    # ip link set dev ifb0 down
}

restart() {
    stop
    sleep 1
    start
}

show() {
    echo "Liaison entrante"
    tc -s qdisc ls dev ifb0
    echo "Liaison sortante"
    tc -s qdisc ls dev $IF
}

case "$1" in
    start)
        echo -n "Starting WAN simul: "
        start
        echo "done"
        ;;
    stop)
        echo -n "Stopping WAN simul: "
        stop
        echo "done"
        ;;
    restart)
        echo -n "Restarting WAN simul: "
        restart
        echo "done"
        ;;
    show)
        echo "WAN simul status for $IF:"
        show
        echo ""
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|show}"
        ;;
esac

exit 0

Par défaut, le script simule une liaison WAN de type ADSL (8 Mbps en download et 1 Mbps en upload avec un délais de transit de 30ms en aller/retour et un taux de perte de 10^-4).

Pour l’installer, il suffit de saisir les commandes suivantes:

sudo wget -O /etc/init.d/simulwan.sh https://raw.github.com/nicolargo/simulwan/master/simulwan-bridge.sh
sudo chmod a+x /etc/init.d/simulwan.sh

Pour lancer le simulateur WAN:

sudo /etc/init.d/simulwan.sh start

Pour arrêter le simulateur WAN:

sudo /etc/init.d/simulwan.sh stop

Pour avoir un état des interfaces:

sudo /etc/init.d/simulwan.sh show

Conclusion

Vous venez donc à moindre coût de mettre en place une architecture permettant de simuler des liaisons WAN. Le PC sur lequel se base votre simulateur n’a pas besoin d’être une bête de course et vous pouvez donc facilement récupérer du vieux matériel pour mettre en place ce système.

 

 

 

Catégories
Open-source Planet-libre Reseau

Suivi graphique des attaques DDOS avec Munin

Les attaques DDOS sont une véritable plaie pour les sites Internet. Même pour des sites à forte audience et donc dimensionnés au niveau architecture système et réseau pour absorber ces aléas, il est important de surveiller de prêt ces attaques. Nous avions déjà abordé ce sujet ensemble en mettant en place une alerte Nagios sur attaque DDOS. Nous allons ici compléter cette supervision en apportant un suivi graphique de ces attaques en utilisant un plugin spécifique pour Munin.

Installation de Munin

Il suffit de vous reporter au billet que j’avais écrit sur le sujet il y a quelques mois. Le plugin qui va se charger de la détection des attaques DDOS doit être installé sur chacun des noeuds (« Munin node ») à surveiller.

Principe du Plugin ddos_

Ce plugin se base sur le même principe que le plugin Nagios. Il va lire le nombre de connexions de type SYN_RECV ouvertes et les renvoyer au noeud Munin maître pour que ce dernier stocke l’information dans une base RRD et l’affiche à la demande dans un page Web.

Le plugin est disponible sur mon GitHub (il est donc possible de l’améliorer et d’en faire profiter la communauté).

Si vous êtes intéressé par l’écriture de vos propres plugins pour Munin, le plus simple est de commencer par la lecture de la documentation officielle.

Revenons à notre plugin ddos_.

Pour l’installer sur un noeud, la procédure à suivre est la suivante:

cd /tmp
wget https://raw.github.com/nicolargo/muninplugins/master/ddos_
sudo munin-node-configure --shell
sudo cp ddos_ /usr/share/munin/plugins/
sudo chmod a+x /usr/share/munin/plugins/ddos_
sudo munin-node-configure --shell
sudo ln -s /usr/share/munin/plugins/ddos_ /etc/munin/plugins/ddos_
sudo service munin-node restart

On peut vérifier que le plugin est bien actif en saisissant la commande:

sudo munin-node-configure | grep ddos
ddos_                      | yes  |

Il faut ensuite attendre quelques heures pour voir apparaître le graphe au niveau de votre serveur Munin.

Par défaut, le plugin est configuré pour afficher les valeurs en WARNING quand le nombre de SYN_RECV dépasse le seuil des 50 et en CRITICAL au dessus de 70 (vous pouvez bien sûr changer ces valeurs dans le munin.conf).

C’est pas beau Munin 🙂 ?

Catégories
Nagios Open-source Planet-libre Reseau Web

Superviser PHP-FPM avec Nagios ou Shinken

Vous savez que j’ai un faible pour le couple Nginx / PHP-FPM que je trouve à la fois léger, rapide et simple à administrer. Suite à un message d’un follower (@JulSa_ pour ne pas le citer), je me suis intéressé à la supervision du process PHP-FPM depuis mon serveur de supervision Shinken (mais la procédure suivante fonctionne également avec Nagios).

Petite introduction

Pour superviser PHP-FPM, mieux vaut comprendre comment il fonctionne. PHP-FPM est une implémentation du langage PHP proposant, à votre serveur Web, une interface basée sur FastCGI. Contrairement à une interface CGI classique, FastCGI permet d’optimiser le nombre, la gestion et les caractéristiques des processus PHP en attente des requêtes venant de votre serveur Web.

Ma première réponse au message de @JulSa_ a été: « tu n’as qu’à surveiller si le processus est bien lancé sur ton serveur ». Bien que cette solution soit possible elle est insuffisante. En effet, comme l’on vient de le voir, l’interface FastCGI de PHP-FPM permet d’optimiser le chargement des processus en mémoire et sur certaines configuration, un fonctionnement « normal » doit se caractériser par la présence d’au moins 5 processus PHP-FPM. On se rend compte qu’il va falloir utiliser une autre méthode si l’on veut obtenir une supervision plus fine.

La solution: check_phpfpm_status

En cherchant sur la toile on tombe rapidement sur le plugin check_phpfpm_status (page officielle sur GitHub) qui propose d’utiliser les informations remontées directement par PHP-FPM (qui est quand même le mieux placé pour dire comment il va…) à travers son URL de statut.

Configuration de votre serveur à superviser

Si vous avez une installation par défaut de PHP-FPM, il y a de forte chance que cette URL de statut ne soit pas activée. Nous allons donc dans un premier temps configurer PHP-FPM et NGinx pour qu’ils répondent à cette URL.

La configuration de PHP-FPM se fait à travers le fichier /etc/php5/fpm/pool.d/www.conf (out tout autre pool utilisé par votre serveur) en éditant la ligne suivante:

pm.status_path = /status

Pour Nginx, il faut ajouter la cible /status et la rediriger vers PHP-FPM en ajoutant la section suivante à votre configuration (par exemple /etc/nginx/sites-enabled/default-site):

# PHP-FPM Status
location /status {
                 fastcgi_pass   127.0.0.1:9000;
                 fastcgi_index  index.php;
                 include fastcgi_params;
                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Note: cette configuration part sur le principe ou les processus PHP-FPM écoute sur le port 9000 (port TCP par défaut)

On doit ensuite relancer Nginx et PHP-FPM:

sudo service php5-fpm restart
sudo service nginx restart

Puis tester que votre serveur répond bien à l’URL: http://votreserveur.com/status

Installation de check_phpfpm_status sur votre serveur de supervision

On peut maintenant passer à la configuration de votre serveur de supervision (Nagios ou Shinken).

La première étape est de récupérer le script et de l’installer:

cd /tmp
wget https://raw.github.com/regilero/check_phpfpm_status/master/check_phpfpm_status.pl
chmod a+x check_phpfpm_status.pl

Sur ma configuration (Debian 6 + Shinken), j’ai dû éditer le script pour remplacer la ligne:

use lib « /usr/local/nagios/libexec »;

par

use lib « /usr/local/shinken/libexec »;

On copie ensuite le script dans le répertoire des plugins de Nagios/Shinken:

sudo cp check_phpfpm_status.pl /usr/local/shinken/libexec/

Il est possible de tester le script en ligne de commande:

$ /usr/local/shinken/libexec/check_phpfpm_status.pl -H votreserveur.com -u /status

PHP-FPM OK - www, 0.070 sec. response time, Busy/Idle 1/2, (max: 2, reached: 0), ReqPerSec 0.3, Queue 0 (len: 128, reached: 0)|Idle=2;Busy=1;MaxProcesses=2;MaxProcessesReach=0;Queue=0;MaxQueueReach=0;QueueLen=128;ReqPerSec=0.312155

Configuration de Nagios/Shinken pour surveiller PHP-FPM

La dernière étape consiste à configurer votre serveur de supervision en y intégrant ce nouveau plugin. Il y a plein de méthode possible pour cette étape.

Fichier commands.cfg:

### PHP-FPM
define command{
        command_name    check_php_fpm
        command_line    $USER1$/check_phpfpm_status.pl -H $HOSTADDRESS$ -s $ARG1$ -u $ARG2$ -w $ARG3$ -c $ARG4$
}

On voit donc que le service va prendre 3 paramètres:

  • ARG1: le nom d’host sous lequel votre serveur Web répond (par exemple votreserveur.com)
  • ARG2: l’url de status sous laquelle le serveur va répondre (par exemple /status)
  • ARG2: les 3 valeurs de PHP-FPM (MIN_AVAILABLE_PROCESSES,PROC_MAX_REACHED,QUEUE_MAX_REACHED, séparés par des virgules) qui vont déclencher une alarme WARNING
  • ARG3: les 3 valeurs de PHP-FPM (MIN_AVAILABLE_PROCESSES,PROC_MAX_REACHED,QUEUE_MAX_REACHED, séparés par des virgules) qui vont déclencher une alarme CRITICAL

Les 3 valeurs représentent:

  • MIN_AVAILABLE_PROCESSES: Working with the number of available (Idle) and working process (Busy).
  • PROC_MAX_REACHED: the fpm-status report will show us how many times the max processes were reached sinc start, this script will record how many time this happended since last check, letting you fix thresolds for alerts
  • QUEUE_MAX_REACHED: the php-fpm report will show us how many times the max queue was reached since start, this script will record how many time this happended since last check, letting you fix thresolds for alerts

Une valeur négative (-1) permet d’ignorer le paramètre.

Par exemple, l’appel à la commande suivante:

./check_phpfpm_status.pl -H votreserveur.com -s votreserveur.com -u /status -w 1,-1,-1 -c 0,2,5

va déclencher une alarme CRITICAL si vous avez 0 processus PHP-FPM ou si vous avez atteint le nombnre maximum de processus 2 fois depuis le dernier check ou bien si vous avez atteint 5 fois la taille maximale de la queue. Une alarme de type WARNING sera émise si il n’y a qu’une seul processus.

On déclare enfin le service de check sur la machine à surveiller:

define service {
        use generic-service
        host_name votreserveur.com
        service_description PHP_FPM
        check_command check_php_fpm!votreserveur.com!/status!1,-1,-1!0,2,5    
}

Le résultat:

A vos configurations 🙂

Catégories
Open-source Planet-libre Reseau Web

Introduction et première utilisation de Tor

« Résistance et obéissance, voilà les deux vertus du citoyen. Par l’obéissance il assure l’ordre; par la résistance il assure la liberté. » [Alain]

Le réseau Internet est devenu, en un temps record à l’échelle de l’humanité, un des vecteur les plus populaires dans l’accès à la connaissance. Nous vivons encore dans un pays qui respecte, mais pour combien de temps, l’accès libre à cette énorme source d’information. Mais « libre » ne veut pas dire « non contrôlé ». Les évènements récents ont réveillé chez certains la volonté de regarder d’un peu plus près ce que vous faites à partir de votre navigateur Web. En tant que fervent partisan de la liberté d’accès aux réseaux informatiques, je vous propose de découvrir Tor, un système permettant de compliquer la tâche des mouchards en rendant anonyme la consultation des sites Internet.

Tor: Comment ça marche ?

Je ne vais pas faire un copier / coller des très bonnes sources que l’on peut trouver sur Internet.

En gros, Tor est « réseau dans le réseau » qui ajoute entre votre PC et le serveur du site que vous consultez un certain nombre de noeuds (appelé « routeur oignons« ). Le logiciel Tor, installé sur votre machine, va découper puis envoyer les requêtes à des noeuds différents.  Chaque routeur oignon anonymise les flux qui le traverse.

Sur le site de l’EFF, j’ai trouvé une très belle infographie sur le sujet (merci à @Tristant pour la découverte).

Dans un premier plan, on voit qu’un trafic entre votre PC et un site.com quelconque peut être intercepté par tout le monde (un hacker qui serait sur votre réseau local/hotspot Wifi, n’importe qui ayant accès aux données de votre FAI, comme par exemple le gouvernement et également n’importe quelle institution ayant, comme la NSA dans ce diagramme, accès à des routeurs du backbone Internet).

Dans le deuxième cas, vous utilisez Tor. Tout le trafic entre votre machine et le dernier noeud du réseau Tor est protégé. Plus de hacker, plus d’Hadopi (enfin si ils existent encore quand vous lirez ce billet). Par contre, la NSA (ou autres) pourra toujours intercepter et analyser le trafic entre le dernier noeud de Tor et le site.com.

Enfin dans le dernier graphisme, on voit le cas idéal ou l’on utilise à la fois Tor et un site.com utilisant un protocole sécurisé (comme HTTPS). Dans ce cas, le dernier lien entre le noeud Tor et le site.com ne véhiculera que des données chiffrées (les esprits chagrins vont me dire que la NSA peut casser sans trop de problème un chiffrement HTTPS, ils n’auront pas tort…).

Après cette rapide introduction, nous allons maintenant voir comment installer Tor sur une distribution Ubuntu 11.10 (sachant que la procédure est identique sur  Debian, Mint…).

Tor existe également sur d’autres OS: Windows, Mac, Android.

Installation de Tor comme client

Le logiciel Tor propose dans un même programme la partie cliente (à installer sur votre PC pour naviguer anonymement) et la partie serveur (si vous voulez transformer une de vos machines en noeud Tor). Par défaut, l’installation sous Ubuntu pré-configure Tor comme client.

On commence donc par installer Tor à partir du PPA officiel de l’équipe de développement en saisissant les commandes suivantes. Bien que Tor soit présent dans le dépôt « Universe », je préfère cette méthode pour disposer de la dernière version.

sudo apt-add-repository ppa:ubun-tor/ppa
sudo apt-get update
sudo apt-get install tor privoxy

Après avoir saisi ces commandes, Tor devrait être lancé en tache de fond sur votre machine. Il fonctionne comme un proxy SOCK5, en attente de vos requêtes sur le port TCP/9050.

Attention, Tor n’intercepte pas les connexions à votre place. Si vous restez dans cet état de configuration, aucune de vos consultations ne passeront par Tor. Il faut donc configurer vos application pour utiliser le proxy SOCK5 Tor.

Utilisation de Tor depuis votre navigateur Chromium

Si vous utilisez Firefox, il existe une très bonne extension nommé Torbutton qui va permettre d’activer/désactiver l’utilisation de Tor en cliquant simplement sur un bouton. Pour installer cette application, il suffit de consulter la page suivante sur le site officiel de Tor.

Si comme moi, vous utilisez Chomium, il faut utiliser une autre extension (en attendant que Tor propose l’équivalent de Torbutton pour Chrome / Chromium). L’extension en question est Proxy Anywhere (cliquez sur ce lien pour l’installer sur votre navigateur).

Une fois l’extension installé, la page de configuration va apparaître dans un nouvel onglet de votre navigateur. Il faudra saisir les informations suivantes:

Il ne reste plus qu’à activer Tor sur votre navigateur en cliquant sur le bouton suivant (en haut à droite, près de la barre d’adresse):

Il est facile de vérifier que l’on passe bien par le réseau Tor en visitant le site suivant: https://check.torproject.org/?lang=fr

En cas de problème, il est possible de consulter le fichier de log /var/log/tor/log.

Une solution idéale ?

Sur le papier, Tor est vraiment la solution idéale pour surfer plus librement. Dans la réalité, il faut quand même noter quelques limitations.

Tor est avant tout conçu pour le surf Web (HTTP/HTTPS), donc pas de P2P ou d’autres protocoles exotiques (bien que cela soit techniquement possible mais interdit et inutilisable vu les performances).

Même en HTTP/HTTPS, l’empilement des couches, qui apporte la sécurité des données, est aussi un facteur de baisse de performance. Un test sur Speedtest le montre facilement.

Sans Tor:

Avec Tor:

Le délais de transit explose et fait donc baisser le débit obtenu. Ce délais est particulièrement pénalisant sur les performances de consultation des sites Web qui sont composés d’un grand nombre de petits fichiers.

A l’utilisation, il reste néanmoins possible de consulter des sites de manière anonyme quand on se trouve sur des « réseaux sensibles ».

Utilisateurs ?

Utilisez-vous le réseau Tor pour accéder à certains sites Web ?

Comment trouvez-vous les performances ?

En faites vous un autre usage ?

A vos commentaires chers lecteurs !

Catégories
Blog Open-source Planet-libre Reseau

Bannir les bannis avec Fail2Ban

Depuis la mise en place de Fail2Ban sur mon serveur perso pour bloquer les attaques DOS.  La règle mise en place est un bannissement de 10 minutes pour une machine générant plus de 360 requêtes en moins de 2 minutes. Malgré cela, il arrive certaines machines insistent  lourdement en recommencent leurs attaques toutes les 10 minutes…

J’ai donc décidé de mettre en place une règle un peu plus évoluée qui va bannir pendant 1 heures les machines bannies 3 fois en moins d’une heure puis 24 heures pour les gros lourds qui se font bannir 3 fois de suite de cette manière. En bonus, nous allons également voir comment pourrir la bande passante de la machine effectuant l’attaque en utilisant la règle de drop de type « tarpitting » de IpTable.

Avant de commencer

Je pars sur le principe ou vous disposez d’un Fail2ban fonctionnel (suivre mon premier billet pour avoir la procédure d’installation).

Le principe est le suivant: nous allons surveiller le fichier /var/log/fail2ban.log pour y analyser les logs de type ban et multi-ban et y associer les actions appropriés.

Pour cela on commence par créer les filtres.

Filtre ban.conf et multiban.conf

On édite le filtre ban.conf dans le répertoire /etc/fail2ban/filter.d:

[crayon url= »https://raw.github.com/nicolargo/fail2banarena/master/filter.d/ban.conf » /]

Rien de bien compliqué: on récupère dans la variable HOST l’adresse IP de la machine bannie.

Le second filtre multiban.conf (également dans le répertoire /etc/fail2ban/filter.d)

[crayon url= »https://raw.github.com/nicolargo/fail2banarena/master/filter.d/multiban.conf » /]

On actionne ensuite les filtre et les actions correspondantes dans la prison de Fail2ban.

Configuration de la prison Fail2ban

Le fichier prison (jail) par défaut se trouve dans /etc/fail2ban/jail.conf, il faut ajouter les sections suivantes (à adapter à vos besoins):

[crayon url= »https://raw.github.com/nicolargo/fail2banarena/master/jail.conf » /]

L’action choisie pour bannir ces attaques multiples est plutôt radicale: bloquer toutes les requêtes TCP (avec l’action iptables-allports) et envoyer un mail à l’administrateur (lors d’un bannissement de 24h). Il est bien sûr possible de modifier ces actions et les paramètres associés.

Le résultat

En surveillant le fichier fail2ban.log, on peut voir que la nouvelle prison fonctionne bien:

Après trois attaque HTTP DOS, le filtre MULTI BAN prend le relais et banni l’adresse IP pour 24 heures.

En bonus: la contre-attaque !

Le firewall IpTable qui protège mon serveur dispose d’une règle nommé TARPIT que l’on peut coupler avec un DROP pour saturer la liaison de la machine qui fait ce genre d’attaque (pour plus de précision, je vous conseille la lecture de ce très bon billet sur WikiGento).

Pour supporter la directive TARPIT, il faut charger le module IpTable de la manière suivante (procédure validée sous Debian Squeeze):

[crayon]

sudo apt-get install xtables-addons-common xtables-addons-source

sudo module-assistant auto-install xtables-addons-source

[/crayon]

Pour Fail2Ban, on commence donc par créer un nouveau fichier d’action que l’on va nommer iptables-tarpit.conf (dans le répertoire /etc/fail2ban/action.d).

Note: je suis bêtement reparti du fichier iptables-allports.conf auquel j’ai ajouté la ligne de commande iptables avec -j TARPIT

[crayon url= »https://raw.github.com/nicolargo/fail2banarena/master/action.d/iptables-tarpit.conf » /]

Pour activer cette nouvelle action dans notre jail, il suffit de remplacer les lignes:

action = iptables-allports[name=ALL]

par:

action = iptables-tarpit[name=ALL]

dans notre fichier jail.conf.

Conclusion

Il est difficile (voir même impossible) de se défendre contre les attaques DOS sans engager de gros moyens (financier et en temps). La solution proposée dans cet article n’est pas parfaite mais suffira largement contre les Bots ou les scripts kiddies.

Subissez-vous des attaques DOS sur vos serveurs ?

Si oui, quels sont les solutions techniques que vous mettez en place pour les contrer ?

Catégories
Open-source Planet-libre Reseau Systeme

Un PPA pour Glances

Grâce à Arnaud Hartmann (un grand merci à lui), un PPA est maintenant disponible pour installer la dernière version stable de Glances sur votre système Ubuntu (ou dérivé).

Le PPA en question couvre les versions d’Ubuntu depuis la 9.10 (Karmic) jusqu’à la future 12.04 (Precise Pangolin).

Pour installer Glances sur votre système via ce PPA, il suffit d’effectuer les actions suivantes:

[cc lang= »bash »]

sudo add-apt-repository ppa:arnaud-hartmann/glances-stable

sudo apt-get update

sudo apt-get install glances

[/cc]

A la date de la rédaction de ce billet, la dernière version stable disponible est la 1.3.7. Pour les plus téméraires, il est possible, en parallèle de cette installation, de tester la version expérimentale (1.4b) en utilisant le PPA suivant en lieu et place du stable: ppa:arnaud-hartmann/glances-unstable

Petit bonus pour les lecteurs qui sont arrivés jusqu’ici, la lecture d’un billet (en anglais) de présentation de Glances que je trouve assez bien fait.