jeudi, 16 janvier 2014

Raspberry-pi : Le tout a distance!

00FA000001473574-photo-dossier-secu-securite-informatique.jpgSi vous possédez un pi ou un serveur, il y a surement une question qui a du vous traverser: comment utiliser les programmes quand vous n'êtes pas chez vous?

Mais qui dit accès a distance, posera des problèmes de sécurité, pour ma part la meilleur façon et la plus sécurisée est de faire tout en local, mais des fois c'est pas possible.

Alors il y a plusieurs solutions pour interagir a distance avec un système. Au début j'utilisais le bot google Talk il me permet de lancer une commande, via le chat google, même si je suis pas chez moi, par exemple au boulot Gmail fonctionne donc le chat intégré a gmail me permet de reboot le Pi a distance ou de lancer un script ou programme mais le bot bug quand un script est lancé et que celui ci n'est pas fini. Donc pour plus de simplicité, je me suis retourné vers putty et RealVNC sur mon pc portable et "Juice SSH" et "VNC Viewer" sur mon Samsung GS4, pour faire du VNC et SSH, qui est plus simple pour moi pour envoyer mes commandes. Les programmes sont vraiment top, car j'ai pu enregistrer 2 config, une en local ou ça renvoit vers 192.168.1.33 avec le port 22 pour SSH et port 1 pour VNC et une config pour l’extérieur ou ça renvoit vers mon nom de domaine que le no ip du raspberry pi met a jour.

Ceci dit d'autres services nécessitent d'autres accès qu'un simple lancement de programme, mais ont une interface accessible depuis l'internet, comme par exemple transmission et la le port forwarding devra être fait pour que l'on puisse accéder a l'interface depuis n'importe quel pc connecté a internet..


Le port forwarding

Pour accéder a distance, il faut d'abord savoir quel port utilise les services, soit google est votre ami pour trouver le port en question, soit lorsque vous avez configuré le programme il vous l'a demandé.

En local pour ceux qui ont suivis mes tutos on utilise le port 8765 pour JD1, le port 9091 pour transmission, le port 81 pour le web, le port 22 pour ssh, le port 5901 pour le vnc. Voici un exemple de ce que serais la configuration basique.

routage,port,forwarding,bbox2,vnc,ssh,transmission,noip,ip fixe,securité,fail2ban,raspberry,pi,rpiDonc pour ceux qui voudrais utiliser ces services en dehors de chez eux, il va y avoir plusieurs choses a faire, pour commencer, vous devez avant tout mettre une adresse IP fixe a votre raspberry pi, car au sinon ça va pas trop aller car au premier redémarrage de votre routeur, le routage des ports ne servira plus a rien.

Une fois l'ip fixée il faut ouvrir le port correspondant qui va vers votre raspberry pi, pour ma part je suis chez Belgacom avec un BBOX2, le fournisseur bloque les ports 21, 80 et 443 par défaut, donc ici je vais expliquer pour un bbox 2, mais voici un site qui explique pour les autres types de routeurs : Portforward.com  , le site est un peu difficile a comprendre mais une fois qu'on comprend le principe, ça va tout seul.

Capture d'écran 2014-01-15 19.05.42.pngGrosso modo pour le port forward, on prend une plage de port qui entre et on le renvoit vers un port sur le pi, on choisit UDP ou TCP (moi je choisis toujours les 2 types ^^) puis on met le port qui est sur le raspberry pi et l'adresse fixe du raspberry pi. Voici un exemple pour mon raspberry pi et mon routeur.

Comme le port 80 est bloqué, je prend le port 81, ensuite je renvois vers le port 81 de mon raspberry pi (j'aurais pu mettre le port 80 sur mon pi, mais comme ça je me rappelle qu'en local ou internet c'est le même port) ensuite je met l'adresse ip de mon raspberry pi.

Une fois le port redirigé, il faut avant tout le tester, pour ma part je vais sur le site de whatismyip car ils ont de bon test de port, donc vous allez sur le bas de la page et vous inscrivez dans "port number" vous mettez le port que vous avez demandé d'ouvrir.

L'acces a distance

La plupart des fournisseurs d’accès ont des IP dynamiques, si c'est le cas, je vous conseille de suivre mon tuto pour installer No-ip sur votre serveur, l'avantage ici dans le cas ou votre IP change c'est que vous pouvez demander au no-ip de mettre a jour toutes les 5 minutes votre IP, pour ainsi directement accéder a votre pi des qu'il change d'ip, puis pour ceux qui ont une adresse ip fixe, c'est aussi plus simple a retenir Pimpmypi.no-ip.biz que une adresse ip complète.

La sécurisation

En informatique, l'on peut sécuriser de plusieurs façons un accès, restreindre les ip qui peuvent accéder, bannir en cas d’échec de mdp, mais le plus simple est avant tout de changer de port, car on utilise 65535 ports différents (2^16), ce de fait, on s'attend généralement a trouver toujours au même endroit les services, 22 pour le SSH, 21 pour le ftp, 80 pour le HTTP, bref on s'attend a ce que vous les utilisiez, donc un pirate va avoir une liste de port a tester avec les services vitaux!

La ou vous pouvez être malin, c'est de rediriger le trafic vers un autre port, par exemple pour avoir accès a mon raspberry pi je dois y aller par http://adressnoip:81, si on entre pas le port 81 impossible d'avoir accès a mon http, mais ce qui est plus fun, c'est qu'on a plus de 65.000 possibilité, donc rien ne vous empêche de mettre votre service ssh sur le port 22222, il sera plus difficile a détecter ou alors de mettre le port pour le vnc sur le 59010, en réseau local il auront toujours leur port 22, 80, 5901 mais sur l'internet le port sera celui que vous avez voulu rediriger vers le port de votre PI donc il sera plus dur a trouver pour les personnes qui n'ont pas l'information, puis une fois que le port est trouvé , faut t'il encore savoir ce qui est comme service sur le port car si vous avez mis 54322 pour le ssh, une personne ne peut pas savoir a quoi sert ce port, sauf si il essaye de se connecter avec le ssh.

VncServer

routage,port,forwarding,bbox2,vnc,ssh,transmission,noip,ip fixe,securité,fail2ban,raspberry,pi,rpiLe vnc serveur as déjà une sécurité de base, c'est qu'il est lancé en tant que pi, donc de base il ne dispose pas des droits root, d'autre part, si on rate plusieurs identifications on est automatiquement bloqué, puis on peut faire qu'un certain nombre avant d’être bloquer, ce qui permet une certaine sécurité vis a vis des connexions à distances.

Maintenant vu qu'on a pas besoin de nom d'utilisateur, l’idéal est d'avoir un mot de passe plus long que la normal (qui est généralement a 6-8 caractère), mais ce conseil est valable pour tout les autres mots de passe qui pourront être utilisé sur internet.

Fail2ban pour le SSH

Maintenant niveau sécurité, si une personne arrive a trouver votre ip ou votre no-ip, puis le port du SSH, ça risque de poser problème vu que le login par défaut du raspberry est pi ou root, un bruteforce peut facilement tout péter, On va tout simplement utilisé Fail2ban qui permet lorsque le fichier log détecte X identification ratée de bannir une IP pour X minutes, mais on peut mettre des exclusions comme le range 192.168.1.* au cas ou on aurais oublier le mdp du pi et qu'on devrais le bruteforcer.

Donc pour commencer on install Fail2ban et iptables (car sur certains pi, iptables n'est pas installer)

sudo apt-get install fail2ban
sudo apt-get install iptables

Une fois les 2 programmes installer, je vous conseil de vérifier que tout soit en ordre, pour voir si iptable fonctionne bien, taper ceci : 

sudo iptables -L

vous devriez voir un truc comme ceci

routage,port,forwarding,bbox2,vnc,ssh,transmission,noip,ip fixe,securité,fail2ban,raspberry,pi,rpi

Pour ma part, ma version du raspbian m'affichait ceci suite a un problème dans le kernel du raspberry pi

libkmod: ERROR ../libkmod/libkmod.c:554 kmod_search_moddep: could not open moddep file '/lib/modules/3.6.11+/modules.dep.bin'
iptables v1.4.14: can't initialize iptables table `filter': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

J'ai pu résoudre le problème grâce a un RPI-update

sudo rpi-update

Par défaut le service bloque le ssh et ne permet pas de ban le 127.0.0.1, mais vous pouvez modifier via la commande suivante la configuration, pouvez activer plusieurs type de ban pour différents protocoles, mais ici celui qui nous intéresse c'est le ssh, mais sur le site de fail2ban il y a toutes les explications

sudo nano /etc/fail2ban/jail.conf

Une fois le fichier modifié n'oubliez pas de relancer le service pour appliquer les changements grace a la commande 

sudo service fail2ban restart

Désormais vous pouvez profiter de vos services SSH/VNC de façon sécurisé a l’extérieur de chez vous, avec des protections contre les attaques basiques de type bruteforce.

Écrit par Viskor dans Astuces, Informatique, Raspberry-Pi, Serveur |  Facebook | |