Torna al blog

Inoltro delle porte con Iptables in Linux: una guida pratica

Inoltro delle porte con Iptables in Linux: una guida pratica

Port forwarding, noto anche come mappatura delle porte, è un metodo per consentire ai dispositivi remoti di connettersi a uno specifico servizio all'interno della rete locale privata (LAN). Come suggerisce il nome, il processo comporta l'inoltro delle richieste per una porta specifica a un'altra porta o rete. Modifica la destinazione del pacchetto in transito ed è considerato un tipo di operazione di traduzione degli indirizzi di rete (NAT).

L'abilitazione del port forwarding consente a quei dispositivi o host non connessi alla rete interna di accedere l'uno all'altro, cosa che altrimenti sarebbe limitata se disabilitata. È possibile sfruttare i vantaggi del port forwarding per bloccare i siti web di destinazione, migliorare la sicurezza e aggirare il firewall NAT a proprio piacimento.

In questo tutorial, ti guideremo attraverso i passaggi per l'inoltro delle porte con iptables in Linux.

Prerequisiti

Per seguire questo tutorial, avrai bisogno di:

Dettagli dell'host

Per prima cosa, dobbiamo conoscere i dettagli delle interfacce e degli indirizzi dei server di lavoro. Controlliamo le interfacce di rete del nostro sistema:

Vedrai l'output:

Qui, l'output evidenziato mostra due interfacce, la prima eth0 assegnata all'indirizzo 192.51.100.45, e la seconda eth1 assegnata all'indirizzo 192.168.1.5. Di queste due interfacce, una è pubblica e l'altra è privata. Eseguiremo un comando per distinguere tra le due e individuare l'interfaccia pubblica, quella connessa al gateway predefinito. Per distinguerle, digita:

Vedrai l'output:

Dati fittizi per il tutorial

Useremo indirizzi e assegnazioni di interfaccia fittizi in questo tutorial. Sei libero di usare questi dati o di sostituirli, a tua convenienza.

Dettagli di rete del server web:

  • Indirizzo IP pubblico: 203.0.113.2

  • Indirizzo IP privato: 192.0.2.2

  • Interfaccia pubblica: eth0

  • Interfaccia privata: eth1

Dettagli di rete del firewall:

  • Indirizzo IP pubblico: 203.0.113.15

  • Indirizzo IP privato: 192.0.2.15

  • Interfaccia pubblica: eth0

  • Interfaccia privata: eth1

Configurazione del server web

Iniziamo con l'host del nostro server web. Per prima cosa, accedi con il tuo sudo utente.

Installare Nginx

Per prima cosa, installeremo Nginx sul nostro host del server web e lo bloccheremo in modo che ascolti solo sulla sua interfaccia privata. Ciò consentirà al nostro server web di essere disponibile solo se abbiamo configurato il port forwarding in modo corretto.

Successivamente, aggiorna la cache dei pacchetti locali e usa apt to scaricare e installare Nginx:

Aggiungere restrizioni

Una volta installato Nginx sul nostro host del server web, lo bloccheremo per assicurarci che accetti input solo dalle interfacce private e da nessun'altra parte. Inoltre, ciò garantirà che i nostri server web siano attivi solo se la configurazione del port forwarding è corretta.

Per aggiungere restrizioni, apri il file di configurazione del blocco server predefinito /etc/nginx/sites-enabled/default on any text editor of your choice (here we’re using nano text editor), and type:

Nell'output, vedrai la direttiva listen apparire due volte:

Port Forwarding Nginx Default File

In questo tutorial, useremo la prima direttiva per dimostrare l'inoltro IPv4. La seconda, configurata per IPv6, può essere rimossa. Aggiungi l'indirizzo IP privato del tuo server web con i due punti subito prima di 80 per informare Nginx di accettare input solo dall'interfaccia privata. Successivamente, modifica la direttiva:

Port Forwarding Nginx Edited Default File

Una volta fatto, salva e chiudi il file. Prima di procedere, assicurati che non ci siano errori di sintassi. Testiamo il file:

Nginx T

Se non viene visualizzato alcun errore, puoi riavviare Nginx e abilitare la nuova configurazione:

Verifica della restrizione di rete

Verifichiamo il livello di accesso che abbiamo al nostro server web. Prova ad accedere al server web utilizzando l'interfaccia privata tramite il comando curl comando:

Vedrai l'output:

Port Forwarding Nginx Output1

Se proviamo a utilizzare l'interfaccia pubblica, non saremo in grado di connetterci:

Questo è esattamente ciò che ci aspettavamo.

Configurare il firewall per inoltrare la porta 80

Procediamo con il nostro lavoro implementando il port forwarding sulla nostra macchina firewall.

Abilitare l'inoltro nel kernel

Per impostazione predefinita, la maggior parte dei sistemi ha il port forwarding disattivato. Apporteremo alcune modifiche per attivarlo. Inoltre, c'è un'opzione per attivare il port forwarding in modo permanente utilizzando i privilegi sudo come mostrato nei passaggi successivi.

Per attivare l'inoltro del traffico a livello di kernel, digita:

Per attivare il port forwarding in modo permanente, modifica il file /etc/sysctl.conf . Apri il file con i privilegi sudo e digita:

All'interno, trova e decommenta la riga simile a questa:

Una volta fatto, salva e chiudi il file. Quindi, usa i comandi sysctl per applicare le modifiche alle impostazioni in modo che abbiano effetto:

Configurazione di base del firewall

Prima di tutto, consulta la guida su how to set up a basic firewall sulla tua macchina. Al termine, avrai:

  • Installato iptables-persistent
  • Salvato il set di regole predefinito in /etc/iptables/rules.v4
  • Conoscenza approfondita sull'aggiunta e la modifica delle regole utilizzando il iptables comando

Inoltre, puoi dare un'occhiata a how to list and delete iptables Firewall rules.

Aggiunta delle regole di inoltro

Configureremo il nostro firewall per garantire che il traffico che fluisce nella nostra interfaccia pubblica ( eth0 ) sulla porta 80 venga inoltrato alla nostra interfaccia privata ( eth1). Per impostazione predefinita, il nostro firewall di base ha una catena FORWARD impostata su DROP il traffico. L'aggiunta di regole del firewall consentirà l'inoltro delle connessioni al nostro server web. Per una maggiore sicurezza, bloccheremo le regole del firewall per consentire solo le richieste di inoltro.

Nella catena FORWARD , accetteremo nuove connessioni destinate alla porta 80 provenienti dalla nostra interfaccia pubblica e dirette alla nostra interfaccia privata. Identificheremo le nuove connessioni con l'aiuto dell'estensione conntrack e le rappresenteremo con un TCP SYN pacchetto:

È necessario consentire qualsiasi traffico successivo in entrambe le direzioni derivante dalla connessione in entrata. Digita i comandi seguenti per consentire il traffico ESTABLISHED e RELATED tra le nostre interfacce pubblica e privata:

Verifichiamo se la nostra policy sulla FORWARD chain è impostata su DROP:

Fino ad ora, abbiamo aggiunto alcune regole che consentono al traffico tra le nostre interfacce pubblica e privata di passare attraverso il nostro firewall. Tuttavia, iptables non è ancora informato su come indirizzare il traffico perché la configurazione delle regole del firewall deve ancora essere completata. Nei passaggi successivi, aggiungeremo le regole NAT e regoleremo il set di regole permanenti per indirizzare il traffico.

Aggiunta delle regole NAT per indirizzare i pacchetti

Eseguiremo due operazioni separate affinché iptables modifichi correttamente i pacchetti e ottimizzi la comunicazione con i client e il server web.

DNAT è la prima operazione che avvia la PREROUTING chain della tabella nat . L'operazione modifica l'indirizzo di destinazione del pacchetto e gli consente di essere instradato correttamente mentre passa tra le reti. Tuttavia, i client sulla rete pubblica si connetteranno al nostro server firewall e non avranno informazioni sulla topologia della nostra rete privata. Per scambiare informazioni con la rete privata, modifica l'indirizzo di destinazione di ciascun pacchetto per consentirgli di raggiungere correttamente il nostro server web di destinazione.

È fondamentale notare che ci stiamo concentrando sulla configurazione del port forwarding. L'esecuzione del NAT su ogni pacchetto che colpisce il firewall non fa parte del nostro tutorial. Assoceremo i pacchetti sulla porta 80 all'indirizzo IP privato del nostro server web:

Il pacchetto verrà instradato correttamente verso il nostro server web contenente l'indirizzo originale del client come indirizzo di origine. Nonostante i tentativi effettuati dal server di inviare la risposta direttamente a quell'indirizzo, non sarà possibile stabilire una connessione TCP legittima.

Per configurare un instradamento corretto, modificheremo l'indirizzo di origine del pacchetto. Modifichiamo l'indirizzo di origine con l'indirizzo IP privato del nostro server firewall. Dopo la modifica, la risposta verrà rispedita al firewall, che la inoltrerà al client.

Per abilitare questa funzionalità, aggiungi una regola alla POSTROUTING chain della tabella nat valutata subito prima che i pacchetti vengano inviati sulla rete. Quindi, associa i pacchetti destinati al nostro server web per indirizzo IP e porta:

Una volta applicata questa regola, il nostro server web dovrebbe essere accessibile puntando il browser web all'indirizzo pubblico della nostra macchina firewall:

Vedrai l'output:

Nginx Output2

La nostra configurazione del port forwarding è completata.

Regolare il set di regole permanenti

Dopo aver completato la configurazione del port forwarding, la salveremo nel nostro set di regole permanenti. Se desideri mantenere i commenti nel set di regole corrente, utilizza il servizio iptables-persistent per salvare le tue regole:

Puoi anche aprirlo e modificarlo manualmente per mantenere i commenti nel tuo file:

Successivamente, configura la tabella filter e la tabella nat per aggiungere rispettivamente le regole della chain FORWARD e le regole di ROUTING . La regolazione della tabella nat ci consentirà di aggiungere le regole PREROUTING e POSTROUTING come mostrato nell'esempio seguente:

Dopo aver aggiunto i valori sopra indicati, salva e chiudi il file. Successivamente, digita il comando seguente per testare la sintassi delle tue regole:

Se non vedi errori, carica il set di regole:

Verifichiamo che il nostro server web sia ancora accessibile tramite l'indirizzo IP pubblico del tuo firewall:

Conclusione

Al termine di questo tutorial, dovresti avere familiarità con l'inoltro delle porte su un server Linux con iptables. Puoi sfruttare le funzionalità di port forwarding per mascherare la topologia della tua rete privata, consentendo al contempo al traffico dei servizi di fluire liberamente attraverso la macchina firewall gateway.

Poiché il processo si basa esplicitamente sulla sicurezza della tua rete e sulle porte utilizzate, è sicuro. Potrebbe esserci una possibilità di rischio se non disponi di un firewall di sicurezza o di una sicurezza VPN sulla tua rete. Pertanto, si consiglia di configurare il firewall como discusso in questo tutorial. Speriamo che questa guida ti aiuti a rimanere al sicuro su Internet quando utilizzi la tua rete privata.

Per esplorare ulteriormente altre soluzioni firewall che puoi implementare sul tuo sistema, consulta queste risorse dal nostro blog:

Buon divertimento con l'informatica!

author

Pranay Kapgate

Autore · CloudSigma

Preslav Dobrev è un designer creativo presso CloudSigma, con un focus su un'identità aziendale coerente attraverso l'uso di canali di marketing tradizionali e innovativi. È abile nel fondere la visione artistica con il marketing strategico per creare narrazioni di brand di grande impatto.

Commenti

Ancora nessun commento. Scrivi il primo.