Tabla de Contenidos

Configuración de Shorewall

Shorewall es una herramienta de alto nivel que permite crear reglas de filtrado de forma cómoda.

Esta guía describe los pasos necesarios para llevar a cabo una configuración relativamente simple en la que se dispone de un equipo (que hará las veces de firewall) con dos interfaces de red, una conectada directamente a internet y la otra a una red local.

La primera de las interfaces está configurada en modo bridge debido a que en dicha máquina se ejecutan varias máquinas virtuales que comparten dicha interfaz de red.

Por otro lado, la red local utiliza un rango privado de IP, por lo que es necesario enmascarar dichas IP cuando se accede a la red externa.

Instalación de Shorewall

Para la instalación descrita basta con instalar el paquete shorewall.

emerge -av shorewall

Configuración de Shorewall

Los archivos de configuración de Shorewall están en el directorio /etc/shorewall. Los ficheros que será necesario modificar son:

El fichero zones define las zonas sobre las que va a actuar Shorewall y su tipo. Para la configuración anterior necesitamos definir 3 zonas: la máquina en sí (fw), la red externa (net) y la red local (loc):

/etc/shorewall/zones
###############################################################################
#ZONE	TYPE		OPTIONS		IN			OUT
#					OPTIONS			OPTIONS
fw	firewall
net	ipv4
loc	ipv4

El fichero interfaces define las interfaces de red utilizadas por aquellas zonas que no son del tipo firewall:

/etc/shorewall/interfaces
#ZONE		INTERFACE		OPTIONS
net		br0			routeback,bridge
loc		eno2

El fichero policy define las políticas. El siguiente ejemplo permite prácticamente cualquier comunicación (la única que realmente se impide es el acceso desde la red externa a la local):

/etc/shorewall/interfaces
###############################################################################
#SOURCE	DEST	POLICY		LOG	LIMIT:		CONNLIMIT:
#				LEVEL	BURST		MASK
loc	net	ACCEPT
fw	net	ACCEPT
net	fw	ACCEPT
fw	loc	ACCEPT
loc	fw	ACCEPT
net	all	DROP		info
all	all	REJECT		info

El fichero masq permite definir qué rango de IP deben ser enmascaradas al salir por una determinada interfaz (la siguiente configuración determina la IP pública de forma automática):

/etc/shorewall/masq
################################################################################################################
#INTERFACE:DEST		SOURCE		ADDRESS		PROTO	PORT(S)	IPSEC	MARK	USER/	SWITCH	ORIGINAL
#											GROUP		DEST
br0			192.168.0.1/24

Por último, en el fichero shorewall.conf hay que comprobar el valor de las siguientes líneas:

/etc/shorewall/shorewall.conf
STARTUP_ENABLED=Yes
IP_FORWARDING=On

La primera permite generar las reglas de filtrado y poner en marcha el cortafuegos. La segunda es para permitir el envío de tráfico procedente de una interfaz a la otra, y viceversa.

Probar la configuración

Es posible probar una determinada configuración durante un tiempo prudencial y revertir el cortafuegos a su estado anterior pasado dicho tiempo. De esta forma, si las reglas no son correctas, se podría volver a acceder a la máquina. Para probar las reglas en /etc/shorewall durante 10 segundos se puede ejecutar el comando:

shorewall try /etc/shorewall 10s

Lanzar el cortafuegos

Una vez probados todos los casos, se puede poner en marcha el cortafuegos de forma definitiva con:

/etc/init.d/shorewall start

Para añadirlo al arranque (openrc en Gentoo):

rc-update add shorewall

Configuración avanzada

El fichero /etc/shorewall/policy es el encargado de definir las reglas por defecto para la conexión entre zonas. Las excepciones a dichas reglas se definen en el fichero /etc/shorewall/rules.

Para cada conexión entrante primero se comprobarán las reglas en rules y en caso de no encontrarse ninguna coincidencia, se acudirá entonces a las reglas por defecto. La configuración ideal, al contrario de lo planteado en este documento, es que las reglas por defecto sean lo más restrictivas posibles y que se indique en el fichero rules solo aquellas conexiones que realmente se quieren permitir.

Se puede consultar cómo redactar dichas reglas en la documentación del fichero rules.

Referencias