Webinaire ouvert: «SSH / NC / Socat: trucs et astuces»

Bonne journée à tous!

La semaine prochaine, nous lançons le prochain groupe Linux Administrator , dans le cadre duquel nous avons organisé un certain nombre d'événements. L'un d'eux est une leçon ouverte sur le sujet «SSH / NC / Socat: trucs et astuces». Nous y avons rappelé ce qu'est ssh, son histoire et sa mission. Nous avons examiné diverses options pour son utilisation: transfert de port local à distance, copie sécurisée, proxy de chaussettes, proxy inverse. Nous avons en fait essayé les utilitaires nc et socat dans un laboratoire virtuel.

Le webinaire a été organisé par l'administrateur système expérimenté Vladimir Drozdetsky , développeur d'infrastructure chez letundra.com, exposcan.ru, crispmessenger.com.

Nous portons à votre attention une description détaillée de l'événement passé.


Rappelez-vous ce qu'est SSH

SSH (Secure Shell) est un «shell sécurisé», un protocole réseau au niveau de l'application. Il vous permet de contrôler à distance le système d'exploitation et de tunneler les connexions TCP (par exemple, pour transférer des fichiers). Dans sa fonctionnalité, SSH est similaire aux protocoles Telnet et rlogin, cependant, il en diffère car il crypte tout le trafic, y compris les mots de passe transmis. La spécification du protocole SSH-2 est contenue dans la RFC 4251.

Examinons les diverses utilisations de SSH, à la fois standard et non standard. Le stand suivant nous y aidera:



Le stand présente quatre machines virtuelles situées derrière le pare-feu. Nous effectuerons toutes les actions de la machine Node-1.

Création d'une clé SSH

Pour utiliser la clé SSH, vous devez d'abord la créer. Pour cela, un utilitaire spécial convient, qui est absolument dans n'importe quelle distribution Linux:

ssh-keygen -t RSA -N otuslinux -f ~/.ssh/otus 

  • -t - quel algorithme de chiffrement utiliser;
  • -N - clé de chiffrement (un argument pratique si vous avez besoin de créer une clé sans chiffrement et des réponses à diverses requêtes ssh-keygen);
  • -f - dans quel fichier enregistrer la clé.

Paramètres SSH ssh-server

Pour poursuivre le travail, vous devrez modifier le fichier / etc / ssh / sshd_config et redémarrer le serveur ssh. Ici, vous devez faire attention aux options suivantes:

RSAAuthentication yes (si l'authentification RSA est autorisée);
PubkeyAuthentication yes (si l'authentification par clé est autorisée);
AuthorizedKeysFile %h/.ssh/authorized_keys (chemin d'accès à la partie publique de la clé);
PasswordAuthentication yes (si l'authentification est autorisée).

Pour copier la clé sur le serveur, procédez comme suit:

ssh-copy-id -i /path/to/pub/key user@server (copiez la partie publique de la clé sur le serveur distant, la clé publique sera copiée le long du chemin vers le fichier% h / .ssh / authorized_keys)

Afin de ne pas saisir à nouveau la clé de cryptage lors de la connexion à un serveur distant, nous pouvons utiliser ssh-agent. Pour ce faire:

eval $(ssh-agent -s) (eval fait partie de POSIX. Son interface peut également être un shell. La clé de l'agent sera stockée sous forme déchiffrée).

ssh-add ~/.ssh/our_private_key (Ajouter une clé privée).

Dans ce cas:

  • -i - indique l'emplacement de la clé publique;
  • utilisateur - nom d'utilisateur sur le serveur distant;
  • serveur - ip ou dns du serveur cible.

Pour faciliter la connexion à un serveur distant, nous pouvons décrire les paramètres de connexion dans le fichier de configuration ssh, qui se trouve sur le chemin ~ / .ssh / config

Ainsi, nous obtenons le fichier de configuration SSH suivant:

 Host myserver HostName ip/hostname Port 22/??? User username IdentityFile ~/.ssh/id_rsa 

Ici, tout est simple:

  • Hôte - le nom de notre connexion;
  • HostName - nom du serveur;
  • Port - port ssh
  • Utilisateur - nom d'utilisateur;
  • IdentityFile - clé ssh.

SSH SCP

Continuons. La façon la plus simple d'utiliser SSH est de copier le fichier d'une machine vers la télécommande. Pour ce faire, utilisez l'utilitaire SCP (Secure Copy Protocol). En l'utilisant, vous pouvez copier un répertoire ou un fichier d'un serveur local vers un serveur distant, ou vice versa:

scp test.txt username@server:/some/directory (Copie d'un fichier du serveur local vers le serveur distant).
scp username@server:test.txt /some/directory (Copie d'un fichier d'un serveur distant vers un serveur local).
scp -r dir_name username@server:/some/directory (Copie d'un dossier du serveur local vers la télécommande).

Ici:

  • nom d'utilisateur - nom d'utilisateur;
  • serveur - adresse du serveur;
  • / certains / serveur - le répertoire où nous copions;
  • dir_name - nom du dossier;
  • -r - utiliser récursivement.

Tunnel SSH, proxy

Examinons maintenant l'option de transfert d'un port avec une télécommande vers la machine locale. Prenons l'exemple classique, c'est-à-dire un tas quand nous avons un «gardien de sécurité maléfique» et un serveur avec une application Web, les ports ssh et https regardent le monde et nous voulons vraiment nous connecter au serveur MySQL.

Donc:

ssh -f -N -L 9906:127.0.0.1:3306 user@server (Juste notre cas avec MySQL)

En conséquence, nous pouvons nous connecter au port local 9906 avec le client mysql et accéder à notre serveur «de sécurité».

ssh -D 8080 -q -C -N -f servername (proxy de trafic via SOCKS via le port 8080)

Avec cette commande, nous créons un serveur proxy socks5 en utilisant ssh. Pour vérifier ses performances, nous pouvons utiliser la commande suivante:

 curl -x socks5h://server-with-proxy:8080 https://test.domain 

Un exemple classique de redirection de port à l'aide de ssh est lorsque le serveur auquel vous souhaitez vous connecter se trouve derrière le nat. La commande suivante nous aidera à nous connecter à un tel serveur:

ssh -f -N -R 2255:localhost:22 username@servername (transfert d'un serveur distant vers un serveur local).

Sur le serveur distant, le port 2255 s'ouvrira, qui sera redirigé vers le port 22 de notre serveur pour le nat. Pour se connecter à un tel serveur, nous pouvons utiliser la commande:

 ssh -p 2255 username@localhost 

Veuillez noter que:

  • -f - envoie ssh en arrière-plan;
  • -N - n'exécute pas la commande sur l'hôte distant;
  • -L - transmettre le port local (port local: machine locale: port distant);
  • -R - port sur la machine distante;
  • -q - mode silencieux;
  • -D - définit le routage dynamique local des ports de niveau application;
  • -C - demande de compression de données.

Netcat (nc)

Notre prochain arrêt est Netcat, un utilitaire Unix qui vous permet d'établir des connexions TCP et UDP, de recevoir des données à partir de là et de les transférer. Malgré son utilité et sa simplicité, cet utilitaire n'est inclus dans aucune norme et n'est fourni avec aucun kit de distribution. En conséquence, il doit être installé à la main.

L'une des fonctionnalités intéressantes de Netcat (nc) est la possibilité de scanner les ports:

nc -vn ipaddress 22 (balayage à port unique);
nc -v ipaddress 10-55 (balayage de la plage de ports);
nc -l 4444 (ouvrir et écouter le port 4444);
nc servername 4444 (nous nous connectons au serveur sur le port souhaité).

Après avoir ouvert le port et s'y être connecté, nous obtenons une petite salle de discussion réseau =).

Ensuite, nous considérons la possibilité de transférer des fichiers à l'aide de l'utilitaire nc. Pour ce faire, la commande suivante nous aidera:

cat test_file | pv -b | nc -l 4444 cat test_file | pv -b | nc -l 4444 (ouvrez le port et transférez-y le fichier via le canal, l'utilitaire pv avec le commutateur -b est utilisé pour afficher la progression du transfert de fichier en octets).

nc servername 4444 | pv -b > filename nc servername 4444 | pv -b > filename (nous nous connectons au serveur pour recevoir le fichier, pv -b est utilisé de la même manière).

Nous pouvons compliquer notre pipe en ajoutant l'archivage de fichiers à la volée:

tar -czf - /path/to/ | pv -b | nc -l 4444 tar -czf - /path/to/ | pv -b | nc -l 4444 (archivage des dossiers à la volée et envoi);
n c servername 4444 | pv -b > file.tar.gz c servername 4444 | pv -b > file.tar.gz (obtenez l'archive envoyée).

Une caractéristique peu évidente de nc est de créer juste un serveur http.

 while true; do nc -lp 80 < index.html; done 

Veuillez noter que pour utiliser le port 80, vous devez disposer des privilèges root.

Notez également que:

  • -l - indique le mode de fonctionnement de l'écoute;
  • -n - n'utilise pas les requêtes DNS;
  • -v - sortie détaillée.

Socat

C'est également un utilitaire utile qui vous permet d'établir des connexions TCP entre machines, ports de transfert, etc. Il fonctionne sur le principe de Netcat: il ouvre deux connexions bidirectionnelles, il peut transférer des données, des flux, etc. Cependant, il a une caractéristique intéressante. Par exemple, en utilisant Socat, nous pouvons mapper les ports COM aux ports TCP, etc.

Exemples de travaux Socat:

socat -u FILE:file_name TCP-LISTEN:5778,reuseaddr # send file;
socat -u TCP:192.168.1.48:5778 STDOUT | pv -r > file_name socat -u TCP:192.168.1.48:5778 STDOUT | pv -r > file_name # get file;
socat TCP-LISTEN:80,fork TCP:ubuntunode-4:80 # redirige le port du serveur distant vers le port local;
socat TCP-LISTEN:1234,reuseaddr EXEC:/bin/bash # Open remote shell =);
socat - TCP:server_with_remote_shell:1234 # Connectez-vous au shell distant du serveur distant.

Petit déchiffrement:

  • -u - utilisation du mode unidirectionnel;
  • FICHIER - indique que nous utilisons le fichier;
  • TCP-LISTEN - écoute le port TCP;
  • reuseaddr - permet à d'autres sockets de communiquer avec la même adresse, même si elle est utilisée;
  • fork - une fois la connexion établie, le canal est traité dans le processus enfant;
  • TCP est le type de connexion.

Dois-je regarder la version vidéo maintenant?

Bien sûr, oui, car dans la description, tout est présenté de manière abstraite. De plus, les sujets du webinaire sont décrits plus en détail, et certains d'entre eux fournissent des exemples supplémentaires et des options de mise en œuvre. Ainsi, si vous êtes intéressé par ce sujet, regardez l'intégralité de la leçon ouverte et répétez toutes les étapes pour Vladimir Drozdetsky pour une assimilation maximale du matériel. Et n'oubliez pas de laisser vos commentaires.

À notre tour, nous ne disons pas au revoir et vous invitons au cours Administrateur Linux !

Source: https://habr.com/ru/post/fr437114/


All Articles