Tabla de Contenidos

Configurando un FireWall en Debian

Logo Debian En muchos casos cuando nos queremos involucrar en configurar un FireWall, necesitamos aprender bastante de IPTABLES, para configurarlo y que quede funcional y seguro usando un kernel de Linux.

Tarea que se torna difícil si ejecutamos los comandos y reglas directamente con comandos de IPTABLES, materia que es compleja de configurar adecuadamente.

Afortunadamente existen herramientas que nos permiten realizar este trabajo en forma más simple y nos aleja del detalle de las instrucciones, esta es una de las herramientas, se llama Uncomplicated FireWall o ufw.

Para instalarla ejecutamos en un terminal como root:

# aptitude install ufw

Esta es una interfaz de línea de comandos que nos permiten trabajar desde consola con IPTABLES en forma sencilla y consisten en un pequeño número de ordenes simples que son traducidas por la aplicación para todas las reglas de IPTABLES.

No Usamos ipv6

Si no tenemos disponible ipv6 en nuestra red, no es necesario activar reglas para esta red, por lo que debemos desactivarlo, para ello lo que deberemos hacer es editar el archivo /etc/default/ufw y dejar la variable, de la forma siguiente:

IPV6=no

Con eso hemos deshabilitado IPV6 de nuestra definición, pero si llegamos a configurar IPV6 deberemos dejar de nuevo la variable IPV6=yes.

Definiendo Políticas de IPTABLES

Antes de comenzar a escribir las reglas debemos definir como trabajará nuestro FireWall o cual será su comportamiento por defecto o su Política de Filtrado, lo más recomendable es denegar todo tipo de tráfico entrante y permitir el tráfico saliente, para lograr esto debemos ejecutar los comandos siguientes:

# ufw default deny  incoming
# ufw default allow outgoing

Añadiendo Reglas

Las reglas se pueden indicar de dos maneras distintas, por una parte podemos realizarlo por el nombre del servicio y la otra es por el número de puerto tcp/udp del protocolo.

Un ejemplo de esto, por ejemplo es que si queremos habilitar o escuchar en el puerto 22 o habilitar el servicio SSH en nuestro servidor, para ello podremos usar cualquiera de las dos formas siguientes:

# ufw allow ssh
# ufw allow 22

Ambas formas son correctas para esta aplicación.

Bloqueando IP's

En el tiempo hay que estar mirando los logs para saber desde que IP's han habido más intentos de quebrar nuestras claves de acceso, cuando tenemos una IP's que recurrentemente intenta violar nuestra seguridad, tenemos la posibilidad de bloquearlo directamante:

# ufw deny from xx.yy.zz.ww

Con esto, la IP identificada quedará simplemente bloqueada. Pero es importante que esta regla quede en las primeras posiciones en las reglas, ya que recordemos que IPTABLES ejecuta las reglas hasta que haya una coincidencia, por lo tanto debe estar antes de la apertura de los puertos y en las primeras líneas.

Para realizar esto debemos ejecutar:

# ufw insert 1 deny from xx.yy.zz.ww

Esto dejará esta regla de bloqueo en primero posición. Para serciorarnos que esto es así, debemos listar en orden las reglas con la orden:

# ufw status numbered

Entrega un listado completo de las reglas aplicadas y en el orden en las que las aplica.

Bloqueando Rangos de IP's

Hay ocasiones en que se bloquean ciertas IP's que intentan quebrar nuestra seguridad y se prueba insistentemente con varias IP's del mismo segmento, obviamente poner una lista de IP's no es lo más aconsejable en estos casos, lo que se debe hacer es bloquear el segmento completo para eso ejecutamos la regla.

# ufw deny from xx.yy.zz.0/24

Por ejemplo:
# ufw deny from 192.168.100.0/24

Cuando ejecutamos es status nos muestra el rango de IP's bloqueadas, esto lo tendremos que chequear en las reglas, SIEMPRE.

Listando Nombres de Servicios

Además de poder utilizar los nombres de los servicios que tenemos es /etc/services, esta aplicación dispone de una lista de nombres de las aplicaciones más comunes, como WWW, OpenSSH, WWW Secure, etc…

Para ver la lista completa de los nombres podemos ejecutar:

# ufw app list

AIM
Bind9
Bonjour
CIFS
DNS
Deluge
IMAP
IMAPS
IPP
KTorrent
Kerberos Admin
Kerberos Full
Kerberos KDC
Kerberos Password
LDAP
LDAPS
LPD
MSN
MSN SSL
Mail submission
NFS
OpenSSH
POP3
POP3S
PeopleNearby
SMTP
SSH
Socks
Telnet
Transmission
Transparent Proxy
VNC
WWW
WWW Cache
WWW Full
WWW Secure
XMPP
Yahoo
qBittorent
svnserve

Complicando las Reglas

UFW nos permite incorporar reglas más complejas, como por ejemplo limitar el rango de IP's desde las que se puede acceder a una aplicación.

En el ejemplo siguiente podemos acceder desde un rango de IPs al servicio SSH o viceversa.

# ufw allow from 192.168.0.0/24 to 127.0.0.1 app ssh
# ufw allow to 192.168.0.0/24 from 127.0.0.1 app ssh

Cualquier máquina que no esté en el rango de red 192.168.0.0 a 192.168.0.254, no podrá tener acceso a la máquina por el servicio SSH.

Insertando Reglas

UFW además tiene mecanismos para poder insertar reglas en IPTables y poder eliminarlas, veamos el ejemplo siguiente de inserción:

# ufw insert 1 deny 192.168.0.100

Esto inserta en la línea “1” de las reglas, denegar a una IP de la red LAN, esto se comprueba al ejecutar ufw status, nos entrega un listado donde podemos ver las reglas y el orden en que van ejecutadas.

# ufw delete 1

Esto nos permite eliminar una regla de la lista, en el ejemplo se elimina la primera regla de la lista de ufw.

Denegando IP's

UFW tiene también mecanismos para denegar IP's que han sido bloqueadas varias veces y vuelven a intentar tratar de romper nuestras claves, para ello simplemente debemos DENEGAR esas IP's, las cuales quedan registradas en los logs.

# ufw deny from 192.168.144.xx to any

Ha modo de ejemplo hemos denegado una IP interna, pero podemos poner cualquier IP que nos de problemas, también debemos saber que los atacantes pueden probar con otras IP's del mismo segmento u otro.

Pero como saber que IP's son las que tratan de accesar nuestra máquina o cuales son las que tienen mayor numero de intentos fallidos, para ello ejecutamos en un terminal.

# zgrep "Failed password for " /var/log/auth* \
 | sed "s/invalid user //" | tr -s " " | awk '{print $11" "$9}' \
 | sort | uniq -c | sort -n | tail -25

Todo esto en una misma línea del terminal. Estos nos proporcionará un registros de las IP's que han realizado mayor cantidad de accesos fallidos y debemos de bloquear.

10  106.75.71.224 root
10  42.7.26.85 root
10  58.242.83.8 root
11  123.150.200.121 root
23  173.212.222.115 admin
35  116.31.116.26 root
141 58.242.83.7 root

Como ejemplo he sacado las que han tratado de romper el acceso a mi server, la primera columna es la cantidad de veces, la segunda es desde la IP de origen y la tercera es el usuario por el cual han tratado de ingresar. Este es un ejemplo real de las IP's que han tratado 10 a más veces, la lista es larga, pero sólo puse esa por los intentos.

Eligiendo el Protocolo

UFW también nos permite definir con que protocolo usaremos el puerto, podremos utilizar por ejemplo el protocolo TCP o el UDP. Como ejemplo podemos estar utilizando mariaDB sólo para peticiones TCP o para un rango de puertos concreto, este ejemplo sería de esta forma:

# ufw allow 3306/tcp
# ufw allow 3306:4000/tcp

Pero también de una forma más simple podremos ejecutar el comando:

# ufw allow mysql

Eliminando Reglas

Como es lógico pensar, esta herramienta también nos permite eliminar reglas, por ejemplo siguiendo con las reglas que hemos definico como ejemplo, podemos eliminar algunas de ellas, de esta forma:

# ufw delete allow ssh

Esto nos borra sólo la que está referida a allow ssh, pero si queremos borrar por completo las reglas del FireWall, debemos ejecutar el comando:

# ufw reset

Esto nos elimina todas las reglas del FireWall.

Activando o Deshabilitando el FireWall

Para habilitar y/o refrescar las reglas de nuestro FireWall, se puede realizar con el comando:

# ufw enable

Se debe hacer notar también que cada vez que se modifique, agrege o borre una regla, se debe ejecutar este comando, para actualizar las reglas que están en ejecución en el sistema.

Para deshabilitar el se debe ejecutar el comando:

# ufw disable

Comprobando la Configuración del FireWall

Una vez que hayas terminado de configurar y habilitar tu configuración del FireWall, puedes comprobar las reglas utilizadas, para ello debes ejecutar el comando:

# ufw status
# ufw status verbose

La primera línea nos estrega una información general de lo que hemos programado en nuestro FireWall, la segunda línea nos entrega un detalle mas completo de todas las reglas que hemos puesto en nuestro sistema.

Realizando un Script

Podremos relizar un scripts con varios pasos que nos permiten realizar este trabajo en forma más simple y rápida:

#!/bin/bash

# Deshabilitamos el FireWall a cualquier regla anterior
ufw disable

# Reseteamos todas las reglas anteriores
ufw reset

# Denegamos el tráfico de entrada y permitimos que salga todo
ufw default deny  incoming
ufw default allow outgoing

# Permitimos el acceso a SSH
ufw allow ssh

# Permitimos acceso a http
ufw allow www

# Permitimos acceso a MariaDB
ufw allow 3306/tcp

# Habilitamos acceso a NTPd
ufw allow ntp

# Activamos el FireWall
ufw enable

# Listamos las reglas escritas
ufw status verbose

Este es un script de ejemplo para darse una idea que podemos programar un script que nos permita ejecutar rápidamente un Firewall completo a nuestro sistema.