Introducción
UFW (Uncomplicated Firewall) es una herramienta de configuración del firewall iptables, la cual es incluida por defecto en las instalaciones de Ubuntu. El objetivo del presente tutorial es ofrecer una referencia a los principales comandos de UFW que son empleados para configurar las reglas más comunes de la herramienta UFW, que incluyen permitir y denegar servicios por puertos, interfaces de red y direcciones IPs.
Debería saber que…
- Si es la primera vez que configura UFW como firewll, debería revisar nuestro tutorial: Cómo configurar UFW en Ubuntu.
- La mayoría de la reglas descritas asumen que se emplea la configuración por defecto de UFW; o sea se permite el tráfico saliente y se deniega el tráfico entrante, por lo que se necesita definir qué puede tener acceso a nuestro servidor.
- Antes de comenzar a trabajar con UFW es importante chequear el estado del firewall. Para ello puede auxiliarse de los comandos:
sudo ufw status
osudo ufw status verbose
Bloquear una direccción IP
Para bloquear todas las conexiones de red que se originen desde el IP 192.168.0.1 ejecute el siguiente comando:
1 |
$ sudo ufw deny from 192.168.0.1 |
En caso de querer bloquear la red completa, basta con agregar la red en sí y la máscara de red en formato CIDR, existen calculadoras de CIDR en internet muy buenas, por ejemplo:
1 |
$ sudo ufw deny from 192.168.0.0/24 |
Bloquear conexiones a través de una interfaz de red
Para bloquear las conexiones de red desde una dirección IP específica, ej. 192.168.0.1 a una interfaz de red específica, ej. eth0 ejecutar:
1 |
$ sudo ufw deny in on eth0 from 192.168.0.1 |
Servicio: SSH
El acceso remoto en los servidores GNU/Linux es realizado mediante el servicio SSH (puerto 22), por lo que es importante definir qué direcciones IPs o redes accederán a nuestro servidor. Si desea permitir el acceso al servicio SSH desde cualquier red se recomienda habilitar el acceso sólo mediante llaves compartidas o instalar un sistema detector de intrusos. La siguiente sección abarca varios tipos de reglas para el servcio SSH.
Permitir SSH
Para permitir todas las conexiones entrantes al puerto 22 (SSH):
1 |
$ sudo ufw allow ssh |
De forma alternativa se puede especificar solamente el puerto del servicio SSH:
1 |
$ sudo ufw allow 22 |
Permitir conexiones SSH entrantes desde una dirección IP o subred específica
En este caso se especifica la dirección IP origen o la subred como se muestra a continuación:
1 |
$ sudo ufw allow from 192.068.0.0/24 to any port 22 |
Permitir conexiones entrantes de Rsync desde una dirección IP o subred específica
Rsync permite la transferencia de archivos de una computadora a otra, este corre sobre el puerto 873 TCP y UDP. En este caso el comando es el mismo que en el ejemplo anterior solo que se especifica el puerto 873 (Rsync):
1 |
$ sudo ufw allow from 192.068.0.0/24 to any port 873 |
Servicio: Servidor Web
Los servidores Web como Apache y Nginx, normalmente escuchan por el puerto 80 y 443 para conexiones HTTP y HTTPS respectivamente. Si la política por defecto es denegar todas las conexiones entrantes, se debe habilitar dichos puertos para que los usuarios puedan accedar a nuestras páginas webs.
Permitir conexiones HTTP entrantes
1 |
$ sudo ufw allow http |
De forma alternativa se puede especificar solo el puerto del servidor Web (80):
1 |
$ sudo ufw allow 80 |
Permitir conexiones HTTPS entrantes
1 |
$ sudo ufw allow https |
De forma alternativa se puede especificar solo el puerto del servidor Web seguro (443):
1 |
$ sudo ufw allow 443 |
Permitir conexiones entrantes HTTP y HTTPS
Es posible permitir las conexiones entrantes HTTP y HTTP mediante una sola línea de comando, pero para ello es necesario especificar el protocolo a emplear, en este caso TCP:
1 |
$ sudo ufw allow proto tcp from any to any port 80,443 |
Servicio: MySQL
El servicio MySQL escucha de forma predeterminada por el puerto 3306, por lo que si se desea permitir conexiones externas a nuestro servidor de bases de datos (no se recomienda permitir desde todas las redes que accedan al servidor MySQL por cuestiones de seguridad), siga los ejemplos que se muestran.
Permitir acceso al servidor MySQL desde una dirección IP o subred específica
1 |
$ sudo ufw allow from 192.068.0.0/24 to any port 3306 |
Permitir acceso al servidor MySQL a una interfaz de red específica desde una subred
1 |
$ sudo ufw allow in on eth0 from 192.068.0.0/24 to any port 3306 |
Servicio: PostgreSQL
PostgreSQL es otro servicio de bases de datos bien conocido que escucha de forma predeterminada en el puerto 5432.
Permitir acceso al servidor PostgreSQL desde una dirección IP o subred específica
1 |
$ sudo ufw allow from 192.068.0.0/24 to any port 5432 |
Permitir acceso al servidor PostgreSQL a una interfaz de red específica desde una subred
1 |
$ sudo ufw allow in on eth0 from 192.068.0.0/24 to any port 5432 |
Servicio: Correo
Los servidores de correo electrónico como Exim y Postfix escuchan en varios puertos en dependencia de los protocolos que empleen para recibir y enviar los correos, por lo que se debe definir bien qué puertos deben estar abiertos.
Bloquear el tráfico SMTP saliente
Si su servidor solo será empleado para enviar correo interno (dentro del mismo servidor), es posible que quiera bloquear el correo saliente, el cual emplea el puerto 25
1 |
$ sudo ufw deny out 25 |
Si desea bloquear el tráfico saliente de otros servicios, la línea anterior le puede ser útil, solo debe cambiar el número 25 por el puerto que desea bloquear.
Permitir el tráfico SMTP entrante
1 |
$ sudo ufw allow 25 |
NOTA: Algunos servidores de correo emplean el puerto 587, aunque para el intercambio entre MTA sólo se emplea el 25. Para el caso de SMTPS se emplea el puerto 465.
Permitir el tráfico IMAP entrante
1 |
$ sudo ufw allow 143 |
Permitir el tráfico IMAPS entrante
1 |
$ sudo ufw allow 993 |
Permitir el tráfico POP3 entrante
1 |
$ sudo ufw allow 110 |
Permitir el tráfico POP3S entrante
1 |
$ sudo ufw allow 995 |
Conclusión
A lo largo del tutorial hemos cubierto una serie de comandos básicos que nos permiten definir a qué puertos o servicios se les permite acceso, así como denegar el tráfico saliente de un determinado servicio. Como se puede apreciar el uso de UFW es realmente simple y fácil de aprender. Más ejemplos de configuraciones pueden encontrarse en la guía oficial de Ubuntu.