Búsqueda de sitios web

Shorewall: un firewall de alto nivel para servidores Linux


Configurar un firewall en Linux puede resultar muy desalentador para un novato o para alguien que no esté muy familiarizado con iptables. Por suerte, existe una solución muy fácil de usar en Shorewall.

En este tutorial de varias partes, lo iniciaré 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 para 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 a redes muy grandes que dan servicio a numerosas máquinas, comenzaremos con una configuración básica de dos interfaces y concretaremos los conceptos básicos.

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

Instalar el cortafuegos Shorewall en Linux

Shorewall se puede instalar utilizando las herramientas de administración de paquetes apt y yum.

sudo apt install shorewall    [On Debian-based Sysems]
sudo yum install shorewall    [On RHEL-based Sysems]

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
cd /etc/shorewall

Si echamos un vistazo a este directorio, vemos un montón de archivos y el archivo shorewall.conf.

Shorewall ve la red como un grupo de zonas diferentes, por lo que el primer archivo que queremos examinar es el archivo “/etc/shorewall/zones”.

sudo nano /etc/shorewall/zones

Aquí vemos que hay tres zonas definidas por defecto: fw, net y loc. Es importante tener en cuenta que Shorewall trata la máquina del firewall como su propia zona y la almacena en una variable llamada $fw.

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

Esta configuración renuncia a lo siguiente:

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

El bit NIVEL DE REGISTRO debería resultarle familiar a cualquiera que haya administrado Apache, MySQL o cualquier otro programa FOSS. En este caso, le estamos diciendo a Shorewall que utilice el nivel de información de registro.

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

sudo nano /etc/shorewall/interfaces

Aquí, hemos configurado nuestra interfaz de 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 extensas y se explican mejor en detalle en la página de manual.

man shorewall-interfaces

Un resumen rápido de algunos de ellos es el siguiente:

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

Por supuesto, ahora que nuestro sistema tiene un firewall, necesitaremos que se permitan ciertas conexiones para poder realizar lo que tenemos que hacer. Los define en el archivo de reglas en “/etc/shorewall/rules”.

sudo nano /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, tienes tu DEST, o destino, que es la zona o dirección IP del destino. Usemos un ejemplo.

Supongamos 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 también tendrá que decirle al firewall que cualquier tráfico que llegue 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 firewalls/enrutadores. En “/etc/shorewall/rules“, esto se puede lograr 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 ser enrutado (DNAT) al puerto 22 en una máquina con dirección 192.168.1.25.

Esto se llama Traducción de direcciones de red o NAT. La “D” simplemente le dice a Shorewall que se trata de una 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 cómo recompilar un kernel de Debian.

En el próximo artículo, exploraremos varias configuraciones y opciones de Shorewall. Sin embargo, debería haber amplia información aquí para ayudarle a comenzar por ahora. Como siempre, consulte las páginas de manual para obtener una comprensión más profunda.