Serveur dédié : mettre en place DNSSEC pour sécuriser les DNS du domaine photo

Serveur dédié : mettre en place DNSSEC pour sécuriser les DNS du domaine

Aujourd’hui, nous allons mettre en place DNSSEC afin d’ajouter une couche de sécurité supplémentaire dans la gestion des DNS de notre domaine.

Principe de fonctionnement du DNS

Le DNS (Domain Name System) est un maillon clé du fonctionnement d’Internet car la quasi-totalité des services en ligne utilisent des noms de domaine à un moment ou à un autre.

Le DNS est organisé sous la forme d’une arborescence inversée, avec une « racine » dont dépendent les différentes « branches ».

Au premier niveau de l’arborescence se trouvent les « Top Level Domains » (TLD) ou domaines de premier niveau, comme les .fr, .com, .net etc.

Au second niveau, nous avons les noms de domaine « classiques » comme « skyminds.net ».

Fonctionnant comme une base de données distribuée sur des millions de machines, le DNS repose sur des interactions entre ces machines permettant d’identifier celle qui est la plus susceptible de pouvoir répondre à la requête d’un internaute.

Serveur dédié : mise en place de DNSSEC pour sécuriser les DNS d'un nom de domaine photo 2

Dans l’exemple ci-dessus, l’utilisateur veut se connecter au site http://www.wikipedia.fr. Il envoie sa requête via son navigateur. Celle-ci est reçue par un serveur dit « résolveur » qui a pour première mission d’identifier la machine sur laquelle est installé le nom de domaine wikipedia.fr.

Le résolveur s’adresse d’abord à la « racine » du DNS, qui lui indique quels sont les serveurs « faisant autorité » (c’est-à-dire compétents) pour .fr puisque le nom de domaine est en .fr.

Dans un second temps, les serveurs du .fr indiquent à leur tour au résolveur que le nom de domaine wikipedia.fr est hébergé sur tel serveur.

Celui-ci est alors en mesure d’indiquer au navigateur l’adresse IP du serveur web hébergeant les contenus du site web www.wikipedia.fr.

Ce schéma se vérifie quel que soit le site web auquel on souhaite accéder.

DNSSEC : authentifier l’origine et l’intégrité des données

DNSSEC, acronyme de Domain Name System Security Extensions, désigne un ensemble défini d’extensions de sécurité du protocole DNS, standardisé par l’IETF dans la RFC 4033.

Serveur dédié : mise en place de DNSSEC pour sécuriser les DNS d'un nom de domaine photo

DNSSEC signe cryptographiquement les enregistrements DNS et met cette signature dans le DNS. Ainsi, un client DNS méfiant peut récupérer la signature et, s’il possède la clé du serveur, vérifier que les données sont correctes.

Cela permet de s’assurer que les données obtenues par résolution DNS proviennent de la zone légitime du nom de domaine (authentification de l’origine des données) et que les données ne sont pas altérées lors du transfert (intégrité des données).

Ces extensions de sécurité font de DNSSEC une composante essentielle des communications Internet qui nécessitent un haut niveau de confiance dans l’infrastructure DNS.

DNSSEC utilise un mécanisme reposant sur une paire de clés ayant des rôles complémentaires. La première clé, privée, crée une signature par chiffrement; alors que la seconde clé, publique, vérifie les signatures par déchiffrement:

Serveur dédié : mise en place de DNSSEC pour sécuriser les DNS d'un nom de domaine photo 4

Contrairement à d’autres protocoles comme SSL/TLS, DNSSEC ne sécurise pas juste un canal de communication mais il protège les données et les enregistrements DNS, de bout en bout. Ainsi, il est efficace même lorsqu’un serveur intermédiaire trahit l’intégrité des données (DNS menteur).

Les attaques par empoisonnement de cache

DNSSEC répond spécifiquement aux attaques par empoisonnement de cache : le résolveur est alors “intoxiqué” pour qu’il considère le serveur « pirate » comme légitime, en lieu et place du serveur d’origine.

Cette opération permet notamment de capter et de détourner les requêtes vers un autre site web sans que les utilisateurs puissent s’en rendre compte : ils risquent alors de confier leurs données personnelles en se croyant sur le site légitime.

Serveur dédié : mise en place de DNSSEC pour sécuriser les DNS d'un nom de domaine photo 3

Le bon fonctionnement du DNS dépend donc de la fiabilité des données transmises à chaque étape. Les extensions de sécurité du DNS cherchent à répondre à cette contrainte en assurant l’intégrité des données transitant sur le réseau, notamment entre résolveurs et serveurs faisant autorité.

Pré-requis avant de configurer DNSSEC

Avant de commencer, voici quelques pré-requis essentiels :

1. votre domaine doit être correctement configuré auprès de votre registrar et hébergeur au niveau DNS,

2. votre serveur possède suffisamment d’entropie pour la génération des clés de sécurité,

3. vous avez fait une copie de sauvegarde : site, base de données, enregistrements DNS, configuration BIND.

Vérifiez que vous êtes bien prêt. Ce tutoriel prend à peu près 30 minutes à réaliser.

Lire la suite

Serveur dédié : générer de l'entropie additionnelle avec Haveged photo

Serveur dédié : produire une meilleure réserve d’entropie avec haveged

Sur notre serveur dédié, nous avons parfois besoin de générer des nombres aléatoires avec une forte entropie, par exemple lorsque l’on génère une clé SSH, un certificat SSL/TLS ou une clé pour DNSSEC.

Aujourd’hui, je vous propose donc un article un petit peu plus théorique, qui nous permettra d’améliorer la qualité des données aléatoires et l’entropie générale de notre serveur.

On commence donc par la théorie et on enchaîne sur la partie technique.

L’entropie ou le caractère aléatoire sous Linux

Le chiffrement est basé sur deux facteurs principaux : les nombres premiers et les nombres aléatoires.

Sous Linux, les nombres aléatoires sont générés par le pseudo random number generator (PRNG) qui génère des données aléatoires depuis les interruptions matérielles (clavier, souris, accès disque, accès réseau…) et depuis d’autres sources provenant du système d’exploitation.

Serveur dédié : générer de l'entropie additionnelle avec Haveged photo 1

Une interruption matérielle (en anglais Interrupt ReQuest ou IRQ) est une interruption déclenchée par un périphérique d’entrée-sortie d’un microprocesseur ou d’un microcontrôleur.

Ce caractère aléatoire ou aléa, que l’on désigne sous le terme entropie, est utilisé principalement pour le chiffrement comme SSL/TLS mais peut aussi avoir plein d’utilisations pratiques (génération de mots de passe, de clés, de chaînes de caractères aléatoires…).

Lire la suite

BASH : lister, bloquer et débloquer des adresses IP avec iptables photo 1

BASH : lister, bloquer et débloquer des adresses IP avec iptables

Sur un serveur dédié, il n’est pas rare d’avoir des adresses IP à bannir pour se débarrasser de visiteurs malveillants, de spammeurs ou de bots qui effectuent des requêtes farfelues visant à perturber le bon fonctionnement des services du serveur.

Heureusement, toutes ces petites contrariétés peuvent être résolues en quelques secondes grâce à un firewall comme iptables.

Ce petit tutoriel vous montre les quelques commandes à retenir pour lister, bannir ou débloquer des adresses IP avec iptables ainsi qu’un petit script bash qui vous permettra d’automatiser la gestion de ces trois fonctions très simplement.

Bannir une IP

Pour bannir une adresse IP avec iptables, il suffit de lancer cette commande:

iptables -I INPUT -s x.x.x.x -j DROPCode language: CSS (css)

L’argument DROP indique que l’adresse IP indiquée (x.x.x.x) n’aura plus accès à la machine.

Lister les IP bloquées

Pour voir la liste des adresses IP bloquées, il suffit de demander à iptables la liste et de ne sélectionner que celles qui sont en DROP:

iptables -L INPUT -v -n | grep DROP

Résultat :

Chain INPUT (policy DROP 23 packets, 4122 bytes)

Débloquer une IP

Pour débloquer une IP, il faut d’abord afficher la liste des IP bannies:

iptables -L INPUT -v -n | grep DROP

Toutes les IP sont classées dans un ordre numéroté, ligne par ligne. Il suffit d’indiquer le numéro de la ligne de la règle à supprimer avec la commande:

iptables -D INPUT numero-de-la-regle

L’argument -D (pour delete) permet de supprimer la règle qui correspond à l’adresse IP que nous souhaitons supprimer. Par exemple, si on veut supprimer la règle 1, il suffit d’indiquer:

iptables -D INPUT 1

Vous aurez remarqué que toutes ces commandes sont bien fastidieuses et leurs syntaxes assez complexes à retenir.

Voyons donc comment créer un script bash qui prendrait en charge toutes ces commandes.

Script Bash pour automatiser la gestion des IP bannies dans iptables

Bash

Voici un script bash qui devrait grandement vous simplifier la gestion des IP dans iptables.

Il permet de bloquer, débloquer et lister les adresses IP en toute simplicité.

Lire la suite

VLC : résoudre le problème de la lecture d'un dossier photo

VLC : résoudre le problème de lecture de dossiers avec le clic-droit

logo-vlc

Lors de mon précédent article à propos du téléchargement automatique des sous-titres avec VLC, j’ai essayé de mettre à jour – en vain – le paquet vlc sur mon installation Ubuntu et j’ai fini par prendre les captures d’écran avec une version portable.

Or, depuis, il m’est impossible de lire un dossier avec VLC !

Le problème : lecture impossible d’un dossier avec VLC

Les symptômes sont les suivants : un clic droit sur le dossier offre bien l’option Ouvrir avec > Lecteur multimédia VLC.

Le dossier arrive bien dans VLC mais il est impossible de lancer la lecture, que ce soit avec le bouton lecture ou en double-cliquant sur le nom du dossier dans la playlist.

Le nom vibre comme s’il s’agissait d’un message d’erreur mais le dossier n’est pas ouvert et rien n’est lu.

La solution : éditer le fichier de configuration de VLC

La solution est d’éditer le fichier de configuration de VLC, qui s’appelle vlcrc.

Sous Windows, il se trouve à l’emplacement %appdata%\vlc\vlcrc.

Sous Ubuntu, il se trouve à l’emplacement /home/matt/.config/vlc/vlcrc donc on l’édite:

gedit /home/matt/.config/vlc/vlcrc

On recherche la ligne qui concerne le module Demux :

# Demux module (string)
demux=anyCode language: PHP (php)

et on commente la ligne qui l’active :

# Demux module (string)
#demux=anyCode language: PHP (php)

Lire la suite

hourglass

Serveur dédié : optimiser toutes les images GIF avec GIFsicle

Après avoir vu comment optimiser les fichiers JPG et PNG sur le serveur, voici comment optimiser les fichiers GIF.

hourglass

Comme dans le tutoriel précédent, nous allons optimiser toutes nos images d’un seul coup, de manière à charger nos pages plus rapidement et à consommer moins de bande passante.

Pour optimiser les fichiers GIF, j’ai choisi GIFsicle.

L’installation et la compression de vos répertoires d’images prend à peine quelques minutes.

Installation de GIFsicle

On installe le paquet :

apt-get install gifsicleCode language: JavaScript (javascript)

et on RTFM :

man gifsicle

Optimisation des PNG

Pour optimiser les fichiers GIF, il suffit de lancer :

gifsicle --batch -O3 *.gifCode language: CSS (css)

L’argument --batch permet de gérer plusieurs fichiers et -O3 permet la meilleure optimisation possible, en essayant plusieurs combinaisons de compression pour trouver le ratio le plus intéressant.

Lire la suite

Serveur dédié : installer la dernière version d'OpenSSL sous Debian photo

Bash : lister et redémarrer tous les services qui utilisent libssl après une mise à jour d’OpenSSL

Lorsque l’on met à jour OpenSSL, tous les services qui utilisent les librairies SSL et qui sont chargés en mémoire ne rechargent pas les librairies (dont libssl) qui viennent d’être mises à jour.

Idéalement, il faudrait rebooter le système mais lorsqu’il s’agit d’un serveur, ce n’est pas toujours possible. Si les services ne sont pas redémarrés (restart) ou rechargés (reload) après une mise à jour, ils seront toujours vulnérables aux problèmes de sécurité que corrige la nouvelle version.

Voici donc comment détecter les services qui utilisent les librairies d’OpenSSL afin de les redémarrer et éviter de rebooter la machine.

Lister les services qui utilisent libssl

Vérifiez que votre système possède la commande lsof. Elle devrait normalement être prise en charge par votre gestionnaire de paquets.

Pour lister les services qui utilisent OpenSSL, il suffit de vérifier lesquels utilisent le paquet libssl en les classant par ordre alphabétique et en supprimant les doublons:

lsof | grep libssl | awk '{print $1}' | sort | uniqCode language: JavaScript (javascript)

Résultat:

apache2
fail2ban-
opendkim
php5-fpm
tlsmgr

Il ne vous reste plus qu’à redémarrer les services présents dans cette liste qui font appel à OpenSSL.

Lister les services qui utilisent une ancienne version de libssl

Si vous avez mis à jour OpenSSL mais que vous n’avez pas redémarré votre serveur, il est possible que certains services utilisent toujours une ancienne librairie non-patchée d’OpenSSL.

Lire la suite

Télécharger automatiquement les sous-titres d'un film ou d'une série avec VLC photo 2

Télécharger automatiquement les sous-titres d’un film ou d’une série avec VLC

logo-vlc

Si vous avez l’habitude de regarder des films ou des séries en version originale (VO) sur votre ordinateur avec VLC, voici une petite astuce qui devrait grandement vous faciliter la tâche…

En effet, qui n’a jamais rêvé de pouvoir récupérer les bons sous-titres avec le bon timing de la bonne langue qui correspond au bon fichier vidéo?

Et bien sachez que cela est possible en trois clics avec VLC. Suivez le guide !

Pré-requis : une version de VLC à jour

Tout d’abord, vous devez disposer d’une version de VLC récente, c’est-à-dire VLC 2.2.1+. Inutile d’essayer avec VLC 2.1.x qui est livrée avec Ubuntu 14.04 LTS, le module VLSub ne fonctionne pas avec cette version.

Pour les besoins de cet article et des captures d’écran, j’ai donc utilisé la version portable de VLC.

Mettez donc VLC à jour !

Charger à la volée les sous-titres d’une vidéo dans VLC

VLC permet maintenant de charger les sous-titres d’une vidéo en cours de lecture, sans les télécharger sur l’ordinateur.

Fini le temps où vous deviez rechercher le fichier de sous-titre, le télécharger, le dézipper puis le renommer pour qu’il soit détecté automatiquement par le lecteur.

Maintenant, tout se fait en quelques clics :

1. ouvrez votre fichier vidéo avec VLC et appuyez sur le bouton Lecture.

Télécharger automatiquement les sous-titres d'un film ou d'une série avec VLC photo 4

ouvrez le menu View > Download Subtitles:

Télécharger automatiquement les sous-titres d'un film ou d'une série avec VLC photo 1

Si vous avez un Mac, on trouve le menu dans VLC > Extensions > VLsub :

Télécharger automatiquement les sous-titres d'un film ou d'une série avec VLC photo

3. choisissez la langue des sous-titres voulue et cliquez sur le bouton “Search by hash”

4. VLC donne une liste des résultats, il vous suffit de sélectionner un sous-titre et cliquer sur le bouton “Download selection”:

Télécharger automatiquement les sous-titres d'un film ou d'une série avec VLC photo 3

4. VLC affiche le message “success : subtitles loaded” en vert en bas de la fenêtre

5. fermez la fenêtre VLSub et regardez votre film ou épisode sous-titré!

Télécharger automatiquement les sous-titres d'un film ou d'une série avec VLC photo 2

Notez que vous pouvez également rechercher par nom, numéro de saison ou numéro d’épisode.

Lire la suite

Bash : réparer les tables MySQL en cas de crash photo

Bash : rechercher une chaîne dans des fichiers de manière récursive avec Grep

Bash

Voici une petite technique utile pour rechercher la présence d’une chaine de texte dans le contenu des fichiers d’un répertoire.

Sous linux, j’utilise très fréquemment la commande grep.

La syntaxe de grep

La syntaxe de grep est toute simple puisqu’elle consiste à définir des options de recherche, suivies des mot-clés à chercher, et enfin du répertoire de travail.

Voilà ce que cela nous donne :

grep [option] "text string to search" directory-pathCode language: JavaScript (javascript)

Grep en action

Sur le serveur, on se place dans le répertoire de travail pour y lancer cette commande :

grep --color --include=\*.{php,js,css} -rnwe "recherche" . Code language: PHP (php)

Voici le détail des arguments :

  • --color : pour activer la colorisation des résultats
  • --include=\*.{php,js,css} : les extensions de fichiers à cibler
  • -r : de manière récursive
  • -n : avec les numéros de ligne
  • -w : mots complets de la recherche (recherche stricte)
  • -e : active la regex sur les extensions de fichiers

Note : le terme à recherche doit être entre guillemets et il faut bien ajouter le point (.) final ou alors explicitement donner le chemin complet du répertoire de travail.

Grep et les expressions régulières

Il est également possible d’utiliser des expressions régulières avec Grep :

grep --color -HnR "add_[a-zA-Z].*_page.*, [0-9]*," /home/public_html/wp-content/plugins/Code language: JavaScript (javascript)

Très utile pour rapidement trouver une fonction devenue obsolète ou un bout de code utilisé dans plusieurs fichiers.

ubuntu-desktop-applet

Ubuntu : résoudre le problème de chargement de l’icône Show Desktop Applet au démarrage

Problème : plus d’icône du bureau

De temps à autre, l’icône ShowDesktopApplet ne se lance pas bien au démarrage d’Ubuntu et produit une fenêtre d’erreur avec le message suivant :

Le tableau de bord a rencontré un problème lors du chargement de “WnckletFactory::ShowDesktopApplet”. Voulez-vous supprimer l’applet de votre configuration?

Voici ce que cela donne en image :

ubuntu-desktop-applet

Commencez par cliquer sur le bouton Ne pas supprimer. Ensuite, deux manières de procéder vous permettent de retrouver l’icône du bureau.

Solution : forcer le chargement en ligne de commande

Ouvrez le terminal et lancez la commande:

gnome-panel --replace

Cela est généralement suffisant. Vous devriez obtenir une erreur de segmentation et la commande devrait vous rendre la main dans le terminal. Si ce n’est pas le cas, essayez la solution suivante.

Solution : ouvrir une nouvelle session

Si la solution précédente n’a pas fonctionné, il vous suffit de fermer la session et d’en ouvrir une nouvelle. Cela relance gnome-panel correctement.

Je n’utilise pas Unity mais Gnome Shell et l’icône du bureau est très pratique pour s’y retrouver.

Bash : réparer les tables MySQL en cas de crash photo

BASH : lancer une tâche en arrière-plan et fermer le terminal sans interrompre la tâche

Bash

J’ai récemment mis à jour mon article sur Rsync pour rapatrier quelques fichiers du serveur vers mon NAS Synology et me suis demandé comment je pouvais faire pour ouvrir un terminal, lancer un Rsync qui va sûrement me prendre des heures et fermer le terminal sans que cela interrompe la sauvegarde.

Voici quelques pistes pour lancer une commande en arrière-plan avec BASH.

Créer un sous-shell

On crée un sous-shell (subshell) en lançant la commande avec des parenthèses. Le signe & (ampersand) est nécessaire, tout comme la commande exit qui permet de quitter proprement le terminal sans terminer le processus :

(sleep 100) & exitCode language: PHP (php)

On ouvre un autre terminal et on vérifie que notre tâche est toujours en cours :

ps aux | grep sleep

Utiliser disown

Une autre manière de faire est d’utiliser disown :

sleep 60 & disown

Le système attribue un numéro de processus à notre tâche. On peut alors fermer le terminal comme un barbare, la tâche reste en cours :

ps aux | grep sleep

A garder sous le coude.

Subversion : ajouter et mettre à jour un plugin WordPress sur le dépôt officiel photo

Subversion : ajouter et mettre à jour un plugin WordPress sur le dépôt officiel

wordpress-svn-logo

De temps en temps, je mets mes plugins WordPress sur le dépôt officiel mais j’utilise assez rarement subversion – connu également sous le doux nom svn – et j’ai tendance à en oublier la syntaxe.

Voici donc un petit aide-mémoire pour l’utilisation de subversion avec les plugins WordPress.

Ajouter un plugin sur le dépôt officiel WordPress

1. On crée un répertoire local sur notre machine pour y accueillir notre projet:

mkdir my-local-dir

2. On synchronise le dépôt avec un check-out en donnant le slug du plugin:

svn co https://plugins.svn.wordpress.org/your-plugin-name my-local-dirCode language: JavaScript (javascript)

Résultat:

> A	my-local-dir/trunk
> A	my-local-dir/branches
> A	my-local-dir/tags
> Checked out revision 1135625.

Subversion vient d’ajouter ( “A” signifie “add” ) tous les répertoires du dépôt central à notre copie locale.

3. On copie tous les fichiers du plugin dans le répertoire trunk/:

cd my-local-dir/
my-local-dir/$ cp ~/my-plugin.php trunk/my-plugin.php
my-local-dir/$ cp ~/readme.txt trunk/readme.txtCode language: JavaScript (javascript)

4. On prépare l’ajout des fichiers du plugin au dépôt central:

my-local-dir/$ svn add trunk/* assets/*
> A	trunk/my-plugin.php
> A	trunk/readme.txtCode language: PHP (php)

5. On donne un message à notre check-in et on envoie les fichiers au dépôt central :

my-local-dir/$ svn ci -m 'Adding first version of my plugin'
> Adding	trunk/my-plugin.php
> Adding	trunk/readme.txt
> Transmitting file data .
> Committed revision 1135626.
Code language: JavaScript (javascript)

Voilà, vous venez d’ajouter votre plugin au dépôt officiel de WordPress !

Supprimer un fichier sur le dépôt

Pour supprimer un fichier sur le dépôt, il faut supprimer le fichier avec svn delete puis commettre les changements avec svn commit. C’est lors du commit que le fichier est supprimé du dépôt :

svn delete myfile
> D         myfile

svn commit -m "Deleted file 'myfile'."
> Deleting       myfile
> Transmitting file data .
> Committed revision 1135629.Code language: JavaScript (javascript)

Lire la suite

Bash : réparer les tables MySQL en cas de crash photo

Bash : convertir une liste de fichiers MP3 en Ogg Vorbis (et vice-versa)

Bash

Pour les besoins du Centre de Kriya Yoga France, j’ai été amené à devoir convertir toute une floppée de fichiers MP3 au format Ogg Vorbis afin qu’il soient lus nativement en HTML5 dans les navigateurs compatibles avec la balise audio.

J’ai utilisé la commande avconv dans un terminal.

Convertir des MP3 en Ogg Vorbis

Voici le script que j’ai écrit pour me simplifier la vie et convertir ma liste de MP3 au format Ogg Vorbis:

for i in *.mp3; do avconv -i $i -codec:a libvorbis -aq 4 ${i/%mp3/ogg}; doneCode language: PHP (php)

Cela recherche tous les fichiers MP3 du répertoire dans lequel on se trouve, utilise le codec libvorbis, encode dans une qualité supérieure ou égale à 128Kbps et nomme le fichier avec la bonne extension (.ogg pour l’Ogg Vorbis).

Convertir des Ogg Vorbis en MP3

Si vous souhaitez convertir des fichiers Ogg Vorbis au format MP3 :

for i in *.ogg; do avconv -i $i -codec:a libmp3lame -aq 2 ${i/%ogg/mp3}; doneCode language: PHP (php)

Cela recherche tous les fichiers OGG du répertoire dans lequel on se trouve, utilise le codec libmp3lame, encode dans une qualité supérieure ou égale à 192Kbps et nomme le fichier avec la bonne extension (.mp3).

Lire la suite