6 Luglio 2022

Introduzione a socat, uno strumento di inoltro multiuso per Linux

Se hai bisogno di uno strumento avanzato di amministrazione di sistema per la tua cassetta degli attrezzi, questo è quello giusto. Socat consente trasferimenti di dati bidirezionali da una posizione all’altra.

Socat Linux

Socat è utile per collegare le applicazioni all’interno di scatole separate . Immagina di avere la casella A e la casella B e all’interno della casella A ci sia un’applicazione server di database in esecuzione. Inoltre il Box A è chiuso al pubblico, ma il Box B è aperto. La nostra rete consentirà una connessione dal Box B al Box A.

Ora, supponiamo che un utente voglia leggere il registro del database. Non vogliamo che l’utente entri nel Box A, ma va bene se l’utente vuole entrare nel Box B.

Socat può collegare il registro del database nella casella A con un lettore di testo nella casella B. In questo modo, l’utente può leggere il registro nella casella B. Non dobbiamo compromettere la sicurezza della casella A affinché l’utente possa fare il lavoro.

Socat può funzionare in entrambe le direzioni. L’utente nella casella B potrebbe voler inviare alcune query di database all’applicazione del server di database nella casella A. Quindi, l’applicazione del server di database potrebbe inviare il risultato all’utente nella casella B. Socat supporta anche la comunicazione bidirezionale .

L’ utility socat è un proxy relay per i trasferimenti di dati bidirezionali tra due canali di dati indipendenti.

Ci sono molti diversi tipi di canali che socatpossono essere collegati, inclusi:

  • File
  • Pipe
  • Devices (serial line, pseudo-terminal, etc)
  • Socket (UNIX, IP4, IP6 – RAW, UDP, TCP)
  • socket SSL
  • Connessioni proxy CONNECT
  • Descrittori di file (stdin, ecc.)
  • L’editor di riga GNU (readline)
  • Programmi
  • Combinazioni di due di questi

Questo strumento è considerato la versione avanzata di netcat . Fanno cose simili, ma socatha più funzionalità aggiuntive, come consentire a più client di ascoltare su una porta o riutilizzare le connessioni.

Perché abbiamo bisogno di Socat?

Ci sono molti modi per usarlo in socatin modo molto efficace.

Ecco alcuni esempi:

  • Port forwarder TCP (one-shot o demone)
  • Socket esterno
  • Strumento per attaccare i firewall deboli (sicurezza e audit)
  • Interfaccia shell per socket Unix
  • Relay IP6
  • Reindirizza i programmi orientati al TCP su una linea seriale
  • Collega logicamente linee seriali su computer diversi
  • Stabilire un ambiente relativamente sicuro ( sue chroot) per l’esecuzione di script di shell client o server con connessioni di rete

Come utilizziamo socat?

La sintassi per socatè abbastanza semplice:

socat [options] <address> <address>

È necessario fornire gli indirizzi di origine e di destinazione affinché funzioni. La sintassi per questi indirizzi è:

protocol:ip:port

Esempi di utilizzo di socat

Iniziamo con alcuni esempi di base di utilizzo socatper varie connessioni.

1. Collegarsi alla porta TCP 80 sul sistema locale o remoto:

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

In questo caso, socattrasferisce i dati tra STDIO (-) e una connessione TCP4 alla porta 80 su un host denominato www.example.com.

2. Utilizzare socatcome port forwarder TCP:

Per una singola connessione, inserisci:

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

Per connessioni multiple, utilizzare l’ forkopzione utilizzata negli esempi seguenti:

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

Questo esempio è in ascolto sulla porta 81, accetta connessioni e inoltra le connessioni alla porta 80 sull’host remoto.

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

L’esempio precedente è in ascolto sulla porta 3307, accetta connessioni e inoltra le connessioni a un socket Unix sull’host remoto.

3. Implementare un semplice raccoglitore di messaggi basato sulla rete:

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

In questo esempio, quando un client si connette alla porta 3334, viene generato un nuovo processo figlio. Tutti i dati inviati dai client vengono aggiunti al file /tmp/test.log. Se il file non esiste, socatlo crea. L’opzione reuseaddrconsente un riavvio immediato del processo del server.

4. Invia una trasmissione alla rete locale:

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

In questo caso, socattrasferisce i dati dall’indirizzo stdinmulticast specificato utilizzando UDP sulla porta 6666 sia per le connessioni locali che remote. Il comando dice anche all’interfaccia eth0 di accettare pacchetti multicast per il gruppo dato.

Usi pratici per socat

Socatè un ottimo strumento per la risoluzione dei problemi. È anche utile per effettuare facilmente connessioni remote. In pratica, l’ho usato socatper connessioni MySQL remote. Nell’esempio seguente, mostro come socatconnettere la mia applicazione Web a un server MySQL remoto connettendomi tramite il socket locale.

1. Sul mio server MySQL remoto, inserisco:

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

Questo comando lo avvia socate lo configura per l’ascolto utilizzando la porta 3307.

2. Sul mio web server inserisco:

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

Il comando precedente si connette al server remoto 192.168.100.5 utilizzando la porta 3307.

Tuttavia, tutte le comunicazioni verranno eseguite sul socket Unix /var/lib/mysql/mysql.socke questo fa sembrare che si tratti di un server locale.

Conclusioni

socatè un’utilità sofisticata e in effetti uno strumento eccellente per ogni amministratore di sistema per fare le cose e per la risoluzione dei problemi.

Hai dei dubbi? Non sai da dove iniziare? Contattaci !

Abbiamo tutte le risposte alle tue domande per aiutarti nella giusta scelta.

Chatta con noi

Chatta direttamente con il nostro supporto prevendita.

0256569681

Contattaci telefonicamente negli orari d’ufficio 9:30 – 19:30

Contattaci online

Apri una richiesta direttamente nell’area dei contatti.

DISCLAIMER, Note Legali e Copyright. Red Hat, Inc. detiene i diritti su Red Hat®, RHEL®, RedHat Linux®, e CentOS®; AlmaLinux™ è un marchio di AlmaLinux OS Foundation; Rocky Linux® è un marchio registrato di Rocky Linux Foundation; SUSE® è un marchio registrato di SUSE LLC; Canonical Ltd. detiene i diritti su Ubuntu®; Software in the Public Interest, Inc. detiene i diritti su Debian®; Linus Torvalds detiene i diritti su Linux®; FreeBSD® è un marchio registrato di The FreeBSD Foundation; NetBSD® è un marchio registrato di The NetBSD Foundation; OpenBSD® è un marchio registrato di Theo de Raadt; Oracle Corporation detiene i diritti su Oracle®, MySQL®, MyRocks®, VirtualBox® e ZFS®; Percona® è un marchio registrato di Percona LLC; MariaDB® è un marchio registrato di MariaDB Corporation Ab; PostgreSQL® è un marchio registrato di PostgreSQL Global Development Group; SQLite® è un marchio registrato di Hipp, Wyrick & Company, Inc.; KeyDB® è un marchio registrato di EQ Alpha Technology Ltd.; Typesense® è un marchio registrato di Typesense Inc.; REDIS® è un marchio registrato di Redis Labs Ltd; F5 Networks, Inc. detiene i diritti su NGINX® e NGINX Plus®; Varnish® è un marchio registrato di Varnish Software AB; HAProxy® è un marchio registrato di HAProxy Technologies LLC; Traefik® è un marchio registrato di Traefik Labs; Envoy® è un marchio registrato di CNCF; Adobe Inc. detiene i diritti su Magento®; PrestaShop® è un marchio registrato di PrestaShop SA; OpenCart® è un marchio registrato di OpenCart Limited; Automattic Inc. detiene i diritti su WordPress®, WooCommerce®, e JetPack®; Open Source Matters, Inc. detiene i diritti su Joomla®; Dries Buytaert detiene i diritti su Drupal®; Shopify® è un marchio registrato di Shopify Inc.; BigCommerce® è un marchio registrato di BigCommerce Pty. Ltd.; TYPO3® è un marchio registrato di TYPO3 Association; Ghost® è un marchio registrato di Ghost Foundation; Amazon Web Services, Inc. detiene i diritti su AWS® e Amazon SES®; Google LLC detiene i diritti su Google Cloud™, Chrome™, e Google Kubernetes Engine™; Alibaba Cloud® è un marchio registrato di Alibaba Group Holding Limited; DigitalOcean® è un marchio registrato di DigitalOcean, LLC; Linode® è un marchio registrato di Linode, LLC; Vultr® è un marchio registrato di The Constant Company, LLC; Akamai® è un marchio registrato di Akamai Technologies, Inc.; Fastly® è un marchio registrato di Fastly, Inc.; Let’s Encrypt® è un marchio registrato di Internet Security Research Group; Microsoft Corporation detiene i diritti su Microsoft®, Azure®, Windows®, Office®, e Internet Explorer®; Mozilla Foundation detiene i diritti su Firefox®; Apache® è un marchio registrato di The Apache Software Foundation; Apache Tomcat® è un marchio registrato di The Apache Software Foundation; PHP® è un marchio registrato del PHP Group; Docker® è un marchio registrato di Docker, Inc.; Kubernetes® è un marchio registrato di The Linux Foundation; OpenShift® è un marchio registrato di Red Hat, Inc.; Podman® è un marchio registrato di Red Hat, Inc.; Proxmox® è un marchio registrato di Proxmox Server Solutions GmbH; VMware® è un marchio registrato di Broadcom Inc.; CloudFlare® è un marchio registrato di Cloudflare, Inc.; NETSCOUT® è un marchio registrato di NETSCOUT Systems Inc.; ElasticSearch®, LogStash®, e Kibana® sono marchi registrati di Elastic N.V.; Grafana® è un marchio registrato di Grafana Labs; Prometheus® è un marchio registrato di The Linux Foundation; Zabbix® è un marchio registrato di Zabbix LLC; Datadog® è un marchio registrato di Datadog, Inc.; Ceph® è un marchio registrato di Red Hat, Inc.; MinIO® è un marchio registrato di MinIO, Inc.; Mailgun® è un marchio registrato di Mailgun Technologies, Inc.; SendGrid® è un marchio registrato di Twilio Inc.; Postmark® è un marchio registrato di ActiveCampaign, LLC; cPanel®, L.L.C. detiene i diritti su cPanel®; Plesk® è un marchio registrato di Plesk International GmbH; Hetzner® è un marchio registrato di Hetzner Online GmbH; OVHcloud® è un marchio registrato di OVH Groupe SAS; Terraform® è un marchio registrato di HashiCorp, Inc.; Ansible® è un marchio registrato di Red Hat, Inc.; cURL® è un marchio registrato di Daniel Stenberg; Facebook®, Inc. detiene i diritti su Facebook®, Messenger® e Instagram®. Questo sito non è affiliato, sponsorizzato o altrimenti associato a nessuna delle entità sopra menzionate e non rappresenta nessuna di queste entità in alcun modo. Tutti i diritti sui marchi e sui nomi di prodotto menzionati sono di proprietà dei rispettivi detentori di copyright. Ogni altro marchio citato appartiene ai propri registranti. MANAGED SERVER® è un marchio registrato a livello europeo da MANAGED SERVER SRL, con sede legale in Via Flavio Gioia, 6, 62012 Civitanova Marche (MC), Italia e sede operativa in Via Enzo Ferrari, 9, 62012 Civitanova Marche (MC), Italia.

SOLO UN ATTIMO !

Ti sei mai chiesto se il tuo Hosting faccia schifo ?

Scopri subito se il tuo hosting provider ti sta danneggiando con un sito lento degno del 1990 ! Risultato immediato.

Close the CTA
Torna in alto