Appel à conférence sysadmin #5

October 8th, 2013 No comments

Bonjour à tous,

la cinquième édition des séminaires sysadmin se tiendra les 2 et 3 Décembre sur Paris.

N’hésitez pas à me laisser un commentaire si vous souhaitez présenter un sujet !

Merci à tous

Categories: Sysadmin Tags:

Icinga REST API and custom variables

July 9th, 2013 No comments

I’m currently working for a customer who wants review its Nagios configuration. Our goal is to create a script to schedule a downtime for all servers which have a custom variable. So, the first step is to find the list of this server! After digging into the REST’S API source code, here the snippet:


curl -g 'http://monitoring.example.com/icinga-web/web/api/host/filter[AND(HOST_CUSTOMVARIABLE_NAME|=|ROLES;AND(HOST_CUSTOMVARIABLE_VALUE|=|monitoring))]/columns[HOST_NAME|HOST_CURRENT_STATE])/authkey=XXXXXX/xml'

For the following hosts definition:


define host {
use generic-host
name monitoring
host_name monitoring.example.com
address 1.2.3.4
_roles monitoring
}

As you can notice, custom variables must be used in uppercase in the REST request, without the leading _.

Categories: Sysadmin Tags: ,

iTop 2, donnez un coup de carte à votre SI

November 3rd, 2012 2 comments

Depuis quelques jours, une version alpha d’iTop 2 est disponible chez mes amis de Combodo. iTop est un fabuleux outil qui vous permet de créer votre propre CMDB, et d’y associer des services tels que la gestion de tickets (incidents, changements). Pour rappel, une CMDB (Configuration Management DataBase) décrit l’ensemble des composants d’un système d’information. Cela peut aller du SAN, serveur physique, machine virtuelle, carte réseaux, switch jusqu’a remonter à la couche applicative : serveur d’application (par exemple Tomcat), application, etc.

L’objectif d’une telle base de données est de pouvoir d’une part cartographier votre SI, mais surtout de pouvoir faire des liens entre tous ces objets, ce qui permet d’en obtenir des analyses de dépendances (de quelle brique technique mon application métier a besoin pour fonctionner) et aussi des analyses d’impact (il se passe quoi si j’éteins ce serveur).

Les nouveautés visibles d’iTop 2

Rentrons dans le vif du sujet, à savoir quelles sont les nouveautés – point de vue utilisateur – de cette nouvelle version ? Et bien, la réponse courte tiens en deux mots : “le modèle”. Concrètement, si vous êtes utilisateur ou même testeur de la première version, vous aviez remarquez l’absence des machines virtuelles dans le modèle de base, ce qui est de nos jours est d’utilisation très courante. Ce manque à – je pense – freiné un peu l’adoption du logiciel.

Donc, voici en vrac les changements notables du modèle (liste non exhaustive) :

  • Machines virtuelles : une VM peut être rattachée – via la notion d’hyperviseur – soit à un serveur physique (zone Solaris, dom0 Xen), soit à un cluster
  • Gestion du SAN, de la baie de stockage aux volumes logiques, en passant par les switch
  • Des attributs supplémentaires tels que la gestion de l’alimentation des serveurs physiques, la gestion des racks/chassis

Un autre changement notable concerne l’installation. Un assistant (wizard) plus complet permet de choisir entre – par exemple – plusieurs niveaux de gestions des tickets.

Les autres nouveautés

L’autre, sinon LA nouveauté d’iTop, bien qu’elle est soit invisible pour les utilisateurs réside dans le changement du format de données décrivant le modèle. Dans la version 1, le modèle est décrit via des fichiers PHP, quelques connaissances de programmation sont donc nécessaire, et surtout il n’était pas facile de maintenir un suivi avec les mises à jour coté iTop.

Dans cette version, les développeurs ont choisi d’utiliser XML, ce qui permettra à chacun de modifier le modèle de données sans avoir à modifier les fichiers fournis par iTop ! Et j’avoue que ça, c’est un point non négligeable pour un intégrateur comme moi ! De plus, l’utilisation de fichiers XML rend plus facilement possible la création d’un éditeur graphique du modèle (qui existe pour les partenaires de Combodo).

Conclusion

Cette nouvelle version est doublement appréciable. D’une part, le modèle est maintenant complet et ne nécessitera que quelques retouches (je pense surtout à l’ajout d’attributs) pour être utilisable dans 90% des cas, et d’autre part, le changement en profondeur du format de description du modèle va considérablement simplifier la vie, et permettra – je l’espère rapidement – la création d’outils pour gérer son modèle.

Categories: Business tools, Sysadmin Tags: ,

(re)Appel à conférence pour sysadmin #4

November 3rd, 2012 2 comments

cette fois, c’est pour de bon ! la quatrième édition des séminaires sysadmins se tiendra les Jeudi 28 Février et Vendredi 1er Mars sur Paris (à l’IRCAM, 5mn de Châtelet).

Toute proposition de conférence (50mn questions incluses pour les pleinières, 5 à 15 minutes pour les conférences éclaires) est la bienvenue ! Faire vos propositions d’ici fin novembre à asyd at asyd dot net ou en par un commentaire sur cette présente page.

Merci d’avance !

Categories: Sysadmin Tags:

Appel à conférences, sysadmin #4

February 29th, 2012 2 comments

Bonjour à tous,

la quatrième édition des séminaires sysadmins se tiendra les 26 et 27 avril sur Paris. Comme les précédentes éditions, une journée sera dédiée à un thème particulier et cette fois c’est autour du monitoring et métrologie. La deuxième journée n’a pas de thème spécifique, donc toute proposition est la bienvenue !

Categories: Sysadmin Tags:

Du modèle EAV, ou comment s’arracher les cheveux, pour plein de raisons

January 2nd, 2012 5 comments

Dans le cadre du projet SOIF (qui fera l’objet d’un prochain billet), je travaille actuellement sur un job de transformation d’une base Puppet facts pour injecter dans iTop.

Avant tout, un peu de contexte : Puppet intègre la commande facter qui renvoie tout un ensemble d’informations sous la forme attribut=valeur, et qui est facilement extensible, bref c’est très intéressant. Là où le bat blesse, c’est que – logiquement – ces informations sont stockées en base de données en utilisant le modèle de conception EAV pour Entity Attribute Value.

Ce qui donne :

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255) | NO   | MUL | NULL    |                |
| updated_at | datetime     | YES  |     | NULL    |                |
| created_at | datetime     | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

et

mysql> desc fact_values;
+--------------+----------+------+-----+---------+----------------+
| Field        | Type     | Null | Key | Default | Extra          |
+--------------+----------+------+-----+---------+----------------+
| id           | int(11)  | NO   | PRI | NULL    | auto_increment |
| value        | text     | NO   |     | NULL    |                |
| fact_name_id | int(11)  | NO   | MUL | NULL    |                |
| host_id      | int(11)  | NO   | MUL | NULL    |                |
+--------------+----------+------+-----+---------+----------------+

Donc, pour obtenir par exemple la fact serialnumber pour un hôte donné, cela donne quelque chose du genre :


select fact_values.value FROM fact_values LEFT JOIN hosts ON fact_values.host_id = hosts.id LEFT JOIN fact_names ON fact_values.fact_name_id = fact_names.id WHERE hosts.name = 'xxx' AND fact_names.name = 'serialnumber';

Mais maintenant, retour à mon objectif : travailler par lot, c’est à dire pour tous les enregistrements de la table hosts. Se pose donc la question de comment faire pour obtenir la liste de tous les hôtes, avec la valeur serialnumber, à froid, pour l’expert SQL que je ne suis pas, mon premier jet à donné :

SELECT hosts.id, fact_values.value FROM hosts LEFT JOIN fact_values ON hosts.id = fact_values.host_id LEFT JOIN fact_names ON fact_names.id = fact_values.fact_name_id WHERE fact_names.name = 'serialnumber';

qui semble fonctionné à priori, mais, MAIS, cela ne renvoie que les enregistrements pour lesquels il existe la valeur serialnumber.

Après de nombreuses recherches, il semblerait que la seule solution à mon problème soit :

SELECT 
  hosts.id, 
  (SELECT fact_values.value
    FROM fact_values
    JOIN fact_names
     ON fact_names.id = fact_values.fact_name_id
    WHERE fact_names.name = 'serialnumber' 
     AND fact_values.host_id = hosts.id) as serialnumber,
FROM hosts;

et là, on le voit tout de suite, ça devient compliqué. Pourquoi ? parce que je n’ai pas seulement besoin du serialnumber mais de nombreux autres champs, et pour chaque champ que je veux, je dois donc rajouter un nouveau SELECT, je vous laisse deviner l’impact sur les performances.

Bref, EAV, ça pue. Bien évidemment si vous avez une autre solution, n’hésitez pas à commenter !

Categories: Sysadmin Tags: , ,

Astuce : trouver le caractère UTF8 associé à un code hexa

December 29th, 2011 3 comments

Dans mes péripéties mod_security, j’ai eu l’erreur suivante :


[Thu Dec 29 08:44:22 2011] [error] [client xx.21.3.31] ModSecurity: Warning. Pattern match "\\W{4,}" at ARGS:typeLibelle. [file "/usr/local/apache2/conf/crs/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf"] [line "507"] [id "960024"] [rev "2.2.2"] [msg "SQL Character Anomaly Detection Alert - Repetative Non-Word Characters"] [data " \\xc3\\xa0 "] [hostname "dev.xxxx.fr"] [uri "/xxxx"] [unique_id "TvwaVgpArWEAAHu7CtMAAAAG"]

Et la question qui tue : à quoi correspond \\xc3\\xa0 ? Je me doutais que c’était un caractère UTF8, j’ai donc demandé à mon expert jeu de caractères (aka Laurent Blume) qui m’a donné l’astuce suivante :

  • Avant tout, avoir un système en UTF-8
  • Lancer vim (pas besoin d’ouvrir un fichier)
  • Taper un caractère accentué, par exemple é
  • Convertir en hexadécimal à l’aide de la commande “:%!xxd”, ce qui va donner quelque chose du genre “0000000: c3a9 0a”
  • Modifier le c3a9 en c3a0
  • Reconvertir en texte, à l’aide de la commande “:%!xxd -r”, et miracle on obtient le caractère “à” !
Categories: Sysadmin Tags:

Séminaire #3, le programme

October 3rd, 2011 No comments

La troisième édition des séminaires sysadmin se tiendra les 20 et 21 Octobre à l’IRILL (merci à eux aux passage).

Le programme (non définitif) est maintenant disponible ! Les inscriptions seront ouvertes d’ici peu.

Categories: Sysadmin Tags:

Premier pas avec mod_security

June 19th, 2011 No comments

Un client m’a demandé récemment si je pouvais jeter un œil à mod_security pour ses besoins de protections d’URL (WAF, en anglais Web Application Firewall, plus d’infos sur l’article Wikipedia). En quelques mots, mod_security est un module Apache – comme son nom l’indique – qui apporte donc une fonctionnalité de filtre relativement avancé, mais avec l’avantage d’être opensource et donc gratuit. De plus, il vient avec un ensemble de règles déjà établies qui sont le fruit du travail du groupe OWASP, qui se définit comme un 501c3 not-for-profit worldwide charitable organization focused on improving the security of application software.

L’objectif de ma première approche de mod_security est relativement simple puisqu’il consiste à logger toutes les tentatives d’authentification avec un nom d’utilisateur qui contient des caractères hormis [a-zA-Z0-9]. Voici un récapitulatif de l’architecture (simple) mise en œuvre :

  • Distribution : CentOS
  • un apache (où sera installé le module mod_security) en frontal devant un Tomcat, en utilisant le mod_proxy (en HTTP)
  • un Tomcat avec une application de test nommée Xebia Travel développée par Xebia
  • L’authentification des utilisateurs sur l’application Xebia Travel s’effectue via un POST au travers d’un formulaire, avec les variables j_username et j_password

Une fois installé mod_security (depuis le dépôt EPEL), et quelques petites heures de recherche, voici le résultat que j’ai obtenu :


SecAuditLog /var/log/httpd/ecommerce-audit.log
SecDebugLog /var/log/httpd/ecommerce-security.log
SecDebugLogLevel 3
SecAuditEngine relevantonly

SecRequestBodyAccess On

SecRule ARGS:j_username "!@rx ^([A-Za-z0-9]+)$" auditlog,id:10000

Quelques explications :

  • Les directives SecAuditLog, SecDebug, SecDebugLogLevel et SecAuditEngine sont relativement explicites. Elles permettent en effet de configurer les différents fichiers de logs et d’audit, ainsi que leur verbosité
  • La directive SecRequestBodyAccess est très importante, puisqu’elle permet de dire à mod_security d’analyser non pas seulement les en-têtes des requêtes mais également le corps. Pourquoi est-ce important ? Parce qu’avec les formulaires de type POST, les variables sont passées non pas en en-tête, mais bien dans le corps du message. Sans cette directive, il est donc impossible d’analyser les arguments des formulaires de type POST
  • et enfin, la directive la plus importante à savoir SecRule qui est exécutée à chaque fois qu’une requête est effectuée avec l’argument j_username (POST ou GET), et je vérifie au travers d’une expression rationnelle (regex) qu’elle contient d’autres caractères que [A-Za-z0-9], auquel cas je lui définie l’action auditlog, en lui demendant d’identifier cette règle avec l’id 10000, ce qui s’avère pratique pour l’analyse du fichier d’audit.
  • Bien entendu, ce billet ne montre qu’un centième des utilisations possible de mod_security, mais si cela peut aider à commencer, sur ce, à bientôt !

Séminaire #3, appel à conférences

June 15th, 2011 5 comments

Bonjour à tous,

courant fin septembre 2011 se tiendra la troisième édition des séminaires de la liste francophone sysadmin (le programme de la deuxième édition est toujours en ligne, et surtout les vidéos et présentations). Cette troisième édition se tiendra sur deux journées, la première consacrée à des sujets autour de la conformité de configuration (tel que Chef, Puppet, etc.), la seconde avec des sujets divers et variés. Si vous êtes intéressé par faire une présentation, je vous invite à me contacter par mail à asyd at asyd dot net, et/ou en laissant un commentaire sur ce présent billet.

Merci de votre participation !

Categories: Social, Sysadmin Tags: