Shorewall: un cortafuegos de alto nivel para configurar servidores Linux


Configurar un firewall en Linux puede ser muy abrumador para un novato o para alguien que no esté muy familiarizado con iptables. Afortunadamente, hay una solución muy fácil de usar en Shorewall.

En este tutorial de varias partes, lo ayudaré a comenzar con Shorewall y lo guiaré a través de algunos temas más avanzados con este increíble sistema de firewall.

¿Qué es Shorewall?

Shorewall es esencialmente una interfaz para iptables, pero es una interfaz de entorno de línea de comandos que utiliza varios archivos de texto para su configuración. Si bien Shorewall es un sistema de firewall robusto que se puede escalar en redes muy grandes que dan servicio a numerosas máquinas, comenzaremos con una configuración básica de dos interfaces y definiremos los conceptos básicos.

Una configuración de dos interfaces consta de una máquina con dos puertos Ethernet, uno que entra y otro que sale a la red local.

Instalación de Shorewall en Linux

Shorewall se puede instalar usando las herramientas de administrador de paquetes apt-get y yum.

$ sudo apt-get install shorewall6
$ sudo yum install shorewall6

Después de la instalación, necesitamos copiar una configuración de muestra del directorio "/ usr/share/doc/shorewall" al directorio predeterminado de Shorewall "/ etc/shorewall".

$ sudo cp /usr/share/doc/shorewall/example/two-interfaces/* /etc/shorewall

Y luego cd a/etc/shorewall.

$ cd /etc/shorewall

Si echamos un vistazo a este directorio, vemos un montón de archivos y un archivo shorewall.conf. Shorewall ve la red como un grupo de zonas diferentes, por lo que el primer archivo que queremos ver es el archivo “/ etc/shorewall/zones”.

Aquí, vemos que hay tres zonas definidas por defecto: net, loc y all. Es importante tener en cuenta que Shorewall trata la máquina cortafuegos como su propia zona y la almacena en una variable llamada $FW. Verá esta variable en el resto de los archivos de configuración.

El archivo “/ etc/shorewall/zones” se explica por sí mismo. Tiene la zona de red (interfaz de cara a Internet), la zona loc (interfaz de cara a LAN) y todo, que es todo.

Esta configuración renuncia a lo siguiente:

  1. Permite todas las solicitudes de conexión desde la zona loc (LAN) a la zona de red (Internet).
  2. Elimina todas las solicitudes de conexión (ignora) de la zona de red al firewall y la LAN.
  3. Rechaza y registra todas las demás solicitudes.

El bit LOG LEVEL debería ser familiar para cualquiera que haya administrado con Apache, MySQL o cualquier otro número de programas FOSS. En este caso, le estamos diciendo a Shorewall que use el nivel de información de registro.

Si desea tener su firewall disponible para que lo administre desde su LAN, puede agregar las siguientes líneas a su archivo “/ etc/shorewall/policy”.

#SOURCE		DEST	POLICY		LOG		LEVEL		LIMIT:BURST
loc			$FW		ACCEPT
$FW			loc		ACCEPT

Ahora que nuestras zonas y política están configuradas, tenemos que configurar nuestras interfaces. Para ello, edite el archivo “/ etc/shorewall/interfaces”.

Aquí, hemos configurado nuestra interfaz de acceso a Internet como eth0 para la zona de red. En nuestro lado LAN, hemos configurado la otra interfaz, eth1, en la zona loc. Ajuste este archivo para que se ajuste correctamente a su configuración.

Las diversas opciones que puede colocar para cualquiera de estas interfaces son amplias y se explican mejor en detalle en la página del manual.

$ man shorewall-interfaces

Un breve resumen de algunos de ellos son los siguientes:

  1. nosmurfs: filtra los paquetes con la dirección de transmisión como fuente.
  2. logmartians: registra paquetes con una dirección de origen imposible.
  3. routefilter: filtrado de rutas del kernel para evitar la suplantación de identidad.

Por supuesto, ahora que nuestro sistema tiene un cortafuegos, necesitaremos que se permitan ciertas conexiones para poder hacer lo que tenemos que hacer. Usted los define en el archivo de reglas en "/ etc/shorewall/rules".

Este archivo parece confuso al principio, principalmente porque las columnas se superponen, pero los encabezados se explican por sí mismos. Primero, tiene la columna ACCIÓN, que describe lo que desea realizar.

A continuación, tiene un encabezado SOURCE donde define la zona donde se origina el paquete. Luego, tiene su DEST, o destino, que es la zona o dirección IP del destino. Usemos un ejemplo.

Suponga que desea ejecutar un servidor SSH detrás de su firewall en la máquina con la dirección IP 192.168.1.25. No solo tendrá que abrir un puerto en su firewall, sino que tendrá que decirle al firewall que cualquier tráfico que ingrese al puerto 22 debe enrutarse a la máquina en 192.168.1.25.

Esto se conoce como reenvío de puertos. Es una característica común en la mayoría de los cortafuegos/enrutadores. En "/ etc/shorewall/rules", lograría esto agregando una línea como esta:

SSH(DNAT)	net		loc:192.168.1.25

Arriba, hemos definido que cualquier paquete destinado a SSH que provenga de la zona de red al firewall debe enrutarse (DNAT) al puerto 22 en la máquina con la dirección 192.168.1.25.

Esto se denomina traducción de direcciones de red o NAT. La "D" simplemente le dice a Shorewall que se trata de un NAT para una dirección de destino.

Para que esto funcione, debe tener habilitado el soporte NAT en su kernel. Si necesita NAT y no lo tiene, consulte mi tutorial sobre la recompilación de un núcleo de Debian.

Enlaces de referencia

Página de inicio de Shorewall

En el próximo artículo, analizaremos algunos temas más avanzados, pero debería haber muchos aquí para comenzar por ahora. Como siempre, eche un vistazo a las páginas de manual para una comprensión más profunda.