Creative Commons License
Excepto donde se indique otra cosa, todo el contenido de este lugar está bajo una licencia de Creative Commons.
Taquiones > sysadmin > Shorewall

Shorewall

Introducción

Shorewall es una herramienta de alto nivel para configurar un cortafuegos y/ó pasarela de red creada por Thomas M Eastep.

No es la más sencilla de todas las herramientas, según reconoce hasta el propio autor, pero es muy flexible y proporciona un nivel de abstracción muy conveniente a mis intereses.

{*} Si se busca una alternativa para una máquina de escritorio existe una herramienta estupenda llamada firestarter. La he probado y es muy fácil de usar.

Shorewall no permanece en memoria como un demonio; lee su configuración, la valida y efectúa los cambios necesarios en Netfilter para desaparecer después.

Durante su funcionamiento, eso sí, podemos hacer muchas cosas con el cortafuegos y entre ellas:

  • Observar el filtrado de paquetes: shorewall show nas ó shorewall logwatch.
  • Verificar y probar configuraciones con marcha atrás en caso de fallo: shorewall try my_directory
  • Detener el cortafuegos dejándo en un estado seguro: shorewall stop.
  • Mantener una lista negra dinámica de direcciones IP.
  • Efectuar cálculos de direcciones de red y sus correspondientes máscaras: shorewall ipcalc

Mi red

He dispuesto los siguientes rangos de red:

  • 192.168.0.0/24: es la red exterior, la conexión con Internet.
  • 192.168.0.1/24: es la red interior, todas las máquinas conectadas entre sí.
  • 192.168.0.2/24: son las máquinas invitadas, tanto por cable como por antena (ya que tengo la red abierta).

Configuración

Bajo el directorio /etc/shorewall existe un buen número de archivos que sirven para definir el funcionamiento de nuestra red.

Una vez editados los archivos podemos verificar que la configuración no contiene errores sintácticos ni gramaticales mediante

# cd /etc/shorewall
# shorewall check
Checking...
Initializing...
Determining Zones...
IPv4 Zones: net local guest
Firewall Zone: fw
Validating interfaces file...
Validating hosts file...
ERROR: Invalid zone (loc) in record "loc eth-lan:192.168.1.0/24 "
Terminado

pero aunque se afirme que es correcta, al contrario que en el ejemplo, esto no nos salva de dispararnos en el pie y cortar todos los accesos al sistema.

/etc/shorewall/shorewall.conf

Este archivo contiene variables globales que definen a grandes rasgos el funcionamiento de la herramienta, y activan o desactivan secciones funcionales de una tacada.

Algunas de las que he encontrado más importantes son:

Variable Descripción Valor predeterminado
STARTUP_ENABLED Conmutador global de funcionamiento. No
VERBOSITY Nivel de locuacidad del programa desde el más silencioso (1) al más ruidoso (2) 2
LOGFILE Archivo del cual leer los mensajes /var/log/messages
IP_FORWARDING Permite activar (On), desactivar (Off) ó dejar como se encuentra (Keep) el mecanismo de reenvío de paquetes (forwarding)

/etc/shorewall/zones

Shorewall ve la red como un conjunto de zonas, las cuales pueden estar formadas por una ó varias máquinas. Cada zona puede definirse como máquinas individuales ó como redes, ó como interfaces completos de red.

He definido las siguientes zonas:

#ZONE   DISPLAY   COMMENTS
fw      firewall    El cortafuegos como zona concreta
net     ipv4        Internet
loc     ipv4        La red local
guest   ipv4        Maquinas invitadas

Para Shorewall los nombres de las zonas no tienen significado alguno; es el administrador el que se lo da.

/etc/shorewall/policy

Aquí definimos la normativa predeterminada para las conexiones y el tráfico entre zonas.

###############################################################################
#SOURCE         DEST            POLICY          LOG LEVEL       LIMIT:BURST
loc             net             ACCEPT
loc             fw              ACCEPT
fw              loc             ACCEPT
fw              net             ACCEPT
guest           net             ACCEPT
net             all             DROP            $LOG
all             all             REJECT          $LOG

Lo que viene a significar que la red local (loc) tiene acceso tanto al exterior (net) como al propio cortafuegos (fw). Este a su vez puede conectar tanto con la red local como con el exterior, mientras que la red de invitados (guest) sólo puede conectar con el exterior (que no es poco).

Como base todas las conexiones desde el exterior (net) a cualquier otro sitio son descartadas (y se registran), y cualquier otra cosa que no entre en las anteriores definiciones está prohibida (REJECT) con un registro a su vez.

[!] Las propiedades definidas en este archivo y en el de reglas (rules) no son transitivas. Es decir, el que se pueda conectar desde la zona A a la zona B no implica lo contrario.

/etc/shorewall/interfaces

PENDIENTE DE COMPLETAR

/etc/shorewall/rules

[!] Este archivo define una tabla de permisos para conectar, que se consulta antes que el anterior (policy), el cual sólo define los valores predeterminados.

PENDIENTE DE COMPLETAR

Enlaces y referencias