Cómo configurar un cortafuegos con UFW en Ubuntu

0 acciones
0
0
0
0

Introducción

UFW, o Uncomplicated Firewall, es una interfaz para iptables diseñada para simplificar la configuración de un firewall. Aunque iptables es una herramienta potente y flexible, aprender a usarla para configurar correctamente un firewall puede ser difícil para principiantes. Si busca empezar a proteger su red y no sabe qué herramienta usar, UFW puede ser una buena opción.

Requisitos previos

Si usa Ubuntu 16.04 o anterior, le recomendamos actualizar a una versión más reciente, ya que Ubuntu ya no es compatible con estas versiones. Estas instrucciones le ayudarán a actualizar su versión de Ubuntu.

 

Paso 1: Asegúrese de que IPv6 esté habilitado

En versiones recientes de Ubuntu, IPv6 está habilitado por defecto. En la práctica, esto significa que la mayoría de las reglas de firewall añadidas al servidor incluirán tanto IPv4 como IPv6, siendo este último identificado como v6 en la salida del comando de estado de UFW. Para comprobar si IPv6 está habilitado, puede consultar el archivo de configuración de UFW en /etc/default/ufw. Abra este archivo con nano o su editor de línea de comandos preferido:

sudo nano /etc/default/ufw

Luego, asegúrese de que el valor IPV6 esté configurado en Sí. Debería verse así:

IPV6=yes

Guarde y cierre el archivo. Si usa nano, puede hacerlo presionando CTRL+X, luego Y y ENTER para confirmar.

Cuando UFW se habilita en el siguiente paso de esta guía, se configurará para escribir reglas de firewall tanto IPv4 como IPv6.

Paso 2: Establecer políticas predeterminadas

Si recién está comenzando con UFW, un buen primer paso es revisar las políticas predeterminadas de su firewall. Estas reglas controlan cómo se gestiona el tráfico que no coincide explícitamente con ninguna otra regla.

De forma predeterminada, UFW está configurado para denegar todas las conexiones entrantes y permitir todas las salientes. Esto significa que cualquiera que intente acceder a su servidor no podrá conectarse, mientras que cualquier aplicación dentro del servidor podrá comunicarse con el exterior. Se incluyen reglas adicionales para permitir servicios y puertos específicos como excepciones a esta política general.

Para asegurarse de que puede seguir el resto de este tutorial, ahora configurará sus políticas UFW predeterminadas para el tráfico entrante y saliente.

Para establecer la política de ingreso de UFW predeterminada en denegar, ejecute el siguiente comando:

sudo ufw default deny incoming
Output

Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
Para establecer la política de salida UFW predeterminada como permisiva, ejecute el siguiente comando:

Estos comandos establecen los valores predeterminados para denegar las conexiones entrantes y permitir las salientes. Estos valores predeterminados del firewall pueden ser suficientes para una computadora personal, pero los servidores a menudo necesitan responder a las solicitudes entrantes de usuarios externos. Hablaremos de esto más adelante.

Paso 3: Permitir conexiones SSH

Si activa su firewall UFW ahora, denegará todas las conexiones entrantes. Esto significa que, si desea que su servidor responda a este tipo de solicitudes, deberá crear reglas que permitan explícitamente las conexiones entrantes legítimas, por ejemplo, conexiones SSH o HTTP. Si utiliza un servidor en la nube, probablemente querrá permitir las conexiones SSH entrantes para poder conectarse y administrar su servidor.

Permitir el perfil de aplicación OpenSSH UFW

Una vez instaladas, la mayoría de las aplicaciones que dependen de conexiones de red registran un perfil de aplicación en UFW, lo que permite a los usuarios habilitar o denegar rápidamente el acceso externo a un servicio. Puede comprobar qué perfiles están registrados actualmente en UFW con el siguiente comando:

sudo ufw app list
Output
Available applications:
OpenSSH
Para habilitar el perfil de aplicación OpenSSH, ejecute el siguiente comando:
sudo ufw allow OpenSSH
Output

Rule added
Rule added (v6)
Este comando crea reglas de firewall para permitir todas las conexiones en el puerto 22, que es el puerto en el que el servicio SSH escucha de forma predeterminada.
Permitir SSH según el nombre del servicio

Otra forma de configurar UFW para permitir conexiones SSH entrantes es hacer referencia a su nombre de servicio:

sudo ufw allow ssh
Output

Rule added
Rule added (v6)
UFW sabe qué puertos y protocolos utiliza un servicio según el archivo /etc/services.
Habilitar SSH según el número de puerto

Como alternativa, puede escribir la regla equivalente especificando el puerto en lugar del nombre del perfil de la aplicación o del servicio. Por ejemplo, este comando funciona como en los ejemplos anteriores:

sudo ufw allow 22
Output

Rule added
Rule added (v6)

Si ha configurado su servicio SSH para usar un puerto diferente, deberá especificar el puerto correspondiente. Por ejemplo, si su servidor SSH escucha en el puerto 2222, puede usar este comando para permitir conexiones en ese puerto:

sudo ufw allow 2222
Output

Rule added
Rule added (v6)

Ahora que su firewall está configurado para permitir conexiones SSH entrantes, puede habilitarlo.

Paso 4: Habilitar UFW

Su firewall debería estar configurado para permitir conexiones SSH. Para verificar qué reglas se han añadido hasta el momento, incluso con el firewall deshabilitado, puede usar el siguiente comando:

sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
Después de verificar que tiene una regla para permitir conexiones SSH entrantes, puede habilitar el firewall con el siguiente comando:
sudo ufw enable
OutputCommand may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Recibirá una advertencia indicando que este comando podría interrumpir las conexiones SSH existentes. Ya ha configurado una regla de firewall que permite conexiones SSH, por lo que podrá continuar. Responda con "y" y presione ENTER.

El firewall ya está habilitado. Ejecute el comando sudo ufw status verbose para ver las reglas configuradas. El resto de este tutorial explica cómo usar UFW con más detalle, como permitir o denegar diferentes tipos de conexiones.

Paso 5 — Permitir otras conexiones

En este punto, debe permitir todas las demás conexiones que su servidor necesite gestionar. Las conexiones que debe permitir dependen de sus necesidades específicas. Ya sabe cómo escribir reglas que permiten conexiones según el perfil de la aplicación, el nombre del servicio o el puerto. Ya lo hizo para SSH en el puerto 22. También puede hacerlo para:

  • HTTP en el puerto 80, que es el mismo puerto utilizado por servidores web no cifrados, usando sudo ufw allow http o sudo ufw allow 80
  • HTTPS en el puerto 443, que es el mismo puerto que usan los servidores web cifrados, usando sudo ufw allow https o sudo ufw allow 443
  • Apache con HTTP y HTTPS, usando sudo ufw allow 'Apache Full'‘
  • Nginx con HTTP y HTTPS, usando sudo ufw allow 'Nginx Full'‘

No olvide comprobar qué perfiles de aplicación están disponibles para su servidor utilizando el comando sudo ufw app list.

Además de especificar un puerto o un nombre de servicio conocido, existen otras maneras de permitir conexiones. Analizaremos algunos de estos métodos a continuación.

Rangos de puertos específicos

Puede especificar un rango de puertos con UFW. Algunas aplicaciones usan varios puertos en lugar de uno solo.

Por ejemplo, para permitir conexiones X11 utilizando los puertos 6000-6007, utilice estos comandos:

sudo ufw permitir 6000:6007/tcp
sudo ufw permitir 6000:6007/udp

Al especificar rangos de puertos con UFW, debe especificar el protocolo (TCP o UDP) al que se aplicarán las reglas. No lo hemos mencionado antes porque al no especificar un protocolo, se permiten automáticamente ambos, lo cual es adecuado en la mayoría de los casos.

Direcciones IP específicas

Al trabajar con UFW, también puede especificar direcciones IP en sus reglas. Por ejemplo, si desea permitir conexiones desde una dirección IP específica, como la dirección IP de su trabajo o casa (203.0.113.4), utilice el parámetro "from" e introduzca la dirección IP deseada:

sudo ufw allow from 203.0.113.4
Output

Rule added

También puede especificar el puerto al que se permite conectar una dirección IP añadiendo "<sup>" a cada puerto seguido del número de puerto. Por ejemplo, si desea permitir que 203.0.113.4 se conecte al puerto 22 (SSH), utilice este comando:

sudo ufw allow from 203.0.113.4 to any port 22
OutputRule added

Subredes

Si desea permitir el acceso a una subred de direcciones IP, puede hacerlo utilizando la notación CIDR para especificar una máscara de red. Por ejemplo, si desea permitir el acceso a todas las direcciones IP desde 203.0.113.1 hasta 203.0.113.254, puede usar este comando:

sudo ufw allow from 203.0.113.0/24
Output
Rule added

De igual forma, puede especificar el puerto de destino al que la subred 203.0.113.0/24 puede conectarse. De nuevo, usaremos el puerto 22 (SSH) como ejemplo:

sudo ufw allow from 203.0.113.0/24 to any port 22
Output

Rule added
Conexión a una interfaz de red específica

Si desea crear una regla de firewall que solo se aplique a una interfaz de red específica, puede hacerlo especificando "Permitir registro" seguido del nombre de la interfaz de red.

Antes de continuar, puede buscar sus interfaces de red. Para ello, utilice este comando:

ip addr
Output Excerpt
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .

La salida resaltada muestra los nombres de las interfaces de red. Suelen tener nombres como eth0 o enp3s2.

Entonces, si su servidor tiene una interfaz de red pública llamada eth0, puede permitir el tráfico HTTP (puerto 80) con este comando:

sudo ufw allow in on eth0 to any port 80
Output
Rule added
Rule added (v6)

Hacer esto permitirá que su servidor reciba solicitudes HTTP de Internet público.

O si desea que su servidor de base de datos MySQL (puerto 3306) escuche conexiones en la interfaz de red privada eth1, por ejemplo, puede usar este comando:

sudo ufw allow in on eth1 to any port 3306
Output

Rule added

Rule added (v6)

Esto permite que otros servidores de su red privada se conecten a su base de datos MySQL.

Paso 6 – Descartar conexiones

Si no ha cambiado la política predeterminada para las conexiones entrantes, UFW está configurado para denegar todas las conexiones entrantes. En resumen, esto simplifica el proceso de creación de una política de firewall segura, ya que requiere la creación de reglas que permitan explícitamente el paso de puertos y direcciones IP específicos.

Sin embargo, a veces es conveniente denegar conexiones específicas según la dirección IP o subred de origen, quizás porque se sabe que el servidor está siendo atacado desde allí. Además, si se desea cambiar la política de entrada predeterminada a permitir (lo cual no se recomienda), se deberán crear reglas de denegación para cada servicio o dirección IP desde la que no se deseen permitir conexiones.

Para escribir reglas de denegación, puede utilizar los comandos descritos anteriormente, reemplazando allow por deny.

Por ejemplo, para rechazar conexiones HTTP, puede utilizar este comando:

sudo ufw deny http
Output
Rule added (v6)

O si desea denegar todas las conexiones desde 203.0.113.4, puede usar este comando:

sudo ufw deny from 203.0.113.4
Output
Rule added

En algunos casos, también puede que desee bloquear las conexiones salientes del servidor. Para evitar que todos los usuarios usen un puerto del servidor, como el puerto 25 para el tráfico SMTP, puede usar la opción "denegar salida" seguida del número de puerto:

sudo ufw deny out 25
Output
Rule added
Rule added (v6)

Esto bloqueará todo el tráfico SMTP saliente en el servidor.

Paso 7 – Eliminar reglas

Saber cómo eliminar reglas de firewall es tan importante como saber cómo crearlas. Hay dos maneras de especificar qué reglas eliminar: mediante el número de regla o mediante el nombre legible (similar a cómo se especifican las reglas al crearlas).

Eliminar una regla UFW por número

Para eliminar una regla de UFW según su número, primero debe obtener una lista numerada de todas las reglas de su firewall. El comando de estado de UFW tiene una opción para mostrar los números junto a cada regla, como se muestra aquí:

sudo ufw status numbered
Numbered Output:
Status: active

To               Action               From
--               ------              ----
[ 1] 22         ALLOW IN             15.15.15.0/24
[ 2] 80         ALLOW IN             Anywhere

Si decide eliminar la regla n.° 2, la regla que permite conexiones del puerto 80 (HTTP), puede especificarla en el comando de eliminación de UFW de la siguiente manera:

sudo ufw delete 2
Output

Deleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted

Se le solicitará confirmación y luego se eliminará la regla 2, que permite la conectividad HTTP. Tenga en cuenta que si tiene IPv6 habilitado, también deberá eliminar la regla correspondiente.

Eliminar una regla UFW por nombre

En lugar de usar números de regla, también puede referirse a una regla con un nombre legible, determinado por el tipo de regla (normalmente, permitir o denegar) y el nombre del servicio o el número de puerto al que se dirige, o el nombre del perfil de aplicación, si se utiliza. Por ejemplo, si desea eliminar una regla de permiso para un perfil de aplicación llamado Apache Full que estaba habilitado previamente, puede usar el siguiente comando:

sudo ufw delete allow "Apache Full"
Output
Rule deleted
Rule deleted (v6)  

El comando eliminar funciona de la misma manera para las reglas creadas haciendo referencia a un servicio por nombre o puerto. Por ejemplo, si previamente creó una regla para permitir conexiones HTTP a sudo ufw permitir http Puede eliminar la regla de la siguiente manera:

sudo ufw delete allow http
Output
Rule deleted
Rule deleted (v6)

Dado que los nombres de servicio son intercambiables con los números de puerto al especificar reglas, también puede hacer referencia a la misma regla permitir 80 en lugar de permitir http:

sudo ufw delete allow http

Output
Rule deleted Rule deleted (v6)

Dado que los nombres de servicio son intercambiables con los números de puerto al especificar reglas, también puede hacer referencia a la misma regla permitir 80 en lugar de permitir http:

sudo ufw delete allow 80
Output
Rule deleted
Rule deleted (v6)

Al eliminar reglas UFW por nombre, se eliminan tanto las reglas IPv4 como las IPv6, si las hay.

Paso 8: Verifique el estado y las reglas de UFW

En cualquier momento, puedes comprobar el estado de UFW con este comando:

sudo ufw status verbose

Si UFW está deshabilitado, lo cual está de forma predeterminada, verá algo como esto:

Output
Status: inactive

Si UFW está habilitado, como debería ser si seguiste el paso 3, el resultado indicará que está habilitado y enumerará las reglas establecidas. Por ejemplo, si el firewall está configurado para permitir conexiones SSH (puerto 22) desde cualquier lugar, el resultado podría ser similar a esto:

Output
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                 Action             From
--                 ------             ----
22/tcp             ALLOW IN           Anywhere

اگر می‌خواهید بررسی کنید که UFW چگونه فایروال را پیکربندی کرده است، از دستور status استفاده کنید.

مرحله ۹ – غیرفعال کردن یا تنظیم مجدد فایروال

اگر تصمیم دارید که از فایروال UFW استفاده نکنید، می‌توانید آن را با این دستور غیرفعال کنید:

sudo ufw disable
Output
Firewall stopped and disabled on system startup

Las reglas que hayas creado con UFW dejarán de estar activas. Si necesitas activarlas más adelante, siempre puedes sudo ufw habilitar Correr.

Si ya ha configurado las reglas UFW pero decide comenzar de nuevo, puede usar el comando de reinicio:

sudo ufw reset
Output
Resetting all rules to installed defaults. This may disrupt existing ssh
connections. Proceed with operation (y|n)? y
Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353'
Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353'
Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353'
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'

Esto deshabilitará UFW y eliminará las reglas definidas previamente. Esto debería permitirle comenzar de cero con UFW. Tenga en cuenta que si modifica las políticas predeterminadas en cualquier momento, no volverán a su configuración original.


Conclusión

Su firewall ya está configurado para permitir (al menos) conexiones SSH. Asegúrese de permitir cualquier otra conexión entrante que su servidor necesite y de restringir las conexiones innecesarias para mantener su servidor funcional y seguro.


Para obtener más información sobre las configuraciones comunes de UFW, consulte el tutorial

Aspectos esenciales de UFW: Reglas y comandos comunes del firewall para la seguridad de Linux

Échale un vistazo.

 

 

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

También te puede gustar

Cómo instalar IBSng en CentOS 6/7

Tutorial de instalación de IBSng en CentOS 6/7. En este artículo se proporciona un tutorial de instalación de IBSng en CentOS 6/7 para ayudarle…