Catégories
Open-source Planet-libre Reseau Web

Installation et utilisation de LOIC sous GNU/Linux

Depuis que le groupe Anonymous a utilisé Low Orbit Ion Cannon (LOIC) pour attaquer un certain nombre d’entreprises ayant mis des battons dans les roues de Wikileaks et de son patron,  ce logiciel a été mis sur le feux des projecteurs.

Ce logiciel permet en un clic de souris de lancer une attaque de type Deny Of Service (DOS) sur une machine cible. Utilisé par une personne bienveillante, ce logiciel de « script kiddies » peut être utilisé pour tester la réaction d’un de ses serveur par rapport à une telle attaque et également de tester les mécanismes de sécurité associés.

Développé en C# (burk…), LOIC est disponible sous les OS Windows Xp ou supérieur. Il est bien sur possible de l’utiliser également sous GNU/Linux moyennant quelques manipulations…

Installation de LOIC sous GNU/Linux

C’est en lisant ce forum que j’ai trouvé une solution simple et élégante pour installer la dernière version de LOIC sous Ubuntu, Fedora ou Debian (et surement sur toutes distributions GNU/Linux disposant des pré-requis).

On commence par installer les logiciels suivants:

Sous Ubuntu/Debian:

sudo aptitude install git-core monodevelop

Sous Fedora (en root):

yum install git mono-devel

Ensuite on récupére un script SHELL qui va permettre: d’installer, de mettre à jour et de lancer LOIC sur votre distribution GNU/Linux:

mkdir ~loic

cd ~loic

wget https://raw.github.com/nicolargo/loicinstaller/master/loic.sh

chmod a+x loic.sh

Installation de LOIC

On lance la commande suivante:

./loic.sh install

Le script va télécharger la dernière version disponible dans le GIT puis effectuer une installation dans le répertoire ~/loic/LOIC.

Mise à jour de LOIC

On lance la commande suivante:

./loic.sh update

Le script va vérifier l’existence d’une nouvelle version disponible dans le GIT puis effectuer une installation dans le répertoire ~/loic/LOIC.

Lancement de LOIC

On passe au chose sérieuse en lançant le logiciel:

./loic.sh run

La fenêtre suivante devrait apparaitre:

Utilisation de LOIC

Attention à ne pas tester ce logiciel sur un site qui ne vous appartient pas ! En effet, le logiciel ne dispose d’aucun mécanisme pour cacher votre adresse IP et vous serez facilement repéré par le site cible. Cela serait dommage de se faire bannir par les mécanismes de filtrage de votre blog préféré 😉

Comme vous allez le voir, même mon fils de 4 ans et demi peut se servir de ce logiciel. Il suffit de (1) saisir l’URL (ou l’adresse IP) de la machine à attaquer puis (2) de cliquer sur le bouton « Lock on » puis (3) enfin sur le bouton  « IMMA CHARGIN MAH LAZER ».

 

Par défaut, les attaques sont de type flood sont lancées sur le port TCP/80 (mais il est possible de faire des attaques de type UDP ou HTTP). 10 processus sont lancés en parallèle.


La ligne de status devrait se mettre à jour pour voir la progression de l’attaque:

Que fait LOIC ?

En capturant le trafic généré par LOIC à l’aide d’un logiciel comme tshark, on peut voir qu’il génére un grand nombre de requêtes TCP dans le but de saturer la machine cible.

Avec un simple PC bureautique, j’arrive à un débit de requête de l’ordre de 4.5 Mbps. Imaginez le résultat si 1000 personnes font la même chose vers une même cible…

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

Sécuriser son blog WordPress #1

Il n’y a rien de plus rageant que de se faire pirater son blog. En plus de réduire à néant notre amour propre, cela peut avoir, dans le cas d’une indisponibilité prolongée, des impacts non négligeables sur le « saint » référencement dans gOOgle et donc sur le trafic sur votre site (je suis bien placé pour en parler…).

Après avoir détaillé l’installation d’un blog WordPress sur un serveur VPS Gandi Ubuntu Server puis optimiser ce dernier en 12 étapes, nous allons donc aborder des techniques permettant de protéger votre blog WordPress hébergé sur un serveur dédié ou virtuel (mais un bon nombre de ces techniques sont aussi applicables sur n’importe quel site Internet). Il faut garder à l’esprit que cela ne garantira en rien une protection efficace à 100%. Si une personne compétente décide de pirater votre site, il y a de fortes chances qu’elle réussisse. Par contre, ces techniques vous protégeront sûrement d’une grande majorité des attaques lancées via des « script kiddies« .

Cet article va être découpé en plusieurs billets (vous êtes en train de lire le #1):

Cette série de billets a été co-écrite avec Jérémie Marguerie étudiant à EPITA (merci à lui !).

Sécurisation du système d’exploitation

C’est la base de votre infrastructure. Ici, pas la place pour des systèmes d’exploitations (OS) de comique. Il faut du lourd, du sûr, du solide, du stable, du libre: c’est-à-dire une distribution GNU/Linux ou BSD.

Pour les serveurs Web, j’utilise FreeBSD ou Ubuntu Server, selon mon humeur. Comme je le répète assez souvent il vaut mieux choisir un système d’exploitation que l’on maîtrise bien. En discutant avec des “experts”, vous aurez autant de sons de cloches que d’OS…

Dans la suite de ce billet, nous travaillerons sur la sécurisation d’un serveur sous Ubuntu Server 10.04 LTS, ces méthodes sont applicables facilement sur une Debian (et toute autre distribution Debian like).

Pense bête lors de l’installation

Lors de la configuration des partitions du disque dur de votre serveur, ne tombez pas dans la facilité en faisant une partition unique qui contiendra le système, les application et vos données sur un même volume logique.

Séparer intelligemment les répertoires de son système permet de cloisonner les données et simplifie la ré-installation d’un système. Au minimum, il est conseillé de séparer au moins les partitions suivantes:

  • / (~ 5 Go)
  • /boot (~ 100 Mo)
  • /var (~ 12 Go)
  • /home (Tout l’espace restant)
  • /var/tmp (Voir plus bas)
  • /tmp (Voir plus bas)

Dans notre cas, l’idée est de ne pas stocker nos sites sur /var/www mais sur /home, qui contient tout l’espace.

Le répertoire /var, dédié principalement aux logs, pourra alors se remplir sans impacter votre arborescence principale sur / ou vos comptes sur /home.

Surveiller l’espace utilisé sur vos partition est important, une partition pleine empêcherait vos logs de s’écrire ou vos sites de fonctionner correctement. Le programme logwatch (décrit plus bas) vous fournit un récapitulatif de l’espace disque utilisé, il est donc utile pour surveiller ce point.

Utilisation de tmpfs

Sous les systèmes GNU/Linux, on a deux dossiers temporaires: /tmp et /var/tmp. Passer ces dossiers “World Writable” (c’est à dire que n’importe quel utilisateur/processus de votre système peut écrire et lire dans ces répertoires) en tmpfs (disque RAM). Il faut que votre serveur dispose d’une quantité de mémoire RAM conséquente car une partie de celle-ci sera utilisée pour stocker les fichiers temporaires.

Pour mettre en place tmpfs sur un système de fichier (/tmp dans cet exemple), éditez le fichier /etc/fstab et ajouter la ligne suivante :

tmpfs        /tmp     tmpfs        defaults,user_xattr          0    0

Je vous conseil de mettre tmpfs en place pour les répertoires /tmp, /var/tmp et /dev/shm. La rêgle pour savoir síl faut le mettre en place est « sur tous les répertoires dont le données sont volatiles ». Ainsi, /var/lock devrait en faire partie, sauf que certains programmes, mal codé, n’apprécient pas que ce dossier soit vidé.

L’idée derrière l’utilisation de la RAM est de rendre ces répertoire très rapides. Le stockage sur RAM limite aussi intrinsèquement leur taille, que le noyau gère automatiquement pour étendre ou diminuer la taille de ces partitions en fonction des besoins du système.

Mise à jour du système

C’est un des principe de base de la sécurité de votre système informatique (malheureusement aussi un des plus rébarbatif):

« Toujours avoir un système et des applications à jour. »

Pour m’aider dans cette lourde tache, j’utilise l’application cron-apt qui permet de vérifier automatiquement si des mises à jours sont disponibles. Si c’est le cas, le logiciel peut envoyer un mail et optionnellement, mettre à jour le système pour vous.

Installation de cron-apt:

sudo aptitude install cron-apt

Il faut ensuite configurer votre adresse mail dans le fichier /etc/cron-apt/config. Par défaut cron-apt s’exécute automatiquement tout les matins à 4h00.

Voici un exemple de mail envoyé:
Pour les machines sous Fedora, il existe une fonction équivalente directement dans Yum (lire ce billet pour plus d’informations).

Tuning de la sécurité

Configurer les paramètres de sécurité réseau par défaut dans le fichier  /etc/sysctl.conf.

Vous pouvez vous inspirer des billets suivants pour effectuer cette configuration:

Protection contre les « forks bombs »

Une attaque par « forks bombs » est de type DOS (Deny Of Service) qui utilise la commande système fork. Pour se protéger de telle attaque et limiter leurs impacts sur le reste du système,  il faut éditer le fichier /etc/security/limits.conf et y ajouter les lignes suivantes (en adaptant « username » à vos besoins):

username soft nproc        300

username hard nproc        350

username soft nice         0

username hard nice         0

username soft priority     5

username hard priority     5

username –    maxlogins    10

Ces limitations empêchent un utilisateur de se logguer plus de 10 fois sur la machine (en SSH notamment), de lancer plus de 350 processus simultanément (empêche les forks-bombs) et met une priorité faible a ses tâches par défaut (haute priorité < 0, normal 0, basse priorité > 0).

Source: http://www.cyberciti.biz/tips/linux-limiting-user-process.html

Firewall

Ne laisser passer que les flux réseaux utiles à l’utilisation de votre serveur par les utilisateurs (HTTP / HTTPs) et l’administration (SSH).

Concernant le protocole SSH, on lit souvent qu’il faut changer le port d’écoute du daemon SSHd (par défaut TCP/22). Mise à part le bloquage de certains scripts automatique, je ne pense pas que cette sécurité soit suffisante. En effet, un simple scan de votre machine avec Nmap permettra de retrouver facilement le port d’écoute.

Une solution plus efficace pour protéger cette porte d’entrée sur le serveur est d’utiliser la technique du “portknockers”. Avant de s’ouvrir, on doit taper à la porte de notre serveur en  envoyant une séquence de requêtes vers des ports prédéfinis. Par exemple avant de ce connecter en SSH sur le port TCP/22, il faudra envoyer “taper à la porte” des ports 2222, 3333 et 4444.

Le programme knockd permet de configurer facilement un “portknockers” sur son serveur Linux: https://help.ubuntu.com/community/PortKnocking

Fail2Ban analyse les logs de votre système et bloque automatiquement les indésirables au niveau du firewall iptables, ce qui est très efficace. Vous pouvez aussi bloquer manuellement des plages d’IPs considérées comme “malfaisantes”, il m’est arrivé de bloquer un pays entier cas de nombreux tentatives de piratage provenaient de ce site, et qu’aucun visiteur en provenance de ce pays ne viennent sur mes sites (bon c’est vrai cela fait un peu censure :)).

A installer à partir des sources:

sudo aptitude install fail2ban

Le fichier de configuration par défaut est /etc/fail2ban/jail.conf. Vous pouvez notamment y configurer les adresses IP à ignorer (par exemple l’adresse IP publique ou le nom d’hôte de votre propre box):

ignoreip = 127.0.0.1 home.mondomaine.com

Et également ajouter ou modifier les prisons (jail) pour des services spécifiques. Par exemple pour le serveur pure-ftpd:

#

# FTP servers

#


[pure-ftpd]

enabled = true

port = ftp,ftp-data,ftps,ftps-data

filter = pure-ftpd

logpath = /var/log/messages

maxretry = 6

Pour aller plus loin dans la configuration de fail2bna, vous pouvez lire ce billet.

Autres idées en vrac

  • instaurer des quota disk stricts par utilisateur (quotatool) : très utile pour éviter de bloquer tous ses sites à cause d’un script mal codé.
  • empecher le reboot par syskey /etc/inittab : intéressant mais peu utile, une personne avec un accès physique à votre serveur peut de toute façon faire à peu prêt tout ce qu’elle veut.
  • utiliser rsyslog pour envoyer les logs sur un serveur distant, sans accès de modification/suppression de logs de préférence : permet d’analyser les actions d’un pirate après détection du piratage (un pirate ne peut pas effacer toutes les traces laissées par les tentatives de piratage infructueuses). Un peu cher à mettre en place pour un site perso.

Les commentaires sont ouverts pour nous faire partager votre expérience dans la sécurisation de vos sites Internet.

Sources ayant servies à la rédaction de ce billet:

Catégories
Nagios Open-source Planet-libre Reseau

Détection des attaques DDOS avec Nagios

Les attaques DDOS sont sous le feu de la rampe (et des médias) depuis l’affaire Wikileaks.

C’est une attaque assez difficile à détecter car contrairement à des attaques plus « classiques », elle se base sur le fait d’inonder la machine cible de requêtes venant d’un nombre important de machines zombies (c’est à dire infecté par un programme qui va lancer une attaque).

Nous allons dans ce billet voir comment utiliser Nagios pour envoyer des alertes en cas de détection d’une attaque de type DDOS SYN Flood.

Pour cela j’ai développé (sous licnce GPL v3) un plugin Nagios disponible à l’adresse suivante:

https://raw.github.com/nicolargo/nagiosautoinstall/master/check_ddos.pl

Installation du script

Il faut disposer d’un serveur Nagios correctement configuré. Puis exécuter les commandes suivantes:

cd /usr/local/nagios/libexec

sudo rm -f check_ddos.pl

wget https://raw.github.com/nicolargo/nagiosautoinstall/master/check_ddos.pl

chmod a+rx check_ddos.pl

sudo chown nagios:nagios check_ddos.pl

Test du script:

./check_ddos.pl -w 50 -c 60

No DDOS attack detected (5/50)

Configuration de Nagios

Pour ajouter un service de détection DDOS SYN Flood sur la machine locale (en clair pour vérifier les attaques DDOS vers le serveur hébergeant Nagios), il faut dans un premier temps éditer le fichier commands.cfg (par défaut dans le répertoire /usr/local/nagios/etc/objects) pour ajouter la nouvelle commande de detection DDOS SYN Flood:

# check_ddos

define command{

command_name check_ddos

command_line $USER1$/check_ddos.pl -w $ARG1$ -c $ARG2$

}

Puis il faut éditer le fichier localhost.cfg (qui se trouve également dans le répertoire /usr/local/nagios/etc/objects):

# Define a DDOS SYN Flood detection service

# http://blog.nicolargo.com/?p=4100

# Warning: >50 SYN_RECV

# Critical: >70 SYN_RECV

define service{

use local-service

host_name bilbo

service_description DDOS SYN Flood detect

check_command check_ddos!50!70

}

Nous venons ainsi de définir un service qui va émettre une alerte Warning quand le serveur aura plus de 50 connexions de type SYN_RECV ouvertes (plus de 70 pour une alerte Critical). Ces chiffrent sont bien sur à adapter selon les serveurs…

En bonus, si une alerte est généré, le plugin affiche le TOP 10 des adresses IP des machines zombies (pratique pour les bloquer avec des règles de Firewall Iptables).

Si vous souhaitez surveiller les attaques DDOS SYN Flood sur une autre machine, il faut utiliser le plugin NRPE qui va faire l’interface entre le serveur Nagios et le serveur à superviser.

Sources pour la rédaction de ce billet:

Catégories
Gstreamer Open-source Planet-libre Video

Streaming live MPEG-4 entre Windows et Linux avec GStreamer

Nous allons dans ce billet aborder un sujet plutôt inhabituel pour ce blog: Windows 🙂 !

Le but étant de récupérer un flux vidéo live (venant par exemple d’une caméra) à partir  d’une machine sous Windaube (Xp, Se7en ou autres trucs dans le genre) vers une autre machine (Linux mais aussi Mac ou Windows). Pour cela, nous allons utiliser le framework open-source GStreamer qui va permettre d’unifier tout ce beau monde.

Avant de commencer

Pour illustrer cet article nous allons faire un streaming live depuis une machine Windows Xp vers une machine GNU/Linux Fedora 14 connecté sur le même réseau LAN.

On commence donc par installer GStreamer sur la machine Windows en récupérant et installant la dernière version à partir du site WinBuilds. Je parts sur le principe ou votre Gstreamer est installé dans le répertoire C:\Program Files\OSSBuild\GStreamer\v0.10.6 (si ce n’est pas le cas, il suffit d’adapter le script .BAT, variable GSTPATH, en conséquence).

Ensuite on installe Gstreamer sur son PC GNU/Linux (procédure ici pour Fedora et là pour Ubuntu).

Ok, on a donc le framework GStreamer installé sur les deux machines que nous allons utilisé pour faire nos tests.

Streaming depuis Windows

On commence par éditer un fichier texte (Notepad est ton ami) que l’on va nommer client.bat contenant:

REM

REM Streaming from WebCam + MPEG4-ISO encoding + RTP + UDP

REM

 

set GSTPATH= »C:\Program Files\OSSBuild\GStreamer\v0.10.6″

set CAPS= »video/x-raw-yuv,width=(int)640,height=(int)480,framerate=(fraction)10/1″

set STREAMTO= »192.168.0.10″

set STREAMPORT=5000

 

%GSTPATH%\bin\gst-launch.exe -tv –gst-plugin-path=%GSTPATH%\lib ^

gstrtpbin name=rtpbin latency=0 buffer-mode=0 ^

autovideosrc ! ffmpegcolorspace ^

! queue ! videoscale method=1 ! videorate ! %CAPS% ^

! timeoverlay ^

! queue ! ffenc_mpeg4 pass=0 bitrate=256000 rc-buffer-aggressivity=99 trellis=0 ^

! tee name= »display » ^

! rtpmp4vpay send-config=true ^

! rtpbin.send_rtp_sink_0 ^

rtpbin.send_rtp_src_0 ! udpsink port=%STREAMPORT% host=%STREAMTO% ^

display. ^

! queue ! decodebin ! ffmpegcolorspace ! autovideosink

 

pause

Il faut adapter les deux lignes set à votre configuration sachant que STREAMTO doit être associé à l’adresse IP de votre machine cible (la machine Fedora 14 dans mon cas) et que la résolution de votre Webcam doit être compatible avec les valeur de CAPS.

On exécute ensuite le fichier .bat (une fenêtre CMD va s’ouvrir et afficher les éventuels message d’erreurs).

La ligne de commande qui va s’occuper de l’encodage MPEG-4 est la suivante:

ffenc_mpeg4 pass=0 bitrate=256000 rc-buffer-aggressivity=99 trellis=0

Le paramètre bitrate (256 Kbps) va fixer le débit cible du streaming. Cette valeur est bien sur à adapter selon la résolution et la fréquence (fps) de votre source vidéo.

L’encapsultation dans une trame RTP est faite grâce à la commande:

rtpmp4vpay send-config=true

L’option send-config (=true)  permet à Gstreamer d’envoyer régulièrement sur le réseau (trame RTP) des informations sur les caractéristiques du stream au lieu de les envoyer seulement au début de la session.

Réception du stream depuis GNU/Linux

C’est (un peu) plus simple, on va créer un shell script server.sh:

#!/bin/sh

 

CAPS= »application/x-rtp,media=\(string\)video,clock-rate=\(int\)90000,encoding-name=\(string\)MP4V-ES,payload=\(int\)96″

PORT=5000

 

gst-launch -tv gstrtpbin name=rtpbin latency=0 buffer-mode=0 \

udpsrc caps=$CAPS port=$PORT do-timestamp=true \

! rtpbin.recv_rtp_sink_0 \

rtpbin. ! rtpmp4vdepay ! ffdec_mpeg4 ! autovideosink

Une fois le script édité, il faut le rendre exécutable:

chmod a+x server.sh

Puis executer le script pour recevoir le stream venant du PC Window

./server.sh

Et si on veut ajouter du son ?

Il suffit d’adapter les pipelines ! A tittre d’exemple, vous pouvez consulter les scripts suivants:

J’ai également essayé d’utiliser le codec X.264 (x264enc + x264dec) succés pour l’instant (qualité très mauvaise).

Catégories
Developpement Open-source Planet-libre

Le livre blanc sur l’open-source de la Telecom Valley

J’ai la chance de participer régulièrement (pas aussi souvent que je le souhaiterai) au groupe de travail open-source de la Telecom Valley. Depuis plus d’un an, des membres de cette commission travaille bénévolement pour la rédaction d’un livre blanc sur l’intégration et la publication de logiciels sous licences open source.

Ce midi, avec la présence de Marc Daunis (sénateur maire de Valbonne) et de Jean-Christophe Becquet (vice président de l’April), le livre blanc a été officiellement publié.

Vous pouvez dès à présent le lire, le diffuser ou bien le réutiliser pour vos propres besoins.

Merci encore à toute l’équipe qui a travaillé sur ce projet !

Catégories
Image Open-source Planet-libre Systeme

Mon desktop 201012

On attaque le dernier mois de 2010 avec, comme chaque mois, un nouveau desktop (sous Ubuntu 10.10) qui va m’accompagner jusqu’à la nouvelle année !

Voilà ce que cela donne:

Fond d’écran: Sleepless nights
GTK: Look des fenêtre Equinoxicônes Faenza
Sur ce bureau: Docky + TerminatorNautilus Elementary

Installation des dépôts

On lance un terminal et on saisie les lignes de commandes suivantes:

sudo add-apt-repository ppa:tiheum/equinox

sudo add-apt-repository ppa:am-monkeyd/nautilus-elementary-ppa

sudo aptitude update

sudo aptitude safe-upgrade

Installer de la combo magique (Equinox + Faenza + Nautilus Elementary)

Je n’ai pas trouvé mieux à mon goût pour le moment. Equinox est clair, les icônes Faenza sont lisibles et facile à reconnaître et  Elementary apporte une certaine légèreté à Nautilus.:

sudo aptitude install gtk2-engines-equinox equinox-theme equinox-ubuntu-theme faenza-icon-theme

nautilus -q

On active le tout en allant dans le menu “Système > Préférences > Apparences > Thème > Equinox Evolution“.

Installation de Docky

Ce dock « à la MacOS X »  est disponible dans les dépôt standard, pour l’installer en ligne de commande:

sudo aptitude install docky

Pour le paramétrage, j’utilise:


Voilà ce que j’ai dedant au moment de l’écriture de ce billet:

Paramétrage de mon tableau de bord

J’utilise l’application NetSpeed pour voir en temps réel les débits sur mon interface réseau. Il faut l’installer avec la ligne de commande suivante:

sudo aptitude install netspeed

Ensuite je configure de la manière suivante:

Et vous cela donne quoi vos desktops en ce moment, à vos screenshots !

Catégories
Open-source Planet-libre Web

Mon menu best-of des comptes Twitter sur l’open-source

Avant le weekend, quelques comptes Twitter que j’emporterai sur une île déserte pour me tenir informé de l’actualité des logiciels open-source !


@cyrilleborne Cyrille BORNE

Même ta bio faut que tu la fasses en 140 caractères, c’est bien twitter , bientôt mon épitaphe en 30, tiens je vois bien il était vieux il utilisait Mandriva


@WebUpd8 WebUpd8 -Ubuntu blog

Linux & Ubuntu & Open Source and web design.



@Omgubuntu OMG! UBUNTU!

Everything Ubuntu. Daily.



@pscoffoni Philippe Scoffoni

Logiciels Libres, Open Source, technologies ouvertes, Cloud Computing et tout le reste…



@nitot Tristan Nitot

Mozilla Europe founder. Free Software, Open Web evangelist



@tuxplanet Tux-planet – Linux

Linux, Free software, Open Source, Logiciels Libres, Ubuntu, Fedora, Français, France, French



@pydubreucq Pierre-Yves Dubreucq

Admin-Sys et Passionné de logiciels libres, je tiens un blog consacré aux logiciels libres, membre de l’April,Chtinux et de TuxFamily.org Modo du Planet-Libre


A vous de nous faire découvrir vos comptes Twitter ou Identi.ca dans le domaine du libre !

Catégories
Nagios Open-source Planet-libre Reseau

Utiliser Nmap pour générer vos fichiers de configuration Nagios

ATTENTION: Dans sa version actuelle, le script ne marche qu’avec la version 5 de Nmap. Sinon, le fichier .cfg généré risque de rester désespérément vide…

 

Renseigner des fichiers de configuration de Nagios « à la mimine » n’est pas une activité que je juge  passionnante.

Nous allons voir dans ce billet comment utiliser le scanner de réseau Nmap pour nous aider dans cette lourde tache en développant un petit Script Shell nommé nmaptonagios.sh. Pour les plus impatients, vous pouvez directement aller au dernier chapitre de ce billet pour voir comment installer et lancer le script.

Avant de commencer

Le plus simple est de faire cette découverte du réseau directement depuis votre serveur de supervision hébérgeant Nagios. En effet, les éventuels mécanismes de filtrage de votre réseau doivent déjà permettre a  ce serveur de faire des ping et des requêtes TCP/UDP vers l’ensemble des machines (ou alors votre serveur Nagios ne doit pas bien fonctionner…).

Il faut commencer par installer NMap sur cette machine.

Installation de Nmap sous Ubuntu / Debian:

aptitude install nmap

Récupérer la liste des machine « UP » de votre réseau

Dans la suite de ce billet, je prendrai l’exemple d’un adminsitrateur réseau qui veut découvrir les machines  de son LAN qui utilise la plage d’adresse IP suivante: 192.168.1.0/24.

Pour avoir une liste des adresses ou des noms (si vous avez un serveur DNS à jour) des machines répondant aux PING de votre réseau, il suffit de saisir la commande:

nmap -sP 192.168.1.0/24

Si un nom d’hôte est associé à une adresse il est affiché.

Exemple:

Nmap scan report for 192.168.1.104

Host is up (0.0019s latency).

Nmap scan report for labo-desktop2 (192.168.1.109)

Host is up (0.00056s latency).

Cette première commande va nous servir pour générer la boucle principale de notre script.

Détection des OS

Pour générer dans la configuration de Nagios une description des hôtes contenant l’OS, nous allons utiliser l’option -O de nmap:

nmap -O 192.168.1.109

Selon le système d’exploitation la détection se fait de manière plus au moins simple.

3 lignes sont intéressantes dans le rapport généré par l’option -O:

OS Detail: ***

Running: ***

Service detail: ***

Notre script va donc tester ces variables puis choisir celle qui donne une information la plus précise (sachant que ce test n’est pas fiable à 100%).

Détection des services

On entre dans le vifs du sujet avec la détection des services accessibles sur les machines.

On filtre pour cela les ports TCP ou UDP ouverts (open), puis on vérifie qu’un plugin est disponible dans le répertoire /usr/lib/nagios/plugins (il est possible de changer ce répertoire en modifiant la variable NAGIOS_PLUGINS_PATH au début du script).

Par exemple, si le script détecte que le port TCP/80 (http) est open, alors il va rechercher le plugin /usr/lib/nagios/plugins/check_http et configurer le service correspondant. Si il ne le trouve pas il va se rabattre sur un check_tcp simple sur le port 80.

On utilise la commande nmap suivante:

nmap -sV 192.168.1.109

Installation et utilisation du script nmaptonagios.pl

On commence par récupérer le script:

wget https://raw.github.com/nicolargo/nagiosautoinstall/master/nmaptonagios.sh

chmod a+x ./nmaptonagios.sh

Puis on l’exécute:

sudo ./nmaptonagios.sh 192.168.1.0/24

—————————————————————

Nagios configuration file: /tmp/nmaptonagios-20101124095216.cfg

—————————————————————

A la fin du script, on a un fichier de configuration de Nagios à éditer et à adapter à vos besoins:

vi /tmp/nmaptonagios-20101124095216.cfg

Pour faire prendre en compte ce fichier par Nagios, il suffit de le copier dans le répertoire /usr/local/nagios/etc/objects:

sudo cp /tmp/nmaptonagios-20101124095216.cfg /usr/local/nagios/etc/objects

sudo chown nagios:nagios /usr/local/nagios/etc/objects/nmaptonagios-20101124095216.cfg

Puis de relancer nagios:

sudo service nagios restart

Le script est distribué sous licence GPL v2. Libre à vous de l’adapter, modifier, copier et distribuer !

Catégories
Nagios Open-source Planet-libre Web

Notification Twitter (oAuth) dans Nagios

Twitter est un service devenu indispensable pour la veille technologique des geeks que nous sommes. Son « ouverture via des API permet également de l’utiliser comme un moyen simple de diffusion d’informations de type alerte.

Nous allons dans ce billet voir comment configurer Nagios (l’outil de supervision open-source) pour envoyer des alertes sur un compte Twitter dédié. La méthode détaillé est compatible avec la nouvelle méthode d’authentification de Twitter nommée oAuth.

Avant de commencer

Pour ne pas poluer votre time-line pricipale, je vous conseille de créer un compte Twitter dédié à ce besoin. C’est sur ce dernier que les alertes seront envoyées. Il suffira ensuite aux « administateurs » de suivre ce compte Twitter pour être informé au plus vite des anomalies survenues sur le réseau.

Pour créer notre compte Twitter special Nagios, on va à l’adresse suivante:

Il faut bien retenir votre « username » (nagiosnicolargo dans mon cas) et « password ».

Il faut ensuite se rendre dans les « Settings » et cliquer sur le bouton « Protect my updates » pour forcer l’approbation des utilisateurs qui vont pouvoir suivre ce compte Twitter. Quand un des administrateurs fera une demande pour suivre ce compte Twitter, il faudra l’approuver. Cela évite que n’importe qui voit que votre réseau est tombé :)…

Installation du script de mise à jour de Twitter

Depuis que l’authentification sur Twitter, la procédure est un peu plus compliquée. J’ai donc écrit un billet spécifique sur le sujet. Il suffit de suivre cette procédure en prenant comme compte Twitter le compte préalablement créé dans le chapitre précédant pour y associer une nouvelle application (le script Python nommé tweetitcli.py) qui va permettre à Nagios de mettre à jour la timeline.

Après cette étape, vous devez donc être capable de mettre à jour la timeline de votre compte Twitter dédié avec une ligne de commande du type:

./tweetitcli.py ‘Petit test depuis la ligne de commande Linux’

Je vous laisse vérifier que cela marche…

Il faut ensuite copier le script en question dans le répertoire des plugins de Nagios:

cp ./tweetitcli.py /usr/local/nagios/libexec/

sudo chown nagios:nagios /usr/local/nagios/libexec/tweetitcli.py

Configuration du serveur Nagios

Passons maintenant aux fichiers de configuration de Nagios. Je pars sur le principe que vous avez un serveur Nagios en état de marche. On commence par ajouter la commande tweetitcli.py qui va permettre d’envoyer un message à notre compte Twitter via Curl:

# vi /usr/local/nagios/etc/objects/commands.cfg

define command{
command_name    notify-host-by-twitter
command_line    $USER1$/tweetitcli.py « $HOSTNAME$ is $HOSTSTATE$ »
}
define command{
command_name    notify-service-by-twitter
command_line    $USER1$/tweetitcli.py « $SERVICEDESC$@$HOSTNAME$ is $SERVICESTATE$ ** $SERVICEOUTPUT$ »
}


Ensuite on défini le contact (ou le groupe à vous de voir):

# vi /usr/local/nagios/etc/objects/templates.cfg

define contact{
name  nicolargoadmin 
alias Admin Nicolargo
service_notification_period     24×7                    
host_notification_period        24×7                    
service_notification_options    w,u,c,r,f,s             
host_notification_options       d,u,r,f,s            
service_notification_commands   notify-service-by-twitter
host_notification_commands      notify-host-by-twitter
}

Puis enfin on associe le contact avec le service à surveiller (par exemple que mon serveur Web tourne bien…):

define host{
use                     linux-host
host_name               gandiserveur
alias                   Serveur Gandi
address                 blog.nicolargo.com
parents                 monrouteur
hostgroups              prj-perso
contacts                nicolargoadmin
}
define service{
use                     generic-service
host_name               gandiserveur
service_description     HTTP
check_command           check_http
contacts                nicolargoadmin
}

On teste…

Il ne reste plus qu’a tester vos fichiers de configuration:

sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

et à relancer Nagios:

sudo service nagios restart

A chaque notification, un nouveau message devrait apparaître dans votre compte Twitter dédié 😉

Catégories
Nagios Open-source Planet-libre Web

Twitter en ligne de commande (même avec oAuth)

Il y a quelque temps, j’avais écrit un billet sur comment envoyer les alertes de votre serveur Nagios sur un compte Twitter (ou comment réunir les SI et le Web 2.0). Malheureusement, depuis cette date,  Twitter a changé la méthode d’authentification pour poster des tweets. Ce n’est plus une authentification HTTP classique (qui pouvait donc être facilement faite en ligne de commande avec curl par exemple) mais une authentification oAuth, beaucoup plus souple mais nettement plus complexe.

Nous allons donc dans ce nouveau billet voir comment mettre en place l’authentification oAuth pour un script Python qui permettra à partir d’une simple ligne de commande de mettre à jour une timeline Twitter.

A vos fourneaux !

Les ingrédients…

Pour suivre cette recette il faut:

  • un compte Twitter
  • la librairie Python python-tweepy
  • un navigateur Web (pour enregistrer votre application)

Installation de Python-tweepy

Cette librairie Python va vous permettre de parler oAuth avec le serveur Twitter. Il existe un PPA pour Ubuntu (pour les autres distribution GNU/Linux, il faut installer la bête en suivant ces instructions):

sudo add-apt-repository ppa:chris-lea/python-tweepy

sudo aptitude update && sudo aptitude install python-tweepy

Update: Sous Debian la procédure à suivre est la suivante (merci Benjamin):

apt-get install python python-setuptools python-json python-twitter

wget http://pypi.python.org/packages/source/t/tweepy/tweepy-1.7.1.tar.gz

tar xvfz tweepy-1.7.1.tar.gz

cd tweepy-1.7.1

python ./setup.py install

Enregistrement de votre script

C’est la première étape: déclarer votre application (votre script) sur le serveur Twitter. Dans la suite de ce billet je vais procéder à l’enregistrement d’une application qui s’appellera ‘tweetit’ (c’est le nom de mon script en ligne de commande qui permettra de mettre à jour ma Timeline).

Pour cela, il faut se rendre à l’URL suivante: http://twitter.com/oauth_clients

Puis cliquer sur Register a new application »

On saisie ensuite le formulaire:

Une fois le formulaire validée, vous devriez être redirigé vers une page contenant deux informations importantes: Consumer key (la clés) et Consumer secret (le mot de passe) de votre application.

Il faut bien sur mettre ces informations de coté.

Connecter votre script à votre compte Twitter

Nous allons utiliser la librairie python-tweepy pour faire cette étape qui ne devra être faite qu’une seule fois lors du développement de votre application.

Le plus simple est de reprendre le script écrit par Jeff Miller sur son blog. On va donc créer un script nommé tweetit-register.py contenant le code suivant (remplacer les codes):

#!/usr/bin/env python

import tweepy

CONSUMER_KEY = ‘VOTRE CODE CONSUMER KEY’

CONSUMER_SECRET = ‘VOTRE CODE CONSUMER SECRET’

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)

auth_url = auth.get_authorization_url()

print ‘Please authorize: ‘ + auth_url

verifier = raw_input(‘PIN: ‘).strip()

auth.get_access_token(verifier)

print « ACCESS_KEY = ‘%s' » % auth.access_token.key

print « ACCESS_SECRET = ‘%s' » % auth.access_token.secret

On exécute le script:

chmod a+x tweetit-register.py

./tweetit-register.py

Le script va vous afficher une URL  et attendre un code PIN:


Please authorize: http://twitter.com/oauth/authorize?oauth_token=Ndddb0DBsjd6PNYccSEtl8vtdYkNsPRCk5joO7djqO8

PIN:

On copie l’URL dans un navigateur Web:

On récupère ensuite le code PIN que l’on entre dans notre terminal:

PIN: 0665141

On obtient en retour la clés et le mot de passe d’accès :

ACCESS_KEY = ‘7707822-TWzha9rf3icVF1h0FhGnaK5q7iLyNIRzHXDY8aagt4’

ACCESS_SECRET = ‘3dbTcWkU1LIYG4MtwmraausjaoSne5coGbXKOXhDfG0’

Création du script

Voilà (enfin), on peut développer notre application (tweetit.py):

#!/usr/bin/env python


import sys

import tweepy


# Authentification oAuth

CONSUMER_KEY = ‘Consumer Key’

CONSUMER_SECRET = ‘Consumer Secret’

ACCESS_KEY = ‘Access Key’

ACCESS_SECRET = ‘Access Secret’

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)

auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)

api = tweepy.API(auth)


# Main program

api.update_status(sys.argv[1])

On rend le script executable:

chmod a+x tweetit.py

Test de l’application

On lance le script avec le texte à tweeter:

./tweetitcli.py ‘Petit test depuis la ligne de commande Linux…’

Et voilà le travail:

Et voila, bientôt un prochain billet pour voir comment intégrer ce nouveau script à Nagios 🙂

Source pour la rédaction de cet article: