Linux : Sécuriser les échanges réseau

08 mai 2014 rdorigny 0 commentaires

Avec l'affaire Snowden et les révélations sur les écoutes de la NSA, il devient évident que tous nos échanges sont exploités voir sauvegardés par des organismes gouvernementaux pour des raisons diverses et variées. Je ne m’édenterais pas sur ce sujet, mais simplement il comment faire pour sécuriser les échanges réseaux?

Et bien, il suffit d'utiliser des protocoles sécurisés ou des mécanismes de chiffrement comme le tunnel SSH ou le VPN.

1) Sécuriser les transfert FTP

Le protocole FTP est fait pour échanger des fichiers (File Transfer Protocol). Mais il s'agit d'un vieux protocole qui n'est pas sécurisé, les mots de passe en clair! Il existe désormais le protocole FTPS (S pour sécurisé) qui utilise un chiffrement pour protéger les données échangées. Sous Linux, vous pouvez utiliser l'application VsFTPd pour utiliser le protocole FTPS. Sous Debian, cette application n'est pas native, vous pouvez l'installer par la commande apt-get install vsftpd.

Cette application est produite par Chris Evans, chargé de la sécurité autour de Chrome chez Google. Le fichier de configuration est /etc/vsftpd.conf et pour une fois il est très bien documenté! Avec un quelques notions d'anglais, il suffit de le suivre pour retenir les quelques paramètres intéressants. Globalement, pour forcer un utilisateur à se connecter en utilisant un mot de passe vous pouvez utiliser cet exemple:
listen=YES anonymous_enable=NO local_enable=YES write_enable=YES xferlog_file=YES ftpd_banner=/etc/ma_banniere chroot_local_user=YES

2) Utilisation de SSH

2.1) Généralités

SSH pour Secure Shell, est un protocole et également un ensemble d'outils (comme ssh, sftp, scp, ...) qui permet des communications sécurisés. La suite d'outil la plus complète dans ce domaine est l'openssh. Il ne faut confondre SSH et SSL/TLS (TLS est l'autre nom de SSL, créé par Netscape sous le nom SSL et normalisé par l'IETF sous le nom TLS). SSL est un protocole de chiffrement orienté autour de https, alors que SSH permet de chiffrer des tunnels est donc du FTP, HTTP, ... SSL/TLS permet de sécuriser le transport d'informations via le Web, et SSH est une véritable plate-forme de sécurisation pour toutes formes de communications électroniques.

Le tunnel SSH est un mécanisme qui permet le déport d'un port d'un service généralement distant. Il y a encapsulation des trames dans un canal sécurisé communément appelé tunnel. Cela permet de communiquer sur le port de votre choix et de rendre intelligible l'échange. Il suffit de choisir un port non filtré par le firewall de votre entreprise pour communiquer ni vu ni connu.

2.2) Créer un tunnel SSH

Voyons comment créer un tunnel entre deux stations linux. Il y a globalement trois méthodes:
  • Option -L : pour le déport local, permet de rediriger un port distant vers une destination (host) locale,
  • Option -R (Remote) : pour le déport distant, permet de rediriger un port local vers une destination distante,
  • Option -D : déport dynamique pour un transfert de port dynamique basé sur SOCKS.

  • Mais concrètement, comment faire un tunnel entre deux stations Linux? Tout d'abord, il faut activer le service sshd sur vos deux stations par la commande service sshd start. Prenons l'exemple, d'un serveur web sous Linux et d'une station cliente Linux, pour créer un tunnel il suffit de taper la commande au format ci dessous:
    ssh -L port_local:adresse_locale:port_distant user@adresse_server_distant

    Par exemple, j'ai tapé :
    ssh -L 4321:127.0.0.1:80 root@192.168.73.74

    Ensuite, il suffit de taper dans le navigateur de ma station cliente l'url : localhost:4321 .

    2.3) Echange de clés

    Lors de la première connexion, la station indique qu'elle ne connait pas la clé publique du serveur et propose de la sauvegarder. Les clés publiques sont sauvegardés sous /home/user/.ssh/know_hosts.

    Mais ce qui est intéressant avec SSH, c'est de créer une clé, de la publier sur le serveur et de communiquer avec. Voyons comment faire :
  • 1) Créer une clé privée et une clé publique sur la station cliente par ssh-keygen -t rsa, on peut également choisir un chiffrement dsa. Lors de la création, une passphrase est demandée. Les clés sont stockés sous /root/.ssh/ avec les noms id_rsa pour la clé privée et id_rsa.pub pour la clé publique,
  • 2) Exporter la clé publique sur le serveur par ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.73.74. La clé publique sera stockée sur le serveur sous /root/.ssh/authorized_keys,
  • 3) Pour se connecter en SSH, il faudra faire un ssh root@192.168.73.74.
  • 4) Et pour faire un tunnel, on tape toujours ssh -L 4321:127.0.0.1:80 root@192.168.73.74. Pour se connecter, il suffira de taper la passphrase, et le chiffrement se fera avec la clé échangée.
  • 3)Créer un VPN

    3.1) Généralités

    Le fonctionnement du VPN est très différent. Cela revient à tirer un câble entre le LAN du serveur VPN et entre votre station. En fait, le VPN vous permet d'obtenir une adresse IP du réseau distant du serveur. Le VPN sécurise également l'échange en créant un tunnel et donc une encapsulation des trames qui seront chiffrées à l'intérieur.

    3.2) Création d'un canal non sécurisé

    La première étape dans la mise en oeuvre d'un VPN est de créer un canal sans chiffrement. Il suffit de deux machines pour tester notre canal (un client et un serveur), en théorie le serveur VPN ouvre le canal sur le LAN des serveurs/services métiers. Je n'ai pas de serveur pour ce test, on se contentera de pinguer l'interface virtuelle du tunnel.

    La première étape consiste à installer openvpn par apt-get install openvpn ou yum install openvpn selon votre distribution. Ensuite on créé un fichier de configuration par touch /etc/openvpn/openvpn-client.conf sur la station cliente. Dans le fichier, vous pouvez ajouter :
    ifconfig 12.1.0.1 12.0.0.1 remote 192.168.66.14 1234 dev tun port 1234 proto udp

    De même pour le serveur :
    ifconfig 12.0.0.1 12.1.0.1 dev tun port 1234 proto udp user nobody group nobody

    Ensuite il suffit de lancer l'application avec la commande (si le service est lancé, faire un service openvpn stop):
  • pour le client : openvpn --config /etc/openvpn/openvpn-client.conf
  • pour le serveur : openvpn --config /etc/openvpn/openvpn-server.conf

  • Le canal est créé entre deux interfaces virtuelles du tunnel. Sur le client, on observe une interface tun0.
    Deux précisions importantes:
  • Le VPN agit comme un routeur, il ajoute une route dans la table de routage du cache réseau la route du réseau VPN sur la station cliente et serveur (voir ci-dessus). Il faudra activer le routage dans le fichier /etc/sysctl.conf en inscrivant net.ipv4.ip_forward=1,
  • Attention, ne faites pas comme moi, pensez à bien reconfigurer votre paramétrage du firewall sur le serveur. Moi, j'ai perdu une heure avant de comprendre mon erreur...

  • Pour tester le canal, il suffit alors de pinguer les interfaces virtuelles tun0 par ping 12.0.0.1 et ping 12.1.0.1 selon si vous êtes sur le serveur ou sur le client.

    3.3) Création d'un canal sécurisé par une clé statique

    Pour générer la clé, il suffit de taper la commande openvpn --genkey --secret macle. Ensuite, il faut copier la clé par scp macle A.B.C.D:/etc/openvpn. Ensuite les fichiers de configuration sont à modifier comme ci-dessous. Pour le serveur:
    ifconfig 12.0.0.1 12.1.0.1 dev tun secret /etc/openvpn/macle port 1234 proto udp user nobody group nobody

    Et pour le client :
    ifconfig 12.1.0.1 12.0.0.1 remote 192.168.66.14 1234 secret /etc/openvpn/macle dev tun proto udp

    3.4) Création d'un canal SSL VPN

    Pour cela je vous conseille l'article http://mathieu-androz.developpez.com/articles/linux/vpn/. Il suffit de suivre ce qui est indiqué.

    Globalement, il faut suivre la séquence suivante:
  • 1) copiez le répertoire /usr/share/doc/openvpn/example/easy-rsa sous /etc/openvpn
  • 2) editez /etc/openvpn/easy-rsa/vars et modifiez les variables export sur la fin de fichiers pour préparer la génération des clés
  • 3) tapez la commande source ./vars
  • 4) tapez la commande ./clean-all
  • 5) tapez la commande ./build-ca
  • 6) tapez la commande ./build-key-server myvpnsrv pour générer les clés du serveur et ./build-key-server myvpnclt pour générer les clés du client
  • 7) tapez la commande ./build-dh
  • 8) Les clés ont été créés sous /etc/openvpn/easy-rsa/keys, il suffit de créer serveur.conf et de modifier le fichier de configuration en reprenant les indications du site développez.com
  • 9) Pour lancer openvpn manuellement, tapez la commande openvpn --config /etc/openvpn/serveur.conf
  • 10) copiez les clés sur le client, créez un fichier client.conf et lancer le client.

  • Conclusion

    Voila, nous avons vu quelques méthodes pour sécuriser vos échanges de données. Enfin, pour un échange ponctuel entre deux stations Linux, SSL propose la commande scp qui est à employer sans modération! (exemple : scp monfic.txt 192.168.0.1:/etc/openvpn)







    Pseudonyme (obligatoire) :
    Adresse mail (obligatoire) :
    Site web :




    © 2017 www.doritique.fr par Robert DORIGNY