Introducción
UFW (uncomplicated firewall) es una herramienta de configuración de firewall que se ejecuta sobre iptables
, incluido de forma predeterminada en las distribuciones de Ubuntu. Proporciona una interfaz simplificada para configurar casos de uso comunes de firewall a través de la línea de comandos.
Esta guía en formato de hoja de trucos proporciona una referencia rápida a casos de uso comunes de UFW y comandos, incluidos ejemplos de cómo permitir y bloquear servicios por puerto, interfaz de red y dirección IP de origen.
Cómo Usar Esta Guía
- Esta guía está en formato de hoja de trucos con fragmentos de línea de comandos autocontenidos.
- Salta a cualquier sección que sea relevante para la tarea que estés tratando de completar.
- Cuando veas texto resaltado en los comandos de esta guía, ten en cuenta que este texto debería referirse a direcciones IP de tu propia red.
Recuerda que puedes verificar tu conjunto de reglas UFW actual con sudo ufw status
o sudo ufw status verbose
.
Implementa tus aplicaciones frontend desde GitHub usando Plataforma de Aplicaciones de DigitalOcean. Deja que DigitalOcean se centre en escalar tu aplicación.
Verificar Estado de UFW
Para verificar si ufw
está habilitado, ejecuta:
OutputStatus: inactive
La salida indicará si tu firewall está activo o no.
Habilitar UFW
Si obtienes un mensaje de Estado: inactivo
al ejecutar ufw status
, significa que el firewall aún no está habilitado en el sistema. Deberás ejecutar un comando para habilitarlo.
Por defecto, cuando se habilita UFW bloqueará el acceso externo a todos los puertos en un servidor. En la práctica, esto significa que si estás conectado a un servidor vía SSH y habilitas ufw
antes de permitir el acceso a través del puerto SSH, serás desconectado. Asegúrate de seguir la sección sobre cómo habilitar el acceso SSH de esta guía antes de habilitar el firewall si ese es tu caso.
Para habilitar UFW en tu sistema, ejecuta:
Verás una salida como esta:
OutputFirewall is active and enabled on system startup
Para ver qué está bloqueado o permitido actualmente, puedes usar el parámetro verbose
al ejecutar ufw status
, de la siguiente manera:
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
Desactivar UFW
Si por alguna razón necesitas desactivar UFW, puedes hacerlo con el siguiente comando:
Ten en cuenta que este comando desactivará completamente el servicio de firewall en tu sistema.
Bloquear una dirección IP
Para bloquear todas las conexiones de red que provienen de una dirección IP específica, ejecute el siguiente comando, reemplazando la dirección IP resaltada con la dirección IP que desea bloquear:
OutputRule added
En este ejemplo, from 203.0.113.100
especifica una dirección IP fuente de “203.0.113.100”.
Si ejecuta sudo ufw status
ahora, verá que la dirección IP especificada está listada como denegada:
OutputStatus: active
To Action From
-- ------ ----
Anywhere DENY 203.0.113.100
Todas las conexiones, entrantes o salientes, están bloqueadas para la dirección IP especificada.
Bloquear una subred
Si necesita bloquear una subred completa, puede utilizar la dirección de la subred como parámetro from
en el comando ufw deny
. Esto bloquearía todas las direcciones IP en la subred de ejemplo 203.0.113.0/24
:
OutputRule added
Bloquear conexiones entrantes a una interfaz de red
Para bloquear las conexiones entrantes desde una dirección IP específica a una interfaz de red específica, ejecute el siguiente comando, reemplazando la dirección IP resaltada con la dirección IP que desea bloquear:
OutputRule added
El parámetro in
le indica a ufw
que aplique la regla solo para conexiones entrantes, y el parámetro on eth0
especifica que la regla se aplica solo para la interfaz eth0
. Esto puede ser útil si tiene un sistema con varias interfaces de red (incluidas las virtuales) y necesita bloquear el acceso externo a algunas de estas interfaces, pero no a todas.
Permitir una Dirección IP
Para permitir todas las conexiones de red que se originen desde una dirección IP específica, ejecute el siguiente comando, reemplazando la dirección IP resaltada con la dirección IP a la que desea permitir el acceso:
OutputRule added
Si ejecuta sudo ufw status
ahora, verá una salida similar a esta, mostrando la palabra ALLOW
junto a la dirección IP que acaba de agregar.
OutputStatus: active
To Action From
-- ------ ----
...
Anywhere ALLOW 203.0.113.101
También puede permitir conexiones desde toda una subred proporcionando la máscara de subred correspondiente para un host, como 203.0.113.0/24
.
Permitir Conexiones Entrantes a una Interfaz de Red
Para permitir conexiones entrantes desde una dirección IP específica a una interfaz de red específica, ejecuta el siguiente comando, reemplazando la dirección IP resaltada con la dirección IP que deseas permitir:
OutputRule added
El parámetro in
le indica a ufw
que aplique la regla solo para conexiones entrantes, y el parámetro en eth0
especifica que la regla se aplica solo para la interfaz eth0
.
Si ejecutas sudo ufw status
ahora, verás una salida similar a esta:
OutputStatus: active
To Action From
-- ------ ----
...
Anywhere on eth0 ALLOW 203.0.113.102
Eliminar Regla de UFW
Para eliminar una regla que configuraste previamente dentro de UFW, utiliza ufw delete
seguido de la regla (allow
o deny
) y la especificación del objetivo. El siguiente ejemplo eliminaría una regla previamente establecida para permitir todas las conexiones desde una dirección IP de 203.0.113.101
:
OutputRule deleted
Otra forma de especificar qué regla deseas eliminar es proporcionando el ID de la regla. Esta información se puede obtener con el siguiente comando:
OutputStatus: active
To Action From
-- ------ ----
[ 1] Anywhere DENY IN 203.0.113.100
[ 2] Anywhere on eth0 ALLOW IN 203.0.113.102
Desde la salida, puedes ver que hay dos reglas activas. La primera regla, con valores resaltados, niega todas las conexiones provenientes de la dirección IP 203.0.113.100
. La segunda regla permite conexiones en la interfaz eth0
provenientes de la dirección IP 203.0.113.102
.
Debido a que por defecto UFW ya bloquea todo acceso externo a menos que se permita explícitamente, la primera regla es redundante, por lo que puedes eliminarla. Para eliminar una regla por su ID, ejecuta:
Se te pedirá que confirmes la operación y te asegures de que el ID que proporcionas se refiera a la regla correcta que deseas eliminar.
OutputDeleting:
deny from 203.0.113.100
Proceed with operation (y|n)? y
Rule deleted
Si vuelves a listar tus reglas con sudo ufw status
, verás que la regla ha sido eliminada.
Lista de Perfiles de Aplicaciones Disponibles
Al instalar, las aplicaciones que dependen de comunicaciones en red normalmente configurarán un perfil UFW que puedes usar para permitir la conexión desde direcciones externas. Esto suele ser lo mismo que ejecutar ufw allow from
, con la ventaja de proporcionar un atajo que abstrae los números de puerto específicos que utiliza un servicio y proporciona una nomenclatura amigable para referenciar servicios.
Para listar qué perfiles están disponibles actualmente, ejecuta lo siguiente:
Si instalaste un servicio como un servidor web u otro software dependiente de la red y no se hizo disponible un perfil dentro de UFW, primero asegúrate de que el servicio esté habilitado. Para servidores remotos, típicamente tendrás OpenSSH disponible fácilmente:
OutputAvailable applications:
OpenSSH
Habilitar Perfil de Aplicación
Para habilitar un perfil de aplicación en UFW, ejecute ufw allow
seguido del nombre del perfil de aplicación que desea habilitar, el cual puede obtener con el comando sudo ufw app list
. En el siguiente ejemplo, estamos habilitando el perfil de OpenSSH, lo que permitirá todas las conexiones SSH entrantes en el puerto SSH predeterminado.
OutputRule added
Rule added (v6)
Recuerde entrecomillar los nombres de perfil que consistan en varias palabras, como Nginx HTTPS
.
Desactivar Perfil de Aplicación
Para desactivar un perfil de aplicación que haya configurado previamente en UFW, deberá eliminar su regla correspondiente. Por ejemplo, considere la siguiente salida de sudo ufw status
:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Esta salida indica que el perfil de aplicación Nginx Full
está actualmente habilitado, permitiendo todas las conexiones al servidor web tanto a través de HTTP como a través de HTTPS. Si desea permitir solo solicitudes HTTPS desde y hacia su servidor web, primero deberá habilitar la regla más restrictiva, que en este caso sería Nginx HTTPS
, y luego desactivar la regla actualmente activa de Nginx Full
:
Recuerda que puedes listar todos los perfiles de aplicación disponibles con sudo ufw app list
.
Permitir SSH
Cuando trabajas con servidores remotos, querrás asegurarte de que el puerto SSH esté abierto a conexiones para poder iniciar sesión en tu servidor de forma remota.
El siguiente comando habilitará el perfil de aplicación UFW de OpenSSH y permitirá todas las conexiones al puerto SSH predeterminado en el servidor:
OutputRule added
Rule added (v6)
Aunque menos amigable para el usuario, una sintaxis alternativa es especificar el número de puerto exacto del servicio SSH, que normalmente está configurado en 22
de forma predeterminada:
OutputRule added
Rule added (v6)
Permitir SSH entrante desde una dirección IP o subred específica
Para permitir conexiones entrantes desde una dirección IP o subred específica, incluirás una directiva from
para definir la fuente de la conexión. Esto requerirá que también especifiques la dirección de destino con un parámetro to
. Para bloquear esta regla solo a SSH, limitarás el proto
(protocolo) a tcp
y luego usarás el parámetro port
y lo configurarás en 22
, el puerto predeterminado de SSH.
El siguiente comando permitirá solo conexiones SSH provenientes de la dirección IP 203.0.113.103
:
OutputRule added
También puedes usar una dirección de subred como parámetro from
para permitir conexiones SSH entrantes desde toda una red:
OutputRule added
Permitir Rsync Entrante desde una Dirección IP o Subred Específica
El programa Rsync, que se ejecuta en el puerto 873
, puede ser usado para transferir archivos de una computadora a otra.
Para permitir conexiones entrantes de rsync
desde una dirección IP específica o subred, usa el parámetro from
para especificar la dirección IP de origen y el parámetro port
para establecer el puerto de destino 873
.
El siguiente comando permitirá solo conexiones Rsync provenientes de la dirección IP 203.0.113.103
:
OutputRule added
Para permitir que toda la subred 203.0.113.0/24
pueda rsync
a tu servidor, ejecuta:
OutputRule added
Permitir Nginx HTTP / HTTPS
Al instalarlo, el servidor web Nginx configura varios perfiles de UFW dentro del servidor. Una vez que tenga Nginx instalado y habilitado como servicio, ejecute el siguiente comando para identificar qué perfiles están disponibles:
Output Nginx Full
Nginx HTTP
Nginx HTTPS
Para permitir tanto el tráfico HTTP como HTTPS, elija Nginx Completo
. De lo contrario, elija Nginx HTTP
para permitir solo HTTP o Nginx HTTPS
para permitir solo HTTPS.
El siguiente comando permitirá tanto el tráfico HTTP como HTTPS en el servidor (puertos 80
y 443
):
OutputRule added
Rule added (v6)
Permitir Apache HTTP / HTTPS
Al instalarlo, el servidor web Apache configura varios perfiles de UFW dentro del servidor. Una vez que tenga Apache instalado y habilitado como servicio, ejecute el siguiente comando para identificar qué perfiles están disponibles:
Output Apache
Apache Full
Apache Secure
Para permitir tanto el tráfico HTTP como HTTPS, elija Apache Completo
. De lo contrario, elija Apache
para HTTP o Apache Seguro
para HTTPS.
El siguiente comando permitirá tanto el tráfico HTTP como HTTPS en el servidor (puertos 80
y 443
):
OutputRule added
Rule added (v6)
Permitir todo el tráfico entrante HTTP (puerto 80
)
Los servidores web, como Apache y Nginx, típicamente escuchan las solicitudes HTTP en el puerto 80
. Si tu política predeterminada para el tráfico entrante está configurada para denegar o rechazar, deberás crear una regla de UFW para permitir el acceso externo en el puerto 80
. Puedes usar tanto el número de puerto como el nombre del servicio (http
) como parámetro para este comando.
Para permitir todas las conexiones entrantes HTTP (puerto 80
), ejecuta:
OutputRule added
Rule added (v6)
Una sintaxis alternativa es especificar el número de puerto del servicio HTTP:
OutputRule added
Rule added (v6)
Permitir Todas las Conexiones Entrantes HTTPS (puerto 443
)
HTTPS típicamente se ejecuta en el puerto 443
. Si tu política predeterminada para el tráfico entrante está configurada para denegar o rechazar, deberás crear una regla de UFW para permitir el acceso externo en el puerto 443
. Puedes usar tanto el número de puerto como el nombre del servicio (https
) como parámetro para este comando.
Para permitir todas las conexiones entrantes HTTPS (puerto 443
), ejecuta:
OutputRule added
Rule added (v6)
Una sintaxis alternativa es especificar el número de puerto del servicio HTTPS:
OutputRule added
Rule added (v6)
Permitir Todas las Conexiones Entrantes HTTP y HTTPS
Si deseas permitir tanto el tráfico HTTP como HTTPS, puedes crear una regla única que permita ambos puertos. Este uso requiere que también definas el protocolo con el parámetro proto
, que en este caso debería establecerse en tcp
.
Para permitir todas las conexiones entrantes HTTP y HTTPS (puertos 80
y 443
), ejecuta:
OutputRule added
Rule added (v6)
Permitir la Conexión de MySQL desde una Dirección IP o Subred Específica
MySQL escucha conexiones de clientes en el puerto 3306
. Si tu servidor de base de datos MySQL está siendo utilizado por un cliente en un servidor remoto, necesitarás crear una regla UFW para permitir ese acceso.
Para permitir conexiones entrantes de MySQL desde una dirección IP específica o una subred, utiliza el parámetro from
para especificar la dirección IP de origen y el parámetro port
para establecer el puerto de destino 3306
.
El siguiente comando permitirá que la dirección IP 203.0.113.103
se conecte al puerto MySQL del servidor:
OutputRule added
Para permitir que toda la subred 203.0.113.0/24
pueda conectarse a tu servidor MySQL, ejecuta:
OutputRule added
Permitir la conexión de PostgreSQL desde una dirección IP específica o una subred
PostgreSQL escucha las conexiones de clientes en el puerto 5432
. Si su servidor de base de datos PostgreSQL está siendo utilizado por un cliente en un servidor remoto, es necesario asegurarse de permitir ese tráfico.
Para permitir conexiones entrantes de PostgreSQL desde una dirección IP específica o una subred, especifique la fuente con el parámetro from
y establezca el puerto en 5432
:
OutputRule added
Para permitir que toda la subred 203.0.113.0/24
pueda conectarse a su servidor PostgreSQL, ejecute:
OutputRule added
Bloquear el correo SMTP saliente
Los servidores de correo, como Sendmail y Postfix, suelen utilizar el puerto 25
para el tráfico SMTP. Si su servidor no debe enviar correo saliente, es posible que desee bloquear ese tipo de tráfico. Para bloquear las conexiones SMTP salientes, ejecute:
OutputRule added
Rule added (v6)
Esto configura su firewall para descartar todo el tráfico saliente en el puerto 25
. Si necesita rechazar conexiones salientes en un número de puerto diferente, puede repetir este comando y reemplazar 25
con el número de puerto que desea bloquear.
Conclusión
UFW es una herramienta poderosa que puede mejorar considerablemente la seguridad de tus servidores cuando se configura correctamente. Esta guía de referencia cubre algunas reglas comunes de UFW que se utilizan con frecuencia para configurar un firewall en Ubuntu.
La mayoría de los comandos en esta guía pueden adaptarse para satisfacer diferentes casos de uso y escenarios, cambiando parámetros como la dirección IP de origen y/o el puerto de destino. Para obtener información más detallada sobre cada parámetro de comando y los modificadores disponibles, puedes utilizar la utilidad man
para consultar el manual de UFW:
La página oficial de UFW en la documentación de Ubuntu es otro recurso que puedes utilizar como referencia para casos de uso más avanzados y ejemplos.
Source:
https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands