Come aprire una porta su Linux
introduzione
Una porta è un endpoint di comunicazione. All'interno di un sistema operativo, una porta viene aperta o chiusa a pacchetti di dati per specifici processi o servizi di rete.
In genere, le porte identificano uno specifico servizio di rete loro assegnato. Questo può essere modificato configurando manualmente il servizio per l'utilizzo di una porta diversa, ma in generale è possibile utilizzare i valori predefiniti.
Le prime 1024 porte (numeri di porta da 0
a 1023
) sono indicate come numeri di porta noti e sono riservate ai servizi più utilizzati . Questi includono SSH (porta 22
), HTTP (porta 80
), HTTPS (porta 443
).
I numeri di porta superiori a 1024 sono indicati come porte temporanee.
- I numeri di porta da
1024
a49151
sono chiamati porte registrate/utente. - I numeri di porta da
49152
a65535
sono chiamati porte dinamiche/private.
In questo tutorial, aprirai una porta temporanea su Linux, poiché i servizi più comuni utilizzano le porte note.
Prerequisiti
Per completare questo tutorial, avrai bisogno di:
- Familiarità con l'utilizzo del terminale.
Elenca tutte le porte aperte
Prima di aprire una porta su Linux, è necessario controllare l'elenco di tutte le porte aperte e scegliere una porta temporanea da aprire non presente nell'elenco.
Usa il comando netstat
per elencare tutte le porte aperte, inclusi TCP e UDP, che sono i protocolli più comuni per la trasmissione di pacchetti a livello di rete.
- netstat -lntu
Questo stamperà:
- tutti i socket 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 i socket in ascolto.
Verifica di ricevere output coerenti utilizzando il comando ss
per elencare i socket 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 fornisce 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 falla ascoltare le connessioni TCP.
Per gli scopi di questo tutorial, aprirai 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
.
Assicurati che la porta 4000
non sia utilizzata utilizzando il comando netstat
:
- netstat -na | grep :4000
Oppure il comando ss
:
- ss -na | grep :4000
L'output deve rimanere vuoto, verificando così che non sia attualmente utilizzato, in modo da poter aggiungere manualmente le regole della porta al firewall iptables di sistema.
Per utenti Ubuntu e sistemi basati su ufw
Usa ufw
- il client della riga di comando per UncomplicatedFirewall.
I tuoi comandi saranno simili a:
- sudo ufw allow 4000
Fare riferimento a Come configurare una configurazione del firewall ufw
per la propria distribuzione.
Nota:
- Ubuntu 14.0.4: \Consenti intervalli di porte specifici
- Ubuntu 16.0.4/18.0.4/20.0.4/22.0.4: \Consentire altre connessioni/Intervalli di porte specifici
- Debian 9/10/11: \Consentire altre connessioni/Intervalli di porte specifici
Per sistemi basati su CentOS e firewalld
Usa firewall-cmd
- il client della riga di comando per il demone firewalld
.
I tuoi comandi saranno simili a:
- firewall-cmd --add-port=4000/tcp
Fai riferimento a Come impostare firewalld
per la tua distribuzione.
Nota:
- CentOS 7/8: \Impostazione di regole per le tue applicazioni/Apertura di una porta per le tue zone
- Rocky Linux 8/9: \Impostazione di regole per le tue applicazioni/Apertura di una porta per le tue zone”
Per altre distribuzioni Linux
Usa iptables
per modificare le regole del filtro dei pacchetti IPv4 del sistema.
- iptables -A INPUT -p tcp --dport 4000 -j ACCEPT
Fare riferimento a Come impostare un firewall utilizzando iptables
per la propria distribuzione.
Nota:
- Ubuntu 12.04: \Un firewall di base”
- Ubuntu 14.04: \Accetta altre connessioni necessarie
Testare la porta appena aperta per le connessioni TCP
Ora che hai aperto con successo una nuova porta TCP, è il momento di testarla.
Innanzitutto, avvia netcat (nc
) e ascolta (-l
) sulla porta (-p
) 4000
, mentre inviando 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 stare questa sessione per ora.
Apri un'altra sessione di terminale sulla stessa macchina.
Dato che hai aperto una porta TCP, usa 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 di 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
.
Otterrai 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
Anche l'output di ls
(while.sh
, in questo esempio) è stato inviato al client, indicando una connessione TCP riuscita.
Usa nmap
per controllare se la porta (-p
) è aperta:
- nmap localhost -p 4000
Questo comando controllerà 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
Il porto è stato aperto. 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, questo visualizzerà la porta 4000
come chiusa poiché al momento non ci sono applicazioni in ascolto su quella porta. Allo stesso modo, neanche telnet
funzionerà poiché necessita anche di un'applicazione in ascolto a cui collegarsi. Questo è il motivo per cui nc
è uno strumento così utile. Questo simula tali ambienti in 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 all'arresto o al riavvio del sistema. Quindi è necessario ripetere passaggi simili per riaprire la stessa porta dopo un riavvio.
Per ufw Firewall
Le regole ufw
non vengono reimpostate al riavvio. Questo perché è integrato nel processo di avvio e il kernel salva le regole del firewall usando ufw
applicando i file di configurazione appropriati.
Per firewalld
Dovrai applicare il flag --permanent
.
Fai riferimento a Come impostare firewalld
per la tua distribuzione.
Nota:
- CentOS 7/8: \Impostazione delle regole per le tue applicazioni”
- Rocky Linux 8/9: \Impostare regole per le tue applicazioni”
Per iptables
Sarà necessario salvare le regole di configurazione. Questi tutorial consigliano iptables-persistent
.
Fare riferimento a Come impostare un firewall utilizzando iptables
per la propria 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 usato anche netstat
, ss
, telnet
, nc
e nmap
.
Continua il tuo apprendimento con Come utilizzare Top, Netstat, Du e altri strumenti per monitorare le risorse del server.