6 juillet 2022

Introduction à socat, un outil de transfert polyvalent pour Linux

Si vous avez besoin d'un outil d'administration système avancé pour votre boîte à outils, c'est celui-là. Socat permet des transferts de données bidirectionnels d'un emplacement à un autre.

SocatLinux

Socat c'est utile pour connecter des applications à l'intérieur de boîtes séparées . Imaginez que vous ayez la boîte A et la boîte B et qu'à l'intérieur de la boîte A se trouve une application de serveur de base de données en cours d'exécution. De plus, la Box A est fermée au public, mais la Box B est ouverte. Notre réseau permettra une connexion de Box B à Box A.

Supposons maintenant qu'un utilisateur veuille lire le journal de la base de données. Nous ne voulons pas que l'utilisateur entre dans la case A, mais ce n'est pas grave si l'utilisateur veut entrer dans la case B.

Socat peut lier le journal de la base de données dans la boîte A avec un lecteur de texte dans la boîte B. De cette façon, l'utilisateur peut lire le journal dans la boîte B. Nous ne devons pas compromettre la sécurité de la boîte A pour que l'utilisateur puisse faire le travail.

Socat cela peut fonctionner dans les deux sens. L'utilisateur dans la zone B peut souhaiter envoyer des requêtes de base de données à l'application serveur de base de données dans la zone A. Ensuite, l'application serveur de base de données peut envoyer le résultat à l'utilisateur dans la zone B. Socat il prend également en charge la communication bidirectionnelle .

L'utilitaire socat est un relais proxy pour les transferts de données bidirectionnels entre deux canaux de données indépendants.

Il existe de nombreux types de canaux différents qui socatpeuvent être liés, y compris :

  • Fichier
  • Taille du tuyau
  • Appareils (ligne série, pseudo-terminal, etc.)
  • Socket (UNIX, IP4, IP6 - RAW, UDP, TCP)
  • Prise SSL
  • Connexions proxy CONNECT
  • Descripteurs de fichiers (stdin, etc.)
  • L'éditeur de ligne GNU (readline)
  • Programmes
  • Combinaisons de deux d'entre eux

Cet outil est considéré comme la version améliorée de netcat. Ils font des choses similaires, mais socata plus de fonctionnalités supplémentaires, telles que permettre à plusieurs clients d'écouter sur un port ou de réutiliser les connexions.

Pourquoi avons-nous besoin de Socat ?

Il existe de nombreuses façons de l'utiliser dans socattrès efficacement.

Voici quelques exemples:

  • Redirection de port TCP (one-shot ou démon)
  • Prise externe
  • Outil pour attaquer les pare-feux faibles (sécurité et audit)
  • Interface shell pour les sockets Unix
  • Relais IP6
  • Rediriger les programmes orientés TCP vers une ligne série
  • Connecter logiquement des lignes série sur différents ordinateurs
  • Établir un environnement relativement sûr ( sue chroot) pour exécuter des scripts shell client ou serveur avec des connexions réseau

Comment utilisons-nous socat?

La syntaxe de socatè abbastanza semplice :

socat [options] <address> <address>

Vous devez fournir les adresses source et de destination pour que cela fonctionne. La syntaxe de ces adresses est :

protocol:ip:port

Exemples d'utilisation de socat

Commençons par quelques exemples d'utilisation de base socatpour diverses connexions.

1. Connectez-vous au port TCP 80 sur le système local ou distant :

# socat - TCP4:www.example.com:80

Dans ce cas, socattransfère les données entre STDIO (-) et une connexion TCP4 vers le port 80 sur un hôte nommé www.example.com.

2. Utilisation socatcomme redirecteur de port TCP :

Pour une seule connexion, saisissez :

# socat TCP4-LISTEN:81 TCP4:192.168.1.10:80

Pour plusieurs connexions, utilisez le forkoption utilisée dans les exemples suivants :

# socat TCP4-LISTEN:81,fork,reuseaddr TCP4:TCP4:192.168.1.10:80

Cet exemple écoute sur le port 81, accepte les connexions et transmet les connexions au port 80 sur l'hôte distant.

# socat TCP-LISTEN:3307,reuseaddr,fork UNIX-CONNECT:/var/lib/mysql/mysql.sock 

L'exemple ci-dessus écoute sur le port 3307, accepte les connexions et transmet les connexions à un socket Unix sur l'hôte distant.

3. Implémentez un simple collecteur de messages basé sur le réseau :

# socat -u TCP4-LISTEN:3334,reuseaddr,fork OPEN:/tmp/test.log,creat,append

Dans cet exemple, lorsqu'un client se connecte au port 3334, un nouveau processus enfant est généré. Toutes les données envoyées par les clients sont ajoutées au fichier /tmp/test.log. Si le fichier n'existe pas, socatle crée. L'option reuseaddrpermet un redémarrage immédiat du processus serveur.

4. Envoyez une diffusion sur le réseau local :

# socat - UDP4-DATAGRAM:224.255.0.1:6666,bind=:6666,ip-add-membership=224.255.0.1:eth0

Dans ce cas, socattransfère les données de l'adresse stdinmultidiffusion spécifiée à l'aide d'UDP sur le port 6666 pour les connexions locales et distantes. La commande indique également à l'interface eth0 d'accepter les paquets multicast pour le groupe donné.

Utilisations pratiques de socat

Socatest un excellent outil de dépannage. Il est également utile pour établir facilement des connexions à distance. En gros, je l'ai utilisé socatpour les connexions MySQL distantes. Dans l'exemple ci-dessous, je montre comment socatconnecter mon application Web à un serveur MySQL distant en me connectant via une prise locale.

1. Sur mon serveur MySQL distant, je saisis :

# socat TCP-LISTEN:3307,reuseaddr,fork UNIX-CONNECT:/var/lib/mysql/mysql.sock &

Cette commande le lance socatet le configure pour écouter en utilisant le port 3307.

2. Sur mon serveur Web, je saisis :

# socat UNIX-LISTEN:/var/lib/mysql/mysql.sock,fork,reuseaddr,unlink-early,user=mysql,group=mysql,mode=777 TCP:192.168.100.5:3307 &

La commande ci-dessus se connecte au serveur distant 192.168.100.5 en utilisant le port 3307.

Cependant, toutes les communications se feront sur le socket Unix /var/lib/mysql/mysql.socket cela donne l'impression qu'il s'agit d'un serveur local.

Conclusions

socatc'est un utilitaire sophistiqué et en fait un excellent outil pour tout administrateur système pour faire avancer les choses et pour le dépannage.

Vous avez des doutes ? Vous ne savez pas par où commencer ? Contactez-nous !

Nous avons toutes les réponses à vos questions pour vous aider à faire le bon choix.

Discute avec nous

Discutez directement avec notre support avant-vente.

0256569681

Contactez-nous par téléphone pendant les heures de bureau 9h30 - 19h30

Contactez-nous en ligne

Ouvrez une demande directement dans l'espace contact.

AVIS DE NON-RESPONSABILITÉ, Mentions légales et droits d'auteur. Red Hat, Inc. détient les droits sur Red Hat®, RHEL®, RedHat Linux® et CentOS® ; AlmaLinux™ est une marque commerciale de la AlmaLinux OS Foundation ; Rocky Linux® est une marque déposée de la Rocky Linux Foundation ; SUSE® est une marque déposée de SUSE LLC ; Canonical Ltd. détient les droits sur Ubuntu® ; Software in the Public Interest, Inc. détient les droits sur Debian® ; Linus Torvalds détient les droits sur Linux® ; FreeBSD® est une marque déposée de la Fondation FreeBSD ; NetBSD® est une marque déposée de la Fondation NetBSD ; OpenBSD® est une marque déposée de Theo de Raadt ; Oracle Corporation détient les droits sur Oracle®, MySQL®, MyRocks®, VirtualBox® et ZFS® ; Percona® est une marque déposée de Percona LLC ; MariaDB® est une marque déposée de MariaDB Corporation Ab ; PostgreSQL® est une marque déposée de PostgreSQL Global Development Group ; SQLite® est une marque déposée de Hipp, Wyrick & Company, Inc. ; KeyDB® est une marque déposée d'EQ Alpha Technology Ltd. ; Typesense® est une marque déposée de Typesense Inc. ; REDIS® est une marque déposée de Redis Labs Ltd ; F5 Networks, Inc. détient les droits sur NGINX® et NGINX Plus® ; Varnish® est une marque déposée de Varnish Software AB ; HAProxy® est une marque déposée de HAProxy Technologies LLC ; Traefik® est une marque déposée de Traefik Labs ; Envoy® est une marque déposée de CNCF ; Adobe Inc. détient les droits sur Magento® ; PrestaShop® est une marque déposée de PrestaShop SA ; OpenCart® est une marque déposée d'OpenCart Limited ; Automattic Inc. détient les droits sur WordPress®, WooCommerce® et JetPack® ; Open Source Matters, Inc. détient les droits sur Joomla® ; Dries Buytaert détient les droits sur Drupal® ; Shopify® est une marque déposée de Shopify Inc. ; BigCommerce® est une marque déposée de BigCommerce Pty. Ltd.; TYPO3® est une marque déposée de la TYPO3 Association; Ghost® est une marque déposée de la Ghost Foundation; Amazon Web Services, Inc. détient les droits sur AWS® et Amazon SES® ; Google LLC détient les droits sur Google Cloud™, Chrome™ et Google Kubernetes Engine™ ; Alibaba Cloud® est une marque déposée d'Alibaba Group Holding Limited ; DigitalOcean® est une marque déposée de DigitalOcean, LLC ; Linode® est une marque déposée de Linode, LLC ; Vultr® est une marque déposée de The Constant Company, LLC ; Akamai® est une marque déposée d'Akamai Technologies, Inc. ; Fastly® est une marque déposée de Fastly, Inc. ; Let's Encrypt® est une marque déposée d'Internet Security Research Group ; Microsoft Corporation détient les droits sur Microsoft®, Azure®, Windows®, Office® et Internet Explorer® ; Mozilla Foundation détient les droits sur Firefox® ; Apache® est une marque déposée de The Apache Software Foundation ; Apache Tomcat® est une marque déposée de The Apache Software Foundation ; PHP® est une marque déposée de PHP Group ; Docker® est une marque déposée de Docker, Inc. Kubernetes® est une marque déposée de The Linux Foundation ; OpenShift® est une marque déposée de Red Hat, Inc. ; Podman® est une marque déposée de Red Hat, Inc. ; Proxmox® est une marque déposée de Proxmox Server Solutions GmbH ; VMware® est une marque déposée de Broadcom Inc. ; CloudFlare® est une marque déposée de Cloudflare, Inc. ; NETSCOUT® est une marque déposée de NETSCOUT Systems Inc. ; ElasticSearch®, LogStash® et Kibana® sont des marques déposées d'Elastic NV ; Grafana® est une marque déposée de Grafana Labs ; Prometheus® est une marque déposée de The Linux Foundation ; Zabbix® est une marque déposée de Zabbix LLC ; Datadog® est une marque déposée de Datadog, Inc. ; Ceph® est une marque déposée de Red Hat, Inc. ; MinIO® est une marque déposée de MinIO, Inc. ; Mailgun® est une marque déposée de Mailgun Technologies, Inc. ; SendGrid® est une marque déposée de Twilio Inc. Postmark® est une marque déposée d'ActiveCampaign, LLC ; cPanel®, LLC détient les droits sur cPanel® ; Plesk® est une marque déposée de Plesk International GmbH ; Hetzner® est une marque déposée de Hetzner Online GmbH ; OVHcloud® est une marque déposée d'OVH Groupe SAS ; Terraform® est une marque déposée de HashiCorp, Inc. ; Ansible® est une marque déposée de Red Hat, Inc. ; cURL® est une marque déposée de Daniel Stenberg ; Facebook®, Inc. détient les droits sur Facebook®, Messenger® et Instagram®. Ce site n'est pas affilié, sponsorisé ou autrement associé à l'une des entités mentionnées ci-dessus et ne représente aucune de ces entités de quelque manière que ce soit. Tous les droits sur les marques et noms de produits mentionnés sont la propriété de leurs titulaires respectifs des droits d'auteur. Toutes les autres marques mentionnées sont la propriété de leurs titulaires respectifs.

JUSTE UN MOMENT !

Vous êtes-vous déjà demandé si votre hébergement était nul ?

Découvrez dès maintenant si votre hébergeur vous pénalise avec un site web lent digne des années 1990 ! Résultats immédiats.

Fermer le CTA
Retour en haut de page