Introducción
UFW ( cortafuegos sencillo ) es una herramienta de configuración de cortafuegos que se ejecuta sobre [nombre del archivo] , incluida por iptables
defecto en las distribuciones de Ubuntu. Proporciona una interfaz optimizada para configurar casos de uso comunes de cortafuegos mediante la línea de comandos.
Esta guía en formato de hoja de trucos proporciona una referencia rápida a los casos de uso y comandos comunes de UFW, incluidos ejemplos de cómo permitir y bloquear servicios por puerto, interfaz de red y dirección IP de origen.
Cómo utilizar esta guía
- Esta guía tiene formato de hoja de trucos con fragmentos de línea de comandos independientes.
- Salte a cualquier sección que sea relevante para la tarea que está intentando completar.
- Cuando vea texto resaltado en los comandos de esta guía, tenga en cuenta que este texto debe referirse a las direcciones IP de su propia red.
Recuerda que puedes consultar tu conjunto de reglas UFW actual con sudo ufw status
o sudo ufw status verbose
.
Implementa tus aplicaciones frontend desde GitHub con la plataforma de aplicaciones IsnHosting . Deja que IsnHosting se encargue de escalar tu aplicación.
Verificar el estado de UFW
Para comprobar si ufw
está habilitado, ejecute:
sudo ufw status
OutputStatus: inactive
La salida indicará si su firewall está activo o no.
Habilitar UFW
Si recibiste un Status: inactive
mensaje al ejecutar [Nombre del programa] ufw status
, significa que el firewall aún no está habilitado en el sistema. Deberás ejecutar un comando para habilitarlo.
De forma predeterminada, al habilitar UFW, se bloqueará el acceso externo a todos los puertos del servidor. En la práctica, esto significa que si está conectado a un servidor por SSH y lo habilita ufw
antes de permitir el acceso por el puerto SSH, se desconectará. Asegúrese de seguir la sección sobre cómo habilitar el acceso por SSH de esta guía antes de habilitar el firewall si ese es su caso.
Para habilitar UFW en su sistema, ejecute:
sudo ufw enable
Verás un resultado como este:
OutputFirewall is active and enabled on system startup
Para ver qué está bloqueado o permitido actualmente, puede utilizar el verbose
parámetro al ejecutar ufw status
, de la siguiente manera:
sudo ufw status
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
Desactivar UFW
Si por alguna razón necesita deshabilitar UFW, puede hacerlo con el siguiente comando:
sudo ufw disable
Tenga en cuenta que este comando deshabilitará completamente el servicio de firewall en su sistema.
Bloquear una dirección IP
Para bloquear todas las conexiones de red que se originan desde una dirección IP específica, ejecute el siguiente comando, reemplazando la dirección IP resaltada con la dirección IP que desea bloquear:
sudo ufw deny from 203.0.113.100
OutputRule added
En este ejemplo, from 203.0.113.100
se especifica una dirección IP de origen de “203.0.113.100”.
Si lo ejecuta sudo ufw status
ahora, verá la dirección IP especificada 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 usar la dirección de subred como from
parámetro en el ufw deny
comando. Esto bloquearía todas las direcciones IP de la subred de ejemplo 203.0.113.0/24
:
sudo ufw deny from 203.0.113.0/24
OutputRule added
Bloquear conexiones entrantes a una interfaz de red
Para bloquear 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:
sudo ufw deny in on eth0 from 203.0.113.100
OutputRule added
El in
parámetro indica ufw
que la regla se aplique solo a las conexiones entrantes y on eth0
especifica que se aplica solo a la eth0
interfaz. 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 ellas, pero no a todas.
Permitir una dirección IP
Para permitir todas las conexiones de red que se originan 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:
sudo ufw allow from 203.0.113.101
OutputRule added
Si lo ejecuta sudo ufw status
ahora, verá un resultado similar a este, 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 una subred completa 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, ejecute el siguiente comando, reemplazando la dirección IP resaltada con la dirección IP que desea permitir:
sudo ufw allow in on eth0 from 203.0.113.102
OutputRule added
El in
parámetro indica ufw
que se debe aplicar la regla solo a las conexiones entrantes y el on eth0
parámetro especifica que la regla se aplica solo a la eth0
interfaz.
Si lo ejecuta sudo ufw status
ahora, verá un resultado similar a este:
OutputStatus: active
To Action From
-- ------ ----
...
Anywhere on eth0 ALLOW 203.0.113.102
Eliminar la regla de la UFW
Para eliminar una regla configurada previamente en UFW, utilice ufw delete
seguido de la regla ( allow
o deny
) y la especificación del objetivo. El siguiente ejemplo eliminaría una regla configurada previamente para permitir todas las conexiones desde una dirección IP de 203.0.113.101
:
sudo ufw delete allow from 203.0.113.101
OutputRule deleted
Otra forma de especificar la regla que desea eliminar es proporcionar su ID. Esta información se puede obtener con el siguiente comando:
sudo ufw status numbered
OutputStatus: active
To Action From
-- ------ ----
[ 1] Anywhere DENY IN 203.0.113.100
[ 2] Anywhere on eth0 ALLOW IN 203.0.113.102
En el resultado, se puede ver que hay dos reglas activas. La primera, con valores resaltados, deniega todas las conexiones provenientes de la dirección IP 203.0.113.100
. La segunda, permite las conexiones en la eth0
interfaz provenientes de la dirección IP 203.0.113.102
.
Dado que, por defecto, UFW bloquea todo acceso externo a menos que se permita explícitamente, la primera regla es redundante, por lo que puede eliminarla. Para eliminar una regla por su ID, ejecute:
sudo ufw delete 1
Se le pedirá que confirme la operación y se asegure de que la ID que proporciona se refiere a la regla correcta que desea eliminar.
OutputDeleting:
deny from 203.0.113.100
Proceed with operation (y|n)? y
Rule deleted
Si enumeras nuevamente tus reglas con sudo ufw status
, verás que la regla fue eliminada.
Lista de perfiles de aplicaciones disponibles
Tras la instalación, las aplicaciones que dependen de las comunicaciones de red suelen configurar un perfil UFW que permite la conexión desde direcciones externas. Esto suele ser equivalente a ejecutar ufw allow from
, con la ventaja de proporcionar un acceso directo que abstrae los números de puerto específicos que utiliza un servicio y proporciona una nomenclatura intuitiva para los servicios referenciados.
Para enumerar los perfiles que están disponibles actualmente, ejecute lo siguiente:
sudo ufw app list
Si instaló un servicio, como un servidor web u otro software dependiente de la red, y no se creó un perfil en UFW, primero asegúrese de que el servicio esté habilitado. Para servidores remotos, normalmente tendrá OpenSSH disponible:
OutputAvailable applications:
OpenSSH
Habilitar perfil de aplicación
Para habilitar un perfil de aplicación UFW, ejecute “ ufw allow
seguido del nombre del perfil que desea habilitar, que puede obtener con un sudo ufw app list
comando. En el siguiente ejemplo, habilitamos el perfil OpenSSH, que permitirá todas las conexiones SSH entrantes en el puerto SSH predeterminado.
sudo ufw allow “OpenSSH”
OutputRule added
Rule added (v6)
Recuerde citar los nombres de perfil que constan de varias palabras, como Nginx HTTPS
.
Deshabilitar el perfil de la aplicación
Para deshabilitar un perfil de aplicación previamente configurado en UFW, deberá eliminar la regla correspondiente. Por ejemplo, considere el siguiente resultado de sudo ufw status
:
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)
Este resultado indica que el Nginx Full
perfil de la aplicación está habilitado, lo que permite todas las conexiones al servidor web, tanto vía HTTP como HTTPS. Si solo desea permitir solicitudes HTTPS desde y hacia su servidor web, primero deberá habilitar la regla más restrictiva (en este caso Nginx HTTPS
, ), y luego deshabilitar la regla activa Nginx Full
:
sudo ufw allow "Nginx HTTPS"
sudo ufw delete allow "Nginx Full"
Recuerde que puede enumerar todos los perfiles de aplicaciones disponibles con sudo ufw app list
.
Permitir SSH
Al trabajar con servidores remotos, deberá asegurarse de que el puerto SSH esté abierto a las conexiones para que pueda iniciar sesión en su servidor de forma remota.
El siguiente comando habilitará el perfil de aplicación OpenSSH UFW y permitirá todas las conexiones al puerto SSH predeterminado en el servidor:
sudo ufw allow OpenSSH
OutputRule added
Rule added (v6)
Aunque es menos fácil de usar, una sintaxis alternativa es especificar el número de puerto exacto del servicio SSH, que normalmente está configurado 22
de manera predeterminada:
sudo ufw allow 22
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, deberá incluir una from
directiva que defina el origen de la conexión. Esto requerirá que también especifique la dirección de destino con un to
parámetro. Para restringir esta regla solo a SSH, deberá limitar el proto
protocolo a tcp
y luego usar el port
parámetro y establecerlo en 22
, el puerto predeterminado de SSH.
El siguiente comando solo permitirá conexiones SSH provenientes de la dirección IP 203.0.113.103
:
sudo ufw allow from 203.0.113.103 proto tcp to any port 22
OutputRule added
También puede utilizar una dirección de subred como from
parámetro para permitir conexiones SSH entrantes desde una red completa:
sudo ufw allow from 203.0.113.0/24 proto tcp to any port 22
OutputRule added
Permitir Rsync entrante desde una dirección IP o subred específica
El programa Rsync873
, que se ejecuta en el puerto , se puede utilizar para transferir archivos de una computadora a otra.
Para permitir rsync
conexiones entrantes desde una dirección IP o subred específica, utilice el from
parámetro para especificar la dirección IP de origen y el port
parámetro para configurar el puerto de destino 873
. El siguiente comando solo permitirá conexiones Rsync provenientes de la dirección IP 203.0.113.103
:
sudo ufw allow from 203.0.113.103 to any port 873
OutputRule added
Para permitir que toda la 203.0.113.0/24
subred pueda acceder rsync
a su servidor, ejecute:
sudo ufw allow from 203.0.113.0/24 to any port 873
OutputRule added
Permitir Nginx HTTP / HTTPS
Tras la instalación, el servidor web Nginx configura diferentes perfiles UFW. Una vez que Nginx esté instalado y habilitado como servicio, ejecute el siguiente comando para identificar los perfiles disponibles:
sudo ufw app list | grep Nginx
Output Nginx Full
Nginx HTTP
Nginx HTTPS
Para habilitar el tráfico HTTP y HTTPS, seleccione Nginx Full
. De lo contrario, seleccione Nginx HTTP
permitir solo HTTP o Nginx HTTPS
HTTPS.
El siguiente comando permitirá el tráfico HTTP y HTTPS en el servidor (puertos 80
y 443
):
sudo ufw allow "Nginx Full"
OutputRule added
Rule added (v6)
Permitir Apache HTTP / HTTPS
Tras la instalación, el servidor web Apache configura diferentes perfiles UFW. Una vez instalado y habilitado Apache como servicio, ejecute el siguiente comando para identificar los perfiles disponibles:
sudo ufw app list | grep Apache
Output Apache
Apache Full
Apache Secure
Para habilitar el tráfico HTTP y HTTPS, seleccione Apache Full
. De lo contrario, seleccione Apache
HTTP o Apache Secure
HTTPS.
El siguiente comando permitirá el tráfico HTTP y HTTPS en el servidor (puertos 80
y 443
):
sudo ufw allow "Apache Full"
OutputRule added
Rule added (v6)
Permitir todos los HTTP entrantes (puerto 80
)
Los servidores web, como Apache y Nginx, suelen recibir solicitudes HTTP en el puerto 80
. Si su política predeterminada para el tráfico entrante es descartar o denegar, deberá crear una regla UFW para permitir el acceso externo en el puerto 80
. Puede usar el número de puerto o el nombre del servicio ( http
) como parámetro para este comando.
Para permitir todas las conexiones HTTP (puerto) entrantes 80
, ejecute:
sudo ufw allow http
OutputRule added
Rule added (v6)
Una sintaxis alternativa es especificar el número de puerto del servicio HTTP:
sudo ufw allow 80
OutputRule added
Rule added (v6)
Permitir todos los HTTPS entrantes (puerto 443
)
HTTPS normalmente se ejecuta en el puerto 443
. Si su política predeterminada para el tráfico entrante está configurada para descartar o denegar, deberá crear una regla UFW para permitir el acceso externo en el puerto 443
. Puede usar el número de puerto o el nombre del servicio ( https
) como parámetro para este comando.
Para permitir todas 443
las conexiones entrantes HTTPS (puerto), ejecute:
sudo ufw allow https
OutputRule added
Rule added (v6)
Una sintaxis alternativa es especificar el número de puerto del servicio HTTPS:
sudo ufw allow 443
OutputRule added
Rule added (v6)
Permitir todos los HTTP y HTTPS entrantes
Si desea permitir el tráfico HTTP y HTTPS, puede crear una única regla que permita ambos puertos. Para ello, también debe definir el protocolo con el proto
parámetro , que en este caso debe establecerse en tcp
.
Para permitir todas las conexiones entrantes HTTP y HTTPS (puertos 80
y 443
), ejecute:
sudo ufw allow proto tcp from any to any port 80,443
OutputRule added
Rule added (v6)
Permitir la conexión MySQL desde una dirección IP o subred específica
MySQL escucha las conexiones de cliente en el puerto 3306
. Si un cliente en un servidor remoto utiliza su servidor de base de datos MySQL, deberá crear una regla UFW para permitir dicho acceso.
Para permitir conexiones MySQL entrantes desde una dirección IP o subred específica, utilice el from
parámetro para especificar la dirección IP de origen y el port
parámetro 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:
sudo ufw allow from 203.0.113.103 to any port 3306
OutputRule added
Para permitir que toda la 203.0.113.0/24
subred pueda conectarse a su servidor MySQL, ejecute:
sudo ufw allow from 203.0.113.0/24 to any port 3306
OutputRule added
Permitir la conexión PostgreSQL desde una dirección IP o subred específica
PostgreSQL escucha las conexiones de cliente en el puerto 5432
. Si un cliente en un servidor remoto utiliza su servidor de base de datos PostgreSQL, asegúrese de permitir ese tráfico.
Para permitir conexiones entrantes de PostgreSQL desde una dirección IP o subred específica, especifique la fuente con el from
parámetro y configure el puerto en 5432
:
sudo ufw allow from 203.0.113.103 to any port 5432
OutputRule added
Para permitir que toda la 203.0.113.0/24
subred pueda conectarse a su servidor PostgreSQL, ejecute:
sudo ufw allow from 203.0.113.0/24 to any port 5432
OutputRule added
Bloquear correo SMTP saliente
Los servidores de correo, como Sendmail y Postfix, suelen usar el puerto 25
para el tráfico SMTP. Si su servidor no debería enviar correo saliente, le recomendamos bloquear ese tipo de tráfico. Para bloquear las conexiones SMTP salientes, ejecute:
sudo ufw deny out 25
OutputRule added
Rule added (v6)
Esto configura su firewall para bloquear todo el tráfico saliente en el puerto 25
. Si necesita rechazar las conexiones salientes en un puerto diferente, puede repetir este comando y reemplazarlo 25
con el puerto que desea bloquear.
Conclusión
UFW es una herramienta potente que, si se configura correctamente, puede mejorar considerablemente la seguridad de sus servidores. Esta guía de referencia abarca algunas reglas comunes de UFW que se utilizan a menudo para configurar un firewall en Ubuntu.
La mayoría de los comandos de esta guía se pueden adaptar a diferentes casos de uso y escenarios modificando parámetros como la dirección IP de origen o el puerto de destino. Para obtener información más detallada sobre cada parámetro del comando y los modificadores disponibles, puede usar la man
utilidad para consultar el manual de UFW:
man ufw
La página oficial de UFW sobre la documentación de Ubuntu es otro recurso que puedes usar como referencia para casos de uso y ejemplos más avanzados.