Antes de aprender a abrir un puerto en Linux, comprendamos qué son los puertos de red. Un puerto es un punto final de comunicación. Dentro de un sistema operativo, un puerto permite que los paquetes de datos realicen procesos específicos o servicios de red.
Por lo general, los puertos identifican un servicio de red específico que se les asigna. Esto se puede cambiar configurando manualmente el servicio para usar un puerto diferente, pero en general, se pueden usar los valores predeterminados.
El primer 1024 puertos (Puertos 0-1023 ) se denominan números de puerto conocidos y están reservados para los servicios más utilizados, incluidos SSH (puerto 22), HTTP y HTTPS (puertos 80 y 443), etc. Los números de puerto superiores a 1024 se denominan efímeros puertos .
Entre los puertos efímeros, Números de puerto 1024-49151 se denominan Registrado/Usuario Puertos. El resto de puertos, 49152-65535 se llaman como Dinámico/Privado Puertos.
En este tutorial, mostraremos cómo podemos abrir un puerto efímero en Linux, ya que los servicios más comunes usan los puertos conocidos.
Lista de todos los puertos abiertos
Antes de abrir un puerto en Linux, primero revisemos la lista de todos los puertos abiertos y elijamos un puerto efímero para abrir de esa lista.
Podemos usar el netstat comando para enumerar todos los puertos abiertos, incluidos los de TCP , UDP , que son los protocolos más comunes para la transmisión de paquetes en la capa de red.
NOTA :Si su distribución no tiene netstat
, No es un problema. Puedes usar el ss
Comando para mostrar puertos abiertos a través de conectores de escucha.
netstat -lntu
Esto imprimirá todos los escuchando enchufes (-l
) junto con el número del puerto (-n
), con TCP puertos (-t
) y UDP puertos (-u
) también aparece en la salida.
Solo para asegurarnos de obtener resultados consistentes, verifiquemos esto usando el ss
comando para enumerar los sockets de escucha con un puerto abierto.
ss -lntu
Esto da más o menos los mismos puertos abiertos que netstat
, ¡así que estamos listos para irnos!
Abrir un puerto en Linux para permitir conexiones TCP
Abramos un puerto cerrado y hagamos que escuche TCP Conexiones, por el bien de este ejemplo.
Desde el puerto 4000 no se está utilizando en mi sistema, elijo abrir el puerto 4000 . Si ese puerto no está abierto en su sistema, no dude en elegir otro puerto cerrado. Solo asegúrate de que sea mayor que 1023 !
Nuevamente, solo para asegurarnos, asegurémonos de que el puerto 4000 no se use, usando netstat
o el ss
comando.
netstat -na | grep :4000
ss -na | grep :4000
La salida debe quedar en blanco, verificando así que no se está utilizando actualmente, para que podamos agregar las reglas de puerto manualmente al firewall de iptables del sistema .
Para usuarios de Ubuntu y sistemas basados en cortafuegos ufw
Ubuntu tiene un cortafuegos llamado ufw
, que se encarga de estas reglas para puertos y conexiones, en lugar de las antiguas iptables
cortafuegos Si es usuario de Ubuntu, puede abrir directamente el puerto usando ufw
sudo ufw allow 4000
¡Puede omitir los siguientes pasos y probar directamente su puerto recién abierto!
Para sistemas basados en CentOS y firewalld
Para este tipo de sistemas, si tiene firewalld
como su firewall principal, se recomienda que use el firewall-cmd
para actualizar las reglas de su cortafuegos, en lugar de las antiguas iptables
cortafuegos.
firewall-cmd --add-port=4000/tcp
NOTA:Esto restablecerá el firewalld
reglas predeterminadas en un reinicio, por lo que si desea modificar esta configuración de forma permanente, agregue el --permanent
bandera al comando.
firewall-cmd --add-port=4000/tcp --permanent
¡Puede omitir los siguientes pasos y probar directamente su puerto recién abierto!
Para otras distribuciones de Linux
Así que agreguemos este nuevo puerto a las reglas de iptables de nuestro sistema, usando iptables
comando.
Si este comando aún no está instalado, obténgalo usando su administrador de paquetes.
iptables -A INPUT -p tcp --dport 4000 -j ACCEPT
Esto configura el cortafuegos para añadir (-A
) la nueva regla para aceptar paquetes de entrada vía protocolo (-p
) TCP donde el puerto de destino (--dport
) es 4000 y especifica el objetivo salto (-j
) regla como ACCEPT .
Para actualizar las reglas del firewall, reinicie iptables
servicio.
sudo service iptables restart
O usando systemctl
si lo tienes.
sudo systemctl restart iptables
Pruebe el puerto recién abierto para conexiones TCP
Ahora que hemos abierto con éxito un nuevo TCP (Puerto 4000 en mi caso), vamos a probarlo.
Primero, iniciaremos netcat (nc
) y escuche en el puerto 4000, mientras envía la salida de ls
a cualquier cliente conectado. Entonces, después de que un cliente haya abierto una conexión TCP en el puerto 4000, recibirá el resultado de ls
.
ls | nc -l -p 4000
Esto hace que netcat escuche en el puerto 4000. Deje esta sesión en paz por ahora.
Abra otra sesión de terminal en la misma máquina.
Como abrí un puerto TCP, usaré telnet
para comprobar la conectividad TCP. Si el comando no existe, nuevamente, instálelo usando su administrador de paquetes.
Formato para telnet :
telnet [hostname/IP address] [port number]
Así que ingresa la IP de tu servidor y el número de puerto, que es 4000 en mi caso, y ejecuta este comando.
telnet localhost 4000
Esto intenta abrir una conexión TCP en localhost
en el puerto 4000.
Obtendrá un resultado similar a este, que indica que se ha establecido una conexión con el programa de escucha (nc
).
Como puede ver, la salida de ls
(while.sh
en mi caso) también se ha enviado al cliente, lo que indica una conexión TCP exitosa.
Para mostrarle que el puerto está realmente abierto, podemos usar nmap
para comprobar esto.
nmap localhost -p 4000
¡De hecho, nuestro puerto ha sido abierto! ¡Hemos abierto con éxito un nuevo puerto en nuestro sistema Linux!
NOTA :nmap
solo enumera los puertos abiertos que tienen una aplicación actualmente escuchando. Si no usa ninguna aplicación de escucha como netcat, esto mostrará el puerto 4000 como cerrado, ya que actualmente no hay ninguna aplicación escuchando en ese puerto. Del mismo modo, telnet tampoco funcionará, ya que también necesita una aplicación de escucha para vincularse. Esta es la razón por la que nc
es una herramienta tan útil. Esto simula dichos entornos con un simple comando.
Pero esto es solo temporal, ya que los cambios se restablecerán cada vez que reiniciemos el sistema.
Necesita actualizar las reglas después de cada reinicio
El enfoque presentado en este artículo solo actualizará temporalmente las reglas del firewall hasta que el sistema se apague o reinicie. Por lo tanto, se deben repetir pasos similares para abrir el mismo puerto nuevamente después de reiniciar.
Para cortafuegos ufw
El ufw
las reglas son no restablecer al reiniciar, por lo que si es un usuario de Ubuntu, ¡no necesita preocuparse por esta parte!
Esto se debe a que está integrado en el proceso de arranque y el kernel guarda las reglas del cortafuegos usando ufw
, a través de los archivos de configuración apropiados.
Para cortafuegos
Como se mencionó anteriormente, firewalld
también sufre el mismo problema, pero esto se puede evitar agregando un --permananent
bandera al comando inicial, al abrir un puerto o establecer cualquier otra regla.
Por ejemplo, puede abrir el puerto TCP 4000 permanentemente usando el siguiente comando:
firewall-cmd --zone=public --add-port=400/tcp --permanent
Para iptables
Para las iptables
cortafuegos, aunque este inconveniente no se puede evitar, podemos minimizar la molestia.
Podemos guardar las iptables
reglas a un archivo de configuración, como /etc/iptables.conf
.
sudo iptables-save | sudo tee -a /etc/iptables.conf
Luego podemos recuperarlo del archivo de configuración después de reiniciar, usando el siguiente comando:
sudo iptables-restore < /etc/iptables.conf
Ahora, las iptables
¡Las reglas ahora se actualizaron y nuestros puertos se abrieron nuevamente!
Conclusión
En este tutorial, le mostramos cómo puede abrir un nuevo puerto en Linux y configurarlo para las conexiones entrantes.