Iniciar sesión
Iniciar sesión

Cómo abrir puertos y listar puertos abiertos en Linux

Cómo abrir puertos y listar puertos abiertos en Linux
Hostman Team
Redactor técnico
Sistema Linux Redes
10.10.2025
Reading time: 6 min

Al trabajar con redes en Linux, puede ser necesario abrir o cerrar un puerto de red. La gestión de puertos es esencial para la seguridad: cuantos menos puertos abiertos tenga un sistema, menos vectores de ataque potenciales existen. Además, si un puerto está cerrado, un atacante no puede recopilar información sobre el servicio que se ejecuta en ese puerto específico.

Esta guía explica cómo abrir o cerrar puertos y cómo comprobar los puertos abiertos en distribuciones de Linux como Ubuntu/Debian y CentOS/RHEL utilizando cortafuegos como ufw, firewalld e iptables.

Demostraremos este proceso en dos distribuciones Linux: Ubuntu 22.04 y CentOS 9, ejecutadas en un VPS de Hostman. Todos los comandos proporcionados aquí funcionarán en cualquier distribución basada en Debian o RHEL.

¿Qué es un puerto de red?

Los puertos se utilizan para acceder a aplicaciones y protocolos específicos. Por ejemplo, un servidor puede alojar tanto un servidor web como una base de datos — los puertos dirigen el tráfico al servicio adecuado. Técnicamente, un puerto de red es un número entero no negativo que va de 0 a 65535.

  • Puertos reservados (0–1023): utilizados por protocolos y servicios de red populares como SSH (puerto 22), FTP (puerto 21), HTTP (puerto 80) y HTTPS (puerto 443).

  • Puertos registrados (1024–49151): pueden ser utilizados por aplicaciones específicas para comunicarse.

  • Puertos dinámicos (49152–65535): se usan para conexiones temporales y pueden asignarse dinámicamente a aplicaciones.

Cómo abrir puertos en distribuciones basadas en Debian

En sistemas basados en Debian (Ubuntu, Debian, Linux Mint, etc.), puedes usar ufw (Uncomplicated Firewall).

ufw viene preinstalado en la mayoría de las distribuciones basadas en APT. Para verificar si está instalado:

ufw version

Si se muestra una versión, ufw está instalado. De lo contrario, instálalo con:

apt update && apt -y install ufw

Por defecto, ufw está inactivo, lo que significa que todos los puertos están abiertos. Puedes verificar su estado con:

ufw status

Para activarlo:

ufw enable

Deberás confirmar con y. Ten en cuenta que habilitar ufw puede interrumpir las conexiones SSH actuales. Por defecto, ufw bloquea todo el tráfico entrante y permite todo el tráfico saliente.

Para comprobar la política por defecto:

cat /etc/default/ufw

Image7

Abrir puertos con ufw

Para abrir un puerto:

ufw allow <port_number>

Ejemplo — abrir el puerto 22 para SSH:

ufw allow 22

Puedes abrir varios puertos separándolos con comas y especificando el protocolo (tcp o udp):

ufw allow 80,443,8081,8443/tcp
ufw allow 80,443,8081,8443/udp

En lugar de números de puerto, puedes usar el nombre del servicio (definido en /etc/services).

Image8

Ejemplo — abrir Telnet (puerto 23):

ufw allow telnet

Nota: No puedes especificar varios nombres de servicios a la vez; ufw devolverá un error:

Image1 (1)

Para abrir un rango de puertos:

ufw allow <start_port>:<end_port>/<protocol>

Ejemplo:

ufw allow 8000:8080/tcp

Cerrar puertos con ufw

Para cerrar un puerto:

ufw deny <port_number>

Ejemplo — cerrar el puerto 80:

ufw deny 80

También puedes usar el nombre del servicio. Ejemplo — cerrar FTP (puerto 21):

ufw deny ftp

Ver puertos abiertos con ufw

Para listar todos los puertos abiertos y cerrados:

ufw status

Image18

O para una vista más detallada:

ufw status verbose

Cómo abrir un puerto en distribuciones basadas en RHEL

Las distribuciones basadas en RHEL (CentOS 7+, RHEL 7+, Fedora 18+, OpenSUSE 15+) usan firewalld por defecto.

Abrir puertos con firewalld

Verifica si firewalld está instalado:

firewall-offline-cmd -V

Si se muestra una versión, firewalld está instalado. Si no, instálalo:

dnf install firewalld

Por defecto, firewalld está deshabilitado. Verifica su estado:

firewall-cmd --state

Para habilitarlo:

systemctl start firewalld

Abrir el puerto 8080 para TCP:

firewall-cmd --zone=public --add-port=8080/tcp --permanent
  • --zone=public: especifica la zona de la regla.
  • --add-port=8080/tcp: especifica el puerto y el protocolo.
  • --permanent: guarda la regla de forma permanente.

Image12

También puedes abrir un servicio utilizando su nombre, por ejemplo HTTP (puerto 80):

firewall-cmd --zone=public --add-service=http --permanent

Aplicar los cambios:

firewall-cmd --reload

Cerrar puertos con firewalld

Para cerrar un puerto por número:

firewall-cmd --zone=public --remove-port=8080/tcp --permanent

Image4

O por nombre del servicio:

firewall-cmd --zone=public --remove-service=http --permanent

Recarga siempre después de los cambios:

firewall-cmd --reload

Listar puertos abiertos con firewalld

Para listar todos los puertos abiertos:

firewall-cmd --list-ports

Gestionar puertos con iptables

A diferencia de ufw y firewalld, iptables viene preinstalado en muchas distribuciones (Ubuntu, Debian, RHEL, Rocky Linux, AlmaLinux).

Abrir puertos con iptables

Para abrir el puerto 8182 para conexiones entrantes:

iptables -A INPUT -p tcp --dport 8182 -j ACCEPT
  • -A INPUT: agrega una regla a la cadena INPUT.
  • -p tcp: especifica el protocolo.
  • --dport 8182: especifica el puerto a abrir.
  • -j ACCEPT: permite el tráfico a través del puerto.

Para conexiones salientes:

iptables -A OUTPUT -p tcp --dport 8182 -j ACCEPT

Para abrir un rango de puertos:

iptables -A INPUT -p tcp --match multiport --dports 1024:2000 -j ACCEPT

Cerrar puertos con iptables

Para cerrar un puerto:

iptables -A INPUT -p tcp --dport 8182 -j DROP

Cerrar un rango de puertos:

iptables -A INPUT -p tcp --match multiport --dports 1024:2000 -j DROP

Guardar reglas de iptables

Por defecto, las reglas de iptables solo son efectivas hasta que se reinicie el servidor. Para guardarlas permanentemente, instala iptables-persistent:

Para sistemas basados en APT:

apt update && apt -y install iptables-persistent

Para sistemas basados en DNF:

dnf -y install iptables-persistent

Guardar las reglas actuales:

iptables-save

Las reglas se recargarán automáticamente tras el siguiente reinicio.

Ver puertos abiertos con iptables

Listar todas las reglas y puertos abiertos:

iptables -L -v -n

Listar solo reglas IPv4:

iptables -S

Listar reglas IPv6:

ip6tables -S

Conclusión

En esta guía hemos mostrado cómo abrir y cerrar puertos de red en Linux y cómo comprobar los puertos abiertos actualmente utilizando tres herramientas diferentes: ufw, firewalld e iptables. Una gestión adecuada de los puertos reduce el riesgo de posibles ataques a la red y ayuda a ocultar información sobre los servicios que utilizan esos puertos.

Sistema Linux Redes
10.10.2025
Reading time: 6 min

Similares

Sistema Linux

Cómo abrir un puerto en Linux

Abrir puertos en Linux es una tarea esencial que permite que ciertos servicios o aplicaciones intercambien datos a través de la red.  Los puertos actúan como canales de comunicación, permitiendo el acceso a servicios autorizados y bloqueando las conexiones no deseadas. Una correcta gestión de los puertos es clave para mantener seguridad, rendimiento estable y funcionamiento fiable del sistema. Comprender los puertos y su función Los puertos son puntos finales lógicos de comunicación de red, donde los dispositivos envían y reciben información. Ejemplos comunes: HTTP usa el puerto 80 HTTPS usa el puerto 443 SSH usa el puerto 22 Un puerto abierto indica que hay un servicio escuchando y aceptando tráfico entrante a través de él. Un puerto cerrado bloquea la comunicación. Gestionar correctamente los puertos abiertos en Linux es fundamental para mantener disponibilidad y seguridad. Cómo comprobar los puertos abiertos en Linux Antes de abrir un puerto, conviene verificar qué puertos están actualmente activos. Existen varias herramientas y comandos de Linux para hacerlo. Con netstat Ejecuta el siguiente comando para mostrar los puertos abiertos: netstat -tuln La opción -tuln limita la salida a puertos TCP y UDP, sin resolver nombres de host. netstat ofrece una vista en tiempo real de las conexiones de red activas. Nota: si netstat no está instalado: sudo apt install net-tools Con ss El comando ss es una versión moderna y más rápida de netstat: ss -tuln Muestra los puertos en uso y la información de los sockets activos. Con nmap Para un análisis más detallado de los puertos abiertos: nmap localhost nmap analiza el host especificado (en este caso, localhost) y muestra los puertos accesibles. Es útil para identificar qué servicios están expuestos a la red pública. Nota: instala nmap con: sudo apt install nmap Cómo abrir puertos en Linux Para permitir el acceso a través de un puerto específico, es necesario modificar las reglas del firewall. Linux ofrece varias herramientas para gestionar esto: iptables, ufw y firewalld. A continuación, te mostramos cómo usarlas. Método 1: con iptables iptables es una herramienta potente y de bajo nivel que proporciona control detallado sobre el tráfico de red. Añadir una regla para permitir tráfico en un puerto Ejemplo: habilitar acceso HTTP en el puerto 8080: sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT Explicación: sudo: ejecuta el comando con privilegios de administrador -A INPUT: agrega la regla a la cadena de entrada (tráfico entrante) -p tcp: aplica la regla al protocolo TCP --dport 8080: especifica el puerto 8080 -j ACCEPT: acepta el tráfico que cumpla la regla Estas reglas no son permanentes: se pierden al reiniciar el sistema. sudo apt install iptables iptables-persistent Guardar la configuración Para hacer que las reglas persistan después del reinicio: sudo netfilter-persistent save Esto almacena las reglas actuales para que se apliquen automáticamente al reiniciar. Recargar la configuración sudo netfilter-persistent reload Método 2: con ufw (Uncomplicated Firewall) ufw es una interfaz simplificada para iptables que facilita la gestión de reglas del firewall. Activar ufw sudo ufw enable Si no está instalado: sudo apt install ufw Permitir tráfico por un puerto específico Ejemplo: abrir la puerta 22 (SSH): sudo ufw allow 22/tcp Esto permite conexiones TCP entrantes al puerto 22, generalmente usadas para acceso remoto SSH. Ver el estado del firewall sudo ufw status Muestra todas las reglas activas y los puertos abiertos. Método 3: con firewalld firewalld es un servicio de firewall dinámico más flexible y fácil de configurar que iptables. Agregar una regla permanente Ejemplo: abrir la puerta 443 (HTTPS): sudo firewall-cmd --permanent --add-port=443/tcp Instala y activa firewalld con: sudo apt install firewalld sudo systemctl enable firewalld sudo systemctl start firewalld Recargar las reglas sudo firewall-cmd --reload Comprobar si el puerto está abierto sudo firewall-cmd --list-all Muestra todas las zonas y reglas activas, incluidas las puertas abiertas. Cómo probar el puerto abierto Después de abrir un puerto, verifica si realmente está accesible. Con telnet telnet localhost port_number Si la conexión se establece, el puerto está abierto y operativo. Con nmap nmap -p port_number localhost Verifica si el puerto especificado está accesible en el host local. Con curl curl localhost:port_number Si el servicio responde, significa que está activo en esa puerta. Solución de problemas comunes Si el puerto no se abre correctamente: Verifica las reglas del firewall: iptables -L ufw status Comprueba el estado del servicio: systemctl status <nombre_del_servicio> Abrir puertos según el protocolo Dependiendo del servicio, puede ser necesario usar TCP o UDP. Abrir un puerto TCP Ejemplo: permitir tráfico MySQL en el puerto 3306: sudo ufw allow 3306/tcp Abrir un puerto UDP Ejemplo: permitir tráfico SNMP en el puerto 161: sudo ufw allow 161/udp UDP proporciona comunicación más rápida y sin conexión, ideal para herramientas de monitoreo. Gestionar el acceso a los puertos Restringir el acceso a una IP específica sudo ufw allow from 192.168.1.100 to any port 22 Esto permite acceso SSH al puerto 22 solo desde esa dirección IP, mejorando la seguridad. Cerrar un puerto sudo ufw deny 80/tcp Bloquea el tráfico entrante por el puerto 80 (HTTP). Conclusión Comprobar y abrir puertos en Linux es fundamental para optimizar el funcionamiento de red y mantener la seguridad de los servicios. Con herramientas como iptables, ufw y firewalld, puedes controlar el tráfico de forma segura y flexible. Siempre prueba tus configuraciones con nmap, curl o telnet para confirmar que el puerto está correctamente abierto. Una buena gestión de puertos garantiza servidores estables, conexiones seguras y un rendimiento confiable.
29 October 2025 · 5 min to read
Sistema Linux

¿Qué es un daemon en informática?

El término daemon proviene de la mitología griega antigua, donde hacía referencia a un ser inmaterial que influía en el mundo humano. En informática, especialmente en los sistemas operativos tipo UNIX, un daemon es un proceso en segundo plano que se ejecuta sin interacción directa del usuario. No depende de una terminal o interfaz de usuario y normalmente se inicia con el arranque del sistema o bajo ciertas condiciones. Qué es un daemon La función principal de un daemon es proporcionar servicios específicos a otros procesos o usuarios. Por ejemplo, un daemon puede escuchar en puertos de red esperando conexiones, supervisar eventos del sistema y responder cuando se cumplen ciertas condiciones, gestionar tareas programadas (como cron), enviar correos electrónicos (sendmail) y mucho más. En Windows, el equivalente más cercano a un daemon es un servicio (Service). La diferencia radica principalmente en cómo se inician, registran, gestionan y configuran dentro del sistema operativo. Sin embargo, su propósito es el mismo: garantizar la operación continua en segundo plano de ciertas funciones o servicios. Características clave de un daemon Se ejecuta en segundo plano: los usuarios normalmente no ven la interfaz del daemon; no escribe en la salida estándar (o la redirige a los registros) ni solicita entrada por teclado. Autónomo: un daemon se inicia al arrancar el sistema cuando lo activa un sistema de inicio (como systemd) o manualmente por el usuario (mediante scripts, cron, etc.). Larga duración: idealmente, un daemon se ejecuta indefinidamente a menos que ocurra un error crítico o reciba una señal de detención explícita. Aislado: generalmente se ejecuta bajo una cuenta de usuario o grupo separada para minimizar privilegios, lo que hace que los servicios sean más seguros y fáciles de administrar. Registro: en lugar de usar la entrada/salida estándar, los daemons registran información en archivos de registro o en el registrador del sistema (journald, syslog, etc.), lo cual es útil para la depuración y el diagnóstico. Daemons en Linux Históricamente, casi todas las tareas del sistema en segundo plano en Linux se implementan como daemons. El sistema operativo incluye docenas de ellos, cada uno responsable de una función específica. Aquí algunos ejemplos: sshd (Secure Shell Daemon): escucha en el puerto 22 (por defecto) y permite que los usuarios remotos se conecten mediante SSH cifrado. Sin sshd, el acceso remoto por terminal sería casi imposible. cron: un daemon planificador de tareas. Revisa las entradas del crontab y ejecuta scripts o comandos en horarios establecidos, como limpieza de registros, envío de informes, comprobaciones del sistema, etc. syslogd / rsyslog / journald: daemons de registro del sistema que recopilan mensajes del kernel, utilidades, otros daemons y aplicaciones, y los guardan en archivos de registro o en el journal. NetworkManager o Wicd: daemons que gestionan la configuración de red, automatizando conexiones a redes cableadas o inalámbricas, cambios, configuración de VPN y más. Estos daemons se inician con el arranque del sistema y están registrados en el gestor de servicios (por ejemplo, systemd). Se ejecutan hasta que el sistema se apaga o reinicia. Los usuarios interactúan con ellos de forma indirecta, mediante archivos de configuración, comandos de terminal (service, systemctl) o solicitudes de red (si el daemon ofrece una interfaz HTTP/S, SSH u otra). Cómo crear y gestionar daemons Para implementar un daemon, siga estos pasos: Creación del proceso (fork): el proceso padre llama a fork() y continúa ejecutando el código del daemon en el proceso hijo. Desvincular del terminal de control (setsid): para evitar la interferencia del usuario (por ejemplo, cerrar la terminal), el daemon llama a setsid() para iniciar una nueva sesión y convertirse en su líder. Cerrar descriptores de entrada/salida estándar: como el daemon no debe escribir en la pantalla ni esperar entrada, stdin, stdout y stderr se cierran o se redirigen a archivos de registro. Manejo de señales y registro: para permitir un apagado limpio o la recarga de configuración, el daemon debe manejar señales (SIGTERM, SIGHUP, etc.). El registro suele realizarse mediante syslog o archivos. Bucle principal: tras la inicialización, el daemon entra en su bucle principal: espera eventos, los maneja y repite el ciclo hasta que se detiene. Veamos cómo crear un daemon en Ubuntu 22.04 utilizando un servidor en la nube de Hostman. 1. Escribir el daemon en C Cree un archivo llamado mydaemon.c e inserte el siguiente código: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <syslog.h> int main() { // Abrir syslog     openlog("mydaemon", LOG_PID, LOG_DAEMON); syslog(LOG_NOTICE, "Daemon started"); // Bucle infinito principal     while (1) { // Tareas en segundo plano: monitoreo, gestión de colas, etc. syslog(LOG_NOTICE, "Performing task..."); sleep(60); } // Si el bucle termina     syslog(LOG_NOTICE, "Daemon stopped"); closelog(); return 0; } 2. Compilar el programa Primero, actualice sus paquetes: sudo apt update && sudo apt upgrade Instale el compilador GCC si no está instalado: sudo apt install gcc Compile el daemon: gcc mydaemon.c -o mydaemon 3. Mover el ejecutable Mueva el binario a /usr/local/bin/, una ubicación estándar para utilidades personalizadas: mv mydaemon /usr/local/bin/mydaemon 4. Crear un servicio systemd Cree un archivo de unidad llamado mydaemon.service: sudo nano /etc/systemd/system/mydaemon.service Inserte el siguiente contenido: [Unit] Description=My Daemon After=network.target [Service] Type=simple ExecStart=/usr/local/bin/mydaemon Restart=on-failure [Install] WantedBy=multi-user.target Explicación de los campos: Description: descripción mostrada en systemctl status. After=network.target: asegura que el daemon se inicie después de que la red esté activa. Type=simple: el daemon no crea subprocesos, se ejecuta como un solo proceso. ExecStart: ruta al ejecutable del daemon. Restart=on-failure: reinicia automáticamente si el daemon falla. WantedBy=multi-user.target: hace que el servicio se inicie en el entorno estándar multiusuario. 5. Iniciar y supervisar el daemon sudo systemctl daemon-reload # Recargar configuración de systemd sudo systemctl start mydaemon # Iniciar el daemon sudo systemctl status mydaemon # Verificar estado Si todo funciona correctamente, el estado mostrará active. Para ver los registros: journalctl -u mydaemon.service -e Ejemplos de uso de daemons Servidores web Su función es escuchar en un puerto de red (normalmente 80 o 443), aceptar solicitudes HTTP/HTTPS, generar una respuesta (una página HTML, datos JSON, etc.) y enviarla de vuelta al cliente. En la mayoría de los casos, un servidor web se inicia con el sistema y continúa ejecutándose hasta que el servidor se apaga o se detiene manualmente (por ejemplo, systemctl stop nginx). Daemons de bases de datos MySQL/MariaDB, PostgreSQL, MongoDB: todos son daemons. Se inician con el sistema y se ejecutan en segundo plano, aceptando solicitudes de aplicaciones cliente o servicios web. Estos daemons registran su actividad, admiten configuración mediante archivos y se gestionan con utilidades especiales (o systemd). Planificadores de tareas (cron, atd) El daemon cron revisa la tabla de planificación (crontab) y ejecuta programas en los horarios o intervalos definidos por el usuario. Esto permite automatizar copias de seguridad, actualizaciones del sistema, verificaciones de estado y muchas otras tareas rutinarias. atd es un daemon similar, pero ejecuta tareas solo una vez en un momento específico (a diferencia de cron, que las ejecuta regularmente). Servicios de acceso y control (sshd, xrdp) sshd (Secure Shell Daemon) ofrece acceso remoto mediante el protocolo SSH. xrdp habilita conexiones de escritorio remoto utilizando el protocolo RDP. Actúa como un daemon que escucha conexiones de red en un puerto determinado. Daemons del sistema de inicio (systemd, init, Upstart) En los sistemas modernos, el papel del “daemon principal” lo cumple systemd (que reemplaza al antiguo sistema SysV init). systemd es el primer proceso que se inicia después del kernel y se encarga de lanzar y gestionar todos los demás servicios y procesos. Los inicia en paralelo y maneja sus dependencias. En resumen, systemd es en sí mismo un daemon que “orquesta” a todos los demás en el sistema. Ventajas y desventajas de los daemons Ventajas: Automatización: los daemons permiten automatizar el comportamiento del sistema, desde responder a solicitudes de red hasta programar tareas, sin intervención del usuario. Aislamiento: al ejecutarse bajo cuentas de usuario o grupo separadas y desligarse del terminal, aumentan la seguridad al limitar los daños potenciales en caso de compromiso. Operación continua: un daemon puede seguir prestando servicios (como un servidor web) sin interrupción, incluso si el usuario cierra sesión o la consola. Manejabilidad: Linux ofrece herramientas del sistema (por ejemplo, systemd, scripts init) para gestionar todos los daemons de forma centralizada: iniciar, detener, reiniciar y registrar. Desventajas: Complejidad de depuración: dado que los daemons se ejecutan en segundo plano y no muestran salida en la consola, la depuración requiere registros detallados y configuraciones más complejas (banderas de depuración, trazas, etc.). Riesgos de seguridad: si un daemon se ejecuta con privilegios elevados (por ejemplo, como root), cualquier vulnerabilidad puede comprometer el sistema completo. Es recomendable ejecutarlos con permisos limitados. Gestión de dependencias: algunos daemons pueden fallar si, por ejemplo, necesitan acceso a la red antes de que esté disponible. Los sistemas init modernos resuelven esto, pero con los scripts clásicos SysV era un problema común. Mayor uso de recursos: cualquier proceso en ejecución constante consume recursos del sistema (memoria, CPU). Si hay demasiados daemons, el rendimiento puede verse afectado, especialmente en sistemas con recursos limitados. Conclusión Los daemons son fundamentales en la arquitectura de los sistemas operativos Linux, ya que ofrecen amplias capacidades de automatización y servicios en segundo plano. Permiten a los administradores configurar de manera flexible operaciones de red, tareas programadas, registros, sistemas de seguridad y muchos otros componentes. Escribir su propio daemon requiere comprender procesos, señales, llamadas al sistema y prestar especial atención al registro y la seguridad. Los sistemas init modernos (especialmente systemd) han simplificado la gestión de daemons y la lógica de servicios, haciendo que la creación de servicios personalizados sea más estructurada y flexible. Sin embargo, sigue siendo un campo complejo que exige diseño cuidadoso, depuración y mantenimiento continuo. Si busca una solución confiable, de alto rendimiento y económica para sus flujos de trabajo, Hostman le ofrece opciones de Hosting VPS Linux, incluidas Debian VPS, Ubuntu VPS y VPS CentOS.
23 October 2025 · 10 min to read
Sistema Linux

Cómo descargar archivos con cURL

La descarga de contenido desde servidores remotos es una tarea habitual tanto para administradores como para desarrolladores. Aunque existen numerosas herramientas para este trabajo, cURL destaca por su adaptabilidad y simplicidad. Es una utilidad de línea de comandos que admite protocolos como HTTP, HTTPS, FTP y SFTP, lo que la hace esencial para la automatización, los scripts y las transferencias de archivos eficientes. Puedes ejecutar cURL directamente en tu computadora para obtener archivos. También puedes incluirlo en scripts para optimizar el manejo de datos, reduciendo así el esfuerzo manual y los errores. Esta guía muestra varias formas de descargar archivos con cURL. Siguiendo estos ejemplos, aprenderás a manejar redirecciones, renombrar archivos y monitorear el progreso de las descargas. Al final, deberías poder usar cURL con confianza para tareas en servidores o entornos en la nube. Comando básico de cURL para descargar archivos El comando curl funciona con varios protocolos, pero se utiliza principalmente con HTTP y HTTPS para conectarse a servidores web. También puede interactuar con servidores FTP o SFTP cuando sea necesario. Por defecto, cURL recupera un recurso de una URL especificada y lo muestra en tu terminal (salida estándar). Esto es útil para previsualizar el contenido de archivos sin guardarlos, especialmente si se trata de archivos de texto pequeños. Ejemplo: Para ver el contenido de un archivo de texto alojado en https://example.com/file.txt, ejecuta: curl https://example.com/file.txt Para documentos de texto cortos, este enfoque es adecuado. Sin embargo, los archivos grandes o binarios pueden llenar la pantalla con datos ilegibles, por lo que normalmente querrás guardarlos en su lugar. Guardar archivos remotos A menudo, el objetivo principal es almacenar el archivo descargado en tu máquina local en lugar de verlo en la terminal. cURL simplifica esto con la opción -O (O mayúscula), que conserva el nombre original del archivo remoto. curl -O https://example.com/file.txt Esto descarga file.txt y lo guarda en el directorio actual con el mismo nombre. Este método es rápido y mantiene el nombre del archivo existente, lo cual puede ser útil si el nombre tiene relevancia. Elegir un nombre de archivo diferente A veces es importante renombrar el archivo descargado para evitar conflictos o crear un esquema de nombres claro. En este caso, utiliza la opción -o (o minúscula): curl -o myfile.txt https://example.com/file.txt Aquí, cURL descarga el archivo remoto file.txt pero lo guarda localmente como miarchivo.txt. Esto ayuda a mantener los archivos organizados o evita sobrescrituras accidentales. Es especialmente útil en scripts que requieren nombres de archivo descriptivos. Seguir redirecciones Cuando se solicita un archivo, los servidores pueden instruir a tu cliente para que vaya a una URL diferente. Comprender y manejar las redirecciones es fundamental para realizar descargas exitosas. Por qué las redirecciones son importantes Las redirecciones se usan comúnmente en sitios web reorganizados, archivos movidos o enlaces espejo. Sin soporte para redirecciones, cURL se detiene después de recibir una respuesta de “movido” y no obtendrás el archivo. Usar -L o --location Para indicarle a cURL que siga una cadena de redirecciones hasta llegar al destino final, utiliza -L (o --location): curl -L -O https://example.com/redirected-file.jpg Esto permite que cURL obtenga el archivo correcto incluso si la URL original apunta a otro lugar. Si omites -L, cURL simplemente mostrará el mensaje de redirección y finalizará, lo que puede causar problemas en sitios con múltiples redirecciones. Descargar múltiples archivos cURL también puede manejar múltiples descargas a la vez, evitando que ejecutes el comando repetidamente. Usar llaves y patrones Si los nombres de los archivos comparten un patrón, las llaves {} te permiten especificar cada nombre de manera concisa: curl -O https://example.com/files/{file1.jpg,file2.jpg,file3.jpg} cURL descarga cada archivo en secuencia, lo que resulta práctico para flujos de trabajo automatizados. Usar rangos Para una serie de archivos numerados o etiquetados alfabéticamente, especifica un rango entre corchetes: curl -O https://example.com/files/file[1-5].jpg cURL itera automáticamente por los archivos file1.jpg hasta file5.jpg. Esto es ideal para secuencias de archivos con nombres consistentes. Encadenar múltiples descargas Si tienes diferentes URLs para cada archivo, puedes encadenarlas juntas: curl -O https://example1.com/file1.jpg -O https://example2.com/file2.jpg Este método descarga file1.jpg del primer sitio y file2.jpg del segundo, sin necesidad de ejecutar múltiples comandos. Límite de velocidad y tiempos de espera En ciertas situaciones, puede que quieras controlar la velocidad de descarga o evitar que cURL espere demasiado por un servidor que no responde. Control de ancho de banda Para evitar saturar tu red o simular condiciones lentas, limita la velocidad de descarga con --limit-rate: curl --limit-rate 2M -O https://example.com/bigfile.zip 2M significa 2 megabytes por segundo. También puedes usar K para kilobytes o G para gigabytes. Tiempos de espera Si un servidor es demasiado lento, puede que quieras que cURL se detenga después de cierto tiempo. La opción --max-time hace precisamente eso: curl --max-time 60 -O https://example.com/file.iso Aquí, cURL se detiene después de 60 segundos, lo cual es útil en scripts que necesitan fallar rápidamente cuando hay problemas. Modo silencioso y detallado cURL puede ajustar su salida para mostrar información mínima o detalles extensos. Descargas silenciosas Para tareas automáticas o cron jobs donde no necesitas ver barras de progreso, incluye -s (o --silent): curl -s -O https://example.com/file.jpg Esto oculta el progreso y los errores, lo cual es útil para registros más limpios. Sin embargo, la depuración es más difícil si ocurre un error silencioso. Modo detallado En contraste, -v (o --verbose) muestra información detallada sobre las solicitudes y respuestas: curl -v https://example.com La salida detallada es invaluable para depurar problemas como certificados SSL inválidos o redirecciones incorrectas. Autenticación y seguridad Algunas descargas requieren credenciales o una conexión segura. Autenticación HTTP/FTP Cuando un servidor requiere un nombre de usuario y contraseña, usa -u: curl -u username:password -O https://example.com/protected/file.jpg Incrustar credenciales directamente puede ser riesgoso, ya que podrían aparecer en registros o listas de procesos. Considera usar variables de entorno o archivos .netrc para un manejo más seguro. HTTPS y certificados Por defecto, cURL verifica los certificados SSL. Si el certificado no es válido, cURL bloquea la transferencia. Puedes omitir esta verificación con -k o --insecure, aunque esto implica riesgos de seguridad. Siempre que sea posible, usa una autoridad certificadora de confianza para mantener las conexiones autenticadas. Uso de un proxy En algunos entornos, el tráfico debe pasar por un servidor proxy antes de llegar al destino. Descargar a través de un proxy Usa la opción -x o --proxy para especificar el proxy: curl -x http://proxy_host:proxy_port -O https://example.com/file.jpg Reemplaza proxy_host y proxy_port con los datos correspondientes. cURL envía la solicitud al proxy, que luego recupera el archivo por ti. Autenticación del proxy Si tu proxy requiere credenciales, inclúyelas en la URL: curl -x https://proxy.example.com:8080 -U myuser:mypassword -O https://example.com/file.jpg Nuevamente, almacenar datos sensibles en texto plano puede ser peligroso, por lo que las variables de entorno o los archivos de configuración son opciones más seguras. Monitorear el progreso de descarga El seguimiento del progreso de la descarga es crucial para archivos grandes o conexiones lentas. Medidor de progreso predeterminado Por defecto, cURL muestra un medidor de progreso que incluye el tamaño total, la velocidad de transferencia y el tiempo estimado de finalización. Por ejemplo: % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                 Dload  Upload   Total   Spent    Left  Speed100  1256  100  1256    0     0   2243      0 --:--:-- --:--:-- --:--:--  2246 Esta salida te ayuda a estimar cuánto falta y si la velocidad de transferencia es adecuada. Barra de progreso compacta Si prefieres menos detalles, agrega -#: curl -# -O https://example.com/largefile.iso Una barra más simple muestra el progreso general en porcentaje. Es más fácil de leer pero no incluye estadísticas detalladas como la velocidad actual. Registrar el progreso en scripts Cuando uses cURL dentro de scripts, quizás quieras registrar los datos del progreso. Normalmente, cURL envía esta información a stderr, por lo que puedes redirigirla: curl -# -O https://example.com/largefile.iso 2>progress.log Aquí, progress.log contiene las actualizaciones de estado que puedes analizar o guardar para revisarlas más tarde. Conclusión cURL destaca como una herramienta flexible de línea de comandos para descargar archivos a través de múltiples protocolos y entornos. Ya sea que necesites manejar redirecciones complejas, renombrar archivos al vuelo o limitar el ancho de banda, cURL te ofrece las opciones adecuadas. Al dominar sus principales parámetros y modos, podrás integrar cURL sin problemas en tu flujo de trabajo diario para scripting, automatización y transferencias de archivos más eficientes.
20 October 2025 · 9 min to read

¿Tienes preguntas,
comentarios o inquietudes?

Nuestros profesionales están disponibles para asistirte en cualquier momento,
ya sea que necesites ayuda o no sepas por dónde empezar.
Hostman's Support