Catégories
Image Open-source Planet-libre Web

Gérer vos photos avec OpenPhoto, un service auto-hébergé

C’est suite à un tweet sur l’abandon du développement de la version GNU/Linux de Picassa par les équipes de Google que j’ai entendu parler pour la première fois du projet OpenPhoto (bien que comme nous allons le voir les deux sujets ne soient pas liés).

OpePhoto propose d’héberger dans un « cloud » vos photos, permettant ainsi un accès dématérialisé (plus besoin d’apporter sa clé USB pour montrer les photos de vacances à ses parents/amis).

OpenPhoto propose pour cela deux solutions:

  • un service en ligne proposant de gérer vos photos (importation, catégories, tag, applications smartphones, API…) mais en les hébergeant dans votre « cloud » (Dropbox ou votre espace de stockage Amazon S3 et prochainement Google Drive).
  • une version communautaire et libre permettant d’auto-héberger son propre serveur. Cette version propose en plus un stockage local des photos (sans passer par Dropbox ou Amazon S3).

C’est sur cette deuxième configuration que nous allons nous pencher dans ce billet en proposant une procédure d’installation et de configuration de Open Photo sur une machine Debian Squeeze avec NGinx , PHP-FPM et MySQL (la procédure doit être la même sous Ubuntu, mais je n’ai pas vérifié).

Note: à l’heure de la rédaction de ce billet, il y a peu ou très peu de documentation sur le Web sur comment installer OpenPhoto sur un serveur Nginx (alors que l’on trouve un tas de procédure pour les autres serveurs Web du marché sur le GitHub officiel…). Si une âme généreuse veut proposer une adaptation de ce billet dans le même formalisme que l’installation sous Apache, je pense que le projet serait très reconnaissant… (je m’en suis chargé).

Préparation de l’installation

Je pars sur le principe ou vous avez une machine Debian sur laquelle Nginx et PHP-FPM sont déjà installé. Si ce n’est pas le cas, vous pouvez suivre ce billet.

En plus, il faudra installer les paquets suivants:

sudo apt-get install mysql-server git-core php5-dev php5-mysql php5-curl curl php5-gd php5-mcrypt php5-imagick php-pear exiftran

On configure PHP en éditant les variable suivantes dans le fichier /etc/php5/fpm/php.ini (à adapter à votre besoin, notamment si vous avez un appareil photo avec un capteur générant des images > 16 Mo):

file_uploads = On
upload_max_filesize = 16M
post_max_size = 16M

On active également l’oAuth (pour l’authentification des applications tierces comme par exemple les applis iPhone et Android):

sudo pecl install oauth
sudo sh -c "echo \"extension=oauth.so\" >> /etc/php5/conf.d/oauth.ini"

On redémarre PHP-FPM pour prendre en compte les modifications:

sudo service php-fpm restart

Installation de OpenPhoto

On créé ensuite un répertoire dans notre serveur Web (/var/www/openphoto) et on télécharge la dernière version de la version communautaire (libre) de OpenPhoto:

sudo mkdir /var/www/openphoto
sudo git clone git://github.com/photo/frontend.git /var/www/openphoto

Puis on prépare l’arborescence:

sudo mkdir /var/www/openphoto/src/userdata
sudo mkdir /var/www/openphoto/src/html/photos
sudo mkdir /var/www/openphoto/src/html/assets/cache
sudo chown -R www-data:www-data /var/www/openphoto

Enfin on génère le fichier de configuration Nginx /etc/nginx/sites-enabled/openphoto pour le site OpenPhoto (à adapter également à votre configuration, notamment au niveau du server_name):

server {
	listen 80;
	server_name openphoto.mondomaine.com;
	root /var/www/openphoto/src/html; 

	index  index.php;
	client_max_body_size 25M;
	default_type text/html;
	charset utf-8;

	if (!-e $request_filename) {
		rewrite ^/([^?]*)(\?+([^?]*))*$ /index.php?__route__=/$1&$3 last;
	} 

	# PHP scripts -> PHP-FPM server listening on 127.0.0.1:9000
	# Check cache and use PHP as fallback.
	location ~* \.php$ {
                 try_files $uri =404;

                 fastcgi_pass 127.0.0.1:9000;
                 fastcgi_index index.php;
                 include fastcgi_params;
		 fastcgi_ignore_client_abort off;
                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
	}

	# Global restrictions configuration file.

	location = /favicon.ico {
		log_not_found off;
		access_log off;
	}

	location = /robots.txt {
		allow all;
		log_not_found off;
		access_log off;
	}

	location ~ /\. {
		deny all;
		access_log off;
		log_not_found off;
	}

	location ~ \.ini$ {
		deny all;
		access_log off;
		log_not_found off;
	}

	add_header Cache-Control "max-age=315360000";
	# Mise ne cache des ressources statiques
	location ~* ^.+\.(jpg|jpeg|gif|css|png|js|xml)$ {
		expires 30d;
		access_log off;
	}
}

On redémarre NGinx pour prendre en compte le site:

sudo service nginx restart

Puis on crée une nouvelle base de donnée MySql. Notez sur une feuille, le nom de la base (openphoto), le nom de l’utilisateur (openphoto) et le mot de passe associé (openphotomdp2012):

# mysql -u root -p
Enter password: 

mysql> create database openphoto;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON openphoto.* TO "openphoto"@"localhost" IDENTIFIED BY "openphotomdp2012";
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

Configuration initiale de OpenPhoto

La suite de la configuration se fera à partir d’un navigateur Web, plus besoin de la ligne de commande :).

On doit dans un premier temps créer un compte sur le site OpenPhoto (même si on utilise pas la version en ligne et seulement une version auto-hébergé). Une fois le mail de confirmation reçu et la confirmation effectué, vous pouvez poursuivre l’installation en vous rendant à l’URL: http://openphoto.mondomaine.com (remplacer mondomaine.com par votre domaine que vous avez configurez dans le fichier de configuration NGinx). Si vous n’avez pas de domaine, il est possible de passer directement par l’adresse IP de votre machine.

Vous devez arriver sur la page suivante:

On entre:

  1. l’adresse email associé à votre compte OpenPhoto
  2. on laisse le thème par défaut et on clique sur « Continue to step 2 »

On passe à la deuxième étape de l’installation:

On sélectionne:

  1. une base de donnée de type MySQL (que l’on a préalablement créer dans le chapitre précédant)
  2. un stockage local des photos (on peut noter qu’il est possible de mixer stockage local et Dropbox)
  3. on passe à la troisième et dernière étape

Elle permet de configurer notre base de donnée MySQL (reprendre votre petite feuille…):

A la fin de cette procédure, votre serveur OpenPhoto est prêt !

Prise en main et premières impressions

La première chose à faire est d’importer quelques photos. On peut utiliser la page Upload qui propose une importation par Drag & Drop (ou sélection plus classique dans le gestionnaire de fichiers) ou bien l’application dédiée de votre SmarthPhone (Android et iPhone). Les images sont téléchargés sur votre serveur avec une très élégante barre de progression. On note au passage qu’OpenPhoto utilise les dernières technologies HTML5.

On peut ensuite éditer les images en y ajoutant une description, des tags, des coordonnées GPS, des droits (public ou privé) et une licence. Ces informations sont bien sûr récupérées automatiquement si elles sont présentes dans les méta-données du fichier.

Elle est pas belle ma fille ? 🙂

OpenPhoto permet de créer des groupes d’utilisateurs ayant des droits sur certaines photos. Par exemple, si vous créez un groupe Famille, alors il sera possible de classer vos photos familiales dans ce groupe afin qu’elles ne soient visibles que par vos proches. Pour grouper vos photos dans des groupes, le plus simple est d’aller dans le menu Manage, de sélectionner les photos en question (par un simple clic sur le bouton pin) puis de cliquer sur le bouton « Batch edit » et enfin de séléctionner le groupe.

Mes premières impressions sont très bonnes. OpenPhoto est rapide, stable. Le seul problème que j’ai rencontré est au niveau de l’affichage de la Gallery ou les photos sont déformées. Je vais essayer de le pousser un peu en important un grand nombre d’images (je ferai une màj du billet).

On sent une grande marge de manoeuvre au niveau des fonctionnalités proposées. Il est d’ailleurs possible de voter avec la communauté pour influencer la roadmap du logiciel sur les futures fonctions. J’aime le fait qu’OpenPhoto se concentre uniquement sur la gestion des images, contrairement à OwnCloud dont j’avais parlé dans un précédent billet.

Que pensez-vous de ce genre de service ?

Êtes vous prêts à franchir le pas et d’auto-héberger vos photos sur une de vos machines ?

Catégories
Open-source Planet-libre Systeme

Sélection de logiciels libres de comptabilité personnelle

Jusqu’à maintenant je gérais (enfin je ne gérais pas…) mes comptes bancaires et autres livrets d'épargne à partir d'un bête fichier Calc sous Open Office. Suite à une pression de ma compagne (elles sont très forte pour ça) pour avoir une vision plus précise d’où passe notre argent, je me suis mis à la recherche d’un logiciel libre, sous GNU/Linux pour gérer plus confortablement notre budget quotidien.

Mon besoin étant de contrôler mes entrées et mes dépenses par catégories et de planifier des projets (vacances, travaux…)

J’ai donc commencé par poser la question sur Twitter:

 

Je vais donc, dans ce billet, vous présenter mon ressenti sur les 4 logiciels que Saint Twitter, dans sa grande bonté, m’a conseillé. Je parle ici de ressenti après quelques minutes d’utilisation et après une série d’actions identiques effectuées sur ces logiciels (ce n’est en rien un comparatif exhaustif).

Et la liste des nominés est…

Ma « short list » s’est donc limitée aux logiciels suivants:

Ces logiciels étaient tous disponibles dans les dépôts officiels d’Ubuntu (ma plate-forme de test). La ligne de commande suivante m’a donc permis de les installer simplement (vive GNU/Linux et ses gestionnaires de paquets):

sudo apt-get install gnucash grisbi homebank skrooge

Quelques minutes plus tard, les applications étaient disponibles sur mon bureau:

Premier égrenage…

Pour tester le plus rapidement possible les logiciels, j’ai donc effectué les actions suivantes:

  1. Création d’un portefeuille de comptes
  2. Création d’un compte courant
  3. Création d’un compte d’épargne
  4. Importation d’opérations depuis un fichier OFX récupéré sur le site Internet de ma banque
  5. Classement des opérations dans des catégories
  6. Consultation des statistiques

Le premier logiciel que j’ai éliminé est Skrooge. J’ai trouvé l’interface utilisateur très fouillis (j’ai pas trop l’habitude de KDE sous lequel Skrooge est basé). J’ai eu du mal à me retrouver dans les menus et les différentes fenêtres. Bref, je n’ai pas accroché.

Skrooge

Le second logiciel à passer à la trappe est GnuCash. Malgré un bonne première impression au niveau de l’interface utilisateur, c’est plutôt côté « intuitivité » (UX) que le bât blesse. Après import, il a été très difficile de trouver la procédure pour catégoriser les opérations (ce qui est quand même la base de ce que je voulais faire). Je pense que GnuCash est plus adapté à la gestion d’une comptabilité d’une petite entreprise (ou d’un auto-entrepreneur) que d’une compatibilité personnelle.

GnuCash

La finale…

Si vous avez bien suivi, la finale oppose Homebank et Grisbi. On commence par ce qui les rapproche: une interface intuitive et très claire, un wizard de première installation qui vous guide pour créer vos premiers comptes, une importation depuis la plupart des formats proposés par nos banque (Open Financial Exchange OFX, Quicken Interchange Format QIF ou CSV).

Grisbi se détache un peu sur la prise en main initiale, notamment grâce à un très bon wizard. Contrairement à Homebank, il est fourni avec une liste de catégories d’opérations très riche. Je pensais que ce dernier point allait faire la différence mais je me suis rendu compte à l’utilisation que je préférai moi même créer mes catégories.

Grisbi

Vous l’aurez compris, mon choix final c’est donc porté sur Homebank. Je trouve ce logiciel parfaitement adapté à mes besoins. La classification automatique des opérations dans des catégories (en fonction par exemple du critère du nom) permet de me faire gagner pas mal de temps. Les écrans de statistiques montrent en un coup d’oeil ou part votre argent :).

Homebank

Cerise sur le gâteau, Homebank, comme son nom ne l’indique pas, est un projet libre Français développé par Maxime DOYEN.

Et vous, encore à l’age de pierre (Excel) ?

Des avis différents (et donc intéressants) à partager dans les commentaires ci-dessous ?

Source de l’image d’illustration en haut de page

Catégories
Blog Open-source Planet-libre Web

Inclure un screencast de votre terminal sur votre site

Il y a quelques jours, je vous parlais de Shelr, un petit logiciel permettant d’enregistrer simplement ce qui se passe sur votre terminal (ou console) afin de pouvoir le rejouer.

A partir du site Shelr.tv, il est également possible de partager vos « termcast » à votre communauté.

Une nouvelle fonction vient enrichir ce site: la possibilité, via un iframe, d’inclure directement vos « termcast » dans vos sites. La manipulation est très simple car, il suffit de se rendre sur la page de la capture à insérer (par exemple ici) puis de faire un copier du code embeded:

Il ne vous reste plus alors qu’a insérer ce code dans votre page HTML (ou dans votre billet WordPress).

Pour illustrer cette fonction, voici un tercast de la dernière version de Glances 1.4 bêta.

Envoy ! Et un grand merci à Antono pour cette nouvelle fonction.

Catégories
Musique

Ma playlist Spotify TOP 2011

Depuis maintenant deux ans, je rédige, en début d’année, un billet sur comment je gère ma bibliothèque musicale (voir les billets de 2011 et de 2012). Pour vous faire écouter le résultat, il manquait chez Spotify une fonction permettant d’intégrer directement des playlists dans mon blog WordPress. C’est maintenant chose de faite depuis la mise à disposition du « Spotify Play button« .

Voici donc en exclusivité mondiale ma playlist TOP 2011 (la version 2012 est en cours de conception…):

Et vous chers lecteurs, faites aussi tourner vos playlists !

Catégories
Open-source Planet-libre Systeme

Terminator, le terminal ultime sous GNU/Linux

Une des grande différence entre un Linuxien et un Windowsien est le temps passé devant le terminal (console en mode graphique). Si les terminaux fournis par défaut sous GNU/Linux sont à des années lumières des pauvres consoles CMD ou PowerShell de Microsoft, ils sont encore loin derrière le logiciel dont je vais vous parler dans ce billet.

Terminator (logiciel libre sous licence GPL) propose les fonctions suivantes:

  • configuration de la fontes et des couleurs avec gestion de la transparence (association dans des profils)
  • division horizontale et verticale de la fenêtre pour disposer de plusieurs terminaux
  • chaque terminal peut disposer d’un profil différent
  • possibilité d’envoyer les lignes de commandes saisies au clavier sur un groupe de terminaux
  • capture d’écran du terminal en 2 clics de souris
  • scroll bar infinie
  • possibilité de lancer des commandes automatiquement au démarrage du terminal

Voici donc un aperçu de la bête:

Comme vous pouvez le voir, il est possible de mixer des divisions horizontales et verticales et d’associer un profil différent pour chaque terminal. Par exemple, j’ai trois profils différents:

  • default: le profil par défaut que j’utilise sur ma machine (fond bleu foncé, texte blanc)
  • tiny: un profil optimisé pour l’affichage des logs (fontes plus petite)
  • b&w: un profil monochrome

La configuration des profils est stockées dans le fichier ~/.config/terminator/config et peut donc facilement être importée entre vos différents ordinateurs.

Autre fonction très utile, le regroupement. Vous allez pourvoir diffuser, en parallèle, les commandes saisies au clavier sur un ensemble de terminaux.

Imaginons que vous deviez mettre à jour 3 serveurs. Vous commencez donc par diviser horizontalement l’écran en 3 terminaux à partir desquels vous allez vous connecter en SSH sur vos serveurs (1 serveur = 1 terminal). Vous allez ensuite regrouper les 3 terminaux en faisant un clic droit  > Regroupement > Diffuser tout. Il ne reste plus qu’à saisir une seule fois les commandes de mises à jour !

Pratique, rapide, libre, indispensable.

Catégories
Developpement Open-source Planet-libre Systeme

Préparer l’arrivée de Precise Pangolin avec un script de postinstall

Si vous suivez régulièrement ce blog, vous savez que je suis un informaticien fainéant, j’ai horreur de faire plusieurs fois la même chose. C’est une des raison pour laquelle je développe des scripts d’auto (ou post) installation que vous pouvez trouver sur mon espace GitHub.

Nous allons, dans ce billet, parler de la nouvelle version du script de post installation de la version Ubuntu Precise Pangolin (aka 12.04 LTS).

Heu, c’est quoi un script de post install ?

C’est un script que l’on lance à la fin d’une installation « standard » (« out of the box ») d’un système d’exploitation et qui va s’occuper de le configurer pour répondre au mieux à nos besoins.

On peut par exemple automatiser les tâches suivantes:

  • ajouter les dépôts de logiciels
  • installer les logiciels que vous jugez indispensables
  • supprimer les logiciels inutiles
  • télécharger et installer des thèmes pour votre interface graphique
  • configurer vos applications (BASH, prompt, Vim…)
  • faire toutes les actions en ligne de commande qui vous passe par la tête !

Historique du script UbuntuPostInstall

Les dernières versions de ce script (pour les distributions Ubuntu 11.04 et 11.10) étaient développées en Shell Script (BASH). Afin de simplifier le développement, j’ai donc décidé de re-développer complètement le script en Python en lui apportant une fonction de personnalisation par fichier de configuration.

C’est donc sur cette base que le script pour la version 12.04 d’Ubuntu est développé.

Comment fonctionne le script ?

Le script, disponible sous GitHub ou à partir de sa page officielle, est autonome et fonctionne directement à partir d’une installation standard d’Ubuntu 12.04 LTS. Pour le télécharger, il faut saisir les commandes suivantes:

wget https://raw.github.com/nicolargo/ubuntupostinstall/master/ubuntu-12.04-postinstall.py
chmod a+x ubuntu-12.04-postinstall.py

Pour fonctionner, le script utilise un fichier de configuration qui permet de spécifier les « choses à faire ». Par défaut, si aucun configuration n’est spécifiée dans la ligne de commande, il va télécharger le fichier suivant sur mon GitHub: post-installation pour Unity.

Donc pour lancer une post-installation standard sur une toute fraiche distribution Ubuntu 12.04 LTS, il faut lancer la commande:

sudo ./ubuntu-12.04-postinstall.py

Le script va faire les chose suivantes:

  • Ajouter des dépôts PPA utiles (voir la liste dans la section repos)
  • Ajouter des applications indispensables aux geeks (classées par thème: dev, multimedia, réseau, système…)
  • Ajout de thèmes pour GTK, des icônes…
  • Configuration de BASH (.bashrc, prompt, alias), Vim (.vimrc) et Htop (.htoprc)

Voici un aperçu du script en cous d’exécution:

Le script génère également un fichier de log dans le répertoire /tmp qui va détailler toutes les actions effectuées (et vous permettre d’identifier les éventuels problèmes).

D’autres fichiers de configuration sont disponibles sur mon GitHub et peuvent être spécifiés dans la ligne de commande. Par exemple, si vous préférez utiliser Gnome Shell en lieu et place d’Unity:

sudo ./ubuntu-12.04-postinstall.py -c https://raw.github.com/nicolargo/ubuntupostinstall/master/ubuntu-12.04-gnomeshell-postinstall.cfg

ou si vous êtes plutôt Cinnanon (le fork de Gnome 2):

sudo ./ubuntu-12.04-postinstall.py -c https://raw.github.com/nicolargo/ubuntupostinstall/master/ubuntu-12.04-cinnamon-postinstall.cfg

Comment éditer votre propre fichier de configuration ?

Bien que les fichiers fournis en standard répondent aux besoins de la plupart des geek qui lisent ce blog, il peut être intéressant de l’adapter plus finement à vos besoins.

Le plus simple est donc de « forker » la configuration par défaut qui s’approche le plus de votre environnement (Unity, Gnome Shell ou Cinnanon). Puis d’éditer le fichier de configuration et enfin de l’utiliser avec l’option -c du script (qui peut prendre en paramètre une URL ou un fichier local).

Par exemple, si vous êtes un fan de Gnome Shell, vous pouvez télécharger le fichier suivant puis l’éditer en suivant les consignes disponibles sur le site officiel.

Comme vous allez le voir, le fichier de configuration permet, en plus des actions détaillées au début de ce chapitre, de lancer des lignes de commandes en début (section preactions) ou fin de script (section postactions).

Conclusion

Si vous avez des remarques ou des demandes spécifiques sur ce nouveau scripts ou que vous vouliez partager vos fichiers de configurations personnels, les commentaires ci-dessous sont là pour ça !

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

Shelr, un service de screencast pour votre terminal

Shelr propose un outil pour enregistrer, rejouer et diffuser les commandes et leurs résultats saisies dans votre terminal favori (console). L’avantage par rapport à un screencast classique est que le termcast sauvegarde non pas une vidéo mais juste le texte.

Il est possible de fonctionner de manière autonome en gérant vous même vos enregistrements (ce qui peut par exemple être très pratique pour une présentation ou un cours à des élèves). Si vous souhaitez diffusez ces enregistrements sur Internet, il faut passer par le site Shelr.tv: l’inscription prends quelques secondes et l’hébergement de vos termcasts est gratuite.

Cerise sur le gâteau, les outils Shelr sont fournis sont licence GPL v3 dans un GitHub.

Installation Shelr sur votre système

Voici la procédure à suivre sur une distribution Ubuntu. Les seuls pré-requis sont d’avoir ruby et rubugems installés sur son système d’exploitation:

sudo apt-get install ruby rubygems
sudo gem install shelr

Comment utiliser le logiciel Shelr

Le logiciel en question se présente sous la forme d’un executable unique: shelr qui propose dans sa version actuelle les options suivantes:

# shelr 

Usage: shelr command [arg]
Commands:
    setup API_KEY   - setup
    record          - record new shellcast
    push RECORD_ID  - publish
    list            - print list of records
    play RECORD_ID  - play local record
    play RECORD_URL - play remote record

Enregistrement de votre premier termcast

Il suffit de saisir la commande suivante:

shelr record

Shelr va alors vous demander le nom (description) à associer à votre enregistrement puis lancer un fork de votre shell courant ou vous pourrez taper en toute transparence vos commandes à enregistrer.

Pour terminer l’enregistrement, il faut appuyer sur la combinaison CTRL-D (ou saisir la commande exit).

Afficher la liste des termcast stockés sur votre système

L’option list permet d’afficher la liste des termcasts que vous avez enregistrez:

$ shelr list

1333815250: A Glances 1.3.7 demo
1333815271: A Glances 1.3.7 demo
1333815112: A first test

Le chiffre qui précède la description est l’identifiant unique de votre termcast.

Rejouer un termcast

On utilise shelr avec l’option play suivi du numero d’identifiant:

shelr play 1333815112

Le terminal devrait s’animer tout seul, comme par magie.

Petite remarque: seul l’affichage est rejoué, pas l’exécution des commandes !

Il est également possible de fournir en argument de la commande play, l’URL d’un termcast stocké sur le site Shelr.tv

Diffuser vos termcasts sur le site Shelr.tv

Pour partager vos termcast à partir dur site Shelr.tv, il faut d’abord créer un compte en vous rendant sur la page suivante. Si vous avez un compte GitHub, Twitter ou Facebook, il est alors facile de créer un compte en quelques secondes.

Après la création du compte, vous aller obtenir un code d’API:

Il faut alors saisir la commande « shelr setup CODEAPI » dans un terminal pour associer votre ordinateur à votre compte Shelr.tv.

Pour diffuser sur le site un termcast enregistré sur votre disque il faut saisir la commande (en remplaçant l’identifiant par celui obtenu par la commande shelr list):

shelr push 1333815112

Il est également possible de diffuser le dernier enregistrement en utilisant l’alias:

shelr push last

Vous pouvez voir de nombreux exemples de termcasts sur le site Shelt.tv.

Visualiser un termcast Shelr.tv depuis une console

Une fois diffusé, vous aller obtenir l’URL de votre termcast que l’on pourra rejouer dans sa console. Par exemple, pour voir une démonstration de la dernière version bêta de mon logiciel Glances:

shelr play http://shelr.tv/records/4f81498796608031bf000003.json

Notez le .json à la fin de l’URL…

Visualiser un termcast Shelr.tv depuis un navigateur

Il est également possible, pour ceux qui non pas encore Shelr installé sur leur système, de voir le termcast directement depuis un navigateur internet depuis la page suivante: http://shelr.tv/records/4f81498796608031bf000003

Conclusion

Voilà une « killer application » qui va sûrement envahir les blogs techniques dans les prochains mois !

PS: Le compte Shelr.tv du blog de Nicolargo est disponible ici.

Catégories
Open-source Planet-libre Reseau Web

Introduction et première utilisation de Tor

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

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

Tor: Comment ça marche ?

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

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

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

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

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

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

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

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

Installation de Tor comme client

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

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

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

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

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

Utilisation de Tor depuis votre navigateur Chromium

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

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

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

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

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

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

Une solution idéale ?

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

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

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

Sans Tor:

Avec Tor:

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

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

Utilisateurs ?

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

Comment trouvez-vous les performances ?

En faites vous un autre usage ?

A vos commentaires chers lecteurs !

Catégories
Blog Open-source Planet-libre Reseau

Bannir les bannis avec Fail2Ban

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

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

Avant de commencer

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

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

Pour cela on commence par créer les filtres.

Filtre ban.conf et multiban.conf

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

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

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

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

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

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

Configuration de la prison Fail2ban

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

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

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

Le résultat

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

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

En bonus: la contre-attaque !

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

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

[crayon]

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

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

[/crayon]

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

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

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

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

action = iptables-allports[name=ALL]

par:

action = iptables-tarpit[name=ALL]

dans notre fichier jail.conf.

Conclusion

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

Subissez-vous des attaques DOS sur vos serveurs ?

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

Catégories
Developpement Open-source Planet-libre Systeme

En route vers Puppet, Chef, CfEngine…

  

Derrière ce titre un peu pompeux se cache une problématique que tout administrateur système s’est ou se posera un jour ou l’autre: Comment gérer l’installation, la mise à jour et la configuration de toutes les machines de son parc informatique ?

Ce billet a pour objectif de poser le problème de base et d’aborder quelques unes des solutions possibles. Il servira d’introduction à une série d’article sur ce vaste et intéressant sujet.

Introduction

Imaginons donc un responsable informatique disposant de trois administrateurs système: Michel, David et Jean-Pierre. Il leurs demande de travailler sur les solutions de déploiement des logiciels dans le système d’information de  l’entreprise. Quelques jours plus tard, il leur demande de présenter leurs solutions…

Première solution: « à la mimine »

La première solution pour répondre à la question posée est celle Michel, sysadmin de base (fort en technique mais moins en processus et en communication): lire la documentation du système (ou logiciel) à installer (ou mettre à jour), Googlelifier si la documentation est trop longue (ou seulement en Anglais), tester sur un environnement de développement (Jean-Pierre est quand même un garçon prudent) puis appliquer la dite procédure sur l’ensemble des machines.

On trouve également certains Michel (ceux qui ont passé la certification ISO) qui vont documenter leur installation dans un beau document (ou encore mieux un Wiki). Comme Michel travaille souvent seul, le document ne sera jamais partagé ou enrichie, il deviendra donc obsolète à la prochaine version du système (ou logiciel).

Cette première solution apporte quelques avantages: Michel peut maîtriser de manière unitaire toutes les installations et donc facilement identifier les problèmes, il a une connaissance précise et réelles des briques de ses machines.

D’un autre coté, Michel demande un certain temps pour déployer ou mettre à jour vos logiciels sur les 100 machines de votre parc et il deviendrait complètement débordé, voir incompétent,  si ce nombre passait à plusieurs centaines voir milliers de machines…

Deuxième solution: « script, script, script… »

Michel a un collègue, David, qui adopte une méthode similaire dans les premières étapes (lecture de la documentation, recherche sur Internet, test dans un environnement de développement). Mais qui, au lieu de faire lui même les opérations sur les machines, passe par un script Shell qui va automatiser ces taches. Si vous suivez ce blog, vous savez que j’utilise souvent cette méthode pour installer des composants sur mes machines persos (et quelques fois professionnelles).

David bichonne ses beaux scripts dans un repos Git. Ses procédures sont rodées: connexion en SSH, récupération du script et le exécution.

Tout semble parfait mais les développements de ces scripts peuvent vite devenir une vrai galère quand on s’attaque à un parc multi-distribution (ceux qui ont essayé de développer un script d’installation multi-plateforme/distribution doivent me comprendre…).

Troisième solution: « gestionnaire de configuration des machines »

Bienvenu dans le monde de Jean-Pierre. Lui, il utilise un gestionnaire de configuration des machines. Ces systèmes apportent une couche d’abstraction entre ceux que l’on veut faire (les besoins) et comment ces besoins sont concrètement résolus sur les machines cibles.Un pseudo langage de programmation permet de définir les actions à effectuer et le moteur de configuration des machines va s’occuper du déploiement, de l’exécution et de la génération d’un rapport sur chacune des machines cibles.

Plusieurs solutions existent, des propriétaires (comme IBM Tivoli, BSM ou HP Operations Manager i) et des libres (Puppet, Chef, CfEngine). C’est bien sûr sur ces dernières que Jean-Pierre, grand partisan des solutions libres, a donc porté son choix.

Il ne reste plus qu’à commencer à jouer avec le bébé en travaillant sur un environnement de développement/Cloud (teasing pour les prochains billets :)).

Conclusion

Je ne connais pas assez ces solutions pour avoir un avis tranché sur la meilleure solution libre. Après quelques recherches sur le net et la consultation des 3 sites internet officiels, je trouve que le projet Puppet est très bien structuré et documenté. Je pense donc partir sur cette solution pour mes prochains billet sur le sujet.

La discussion est cependant ouverte (et les commentaires sont fait pour cela).

Je suis preneur de retours d’expériences sur ces 3 solutions libres !

Sources ayant inspiré ce billet: