Che cos’è il Port Forwarding SSH, ovvero il tunneling SSH?
Il port forwarding SSH è un meccanismo in SSH per il tunneling delle porte dell’applicazione dalla macchina client alla macchina server o viceversa. Può essere utilizzato per aggiungere la crittografia alle applicazioni legacy, passando attraverso i firewall, e alcuni amministratori di sistema e professionisti IT lo usano per aprire backdoor nella rete interna dalle loro macchine domestiche. Può anche essere abusato da hacker e malware per aprire l’accesso da Internet alla rete interna., Vedere la pagina SSH tunneling per una panoramica più ampia.
Inoltro locale
L’inoltro locale viene utilizzato per inoltrare una porta dalla macchina client alla macchina server. Fondamentalmente, il client SSH ascolta le connessioni su una porta configurata e, quando riceve una connessione, esegue il tunnel della connessione a un server SSH. Il server si connette a una porta di destinazione configurata, possibilmente su una macchina diversa dal server SSH.,
utilizzi Tipici locali port forwarding includono:
-
Tunneling sessioni e il trasferimento di file attraverso saltare i server
-
Connessione a un servizio su una rete interna dall’esterno
-
Connessione a una condivisione di file remoto via Internet
un Bel paio di organizzazioni per tutte le connessioni SSH accedere tramite un unico salto server. Il server può essere una scatola standard Linux / Unix, di solito con qualche indurimento extra, rilevamento delle intrusioni e/o registrazione, o può essere una soluzione commerciale jump server.,
Molti server jump consentono il port forwarding in entrata, una volta autenticata la connessione. Tale port forwarding è conveniente, perché consente agli utenti esperti di tecnologia di utilizzare le risorse interne in modo abbastanza trasparente. Ad esempio, possono inoltrare una porta sulla propria macchina locale al server Web intranet aziendale, alla porta IMAP di un server di posta interno, alle porte 445 e 139 di un file server locale, a una stampante, a un repository di controllo di versione o a quasi tutti gli altri sistemi sulla rete interna. Spesso, la porta viene collegata a una porta SSH su una macchina interna.,
In OpenSSH, il port forwarding locale viene configurato utilizzando l’opzione -L
:
ssh -L 80:intra.example.com:80 gw.example.com
Questo esempio apre una connessione al gw.example.com
jump server, e inoltra qualsiasi connessione alla porta 80 della macchina locale alla porta 80 della intra.example.com
.
Per impostazione predefinita, chiunque (anche su macchine diverse) può connettersi alla porta specificata sulla macchina client SSH., Tuttavia, questo può essere limitato ai programmi sullo stesso host fornendo un indirizzo bind:
ssh -L 127.0.0.1:80:intra.example.com:80 gw.example.com
L’opzione LocalForward
nel file di configurazione del client OpenSSH può essere utilizzata per configurare l’inoltro senza doverlo specificare sulla riga di comando.
Inoltro remoto
In OpenSSH, l’inoltro remoto delle porte SSH viene specificato utilizzando l’opzione-R
. Ad esempio:
ssh -R 8080:localhost:80 public.example.com
Questo consente a chiunque sul server remoto di connettersi alla porta TCP 8080 sul server remoto., La connessione verrà quindi restituita all’host client e il client eseguirà quindi una connessione TCP alla porta 80 su localhost
. È possibile utilizzare qualsiasi altro nome host o indirizzo IP anziché localhost
per specificare l’host a cui connettersi.
Questo particolare esempio sarebbe utile per dare a qualcuno l’accesso esterno a un server web interno. O esporre un’applicazione Web interna a Internet pubblica. Questo potrebbe essere fatto da un dipendente che lavora da casa, o da un attaccante.,
Per impostazione predefinita, OpenSSH consente solo la connessione a porte inoltrate remote dall’host del server. Tuttavia, l’opzioneGatewayPorts
nel file di configurazione del server sshd_config può essere utilizzata per controllarlo. Sono possibili le seguenti alternative:
GatewayPorts no
Ciò impedisce la connessione alle porte inoltrate dall’esterno del computer server.
GatewayPorts yes
Questo permette a chiunque di connettersi alle porte inoltrate. Se il server è su Internet pubblico, chiunque su Internet può connettersi alla porta.,
GatewayPorts clientspecified
Ciò significa che il client può specificare un indirizzo IP da cui sono consentite le connessioni alla porta. La sintassi per questo è:
ssh -R 52.194.1.73:8080:localhost:80 host147.aws.example.com
In questo esempio, sono consentite solo le connessioni dall’indirizzo IP 52.194.1.73
alla porta 8080.
OpenSSH consente anche alla porta remota inoltrata di essere specificata come 0. In questo caso, il server allocherà dinamicamente una porta e la segnalerà al client. Quando viene utilizzato con l’opzione-O forward
, il client stamperà il numero di porta assegnato allo standard output.,
Apertura di backdoor nell’enterprise
Il port forwarding SSH remoto viene comunemente utilizzato dai dipendenti per aprire backdoor nell’enterprise. Ad esempio, il dipendente può impostare ottieni un server di livello libero da Amazon AWS e accedere dall’ufficio a quel server, specificando l’inoltro remoto da una porta sul server a un server o un’applicazione sulla rete aziendale interna. È possibile specificare più inoltri remoti per aprire l’accesso a più di un’applicazione.,
Il dipendente imposta anche GatewayPorts yes
sul server (la maggior parte dei dipendenti non ha indirizzi IP fissi a casa, quindi non può limitare l’indirizzo IP).
Ad esempio, il seguente comando apre l’accesso a un database Postgres interno sulla porta 5432 e a una porta SSH interna sulla porta 2222.
ssh -R 2222:d76767.nyc.example.com:22 -R 5432:postgres3.nyc.example.com:5432 aws4.mydomain.net
Configurazione lato server
L’opzione AllowTcpForwarding
nel file di configurazione del server OpenSSH deve essere abilitata sul server per consentire il port forwarding. Per impostazione predefinita, l’inoltro è consentito., I valori possibili per questa opzione sono: yes
o all
per consentire a tutti TCP inoltro no
> per evitare tutti TCP inoltro local
per consentire di spedizioni, e remote
per consentire l’spedizioni.
Un’altra opzione di interesse èAllowStreamLocalForwarding
, che può essere utilizzata per inoltrare socket di dominio Unix. Consente gli stessi valori di AllowTcpForwarding
. Il valore predefinito è yes
.,
Ad esempio:
AllowTcpForwarding remote AllowStreamLocalForwarding no
L’opzione di configurazioneGatewayPorts
come descritto sopra influisce anche sull’inoltro delle porte remote. I valori possibili eranono
(sono consentite solo le connessioni locali dall’host del server; predefinito),yes
(chiunque su Internet può connettersi a porte inoltrate remote) eclientspecified
(il client può specificare un indirizzo IP che può connettersi, chiunque può se non specificato).,
Come evitare che il Port Forwarding SSH eluda i firewall
Si consiglia di disabilitare espressamente il port forwarding quando non è necessario. Lasciare abilitato il port forwarding può esporre l’organizzazione a rischi per la sicurezza e backdoor. Ad esempio, se un server destinato a fornire solo trasferimenti di file SFTP consente l’inoltro delle porte, tali inoltri potrebbero essere utilizzati per ottenere l’accesso non intenzionale alla rete interna dall’Intranet.
Il problema è che il port forwarding può in pratica essere impedito solo da un server o da un firewall., Un’azienda non può controllare tutti i server su Internet. Il controllo basato su firewall può anche essere complicato, poiché la maggior parte delle organizzazioni dispone di server in Amazon AWS e altri servizi cloud e tali server sono solitamente accessibili tramite SSH.