Catégories
Open-source Planet-libre Reseau Systeme

Sauvegarde journalisée de votre machine avec RSnapShot

Suite à un commentaire de Xavier sur un de mes billets, je me suis penché sur l’utilisation de RSnapshot. Ce logiciel libre permet d’automatiser une sauvegarde journalisée de vos machines et ceci localement comme à distance.

RSnapShot est disponible dans la plupart des dépôts des distributions GNU/Linux et *BSD. Nous allons illustrer cet article avec une installation et une configuration de RSnapShot sur un serveur Gandi sous Ubuntu 10.04 LTS.

Installation de RSnapShot

On utilise la version disponible dans les dépôts officiel:

sudo aptitude install rsnapshot

Configuration de RSnapShot

L’ensemble de la configuration est centralisé dans le fichier /etc/rsnapshot.conf.

sudo vi /etc/rsnapshot.conf

Attention à la syntaxe dans ce fichier, RSnapShot est assez pointilleux. Il veut que tout les répertoires finissent par un / et des tabulations entre chaque variables.

Les variables importantes à configurer sont les suivantes:

snapshot_root   /.snapshots/

La variable snapshot_root permet de configurer le répertoire racine ou les sauvegardes seront stockées. Ce répertoire peut être sur le même disque que le disque système (c’est le cas de la configuration par défaut avec l’utilisation du répertoire /.snapshots/).

Je vous conseille pour ma part d’utiliser si possible un répertoire stocké sur un deuxième disque physique. Par exemple sur mon serveur Gandi, j’ai un deuxième disque qui est monté sur le répertoire /srv/backup. Je vais donc configurer la variable à /srv/backup/snapshots/ (noter le / à la fin du répertoire !).

Exemple: snapshot_root /srv/backup/snapshots/

cmd_ssh /path/to/ssh

Si vous voulez utiliser les fonctions de sauvegarde de serveur distant (en utilisant le protocole SSH), il faut dé-commenter la ligne précédente. Si vous avez besoin de passer des arguments spécifique à SSH, il faudra compléter la ligne ssh_args.

Exemple: cmd_ssh /usr/bin/ssh

interval monthly 3

Activation de la sauvegarde mensuelle (désactivé par défaut).

On passe ensuite aux variables permettant de configurer ce que l’on veut sauvegarder.

Sauvegardes locales

On parle ici d’une sauvegarde journalisée de répertoires de la machine ou RSnapShot est installé.

backup /home/ localhost/

Le répertoire /home/ sera sauvegardé dans le sous répertoire $snapshot_root/localhost/.

Exemple:

backup /home/ localhost/

backup /etc/ localhost/

backup /var/svn/ localhost/

Sauvegardes distantes

On peut également sauvegarder des répertoires de machines distantes. On utilise pour cela la configuration suivante:

backup root@example.com:/etc/  example.com/    +rsync_long_args=–bwlimit=1024,exclude=core

On va ainsi sauvegarder le répertoire /etc/ de la machine exemple.com en utilisant une connexion SSH avec l’utilisateur root (il faut bien sur que la connexion SSH entre votre machine exécutant RSnapShot et example.com soit automatisée). En bonus on demande à RSnapShot de ne pas sauvergarder les fichiers core (exclude=core) et de limiter la bande passante à 1 Mbps (–bwlimit=1024).

Sauvegardes en utilisant des scripts

Une autre fonctions intéressantes de RSnapShot est la possibilité d’utiliser des script shell pour automatiser des sauvegardes un peu plus complexes.

Par exemple imaginons que l’on veuillent sauvegarder les données de son serveur SVN. On commence par créer le script shell /usr/local/bin/backup-svn.sh:

#!/bin/sh

# Backup SVN


svnrepo= »/var/svn/ »

for i in `ls $svnrepo`

do

svnadmin -q dump $svnrepo/$i > $i.svndump

gzip -f $i.svndump

rm $i.svndump

done

Puis on le rend exécutable:

sudo chmod a+x  /usr/local/bin/backup-svn.sh

Enfin on configure RSnapShot:

backup_script /usr/local/bin/backup-svn.sh localhost/svn/

Le script backup-svn.sh va être lancé à partir du répertoire localhost/svn/

Il est bien sur possible de faire des scripts pour d’autres besoins: sauvegarde de bases de données MySQL par exemple.

Utilisation de RSnapShot

On commence par valider le fichier de configuration:

sudo rsnapshot configtest

Syntax OK

Simulation d’une sauvegarde journalière (cela va afficher ce que RSnapShot va faire mais sans le faire…):

sudo rsnapshot -t hourly

echo 3531 > /var/run/rsnapshot.pid

mkdir -m 0700 -p /srv/backup/snapshots/

mkdir -m 0755 -p /srv/backup/snapshots/hourly.0/

/usr/bin/rsync -a –delete –numeric-ids –relative –delete-excluded /home \

/srv/backup/snapshots/hourly.0/localhost/

mkdir -m 0755 -p /srv/backup/snapshots/hourly.0/

/usr/bin/rsync -a –delete –numeric-ids –relative –delete-excluded /etc \

/srv/backup/snapshots/hourly.0/localhost/

mkdir -m 0755 -p /srv/backup/snapshots/hourly.0/localhost/

mkdir -m 0755 -p /srv/backup/snapshots/tmp/

cd /srv/backup/snapshots/tmp/

/home/nicolargo/bin/backup-svn.sh

cd /home/nicolargo/

sync_if_different(« /srv/backup/snapshots/tmp/ », \

« /srv/backup/snapshots/hourly.0/localhost/svn/ »)

mkdir -m 0755 -p /srv/backup/snapshots/hourly.0/

/usr/bin/rsync -a –delete –numeric-ids –relative –delete-excluded \

–exclude=core –bwlimit=1024 –rsh=/usr/bin/ssh \

nicolargo@exemple.com:/home /srv/backup/snapshots/hourly.0/sam/

mkdir -m 0755 -p /srv/backup/snapshots/hourly.0/

/usr/bin/rsync -a –delete –numeric-ids –relative –delete-excluded \

–exclude=core –bwlimit=1024 –rsh=/usr/bin/ssh \

nicolargo@exemple.com:/etc /srv/backup/snapshots/hourly.0/sam/

touch /srv/backup/snapshots/hourly.0/

Test en ligne de commande:

sudo rsnapshot hourly

Le répertoire contenant la première sauvegarde devrait être créé sous /srv/backup/snapshots/hourly.0.

Enfin on automatise le lancement en éditant la crontab système (root):

sudo crontab -e -u root

0 */4 * * * /usr/bin/rsnapshot hourly

30 23 * * * /usr/bin/rsnapshot daily

0 23 * * 0 /usr/bin/rsnapshot weekly

30 22 28 * * /usr/bin/rsnapshot monthly

Pour une liste exhaustive des fonctions proposées par RSnapShot, je vous conseille la lecture de la documentation officielle (en Anglais).

Et voili, merci encore à Xavier pour cette belle découverte.

Catégories
Open-source Planet-libre Web

Un serveur Jabber en 5 minutes chronos sous Debian/Ubuntu

Oui je sais c’est un pompage en règle du billet de Cyrille Borne. Mais bon il faut dire que par les temps qui courent c’est une rudement bonne idée que de disposer de son propre serveur Jabber.

Nous allons donc détailler les étapes d’installation et de configuration d’un serveur Prosody dans sa dernière version (0.7) avec un chiffrement SSL entre les clients et le serveur.

Pourquoi Prosody et pas Jabber ? Tout simplement car il est bien plus simple et léger à installer (un peu trop usine à gaz). Et puis le titre du billet aurait été moins vendeur: « Un serveur Jabber en 3h45 chronos… ».

Installation de Prosody

L’installation de Prosody se fait en utilisant les commandes suivantes:

echo « deb http://packages.prosody.im/debian stable main » | sudo tee -a /etc/apt/sources.list

wget http://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add –

sudo aptitude update

sudo aptitude install prosody

Sous Ubuntu 10.04, j’ai du en plus installer à la main la librairie LibLua (pour le SSL):

wget http://prosody.im/downloads/debian/liblua5.1-sec0_0.3.2-2prosody1_i386.deb

sudo dpkg -i liblua5.1-sec0_0.3.2-2prosody1_i386.deb

PS: la librairie LibLua est utilisé pour le chiffrement SSL. Le fichier liblua5.1-sec0_0.3.2-2prosody1_amd64.deb doit être utilisé pour les machines sous AMD 64 bits.

On génère la clés et le certificat SSL:

cd /etc/prosody/certs/

sudo openssl req -new -x509 -days 365 -nodes -out « monbeaudomaine.com.cert » -keyout « monbeaudomaine.com.key »

Configuration de Prosody

Puis on configure en éditant le fichier /etc/prosody/prosody.cfg.lua:

sudo vi /etc/prosody/prosody.cfg.lua

VirtualHost « monbeaudomaine.com »

ssl = {

key = « /etc/prosody/certs/monbeaudomaine.com.key »;

certificate = « /etc/prosody/certs/monbeaudomaine.com.cert »;

}

enabled = true;

On relance Prosody pour prendre en compte la configuration:

sudo /etc/init.d/prosody restart

Si vous avez un Firewall sur votre serveur (ce qui est une bonne idée), il faut penser à ouvrir les ports TCP de Jabber en ajoutant les lignes suivantes dans votre script de configuration iptable (/etc/init.d/iptables.sh dans mon cas):

iptables -A INPUT -p tcp –dport 5222 -j ACCEPT

iptables -A INPUT -p tcp –dport 5269 -j ACCEPT

iptables -A OUTPUT -p tcp –dport 5269 -j ACCEPT

On relance ensuite le Firewall:

sudo /etc/init.d/iptables.sh

Puis on vérifie que les règles existent:

sudo iptables -L | grep xmpp

ACCEPT tcp — anywhere anywhere tcp dpt:xmpp-client

ACCEPT tcp — anywhere anywhere tcp dpt:xmpp-server

ACCEPT tcp — anywhere anywhere tcp dpt:xmpp-server

Création d’un compte utilisateur Jabber dans Prosody

On peut ensuite passer à la création d’un utilisateur Jabber:

sudo prosodyctl adduser monbeauuser@monbeaudomaine.com

Il faut saisir deux fois le même mot de passe…

Configuration d’un client Jabber pour utiliser votre serveur Prosody

Enfin, sur son/ses PC, on configure le client de chat (Pidgin dans mon cas).

Il faut aller dans le menu Comptes > Gérer les comptes puis cliquer sur le bouton Ajouter:

Et hop voili !

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

Installation et test de NGinx sous Ubuntu

NGinx est une des alternative au serveur Web Apache (il est actuellement utilisé par plus de 6% des serveurs Web). Il se targue d’être plus rapide, plus léger et facile à configurer.

Nous allons vérifier tout cela dans ce billet en détaillant une installation de NGinx 0.8.54 (Stable) sur une machine GNU/Linux (Ubuntu Desktop 10.10) avec en bonus le support FastCGI de PHP et de Perl !

Installation de NGinx

On commence par ajouter le dépôt officiel pour la version stable:

sudo add-apt-repository ppa:nginx/stable

sudo aptitude update

Puis on installe la bête (facile non ?):

sudo aptitude install nginx

Remarque: si un serveur Web (Apache ou autre) tourne déjà sur votre machine, l’installation de NGinx se passera normalement, par contre il n’arrivera pas à se lancer car le port HTTP par défaut (TCP/80) sera déjà occupé. La solution la plus propre est de configurer NGinx pour qu’il écoute sur un autre port (TCP/81 par exemple) puis faire vos tests en forcant l’utilisation de ce port dans votre navigateur Internet (en ajoutant :81 aux URL). Une fois Nginx validé, il suffira de supprimer l’autre serveur Web de votre machine, puis de reconfigurer Nginx sur le port par défaut (TCP/80).

Premier contact avec NGinx

Un script de démarrage nommé nginx a été installé dans le répertoire /etc/init.d. On peut voir la liste des commandes accepté par ce script en saisissant la ligne de commande suivante:

sudo service nginx

Usage: nginx {start|stop|restart|reload|force-reload|status|configtest}

On va donc activer la configuration de test:

sudo service nginx configtest

Testing nginx configuration: nginx.

Puis lancer le serveur:

sudo service nginx start

Starting nginx: nginx.

On ouvre un navigateur sur la même machine puis on entre l’UTL suivante: http://localhost/

La page suivante devrait s’afficher:

On peut ensuite arrêter le serveur:

sudo service nginx stop

Stopping nginx: nginx.

Puis passer à l’étape suivante…

Configuration du serveur NGinx

Les fichiers de configuration se trouvent dans le répertoire /etc/nginx. Les habitués d’Apache ne seront pas trop perturbés par la structure de l’arborescence de ce répertoire:

 

drwxr-xr-x 2 root root 4096 2011-01-05 08:26 conf.d/

-rw-r–r– 1 root root 884 2011-01-05 08:04 fastcgi_params

-rw-r–r– 1 root root 2258 2011-01-05 08:04 koi-utf

-rw-r–r– 1 root root 1805 2011-01-05 08:04 koi-win

-rw-r–r– 1 root root 2066 2011-01-05 08:04 mime.types

-rw-r–r– 1 root root 1340 2011-01-05 08:04 nginx.conf

-rw-r–r– 1 root root 465 2011-01-05 08:04 scgi_params

drwxr-xr-x 2 root root 4096 2011-01-05 10:36 sites-available/

drwxr-xr-x 2 root root 4096 2011-01-05 10:36 sites-enabled/

-rw-r–r– 1 root root 497 2011-01-05 08:04 uwsgi_params

-rw-r–r– 1 root root 3071 2011-01-05 08:04 win-utf

On y retrouve (entre autres):

  • nginx.conf: le fichier de configuration central
  • conf.d/: un répertoire contenant des fichiers de configuration additionnels
  • sites-available/: répertoire contenant la liste des fichier de configuration des sites disponibles
  • sites-enabled/: répertoire contenant la liste des fichiers de configuration des sites actifs (liens symboliques vers le répertoire site-availables)

On commence par jeter un coups d’oeil au fichier nginx.conf…. Quel bonheur par rapport à celui d’Apache :).

On passe ensuite au fichier du site par défaut /etc/nginx/sites-available/default (que l’on a activé tout à l’heure par la commande ‘sudo service nginx configtest’):

server {

listen 80

 

root /usr/share/nginx/www;

index index.html index.htm;

 

server_name localhost;

 

location / {

try_files $uri $uri/ /index.html;

}

 

location /doc {

root /usr/share;

autoindex on;

allow 127.0.0.1;

deny all;

}

 

location /images {

root /usr/share;

autoindex off;

}

 

}

On peut donc voir que l’on a un site qui écoute sur le port TCP/80 (listen   80) et sert les pages se trouvant dans le répertoire /usr/share/nginx/www (root /usr/share/nginx/www) à partir de l’URL http://localhost/ (server_name localhost).

Nous allons nous baser sur cet exemple pour construire un nouveau fichier de configuration propre à nos besoins.

On commence par créer l’arborescence qui va héberger nos pages (par exemple /home/labo/www). Si le répertoire n’existe pas il faut le créer et lui donner les bons droits:

mkdir /home/labo/www

Enfin on édite une page de test:

# vi /home/labo/www/index.html

<html><body>Ma page</body></html>

Ensuite on passe à la création du fichier de configuration du site.

sudo vi /etc/nginx/sites-available/monsite

Avec le contenu suivant (à adapter à votre configuration):

# Mon site a moi

 

server {

listen 80;

 

root /home/labo/www;

index index.html index.htm;

 

server_name localhost;

 

location / {

# First attempt to serve request as file, then

# as directory, then fall back to index.html

try_files $uri $uri/ /index.html;

}

 

}

On supprime le site par defaut et on active le notre:

cd /etc/nginx/sites-enabled

sudo rm default

sudo ln -s ../sites-available/monsite

On redémarre le serveur Nginx:

sudo service nginx restart

Restarting nginx: nginx.

Puis  on teste la page: http://localhost/

Pour rendre le site « visible depuis l’extérieur », il faut changer la ligne:

server_name localhost;

Puis la remplacer par:

server_name www.mondomaine.com;

Il faut bien sur que le nom www.mondomaine.com pointe sur l’adresse IP de votre serveur Nginx…

Test des performances

Pour voir ce qu’il a dans le ventre, j’ai installé en Nginx et Apache sur ma machine. Nginx écoutant sur le port TCP/81 et Apache sur le port TCP/80.

J’ai ensuite utilisé le logiciel httperf (disponible dans les dépôts Ubuntu) pour simuler des requêtes sur le serveur.

Test du serveur Apache:

# httperf –client=0/1 –server=localhost –port=80 –uri=/ –send-buffer=4096 –recv-buffer=16384 –num-conns=5000 –num-calls=10

Request rate: 4284.8 req/s (0.2 ms/req)

Puis test du serveur NGinx:

# httperf –client=0/1 –server=localhost –port=81 –uri=/ –send-buffer=4096 –recv-buffer=16384 –num-conns=5000 –num-calls=10

Request rate: 6332.6 req/s (0.2 ms/req)

On a donc un gain d’environ 30% en terme de requêtes supportées par le serveur.

 

 

Request rate / Request number

 

Support du PHP

De nos jours, un serveur Web sans support PHP c’est un peu comme un Ferrari avec des roues de 13 pouces. Dans l’optique d’avoir un serveur performant nous allons donc utiliser le module externe PHP FPM (PHP FastCGI) qui s’occupera de l’exécution des scripts PHP dans un processus indépendant de NGinx (merci à cet article qui m’a bien aidé).

On commence par installer le module:

sudo add-apt-repository ppa:brianmercer/php

sudo aptitude update && sudo aptitude install php5-fpm

Par défaut, le processus PHP-FPM va se mettre en écoute sur le port TCP/9000 et écouté les requêtes venant seulement de la machine locale (localhost).

Il ne reste plus qu’à modifier le fichier de configuration de votre site pour prendre en compte le langage PHP (fichier /etc/nginx/sites-available/monsite):

# Mon site a moi

server {

listen 80;

server_name localhost;

root /home/labo/www;

 

location / {

index index.php index.html;

}

 

location ~ \.php$ {

fastcgi_pass 127.0.0.1:9000;

include /etc/nginx/fastcgi_params;

fastcgi_index index.php;

}

}

Attention de bien avoir configurer la variable root (« root /home/labo/www » dans mon exemple), sinon vous risquez de tomber sur une erreur 404 lors du passage du script PHP vers le process PHP-FPM.

On relance ensuite Nginx:

sudo service nginx restart

Restarting nginx: nginx.

Pour tester que le PHP fonctionne bien, le plus simple est de créer un fichier info.php (à mettre à la racine du site /home/labo/www/) contenant:

<?php

phpinfo();

?>

Puis de pointer votre navigateur Web vers l’URL: http://localhost/info.php

La page suivante devrait s’afficher:

Support de Perl

Tout comme PHP, nous allons utiliser FastCGI pour exécuter les scripts Perl depuis notre serveur NGinx. Le principe est le même. Un processus (fastcgi-wrapper.pl) va se mettre en écoute sur le port TCP/8999 puis attendre les demandes d’exécution envoyées par NGinx.

Contrairement à PHP, il n’existe pas (encore) de package Ubuntu permettant d’automatiser l’installation de ce processus. Il faut donc mettre un peu les mains dans le cambouis (merci à ce blog) !

On commence par installer le module Perl FCGI sur lequel le processus fastcgi-wrapper.pl va se baser:

sudo perl -MCPAN -e ‘install FCGI’

On installe le processus fastcgi-wrapper.pl qui va s’occuper de l’exécution  des scripts Perl:

sudo wget -O /usr/bin/fastcgi-wrapper.pl http://lindev.fr/public/nginx/fastcgi-wrapper.pl

sudo chmod 755 /usr/bin/fastcgi-wrapper.pl

La plupart des tutos que j’ai trouvé sur le Net utilise ensuite un script init.d pas très beau à voir (http://lindev.fr/public/nginx/perl-fastcgi). En effet, pour arrêter le processus on a droit à un beau killall -9 perl ! Autant dire que si vous avez d’autres processus Perl en tache de fond de votre serveur cela risque de poser quelques problèmes :). J’ai donc écrit un nouveau script basée sur celui du wrapper PHP.

On automatise le lancement de ce script au démarrage du serveur:

sudo wget -O /etc/init.d/perl-fastcgi https://raw.github.com/nicolargo/ubuntupostinstall/master/perl-fastcgi

sudo chmod 755 /etc/init.d/perl-fastcgi

sudo update-rc.d perl-fastcgi defaults

Puis on le lance en tache de fond:

sudo service perl-fastcgi start

Il ne reste plus qu’à modifier le fichier de configuration Nginx de votre site pour prendre en compte les scripts Perl:

# Mon site a moi

server {

listen 80;

server_name localhost;

root /home/labo/www;

 

location / {

index index.php index.html;

}

 

location ~ \.php$ {

fastcgi_pass 127.0.0.1:9000;

include /etc/nginx/fastcgi_params;

fastcgi_index index.php;

}

 

location ~ \.pl$ {

fastcgi_pass 127.0.0.1:8999;

include /etc/nginx/fastcgi_params;

fastcgi_index index.pl;

}

}

On relance ensuite Nginx:

sudo service nginx restart

Restarting nginx: nginx.

Pour tester que le Perl fonctionne bien, le plus simple est de créer un fichier info.pl (à mettre à la racine du site /home/labo/www/) contenant:

#!/usr/bin/perl

print « Content-type: text/html\n\n »;

print « <html><body>Hello, world.</body></html> »;

Attention, contrairement au script PHP, les fichier .pl douivent avoir les droits en exécution sous peine de ce trouver devant le message suivant:

Error: No such CGI app – /home/labo/www/info.pl may not exist or is not executable by this process.

On doit donc saisir la commande:

chmod a+x /home/labo/www/info.pl

Puis de pointer votre navigateur Web vers l’URL: http://localhost/info.pl

La page suivante devrait s’afficher:

Optimisation corner !

On passe maintenant à quelques optimisations que l’on peut ajouter à la configuration de son site (merci à @T1B0).

On commence par le fait de ne pas loguer les message 404 sur le fichier favicon.ico (histoire de ne pas surcharger ses logs):

location = /favicon.ico {

access_log off;

return 204;

}

Ensuite on optimise la durée d’expiration des en-tête des fichiers statiques (pour les caches):

location ~* ^.+\.(jpg|jpeg|gif|css|png|js|xml)$ {

expires 30d;

}

Pour aller plus loin, vous pouvez également lire ce billet chez K-Tux. (notamment l’utilisation de memcache qui est intégré à NGinx !).

Conclusion

Vous avez donc à votre disposition un beau serveur Web NGinx avec le support FastCGI PHP & Perl !

Elle est pas belle la vie ?

Catégories
Image Open-source Planet-libre Systeme

Mon desktop 201101

Avant tout bonne année 2011 à vous et à vos proches.
Qu’elle vous apporte bonheur et épanouissement personnel !

On commence l’année par le billet mensuel sur mon desktop. On va aujourd’hui s’intéresser à mon PC portable sous Ubuntu Desktop 10.10 configuré le script post install (ubuntupostinstall.sh).

Un aperçu du résultat:

Les principales caractéristiques

Fond d’écran: De saison vu le temps qu’il fait…
GTKLook des fenêtre Equinoxicônes Faenza
Sur ce bureau: Docky + TerminatorNautilus Elementary

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

Pour coller un peu plus avec le fond d’écran, j’ai choisi le thème Glass d’Equinox en allant dans le menu “Système > Préférences > Apparences > Thème > Equinox Glass“.

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 Reseau Systeme Web

Comment installer (vraiment) Dropbox 1.0 sous GNU/Linux

Dropbox vient de mettre à jour son client vers la version 1.0. Malheureusement, la procédure d’installation qui est donnée sur le site ne marchait pas pour moi (j’ai fait le test sous Ubuntu 10.10 et Fedora 14).

Voici donc un petit hack pour mettre à jour le client depuis une version 0.7.110 vers la 1.0.10:

1) Arrêter votre client Dropbox

2) Lancer les commandes suivantes dans un terminal:

cd ~

wget http://dl-web.dropbox.com/u/17/dropbox-lnx.x86-1.0.10.tar.gz

mv .dropbox-dist .dropbox-dist.OLD

tar zxvf dropbox-lnx.x86-1.0.10.tar.gz

rm -f dropbox-lnx.x86-1.0.10.tar.gz

Remarque: Si votre PC à une architecture 64 bits, il faut télécharger: dropbox-lnx.x86_64-1.0.10.tar.gz

3) Puis relancer le client Dropbox…

Et voilà le travail ! A vous les joies du Selective Sync !

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
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 !