Table des matières de l'article :
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 socat
peuvent être liés, y compris :
- Déposez votre dernière attestation
- 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 socat
a 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 socat
trè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 (
su
echroot
) 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 socat
pour 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, socat
transfère les données entre STDIO (-) et une connexion TCP4 vers le port 80 sur un hôte nommé www.example.com.
2. Utilisation socat
comme redirecteur de port TCP :
Pour une seule connexion, saisissez :
# socat TCP4-LISTEN:81 TCP4:192.168.1.10:80
Pour plusieurs connexions, utilisez le fork
option 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, socat
le crée. L'option reuseaddr
permet 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, socat
transfère les données de l'adresse stdin
multidiffusion 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
Socat
est un excellent outil de dépannage. Il est également utile pour établir facilement des connexions à distance. En gros, je l'ai utilisé socat
pour les connexions MySQL distantes. Dans l'exemple ci-dessous, je montre comment socat
connecter 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 socat
et 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.sock
et cela donne l'impression qu'il s'agit d'un serveur local.
Conclusions
socat
c'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.