Introduzione
A port is a communication endpoint. Within an operating system, a port is opened or closed to data packets for specific processes or network services.
In genere, le porte identificano un servizio di rete specifico a loro assegnato. Questo può essere modificato configurando manualmente il servizio per utilizzare una porta diversa, ma in generale, possono essere utilizzate le impostazioni predefinite.
Le prime 1024 porte (numeri di porta 0
a 1023
) sono chiamate numeri di porta ben noti e sono riservate per i servizi più comunemente utilizzati. Questi includono SSH (porta 22
), HTTP (porta 80
), HTTPS (porta 443
).
I numeri di porta superiori a 1024 sono chiamati porte ephemerali.
- I numeri di porta
1024
a49151
sono chiamati porte registrate/utente. - I numeri di porta
49152
a65535
sono chiamati porte dinamiche/private.
In questo tutorial, aprirai una porta ephemeral su Linux, poiché i servizi più comuni utilizzano le porte ben note.
Implementa le tue applicazioni da GitHub utilizzando DigitalOcean App Platform. Lascia che DigitalOcean si occupi dello scaling della tua app.
Prerequisiti
Per completare questo tutorial, avrai bisogno di:
- Familiarità nell’utilizzo del terminale.
Elencare tutte le porte aperte
Prima di aprire una porta su Linux, è necessario verificare l’elenco di tutte le porte aperte e scegliere una porta effimera da aprire che non sia presente in tale elenco.
Utilizzare il comando netstat
per elencare tutte le porte aperte, inclusi i protocolli TCP e UDP, che sono i protocolli più comuni per la trasmissione di pacchetti nel livello di rete.
- netstat -lntu
Questo stamperà:
- tutte le prese in ascolto (
-l
) - il numero della porta (
-n
) - porte TCP (
-t
) - porte UDP (
-u
)
OutputActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 ::1:5432 :::* LISTEN
tcp6 0 0 ::1:6379 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
udp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
Nota: Se la tua distribuzione non ha netstat
, puoi utilizzare il comando ss
per visualizzare le porte aperte controllando le prese in ascolto.
Verificare di ricevere output coerenti utilizzando il comando ss
per elencare le prese in ascolto con una porta aperta:
- ss -lntu
Questo stamperà:
OutputNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:5432 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:27017 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:6379 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 [::1]:5432 0.0.0.0:*
tcp LISTEN 0 128 [::1]:6379 0.0.0.0:*
tcp LISTEN 0 128 [::]:22 0.0.0.0:*
Questo restituisce più o meno le stesse porte aperte di netstat
.
Apertura di una porta su Linux per consentire connessioni TCP
Ora, apri una porta chiusa e fallo ascoltare per le connessioni TCP.
Per scopi di questo tutorial, apriremo la porta 4000
. Tuttavia, se quella porta non è aperta nel tuo sistema, sentiti libero di scegliere un’altra porta chiusa. Assicurati solo che sia maggiore di 1023
.
Verifica che la porta 4000
non sia utilizzata utilizzando il comando netstat
:
- netstat -na | grep :4000
O il comando ss
:
- ss -na | grep :4000
L’output deve rimanere vuoto, verificando così che non sia attualmente utilizzata, in modo da poter aggiungere manualmente le regole della porta al firewall iptables di sistema.
Per gli utenti di Ubuntu e sistemi basati su ufw
Utilizza ufw
– il client a linea di comando per il firewall UncomplicatedFirewall.
I tuoi comandi saranno simili a:
- sudo ufw allow 4000
Consulta Come configurare un firewall ufw
per la tua distribuzione.
Nota:
- Ubuntu 14.0.4: “Consenti intervalli specifici di porte”
- Ubuntu 16.0.4/18.0.4/20.0.4/22.0.4: “Consentire altre connessioni / Gamma di porte specifiche”
- Debian 9/10/11: “Consentire altre connessioni / Gamma di porte specifiche”
Per CentOS e sistemi basati su firewalld
Utilizzare firewall-cmd
– il client da linea di comando per il demone firewalld
.
I comandi saranno simili a:
- firewall-cmd --add-port=4000/tcp
Fare riferimento a Come configurare firewalld
per la tua distribuzione.
Nota:
- CentOS 7/8: “Impostazione delle regole per le tue applicazioni / Apertura di una porta per le tue zone”
- Rocky Linux 8/9: “Impostazione delle regole per le tue applicazioni / Apertura di una porta per le tue zone”
Per altre distribuzioni Linux
Utilizzare iptables
per modificare le regole del filtro dei pacchetti IPv4 di sistema.
- iptables -A INPUT -p tcp --dport 4000 -j ACCEPT
Fare riferimento a Come configurare un firewall utilizzando iptables
per la tua distribuzione.
Nota:
- Ubuntu 12.04: “Un Firewall di Base”
- Ubuntu 14.04: “Accetta Altre Connessioni Necessarie”
Testa la Nuova Porta Aperta per le Connessioni TCP
Ora che hai aperto con successo una nuova porta TCP, è il momento di testarla.
Prima, avvia netcat (nc
) e ascolta (-l
) sulla porta (-p
) 4000
, mentre invii l’output di ls
a qualsiasi client connesso:
- ls | nc -l -p 4000
Ora, dopo che un client ha aperto una connessione TCP sulla porta 4000
, riceverà l’output di ls
. Lascia in sospeso questa sessione per ora.
Apri un’altra sessione di terminale sulla stessa macchina.
Dato che hai aperto una porta TCP, utilizza telnet
per verificare la connettività TCP. Se il comando non esiste, installalo utilizzando il tuo gestore di pacchetti.
Inserisci l’IP del tuo server e il numero della porta (4000
in questo esempio) ed esegui questo comando:
- telnet localhost 4000
Questo comando tenta di aprire una connessione TCP su localhost
sulla porta 4000
.
Riceverai un output simile a questo, che indica che è stata stabilita una connessione con il programma in ascolto (nc
):
OutputTrying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
while.sh
L’output di ls
(while.sh
, in questo esempio) è stato inviato anche al client, indicando una connessione TCP riuscita.
Usa nmap
per verificare se la porta (-p
) è aperta:
- nmap localhost -p 4000
Questo comando verificherà la porta aperta:
OutputStarting Nmap 7.60 ( https://nmap.org ) at 2020-01-18 21:51 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00010s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE
4000/tcp open remoteanything
Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds
La porta è stata aperta. Hai aperto con successo una nuova porta sul tuo sistema Linux.
Nota: nmap
elenca solo le porte aperte che hanno un’applicazione attualmente in ascolto. Se non utilizzi alcuna applicazione in ascolto, come netcat, questa visualizzerà la porta 4000
come chiusa, poiché non c’è alcuna applicazione in ascolto su quella porta al momento. Allo stesso modo, telnet
non funzionerà nemmeno poiché ha bisogno anche di un’applicazione in ascolto su cui associarsi. Questo è il motivo per cui nc
è uno strumento così utile. Simula tali ambienti con un semplice comando.
Ma questo è solo temporaneo, poiché le modifiche verranno ripristinate ogni volta che riavvii il sistema.
Regole persistenti
L’approccio presentato in questo articolo aggiornerà solo temporaneamente le regole del firewall fino a quando il sistema non viene spento o riavviato. Pertanto, passaggi simili devono essere ripetuti per aprire nuovamente la stessa porta dopo un riavvio.
Per il firewall ufw
Le regole di ufw
non vengono ripristinate al riavvio. Questo perché è integrato nel processo di avvio e il kernel salva le regole del firewall utilizzando ufw
mediante l’applicazione di file di configurazione appropriati.
Per firewalld
Dovrai applicare il flag --permanent
.
Fai riferimento a Come configurare firewalld
per la tua distribuzione.
Nota:
- CentOS 7/8: “Configurazione delle regole per le tue applicazioni”
- Rocky Linux 8/9: “Configurazione delle regole per le tue applicazioni”
Per iptables
Dovrai salvare le regole di configurazione. Questi tutorial raccomandano iptables-persistent
.
Fai riferimento a Come configurare un firewall utilizzando iptables
per la tua distribuzione.
Nota:
- Ubuntu 12.04: “Salvataggio delle regole di Iptables”
- Ubuntu 14.04: “Salvataggio della configurazione di Iptables”
Conclusione
In questo tutorial, hai imparato come aprire una nuova porta su Linux e configurarla per le connessioni in entrata. Hai anche utilizzato netstat
, ss
, telnet
, nc
e nmap
.
Continua il tuo apprendimento con Come funziona il firewall Iptables, Un’analisi approfondita dell’architettura Iptables e Netfilter, Comprensione dei socket e Come utilizzare Top, Netstat, Du e altri strumenti per monitorare le risorse del server.
Source:
https://www.digitalocean.com/community/tutorials/opening-a-port-on-linux