Un cortafuegos es uno de los componentes principales para proteger un sistema. Es responsable de gestionar las conexiones entrantes y salientes a través de la red. Es la primera línea de defensa para sus servidores y datos. Por eso es fundamental contar con un cortafuegos bien configurado. En esta guía, le guiaremos a través de los pasos para configurar un cortafuegos con UFW en Ubuntu 18.04.
UFW en Ubuntu
El término UFW significa “Uncomplicated Firewall” (Cortafuegos sin complicaciones). Es un programa de cortafuegos predeterminado que viene preinstalado con Ubuntu. UFW es en realidad una interfaz para iptables. El objetivo de UFW es facilitar la configuración y gestión de un cortafuegos. Aunque iptables, por sí mismo, es una opción sólida y flexible, no es amigable para los principiantes. UFW lo hace más fácil tanto para principiantes como para usuarios experimentados.
Primero, eche un vistazo a nuestra guía completa que le ayudará a familiarizarse con las funciones básicas de UFW. También puede seguir esta guía para instalar su servidor Ubuntu. ¡Ahora, empecemos!
Para empezar, si por alguna razón su UFW no está instalado, instálelo de inmediato:
|
1 |
$ sudo apt install ufw |
Configurando UFW
-
Uso de IPv6
A día de hoy, IPv4 sigue siendo la fuerza dominante. Teniendo esto en cuenta, la mayor parte de esta guía también presenta IPv4. Afortunadamente, UFW también viene con soporte para IPv6. Todo lo que necesita hacer es habilitar la función desde el archivo de configuración de UFW.
Primero, abra el archivo de configuración de UFW en un editor de texto. Para guardar los cambios, el editor de texto debe ejecutarse con privilegios de sudo:
|
1 |
$ sudo vim /etc/default/ufw |
Busque “IPV6” y asegúrese de que esté configurado en “yes”.
-
Política predeterminada
Si es la primera vez que realiza modificaciones en un cortafuegos, se recomienda definir primero las políticas predeterminadas. Estas reglas determinan cómo se controla el tráfico que no coincide con ninguna regla explícita. Por defecto, UFW está configurado para denegar todas las conexiones entrantes pero permitir todas las conexiones salientes. Define que nadie puede acceder al servidor mientras que una aplicación que se ejecuta en el servidor sí puede acceder al exterior.
Los siguientes comandos simplemente redefinirán el comportamiento predeterminado de UFW. Tenga en cuenta que cambiará el comportamiento de UFW si se modificó anteriormente:
|
1 2 |
$ sudo ufw default deny incoming $ sudo ufw default allow outgoing |
Para un ordenador personal, estas reglas de cortafuegos por sí solas serían suficientes. Sin embargo, los servidores requieren más para reforzar adecuadamente su seguridad.
Permitir conexiones SSH
Tal como está configurado UFW ahora, denegará todas las conexiones entrantes. Para un servidor remoto, eso es inviable. Sin acceso al servidor, no se puede hacer nada. Para evitar este problema, UFW se puede configurar para permitir conexiones entrantes de SSH o HTTP.
Para permitir conexiones SSH al servidor, ejecute el siguiente comando. Básicamente, le dirá a UFW que permita todas las conexiones en el puerto 22. Es el puerto en el que el demonio SSH escucha por defecto:
|
1 |
$ sudo ufw allow ssh |
En lugar de este comando, es posible configurar directamente permitir conexiones al puerto 22. Este puerto está definido en el archivo /etc/services:
|
1 |
$ sudo ufw allow 22 |
Debido a que el puerto 22 es el predeterminado para el demonio SSH, también puede ser susceptible a ataques. ¿Qué pasa si el servidor SSH está configurado para escuchar en un puerto diferente? En tal situación, UFW debe permitir la conexión a ese puerto. Suponiendo que el servidor SSH esté escuchando en el puerto 1234, entonces use el siguiente comando:
|
1 |
$ sudo ufw allow 1234 |
Habilitar UFW
Aunque las reglas de UFW están establecidas, no harán nada a menos que UFW esté activado. Por defecto, UFW está deshabilitado, lo que significa que a pesar de declarar las reglas, no las aplicará. Para habilitar UFW, ejecute el siguiente comando:
|
1 |
$ sudo ufw enable |
UFW puede mostrar un mensaje de advertencia sobre la interrupción de las conexiones SSH existentes. Debido a que las conexiones SSH se configuraron para ser permitidas, habilitar UFW no causará ninguna interrupción. Para ver qué reglas están establecidas, ejecute el siguiente comando:
|
1 |
$ sudo ufw status verbose |
Permitir varias conexiones
En este punto, UFW debería estar equipado con otras reglas para tener una experiencia estable. Las conexiones que se van a permitir dependen de sus necesidades específicas. Ya se ha demostrado cómo indicarle a UFW que permita conexiones basadas en el nombre de un servicio o número de puerto.
Aquí hay algunos otros puertos que es muy común tener abiertos:
- SSH (
puerto 22): Este es el puerto predeterminado configurado para conexiones SSH. - HTTP (
puerto 80): Este es el puerto predeterminado que utilizan los servidores web no cifrados. - HTTPS (
puerto 443): Este es el puerto predeterminado que utilizan los servidores web cifrados.
Para habilitar las conexiones SSH, ejecute cualquiera de los siguientes comandos:
|
1 2 |
$ sudo ufw allow ssh $ sudo ufw allow 22 |
A continuación, para habilitar las conexiones HTTP, ejecute cualquiera de los siguientes comandos:
|
1 2 |
$ sudo ufw allow http $ sudo ufw allow 80 |
Para habilitar las conexiones HTTPS, ejecute cualquiera de los siguientes comandos:
|
1 2 |
$ sudo ufw allow https $ sudo ufw allow 443 |
Rango de puertos
Hasta ahora, hemos demostrado cómo permitir un puerto determinado. ¿Qué pasa si se necesita un rango de puertos? Declarar cada puerto en UFW es bastante ineficiente. Algunas aplicaciones utilizan múltiples puertos. Afortunadamente, UFW permite declarar un rango de puertos. Para hacerlo, utilice la siguiente estructura de comando:
|
1 |
$ sudo ufw allow <inicio>:<fin>/<protocolo> |
El siguiente ejemplo habilita las conexiones X11 que utilizan los puertos 6000 a 6007:
|
1 2 |
$ sudo ufw allow 6000:6007/tcp $ sudo ufw allow 6000:6007/udp |
Se recomienda declarar los protocolos siempre que sea posible. Sin embargo, en la mayoría de los casos, no es necesario y todo funcionará perfectamente.
Direcciones IP específicas
Al usar UFW, también es posible filtrar conexiones por direcciones IP específicas. Por defecto, UFW bloqueará las conexiones de cualquier dirección IP. Es posible declarar que se permita la conexión desde ciertas direcciones IP. Para permitir la conexión desde una dirección IP, utilice la siguiente estructura de comando:
|
1 |
$ sudo ufw allow from <direccion_ip> |
También puede declarar los puertos específicos a los que se le permite conectarse a la dirección IP. Para hacerlo, agregue to any port seguido del número de puerto al comando:
|
1 |
$ sudo ufw allow from <direccion_ip> to any port <puerto> |
Subredes
Si tiene la necesidad de permitir una subred de direcciones IP, es posible hacerlo utilizando la notación CIDR. En este ejemplo, UFW permitirá la conexión desde direcciones IP que van desde 203.0.113.1 a 203.0.113.254:
|
1 |
$ sudo ufw allow from 203.0.113.0/24 |
De manera similar al paso anterior, también es posible especificar el puerto al que se pueden conectar estas direcciones IP:
|
1 |
$ sudo ufw allow from 203.0.113.0/24 to any port <puerto> |
Conectarse a una interfaz de red específica
En un entorno de servidor, puede haber múltiples interfaces de red conectadas al sistema. Usando UFW, es posible describir que una determinada regla solo se aplica a una interfaz de red específica. Primero, verifique todas las interfaces de red conectadas al servidor. El nombre de la interfaz de red de destino es el enfoque principal:
|
1 |
$ ip addr |
En nuestro caso, solo hay una interfaz de red ens3 que se conecta a la internet pública. Para permitir conexiones entrantes desde esta interfaz de red, utilice la siguiente estructura de comando:
|
1 |
$ sudo ufw allow in on <interfaz_de_red> |
También es posible definir el puerto al que puede llegar el tráfico proveniente de la interfaz de red:
|
1 |
$ sudo ufw allow in on <interfaz_de_red> to any port <puerto> |
Denegar conexión
Según la configuración predeterminada, UFW denegará la conexión desde cualquier origen (excepto las excepciones declaradas). Esta es la forma recomendada de usar UFW. Sin embargo, puede ser necesario bloquear conexiones específicas de una determinada dirección IP de origen o subred. Tal vez el comportamiento predeterminado de UFW esté configurado para permitir todas las conexiones (no recomendado).
Para denegar una conexión desde ciertas direcciones IP, UFW requiere reglas de denegación. Escribir reglas de denegación es bastante simple. ¡Tome cualquier regla de permiso, cambie el término “allow” por “deny” y listo! Se convierte en una regla de denegación.
Eche un vistazo al siguiente ejemplo. Para denegar cualquier conexión HTTP, use la siguiente regla de denegación:
|
1 2 |
$ sudo ufw deny http $ sudo ufw deny 80 |
Para denegar la conexión desde 203.0.113.1, use la siguiente regla de denegación:
|
1 |
$ sudo ufw deny from 203.0.113.1 |
Eliminar reglas
Todo lo que hemos aprendido hasta ahora es cómo crear reglas. Al igual que se crean las reglas, también se pueden eliminar. En el caso de UFW, existen dos formas específicas de eliminar una regla.
-
Eliminar una regla por número de regla
Esta es la forma más sencilla de eliminar una regla de UFW. Cada regla en UFW tiene un número de regla. El siguiente comando imprimirá todas las reglas de UFW junto con el número de regla:
|
1 |
$ sudo ufw status numbered |
El siguiente comando eliminará la regla especificada por el número de regla:
|
1 |
$ sudo ufw delete <número_de_regla> |
-
Eliminar regla por la regla real
Este es el método más difícil para eliminar una regla. Requiere especificar manualmente la regla real para eliminarla. En el siguiente ejemplo, UFW eliminará la regla especificada por allow http:
|
1 |
$ sudo ufw delete allow http |
La regla también podría haber sido especificada por allow 80. En ese caso, el siguiente comando la eliminará:
|
1 |
$ sudo ufw delete allow 80 |
Al eliminar una regla, se eliminará tanto para IPv4 como para IPv6.
Comprobación del estado y las reglas de UFW
Es esencial asegurarse de si UFW está activo o no. Para determinar el estado de UFW, ejecute el siguiente comando:
|
1 |
$ sudo ufw status verbose |
Si el estado es “inactive, ” entonces actívelo siguiendo el paso Habilitación de UFW anterior. Si está activo, UFW informará el estado “active” y enumerará todas las reglas activas.
Deshabilitación de UFW
Si, por alguna razón, no va a utilizar UFW, deshabilítelo con el siguiente comando:
|
1 |
$ sudo ufw disable |
Si UFW está deshabilitado, todas las reglas creadas ya no estarán activas. Sin embargo, las reglas no se eliminan. Cuando se vuelva a activar UFW, todas las reglas volverán a estar activas. ¿Qué pasa si la configuración actual de UFW es un caos? En lugar de eliminar las reglas una por una, es posible eliminarlas todas con un solo comando. Para restablecer UFW, ejecute el siguiente comando:
|
1 |
$ sudo ufw reset |
Tenga en cuenta que esto no cambiará el comportamiento predeterminado de UFW que se configuró al principio.
Conclusión
Una configuración adecuada del cortafuegos es necesaria para garantizar la seguridad y la funcionalidad. Debe configurarse para permitir solo las conexiones entrantes necesarias y, al mismo tiempo, limitar las conexiones innecesarias.
Si desea familiarizarse con más soluciones de cortafuegos, eche un vistazo a nuestro blog para obtener más recursos:
- Configuración de un cortafuegos con FirewallD en CentOS 7
- Listar y eliminar reglas de cortafuegos de Iptables
- Cómo crear medidas de seguridad sólidas para proteger sus servidores
¡Feliz computación!











Comentarios
Aún no hay comentarios. Sea el primero.