Les notes de Clément

Spécialiste de rien // Partageur de tout
Billets avec le mot-clé unix

Nouvel hébergement !

Bon j’ai un peu laisser ce blog à l’abandon… Il y a eu plusieurs raisons : manque de temps, Raspberry Pi en panne. Je vais essayer de lui donner un second souffle !

Déjà, j’ai changé de formule d’hébergement, histoire d’avoir un peu plus de liberté et d’avoir mon serveur bac-à-sable à moi. Donc je viens juste de passer d’un hébergement mutualisé avec nom de domaine géré, à un modeste serveur de la gamme Kimsufi d’OVH, et mon domaine clementgrimal.fr est maintenant géré par Gandi. Je pense que ce sera plus confortable d’avoir les deux séparés comme ça.

En faisant cette migration, je me suis rendu compte que le service que j’avais l’habitude de payer pour l’hébergement mutualisé était plus important que je ne l’imaginé, mais que je pouvais désormais m’en passer, car j’ai appris à gérer un serveur pour le travail : Nginx, php-fpm, MySQL, etc. J’ai repris mon article qui expliquait comment protéger son Raspberry Pi (Sécuriser son accès SSH), en particulier pour installer Fail2Ban. Bref, pas mal de configuration, mais rien d’insurmontable , et au final pas mal de possibilité pour m’amuser avec des trucs inaccessibles en hébergement mutualisé : serveur Node.js, cron de tâches (comme la mise à jour de la page sur Darwin clement.grimal.de/darwin), etc.

D’ailleurs, je voudrais juste profiter de cette article pour expliquer que j’ai dû transférer ce blog, et que je n’ai pas utilisé les fonctions export/import de WordPress, car j’ai fais le changement de DNS un peu vite, et que je n’avais donc plus accès à mon blog ! J’ai donc fait une copie de tous les fichiers, et un export de la base de données. J’ai donc ensuite copier les fichiers dans mon répertoire web, et importer la base de données. J’ai donc également configuré un utilisateur MySQL dédié au blog (accès restreint à la base du blog) et modifier le fichier wp-config.php en conséquence, pour la connexion à la base de données. Finalement, mes pages d’articles ne fonctionnait pas à cause de la ré-écriture d’url, il a fallut que je modifie un peu ma vhost en ajoutant le bloc :

location /blog/ {
    try_files $uri $uri/ /blog/index.php?$args;
}

Finalement, si on veut que WordPress puisse faire les mise à jour facilement, on peut le mettre en mode direct en ajoutant dans le fichier wp-config.php les lignes suivantes :

define( 'FS_METHOD', 'direct' );
define( 'FS_CHMOD_DIR', 0777 );
define( 'FS_CHMOD_FILE', 0777 );

Voilà, histoire de finir sur quelque chose de concret : je vais enfin pouvoir héberger les épisodes de l’émission Sur les épaules de Darwin sur mon serveur !

Sources

Sécuriser son accès SSH

Afin de pouvoir contrôler son Raspberry Pi sans avoir besoin d’y connecter un écran, une souris et un écran, il est très commode de s’y connecter via un accès SSH. Un serveur SSH étant installé par défaut sur Raspbian, il n’y a alors aucune configuration particulière à faire, et on peut brancher son Raspberry Pi, le connecter à son réseau avec un câble Ethernet, et depuis son ordinateur personnel (connecté au même réseau), faire :

ssh pi@raspberry

Ensuite, si l’on ajoute une règle NAT sur sa box pour rediriger le port 22 (celui du serveur SSH), on peut se connecter, en utilisant l’adresse IP externe à la place de raspberry, à son Raspberry Pi de n’importe où ! Et ce n’importe quand ! C’est super n’est-ce pas ? Sauf qu’il serait bon que n’importe qui ne puisse pas le faire… On va donc voir quelles règles simples appliquées pour réduire les chances qu’un petit malin se connecte sur votre réseau.

Pourquoi se protéger ?

Pour commencer, il faut dire qu’il y a pénurie d’adresse IP dans le monde, car leur nombre n’est pas infinie et il y a de plus en plus d’appareils reliés à internet ! C’est pourquoi il existe une nouvelle norme IPv6, mais elle n’est pas encore majoritairement utilisée. De plus, sur toute machine Linux, il y a pas défaut un compte root, qui est le super administrateur de la machine ! En bref, il peut tout faire, et c’est par lui que vous passer dès lors que vous modifier votre système (voir la commande sudo par exemple, qui veut dire « super user do »). Donc en faisant :

ssh root@adresse_aleatoire

J’ai plutôt de bonne chance d’essayer de me connecter à un ordinateur existant, ayant un serveur SSH utilisant le port 22, et ayant un utilisateur s’appelant root ! Ensuite, rien de m’empêche d’essayer automatiquement des milliers de mots de passe, et avec un peu de chance, je le trouverais ! Il suffit d’un programme qui teste méthodiquement toutes les chaînes de caractères, à raison d’un essai par seconde, on peut tester 86400 mots de passe par jour ! Même si le nombre de combinaisons possibles est largement plus grand que ça, avec le temps nécessaire, un pirate pourra alors se connecter en root à votre Raspberry Pi !

Mais il va faire quoi ? Ecouter ma musique ?!

Il y a peu de chance… Son intérêt sera plutôt d’installer un programme sur votre système, qu’il pourra utiliser à sa guise plus tard s’il désire lancer une attaque vers un site en particulier. Votre ordinateur est alors devenu ce que l’on appelle un zombie, faisant partie d’un BotNet !

Quelques règles simples

Pour éviter ce scénario, on peut appliquer les quelques règles suivantes.

Changer le port

Rien de plus simple, éditer la configuration de votre serveur ssh, qui est décrite dans le fichier /etc/ssh/sshd_config, pour y faire figurer la ligne :

Port 1337

Attention : vous risquez d’être déconnecté si vous faite l’opération en étant justement connecté en SSH… Donc vous pouvez dans un premier temps utiliser 2 ports, le 22 et le 1337 en dupliquant cette ligne. Puis supprimer la ligne Port 22 ultérieurement. Vous pouvez remplacer 1337 par n’importe quel numéro compris entre 1024 et 65537, en vérifiant qu’il n’est pas déjà utilisé par un autre programme.

Il faut alors penser à changer la règle NAT dans votre box, pour rediriger le port 1337 (et plus le 22). Pour vous connecter maintenant, utilisez l’option -p de la commande ssh :

ssh -p 1337 pi@raspberry

Désactiver la connexion root

Pour éviter à quiconque (vous y compris) de vous connecter directement en super utilisateur à votre Raspberry Pi . Il faut également éditer le fichier /etc/ssh/sshd_config, pour modifier la ligne:

PermitRootLogin no

Installation d’un logiciel qui bannit en cas d’échec

Pour éviter les attaques de type « brute force » qui consiste à essayer le plus possible de mots de passe, il est possible d’installer un logiciel qui va se charger de bannir une adresse IP si un utilisateur échoue à se connecter plus d’un certain nombre de fois. J’utilise personnellement le logiciel fail2ban (il y en a d’autres !), disponible dans les dépôts. Il y a pas grand chose à faire pour le configurer, on modifie le fichier /etc/fail2ban/jail.conf, les paramètres intéressants sont les suivants :

ignoreip = 127.0.0.1/8
bantime  = 600
maxretry = 3

destemail = votre_adresse@mail.com

action = %(action_mwl)s

ignoreip permet de ne pas se faire bannir depuis le Raspberry Pi lui même, bantime est le temps de bannissement en secondes (10 minutes par défaut donc), maxretry le nombre d’échecs pour être bannit. Ensuite, destmail est l’adresse email à laquelle seront envoyés les alertes, et surtout action sera l’action en cas de bannissement. J’aime bien action_mwl qui est celle qui envoie le plus d’informations. Cette action (les autres aussi) peut  elle-même être personnalisée en éditant le fichier  /etc/fail2ban/action.d/sendmail-whois-lines.conf

Remarque : pour que l’envoi des mail se passe correctement, il vous faudra avoir correctement installé et configuré un MTA sur votre système, et j’ai déjà expliqué comment faire dans ce billet : Installation d’un serveur web (Envoi de mail)

Ne pas utiliser de mot de passe

Finalement, il est possible de ne pas utiliser de mot de passe pour se connecter, mais de passer par la génération de clé de cryptage. Cette méthode est très bien pour des installations critiques, mais je trouve que l’on perd alors en flexibilité, et je ne l’utilise personnellement pas… Je ne détaillerai donc pas ici comme procéder, mais il existe de nombreux tutoriels en ligne, par exemple : lea-linux.org : Connection_SSH_sans_mot_de_passe

Sources

Capture vidéo, compression et filigrane sous Unix

 Si vous souhaitez faire une capture vidéo de votre écran sous Unix, la commande avconv (anciennement ffmpeg) devrait probablement vous suffire. J’ai eu besoin de faire ça, et voilà comment que je me suis débrouillé.

Capture

Pour faire la capture vidéo de l’écran :

avconv -f x11grab -show_region 1 -framerate 24 -s sxga -i :0.0+350,0 -threads 2 -q 1 -bt 8000000 -b 8500000 video.avi

Les options utilisées sont les suivantes :

  • -f x11grab : pour dire que l’on capture l’écran (le serveur X)
  • -show_region 1 : pour afficher un rectangle autour de la zone de l’écran capturée
  • -framerate 24 : on capture 24 images par secondes
  • -s sxga : la zone capturée fait 1280×1024
  • -i :0.0+350,0 : le décalage (300 pixels en horizontal et 0 en vertical)
  • -threads 2 : le nombre de coeurs de votre processeur utilisés
  • -q 1 : meilleure qualité (pas de compression, ça on verra après)
  • -bt 8000000 -b 8500000 : le débit (« bitrate ») et sa tolérance, pour permettre une bonne qualité

Compression

Ensuite, pour compresser la jolie vidéo, il faut modifier l’argument q :

avconv -i video.avi -q 12 video_smaller.avi

Watermark

Pour ajouter un filigrane (« watermark ») sur la vidéo, il suffit d’une image. Prenez par exemple le logo de votre entreprise, et rendez le un peu plus discret à l’aide du Gimp par exemple, avec les deux transformations suivantes :

  • Couleurs > Niveaux > Niveaux de sortie : augmenter le seuil du bas
  • Couleurs > Couleur vers alpha…

Si cette image est image.png et dans le même dossier que vos vidéos, pour l’ajouter en sur-impression à la vidéo :

avconv -i video.avi -vf "movie=image.png [watermark]; [in][watermark] overlay=main_w/2-overlay_w/2:main_h/2-overlay_h/2 [out]" -q 12 video_watermark.avi

J’ai gardé l’argument -q 12 pour compresser la vidéo en même temps, et j’ai ajouté l’argument -vf, qui est assez compliqué… Si j’ai bien compris, la partie movie=image.png [watermark]; définie un calque à ajouter et le nomme watermark, puis la seconde partie [in][watermark] overlay=main_w/2-overlay_w/2:main_h/2-overlay_h/2 [out] permet d’ajouter ce calcque. Le overlay permet de positionner l’image, et les nom main_w, main_h, overlay_w et overlay_h correspondent respectivment aux largeurs et hauteurs de la vidéo et de l’image. Si vous avez suivi, notre filigrane sera donc centrée !  Mais si vous voulez par exemple la positionner en haut à gauche, il faut utiliser overlay=0:0

Démo !

Je fais à la fois la capture, le filigrane et la compression. La commande exacte est la suivante :

avconv -f x11grab -show_region 1 -framerate 24 -s 1280x900 -i :0.0+0,105 -vf "movie=me.png [watermark]; [in][watermark] overlay=main_w/2-overlay_w/2:main_h/2-overlay_h/2 [out]" -threads 2 -q 12 -bt 8000000 -b 8500000 demo_blog.flv

Ok, ça fait un peu narcissique de se mettre en filigrane mais c'est la première image que j'avais sous la main !

Sources