Prima di apprendere come aprire una porta su Linux, capiamo cosa sono le porte di rete. Un porto è un punto finale di comunicazione. All'interno di un sistema operativo, una porta consente ai pacchetti di dati processi o servizi di rete specifici.
In genere, le porte identificano uno specifico servizio di rete assegnato loro. Questo può essere modificato configurando manualmente il servizio per utilizzare una porta diversa, ma in generale è possibile utilizzare le impostazioni predefinite.
Il primo 1024 porte (porte 0-1023 ) sono indicati come numeri di porta noti e sono riservati ai servizi più comunemente utilizzati, inclusi SSH (porta 22), HTTP e HTTPS (porte 80 e 443), ecc. I numeri di porta superiori a 1024 sono indicati come effimeri porti .
Tra i porti effimeri, i numeri di porta 1024-49151 sono chiamati Utente/Registrato Porti. Il resto dei porti, 49152-65535 sono chiamati Dinamici/Privati Porte.
In questo tutorial mostreremo come aprire una porta effimera su Linux, poiché i servizi più comuni utilizzano le porte conosciute.
Elenca tutte le porte aperte
Prima di aprire una porta su Linux, controlliamo prima l'elenco di tutte le porte aperte e scegliamo una porta temporanea da aprire da quell'elenco.
Possiamo usare netstat comando per elencare tutte le porte aperte, comprese quelle di TCP , UDP , che sono i protocolli più comuni per la trasmissione di pacchetti a livello di rete.
NOTA :Se la tua distribuzione non ha netstat
, non è un problema. Puoi usare il ss
comando per visualizzare le porte aperte tramite socket in ascolto.
netstat -lntu
Questo stamperà tutti gli ascolto socket (-l
) insieme al numero della porta (-n
), con TCP porte (-t
) e UDP porte (-u
) elencati anche nell'output.
Solo per assicurarci di ottenere risultati coerenti, verifichiamo questo utilizzando il ss
comando per elencare i socket in ascolto con una porta aperta.
ss -lntu
Questo fornisce più o meno le stesse porte aperte di netstat
, quindi siamo a posto!
Apertura di una porta su Linux per consentire connessioni TCP
Apriamo una porta chiusa e facciamo in modo che ascolti TCP Connessioni, per il bene di questo esempio.
Dalla porta 4000 non viene utilizzato nel mio sistema, scelgo di aprire la porta 4000 . Se quella porta non è aperta nel tuo sistema, sentiti libero di scegliere un'altra porta chiusa. Assicurati solo che sia maggiore di 1023 !
Ancora una volta, solo per essere sicuri, assicuriamoci che la porta 4000 non sia utilizzata, utilizzando il netstat
o il ss
comando.
netstat -na | grep :4000
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 firewall ufw
Ubuntu ha un firewall chiamato ufw
, che si occupa di queste regole per porte e connessioni, invece dei vecchi iptables
firewall. Se sei un utente Ubuntu, puoi aprire direttamente la porta usando ufw
sudo ufw allow 4000
Puoi saltare i prossimi passaggi e testare direttamente la tua nuova porta aperta!
Per sistemi basati su CentOS e firewalld
Per questi tipi di sistemi, se hai firewalld
come firewall principale, si consiglia di utilizzare firewall-cmd
per aggiornare le regole del firewall, invece dei vecchi iptables
firewall.
firewall-cmd --add-port=4000/tcp
NOTA:questo ripristinerà il firewalld
regole per impostazione predefinita al riavvio, quindi se desideri modificare questa impostazione in modo permanente, aggiungi il --permanent
flag al comando.
firewall-cmd --add-port=4000/tcp --permanent
Puoi saltare i prossimi passaggi e testare direttamente la tua nuova porta aperta!
Per altre distribuzioni Linux
Quindi aggiungiamo questa nuova porta alle regole di iptables del nostro sistema, usando iptables
comando.
Se questo comando non è ancora installato, scaricalo utilizzando il tuo gestore di pacchetti.
iptables -A INPUT -p tcp --dport 4000 -j ACCEPT
Questo imposta il firewall su append (-A
) la nuova regola per accettare i pacchetti di input tramite protocollo (-p
) TCP dove il porto di destinazione (--dport
) è 4000 e specifica il salto di destinazione (-j
) regola come ACCETTO .
Per aggiornare le regole del firewall, riavvia iptables
servizio.
sudo service iptables restart
O utilizzando systemctl
se ce l'hai.
sudo systemctl restart iptables
Testa la porta appena aperta per le connessioni TCP
Ora che abbiamo aperto con successo un nuovo TCP port (Porta 4000 nel mio caso), proviamolo.
Per prima cosa, avvieremo netcat (nc
) e ascolta sulla porta 4000, mentre invia l'output di ls
a qualsiasi client connesso. Quindi, dopo che un client ha aperto una connessione TCP sulla porta 4000, riceverà l'output di ls
.
ls | nc -l -p 4000
Questo fa sì che netcat sia in ascolto sulla porta 4000. Lascia stare questa sessione per ora.
Apri un'altra sessione terminale sulla stessa macchina.
Dato che ho aperto una porta TCP, userò telnet
per verificare la connettività TCP. Se il comando non esiste, di nuovo, installalo utilizzando il tuo gestore di pacchetti.
Formato per telnet :
telnet [hostname/IP address] [port number]
Quindi inserisci l'IP del tuo server e il numero di porta, che è 4000 nel mio caso, ed eseguire questo comando.
telnet localhost 4000
Questo 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
).
Come puoi vedere, l'output di ls
(while.sh
nel mio caso) è stato inviato anche al client, indicando una connessione TCP riuscita!
Per mostrarti che la porta è effettivamente aperta, possiamo usare nmap
per verificarlo.
nmap localhost -p 4000
Infatti, il nostro porto è stato aperto! Abbiamo aperto con successo una nuova porta sul nostro 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, verrà visualizzata la porta 4000 come chiusa, poiché al momento non ci sono applicazioni in ascolto su quella porta. Allo stesso modo, anche telnet non funzionerà, poiché ha bisogno anche di un'applicazione di ascolto a cui associarsi. Questo è il motivo per cui nc
è uno strumento così utile. Questo simula tali ambienti con un semplice comando.
Ma questo è solo temporaneo, poiché le modifiche verranno ripristinate ogni volta che riavviamo il sistema.
Necessità di aggiornare le regole dopo ogni riavvio
L'approccio presentato in questo articolo aggiornerà solo temporaneamente le regole del firewall fino allo spegnimento/riavvio del sistema. Quindi passaggi simili devono essere ripetuti per aprire nuovamente la stessa porta dopo un riavvio.
Per ufw Firewall
Il ufw
le regole non ripristina al riavvio, quindi se sei un utente Ubuntu, non devi preoccuparti di questa parte!
Questo perché è integrato nel processo di avvio e il kernel salva le regole del firewall usando ufw
, tramite file di configurazione appropriati.
Per firewalld
Come accennato in precedenza, firewalld
soffre anche dello stesso problema, ma questo può essere evitato aggiungendo un --permananent
flag al comando iniziale, quando si apre una porta o si imposta qualsiasi altra regola.
Ad esempio, puoi aprire la porta TCP 4000 permanentemente utilizzando il comando seguente:
firewall-cmd --zone=public --add-port=400/tcp --permanent
Per iptables
Per iptables
firewall, sebbene questo inconveniente non possa essere evitato, potremmo ridurre al minimo la seccatura.
Possiamo salvare iptables
regole in un file di configurazione, come /etc/iptables.conf
.
sudo iptables-save | sudo tee -a /etc/iptables.conf
Possiamo quindi recuperarlo dal file di configurazione dopo il riavvio, utilizzando il comando seguente:
sudo iptables-restore < /etc/iptables.conf
Ora, iptables
le regole sono ora aggiornate e i nostri porti vengono riaperti!
Conclusione
In questo tutorial, ti abbiamo mostrato come aprire una nuova porta su Linux e configurarla per le connessioni in entrata.