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
/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.