Introducción
Un puerto es un punto final de comunicación. En un sistema operativo, un puerto se abre o se cierra a los paquetes de datos para procesos o servicios de red específicos.
Normalmente, los puertos identifican un servicio de red específico que se les asigna. Esto se puede cambiar configurando manualmente el servicio para que use un puerto diferente, pero, en general, se pueden usar los valores predeterminados.
Los primeros 1024 puertos (del 0 al 1023) se denominan puertos conocidos y están reservados para los servicios más comunes, como SSH (puerto 22), HTTP (puerto 80) y HTTPS (puerto 443).
Los números de puerto superiores a 1024 se denominan puertos efímeros.
- Los puertos 1024 a 49151 se denominan puertos registrados/de usuario.
- Los puertos 49152 a 65535 se denominan puertos dinámicos/privados.
En este tutorial, abrirá un puerto efímero en Linux, ya que la mayoría de los servicios comunes utilizan puertos conocidos.
Requisitos previos
- Familiaridad con el uso de la terminal
Lista de todos los puertos abiertos
Antes de abrir un puerto en Linux, debe verificar la lista de todos los puertos abiertos y seleccionar un puerto efímero para abrir que no esté en esa lista.
Utilice el comando netstat para enumerar todos los puertos abiertos, incluidos TCP y UDP, que son los protocolos más comunes para la transferencia de paquetes en la capa de red.
netstat -lntuEsto imprimirá:
- Todos los conectores de escucha (-l)
- Número de puerto (-n)
- Puertos TCP (-t)
- Puertos UDP (-u)
Output
Active 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:* LISTENVerifique que obtenga una salida consistente utilizando el comando ss para enumerar los sockets de escucha con puertos abiertos:
ss -lntuEsto imprimirá:
Output
Netid 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:*Esto proporciona más o menos los mismos puertos abiertos que netstat.
Abrir un puerto en Linux para permitir conexiones TCP
Ahora, abra un puerto cerrado y haga que escuche conexiones TCP.
Para este tutorial, abrirá el puerto 4000. Sin embargo, si ese puerto no está abierto en su sistema, puede elegir otro puerto cerrado. Solo asegúrese de que sea mayor que 1023.
Asegúrese de que el puerto 4000 no esté en uso mediante el comando netstat:
netstat -na | grep :4000O el comando ss:
ss -na | grep :4000La salida debe dejarse en blanco, así que verifique que no esté actualmente en uso, para que pueda agregar manualmente reglas de puerto al firewall del sistema iptables.
Para usuarios de Ubuntu y sistemas basados en ufw
Utilice ufw, un cliente de línea de comandos para un firewall sin complicaciones.
Tus comandos son similares a:
sudo ufw allow 4000Para sistemas basados en CentOS y firewall
Utilice firewall-cmd: cliente de línea de comandos para el demonio firewalld.
Tus comandos son similares a:
firewall-cmd --add-port=4000/tcpPara otras distribuciones de Linux
Utilice iptables para modificar las reglas de filtrado de paquetes IPv4 del sistema.
iptables -A INPUT -p tcp --dport 4000 -j ACCEPTPruebe el puerto recién abierto para conexiones TCP
Ahora que ha abierto con éxito un nuevo puerto TCP, es hora de probarlo.
Primero, inicie netcat (nc) y escuche (-l) en el puerto (-p) 4000, mientras envía la salida de ls a cada cliente conectado:
ls | nc -l -p 4000Ahora, después de que un cliente abra una conexión TCP en el puerto 4000, recibirá la salida de ls. Salga de esta sesión por ahora.
Abra otra sesión de terminal en el mismo dispositivo.
Dado que abrió un puerto TCP, use telnet para comprobar la conexión TCP. Si el comando no está disponible, instálelo con su gestor de paquetes.
Ingrese la IP de su servidor y el número de puerto (4000 en este ejemplo) y ejecute este comando:
telnet localhost 4000Este comando intenta abrir una conexión TCP en el host local en el puerto 4000.
Recibirá un resultado similar a éste, indicando que se ha establecido una conexión con el programa de escucha (nc):
Output
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
while.shLa salida de ls (en este ejemplo while.sh) también se envía al cliente, lo que indica una conexión TCP exitosa.
Utilice nmap para comprobar si el puerto está abierto (-p):
nmap localhost -p 4000Este comando comprueba si hay puertos abiertos:
Output
Starting 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 secondsEl puerto se ha abierto. Ha abierto correctamente un nuevo puerto en su sistema Linux.
Pero esto es sólo temporal, ya que los cambios se restablecen cada vez que se reinicia el sistema.
Reglas sostenibles
El enfoque presentado en este artículo solo actualiza temporalmente las reglas del firewall hasta que el sistema se apague o reinicie. Por lo tanto, deben repetirse los mismos pasos para reabrir el mismo puerto después del reinicio.
Para el cortafuegos ufw
Las reglas de ufw no se restablecen al reiniciar. Esto se debe a que está integrado en el proceso de arranque y el kernel almacena las reglas del firewall mediante ufw aplicando los archivos de configuración adecuados.
Para cortafuegos
Si desea agregar el puerto a la configuración del firewall permanente y aplicar los cambios inmediatamente, puede usar los indicadores --permanent y --reload:
sudo firewall-cmd --permanent --add-port=4000/tcp
sudo firewall-cmd --reloadPara iptables
Debe guardar las reglas de configuración y utilizar el comando iptables-persistent.
Resultado
En este tutorial, aprendiste a abrir un nuevo puerto en Linux y a configurarlo para conexiones entrantes. También usaste netstat, ss, telnet, nc y nmap.









