UFW - Un firewall sin complicaciones
Lo primero. ¿Que es un Firewall?.
Un firewall es una barrera fundamental hoy en día en lo que respecta a seguridad, permite proteger sistemas informáticos controlando el flujo de datos entrantes y salientes desde y hacia una red. Básicamente es como un seguridad en una puerta de una discoteca decidiendo quien entra y quien no.
Basandonos con este ejemplo a nivel informatico, imaginamos que nuestro Firewall es el filtro entre nuestra pc o red de casa y la internet. Cuando los paquetes se mueven atraves de la red tanto entrante como saliente hacia Internet, todos pasan por este filtro que en base a la configuracion que tenga (desde ahora las llamaremos ‘Reglas/Rules’, decidira si se aprueba o no el ingreso o egreso de los paquetes y que hacer en determinados casos con los mismos.
Como dije anteriormente es una parte esencial de la seguridad informatica, ya que nos permite prevenir y bloquear posibles ataques o intrusiones tanto externas como internas.
Volviendo a mi representacion de la discoteca, el seguridad de la misma seguramente tenga algunas reglas para su trabajo, como por ejemplo una de vestimenta para el ingreso. Que todos entren con algo blanco, y si alguien no cumple esa regla entonces no entra.
En sistemas informáticos, esas reglas se basan en direcciones IP, Puertos, Protocolos, datos necesarios para que las computadoras realicen conexiones y se comuniquen. Existen distintos tipos de Firewalls, tanto de software como físicos. En el caso de este articulo hablaremos del UFW un firewall de software.
UFW | Breve intro.
La sigla UFW viene de Uncomplicated Firewall, haciendo referencia a que su desarrollo fue exclusivamente para entregar una interfaz amistosa al usuario y facil de configurar. Este se debe a que en la mayoria de sistemas basados en Linux quien esta presente como firewall es IPTABLES. Aunque en muchos ya esta su sucesor NFTABLES.
Para muchos usuarios utilizar iptables les resulta complicado sobre todo si posee excasos conocimientos en sistemas o networking y aun mas si es nuevo en Linux.
Ya que las reglas en iptables toman su tiempo en aprenderse y configurar a los gustos de uno o su contexto de red.
Es por eso que los desarrolladores de Ubuntu crearon UFW que es un FrontEnd para iptables. En pocas palabras, mediante pocos comandos y fáciles de entender en UFW podemos configurar iptables y dejar un firewall corriendo a nuestro gusto muy rápido y bastante eficaz.
UFW | Instalacion y configuracion
En este caso utilizo un sistema Arch. Pero UFW esta disponible principalmente en Ubuntu / Debian based y otras distros conocidas como Fedora, Centos OpenSUSE, Mint, no llevo un control de esto y quizas en algunas nuevas ya lo hayan incluido o quizas quitado de sus repositorios oficiales.
Si utilizas Arch y no se instaló por default:
1 | sudo pacman -Syu ufw gufw |
El paquete “gufw” es un entorno grafico para el ufw si no prefieren hacer las reglas por consola, si no quieren instalarlo pueden obviar de agregarlo a pacman, pero habia que mencionarlo.
Una vez que lo instalamos procedemos a hacer lo siguiente para que inicie el servicio de ufw y habilitarlo para que se ejecute automaticamente cada vez que el sistema arranca.
1 | sudo systemctl start ufw` |
1 | $> sudo systemctl enable ufw |
Verificamos el estado del ufw para corroborar que todo esta bien.
1 | sudo systemctl status ufw |
UFW | Manipulando reglas en el Firewall.
— Agregando reglas
Para agregar reglas en el UFW lo podemos hacer facilmente de las siguientes dos maneras. Agregandolas por puerto o usando el nombre del servicio.
Veamos un ejemplo:
1 | sudo ufw allow ssh |
O tambien podriamos agregarla de este modo:
1 | sudo ufw allow 22 |
Observamos como es que se agregan:
Y si escribimos:
1 | sudo ufw status |
Veremos un listado de las reglas actuales y sus respectivas configuraciones.
Como vemos ahí esta nuestra regla para aceptar trafico al puerto 22.
Agregando reglas por puerto y protocolo.
Para ajustar un poco mas la regla, podemos especificar el protocolo. Quizas queramos que se acepte trafico del puerto 1500 TCP. Hariamos esto:
1 | sudo ufw allow 1500/tcp |
Como vemos la regla es agregada a la tabla tal cual la escribimos.
Siguiendo el mismo caso si quisiera bloquear el mismo puerto pero UDP:
1 | sudo ufw deny 1500/udp |
Como resultado vemos que debajo del allow en TCP se agrego el DENY en UDP.
Eliminando Reglas
Para eliminar reglas el procedimiento es igual pero agregando la palabra delete sobre la regla de allow creada anteriormente, veamos:
1 | sudo ufw delete allow 1500/tcp |
Como vemos se elimina la regla creada y se verifica con el comando status que ya no forman parte de la tabla.
Reglas más avanzadas con direcciones de IP
Con UFW podemos realizar reglas mas avanzadas que nos permitan especificar mas nuestro filtrado a ciertas acciones. Por ejemplo podemos bloquear direcciones IP independientes o multiples, subredes, y combinar varias de estas con puertos y protocolos.
Veamos.
Bloqueando una determinada IP:
1 | sudo ufw deny from 192.168.0.222 |
Bloqueando una determinada subred:
1 | sudo ufw deny from 192.168.0.68/24 |
Combinando lo que vimos.. Aceptaremos una conexion desde una determinada ip a un determinado puerto y protocolo.
1 | sudo ufw allow from 192.168.0.222 to any port 443 proto tcp |
Habilitando / Deshabilitando el Firewall.
Podemos rapidamente habilitar o deshabilitar el firewall haciendo simplemente:
1 | sudo ufw enable |
Logueando los eventos
En UFW podemos tener control del logging en distintos niveles. Primero para habilitar el logueo hacemos lo siguiente:
1 | sudo ufw logging on |
Luego para determinar el nivel que queramos loguear vamos a elegir entre low, medium o high:
1 | sudo ufw logging medium |
Entendiendo los Logs
Dependiendo la distro en la que estes utilizandolo puede ser que los logs esten en /var/log/ufw.log. Si no los ves ahi proba con alguno de los siguiente comandos:
1 | sudo dmesg –color=always | grep -v ufw |
1 | sudo journalctl -f |
Siguiendo los ejemplos de reglas de antes, veamos un ejemplo cuando bloqueamos todo tipo de trafico entrante. Desde otro dispositivo voy a hacerle un escaneo de puertos:
Este seria un caso de un log de UFW en el cual detallare a continuación. Cada línea del log se divide en distintas etiquetas:
- UFW BLOCK | UFW ALLOW: Simplemente que se bloqueo o que se acepta el trafico
- IN: Cuando el valor de este campo este completado como en el ejemplo, nos da a entender que fue ENTRANTE.
- OUT: Al igual que el ejemplo de IN en este caso si tiene un valor significa que el evento resulto SALIENTE.
- MAC: Es la combinacion de direcciones MAC de origen y destino.
- SRC: Indica la direccion IP del origen del paquete.
- DST: Muestra la direccion ip del destino del paquete, en este caso la de mi maquina virtual de prueba que recibe el ‘escaneo de puertos’.
- LEN: Muestra la longitud del paquete.
- TTL: Tiempo de vida del paquete..
- PROTO: Muestra bajo que protocolo se utiliza la transmision del paquete.
- SPT: Obtiene el puerto de origen del paquete.
- DPT: Indica el puerto de destino.
- WINDOW: Muestra el tamaño de la ventana de TCP
- SYN URGP: En este campo muestra la bandera SYN indica la solicitud para realizar una conexión y el URGP=0 significa que la conexión no se estableció.
Hasta acá el paper de UFW. Quizas vaya editandolo y completandolo mas. Pero creo que es suficiente de momento para empezar con una configuracion basica en UFW sin tantas complicaciones.
shkz.