Indice dei contenuti dell'articolo:
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 socat
possono 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 socat
ha 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 socat
in 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 (
su
echroot
) 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 socat
per varie connessioni.
1. Collegarsi alla porta TCP 80 sul sistema locale o remoto:
# socat - TCP4:www.example.com:80
In questo caso, socat
trasferisce i dati tra STDIO (-) e una connessione TCP4 alla porta 80 su un host denominato www.example.com.
2. Utilizzare socat
come port forwarder TCP:
Per una singola connessione, inserisci:
# socat TCP4-LISTEN:81 TCP4:192.168.1.10:80
Per connessioni multiple, utilizzare l’ fork
opzione 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, socat
lo crea. L’opzione reuseaddr
consente 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, socat
trasferisce i dati dall’indirizzo stdin
multicast 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 socat
per connessioni MySQL remote. Nell’esempio seguente, mostro come socat
connettere 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 socat
e 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.sock
e 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.