Idealmente, la maggior parte delle reti locali è protetta dal mondo esterno. Se hai mai provato a installare un servizio, come un server web o un'istanza Nextcloud a casa, probabilmente saprai per esperienza diretta che, sebbene il servizio sia facile da raggiungere dall'interno della rete, è irraggiungibile in tutto il mondo web.
Ci sono ragioni sia tecniche che di sicurezza per questo, ma a volte si desidera aprire l'accesso a qualcosa all'interno di una rete locale al mondo esterno. Ciò significa che devi essere in grado di instradare il traffico da Internet alla tua rete locale, in modo corretto e sicuro. In questo articolo ti spiego come fare.
Indirizzi IP locali e pubblici
La prima cosa che devi capire è la differenza tra un indirizzo IP (Internet Protocol) locale e un indirizzo IP pubblico. Attualmente, la maggior parte del mondo (ancora) utilizza un sistema di indirizzamento chiamato IPv4, che notoriamente ha un numero limitato di numeri disponibili da assegnare ai dispositivi elettronici in rete. In effetti, ci sono più dispositivi collegati in rete nel mondo che indirizzi IPv4, eppure IPv4 continua a funzionare. Ciò è possibile grazie agli indirizzi locali.
Tutte le reti locali nel mondo usano lo stesso pool di indirizzi. Ad esempio, l'indirizzo IP locale del mio router di casa è 192.168.1.1. Uno di questi è probabilmente lo stesso numero del tuo router di casa, ma quando accedo a 192.168.1.1, raggiungo il mio schermata di accesso del router e non tua schermata di accesso del router. Questo perché il tuo router di casa ha in realtà due indirizzi:uno pubblico e uno locale, e quello pubblico protegge quello locale dall'essere rilevato da Internet, tanto meno dall'essere confuso con il 192.168.1.1 di qualcun altro.
Questo, infatti, è il motivo per cui Internet si chiama Internet:è una "rete" di reti interconnesse e altrimenti autonome. Ogni rete, che sia il tuo posto di lavoro o la tua casa o la tua scuola o un big data center o il "cloud" stesso, è un insieme di host connessi che, a loro volta, comunicano con un gateway (solitamente un router) che gestisce il traffico dal Internet e alla rete locale, nonché dalla rete locale a Internet.
Ciò significa che se stai tentando di accedere a un computer su una rete che non è la rete a cui sei attualmente collegato, conoscere l'indirizzo locale di quel computer non ti aiuta. Devi conoscere il pubblico indirizzo del gateway della rete remota. E non è tutto. Hai anche bisogno dell'autorizzazione per passare attraverso quel gateway nella rete remota.
Firewall
Più risorse Linux
- Comandi Linux cheat sheet
- Cheat sheet sui comandi avanzati di Linux
- Corso online gratuito:Panoramica tecnica RHEL
- Cheat sheet della rete Linux
- Cheat sheet di SELinux
- Cheat sheet dei comandi comuni di Linux
- Cosa sono i container Linux?
- I nostri ultimi articoli su Linux
Idealmente, ci sono firewall tutt'intorno a te, anche adesso. Non li vedi (si spera), ma ci sono. Per quanto riguarda la tecnologia, i firewall hanno un nome divertente, ma in realtà sono un po' noiosi. Un firewall è solo un servizio informatico (chiamato anche "daemon"), un sottosistema che viene eseguito in background nella maggior parte dei dispositivi elettronici. Ci sono molti demoni in esecuzione sul tuo computer, incluso quello che ascolta i movimenti del mouse o del trackpad, per esempio. Un firewall è un demone programmato per accettare o negare determinati tipi di traffico di rete.
I firewall sono programmi relativamente piccoli, quindi sono incorporati nella maggior parte dei dispositivi moderni. Sono in esecuzione sul tuo cellulare, sul tuo router e sul tuo computer. I firewall sono progettati sulla base di protocolli di rete e fa parte della specifica di comunicare con altri computer che un pacchetto di dati inviato su una rete deve annunciare informazioni specifiche su se stesso (o essere ignorato). Una cosa che i dati di rete contengono è una porta numero, che è una delle cose principali che un firewall utilizza quando accetta o rifiuta il traffico.
I siti Web, ad esempio, sono ospitati su server Web. Quando si desidera visualizzare un sito Web, il computer invia dati di rete identificandosi come traffico destinato alla porta 80 dell'host web. Il firewall del server web è programmato per accettare il traffico in entrata destinato alla porta 80, quindi accetta la tua richiesta (e il server web, a sua volta, ti invia la pagina web in risposta). Tuttavia, se dovessi inviare (per errore o in base alla progettazione) dati di rete destinati alla porta 22 di quel server web, probabilmente verresti negato dal firewall (e forse bannato per qualche tempo).
Questo può essere un concetto strano da capire perché, come gli indirizzi IP, le porte e i firewall non "esistono" davvero nel mondo fisico. Questi sono concetti definiti nel software. Non puoi aprire il tuo computer o il tuo router per ispezionare fisicamente le porte di rete, e non puoi guardare un numero stampato su un chip per trovare il tuo indirizzo IP e non puoi bagnare il tuo firewall in acqua per spegnerlo. Ma ora che sai che esistono questi concetti, conosci gli ostacoli legati al passaggio da un computer in una rete a un altro su una rete diversa.
Ora è il momento di aggirare quei blocchi.
Il tuo indirizzo IP
Presumo che tu abbia il controllo sulla tua rete e stai cercando di aprire i tuoi firewall e instradare il tuo traffico per consentire il traffico esterno nella tua rete. Innanzitutto, hai bisogno dei tuoi indirizzi IP locali e pubblici.
Per trovare il tuo indirizzo IP locale, puoi utilizzare il ip
comando address su Linux:
$ ip addr show | grep "inet "
inet 127.0.0.1/8 scope host lo
inet 192.168.1.6/27 brd 10.1.1.31 scope [...]
In questo esempio, il mio indirizzo IP locale è 192.168.1.6. L'altro indirizzo (127.0.0.1) è uno speciale indirizzo di "loopback" che il tuo computer usa per fare riferimento a se stesso dall'interno.
Per trovare il tuo indirizzo IP locale su macOS, puoi utilizzare ifconfig
:
$ ifconfig | grep "inet "
inet 127.0.0.1 netmask 0xff000000
inet 192.168.1.6 netmask 0xffffffe0 [...]
E su Windows, usa ipconfig
:
$ ipconfig
Ottieni l'indirizzo IP pubblico del tuo router su icanchazip.com. Su Linux, puoi ottenerlo da un terminale con il comando curl:
$ curl http://icanhazip.com
93.184.216.34
Tieni questi numeri a portata di mano per dopo.
Dirigere il traffico attraverso un router
Il primo dispositivo che deve essere regolato è il dispositivo gateway. Questo potrebbe essere un grande server fisico o potrebbe essere un piccolo router. In ogni caso, il gateway esegue quasi sicuramente la traduzione dell'indirizzo di rete (NAT), che è il processo di accettazione del traffico e di modifica dell'indirizzo IP di destinazione.
Quando generi traffico di rete per visualizzare un sito Web esterno, il tuo computer deve inviare quel traffico al gateway della tua rete locale perché, essenzialmente, il tuo computer non ha alcuna conoscenza del mondo esterno. Per quanto ne sa il tuo computer, l'intera Internet è solo il tuo router di rete, 192.168.1.1 (o qualunque sia l'indirizzo del tuo router). Quindi, il tuo computer invia tutto al tuo gateway. È compito del gateway esaminare il traffico e determinare dove si trova effettivamente diretto, quindi inoltra i dati a Internet reale. Quando il gateway riceve una risposta, inoltra i dati in entrata al tuo computer.
Se il tuo gateway è un router, per esporre il tuo computer al mondo esterno, devi designare una porta nel tuo router per rappresentare il tuo computer. Questo configura il tuo router per accettare il traffico verso una porta specifica e indirizzare tutto quel traffico direttamente al tuo computer. A seconda della marca del router che utilizzi, questo processo assume nomi diversi, incluso il port forwarding o il server virtuale o talvolta anche le impostazioni del firewall.
Ogni dispositivo è diverso, quindi non c'è modo per me di dirti esattamente su cosa devi fare clic per regolare le impostazioni. In genere, accedi al tuo router di casa tramite un browser web. L'indirizzo del router a volte viene stampato nella parte inferiore del router e inizia con 192.168 o 10.
Vai all'indirizzo del tuo router e accedi con le credenziali che ti sono state fornite quando hai ricevuto il servizio Internet. Spesso è semplice come admin
con una password numerica (a volte questa password viene stampata anche sul router). Se non conosci il login, chiama il tuo provider internet e chiedi i dettagli.
Nell'interfaccia grafica, reindirizza il traffico in entrata da una porta a una porta (la stessa è solitamente la più semplice) dell'indirizzo IP locale del tuo computer. In questo esempio, reindirizzerò il traffico in entrata destinato alla porta 22 (usata per le connessioni SSH) del mio router di casa al mio PC desktop.
Puoi reindirizzare qualsiasi porta desideri. Ad esempio, se stai ospitando un sito Web su un computer di riserva, puoi reindirizzare il traffico destinato alla porta 80 del router alla porta 80 dell'host del sito Web.
Dirigere il traffico attraverso un server
Se il tuo gateway è un server fisico, puoi indirizzare il traffico utilizzando firewall-cmd. Utilizzando la regola avanzata opzione, puoi fare in modo che il tuo server ascolti una richiesta in arrivo a un indirizzo specifico (il tuo IP pubblico) e una porta specifica (in questo esempio, io uso 22, che è la porta utilizzata per SSH), quindi indirizzare quel traffico a un IP indirizzo e porta nella rete locale (l'indirizzo locale del tuo computer).
$ firewall-cmd --permanent --zone=public \
--add-rich-rule 'rule family="ipv4" destination address="93.184.216.34" forward-port port=22 protocol=tcp to-port=22 to-addr=192.168.1.6'
Imposta il firewall
La maggior parte dei dispositivi dispone di firewall, quindi potresti scoprire che il traffico non può arrivare al tuo computer locale anche dopo aver inoltrato le porte e il traffico. È possibile che ci sia un firewall che blocca il traffico anche all'interno della tua rete locale. I firewall sono progettati per rendere sicuro il tuo computer, quindi resisti alla tentazione di disattivare completamente il firewall (tranne per la risoluzione dei problemi). Invece, puoi consentire il traffico in modo selettivo.
Il processo di modifica del firewall personale varia a seconda del sistema operativo.
Su Linux, ci sono molti servizi già definiti. Visualizza quelli disponibili:
$ sudo firewall-cmd --get-services
amanda-client amanda-k5-client bacula bacula-client
bgp bitcoin bitcoin-rpc ceph cfengine condor-collector
ctdb dhcp dhcpv6 dhcpv6-client dns elasticsearch
freeipa-ldaps ftp [...] ssh steam-streaming svdrp [...]
Se il servizio che stai tentando di consentire è elencato, puoi aggiungerlo al tuo firewall:
$ sudo firewall-cmd --add-service ssh --permanent
Se il tuo servizio non è elencato, puoi aggiungere la porta che desideri aprire manualmente:
$ sudo firewall-cmd --add-port 22/tcp --permanent
L'apertura di una porta nel firewall è specifica per la tua zona corrente . Per ulteriori informazioni su firewall, firewall-cmd e porte, fare riferimento al mio articolo Rendere Linux più forte con i firewall e scarica il nostro cheatsheet di Firewall per una rapida consultazione.
Questo passaggio riguarda solo l'apertura di una porta nel computer in modo che il traffico destinato ad essa su una porta specifica venga accettato. Non è necessario reindirizzare il traffico perché l'hai già fatto al tuo gateway.
Effettua la connessione
Hai configurato il tuo gateway e la tua rete locale per instradare il traffico per te. Ora, quando qualcuno al di fuori della tua rete naviga verso il tuo indirizzo IP pubblico, destinato a una porta specifica, verrà reindirizzato al tuo computer sulla stessa porta. Sta a te monitorare e salvaguardare la tua rete, quindi usa le tue nuove conoscenze con cura. Troppe porte aperte possono sembrare inviti a cattivi attori e bot, quindi apri solo ciò che intendi utilizzare. E soprattutto, buon divertimento!