Configuración de firewalls con shorewall

 

Agustín Barto

Contenidos

  1. INTRODUCCION
    • Caracteristicas de Shorewall
    • Alternativas
  2. ZONAS
    • Arquitectura de zonas
    • Zona "fw"
  3. ARCHIVOS DE CONFIGURACION
    • shorewall.conf
    • zones
    • interfaces
    • policy
    • rules
    • masq
    • modules
    • Otros
  4. CASOS
    • Firewall standalone.
    • Firewall red tipica dos zonas/dos interfaces.
    • Multiples zonas sobre una interfaz.
    • Proxy transparente con Squid.
    • Reglas para P2P.
    • Reglas para DNAT.

Audio de la charla (formato OGG)

1. INTRODUCCION

Caracteristicas de Shorewall

"The Shoreline Firewall, more commonly known as "Shorewall", is high-level tool for configuring Netfilter. You describe your firewall/gateway requirements using entries in a set of configuration files. Shorewall reads those configuration files and with the help of the iptables utility, Shorewall configures Netfilter to match your requirements. Shorewall can be used on a dedicated firewall system, a multi-function gateway/router/server or on a standalone GNU/Linux system. Shorewall does not use Netfilter's ipchains compatibility mode and can thus take advantage of Netfilter's connection state tracking capabilities."

"Shorewall is not a daemon. Once Shorewall has configured Netfilter, it's job is complete and there is no "Shorewall process" left running in your system. The /sbin/shorewall program can be used at any time to monitor the Netfilter firewall."

Resumen de Caracteristicas:

  • Sofisticado.
  • Flexible (probablemente la herramienta de configuracion de Netfilter mas flexible actualmente).
  • Extensamente documentado.
  • Incluido en casi todas las distribuciones principales.
  • En constante desarrollo.

Alternativas

A pesar de ser tan potente y flexible, Shorewall puede llegar a ser una herramienta demasiado complicada para el uso cotidiano del usuario promedio. A continuacion se citan algunas alternativas y los puntos fuertes de cada una de ellas:

Firestarter - http://www.fs-security.com
Herramienta grafica de configuracion y MONITOREO de Netfilter. Es muy flexible y amigable. Permite definir un firewall bastante sofisticado de una manera muy simple.
Firewall Builder - http://www.fwbuilder.org
Herramienta grafica de configuracion de Netfilter. Permite describir firewalls complicados a la vez que permite al usuario promedio una seguridad aceptable con muy pocos conocimientos de Netfilter. No es tan flexible como Shorewall y requiere X-Window (y Qt?).
Arno's IPTABLES Firewall Script - http://rocky.eld.leidenuniv.nl
Script BASH de configuracion de Netfilter. Solo es necesario configurar unas pocas variables para obtener un firewall aceptable. Orientado a topologias de red tradicionales. Posee deteccion de escaneo de puertos.
Webmin - http://www.webmin.com
La herramienta de administracion de computadoras con sistemas operativos *NIX Webmin posee un modulo de administracion de Netfilter bastante completa. Es conveniente para administracion remota del firewall. Tambien posee un modulo de administracion de Shorewall.
FireHOL - http://firehol.sourceforge.net
Herramienta similar de Shorewall. El lenguaje de configuracion es un tanto mas abstracto que el de Shorewall, pero parece ser igual de flexible.
Y miles mas... - http://freshmeat.net

2. ZONAS

Arquitectura de zonas

A diferencia de casi todas las otras herramientas de configuracion de Netfilter disponibles, Shorewall trabaja alrededor del concepto de ZONAS. Shorewall no asume ningun papel especifico a cada zona (a diferencia de otras herramientas que explicitamente definen zonas Internet, DMZ, etc.), caracteristica sobre la cual recae la mayor parte de su flexibilidad.

Una zona es un concepto abstracto que identifica el origen o destino de un paquete. Las mismas se utilizan para la definicion de reglas de aceptacion o rechazo de paquetes en funcion de su procedencia o destino (junto con otras caracteristicas del mismo). Las zonas pueden o no estar asociadas a interfaces de red, subredes de IP o conjuntos de IPs (mediante el uso del patch ipset).

Zona "fw"

La unica zona explicitamente asociada a un equipo/IP es la zona "fw" (Shorewall distingue mayusculas de minusculas), la cual "contiene" al firewall que se esta configurando. Es importante al momento de configurar Shorewall asegurarse que se han configurado vias de acceso suficientes a la zona "fw" desde el lugar de donde se este trabajando, debido a que si esto no se hace, se podria perder completamente el acceso remoto al equipo.

3. ARCHIVOS DE CONFIGURACION

shorewall.conf

Archivo de configuracion principal de Shorewall. Algunas de las variables importantes a configurar en este archivo son:

  • STARTUP_ENABLED: Si no es seteada a "Yes" o "yes" el firewall no se configurara. (Medida de seguridad).
  • ADMINISABSENTMINDED: Si es seteada a "No" o "no" solo el trafico desde y hacia las direcciones listadas en /etc/shorewall/routestopped seran aceptadas cuando Shorewall es detenido. Cuando es setada a "Yes" o "yes", ademas de acetar dichas conexiones, todas las conexiones que estaban activas cuando Shorewall fue detenido continuaran funcionando y todas al conexiones AL firewall son aceptadas.
  • LOGRATE and LOGBURST: Estos parametros indican la rafaga y la tasa de paquetes que son registrados. Esto es util cuando se generan muchos paquetes invalidos en la red lo que podria generar muchisimo consumo de procesador en el firewall.
  • IP_FORWARDING: Este parametro determina si Shorewall debe habilitar o deshabilitar el forwarding de paquetes de IPV4.

zones

En este archivo se definen las zonas del firewall (excepto por la zona "fw" que siempre es definida). Hasta Shorewall 2.4.x el formato de cada definicion es:

Zona  Descripcion  Comentarios

En versiones posteriores se dejara de lado el uso de "Comentarios" de la zona. Este es un ejemplo de este tipo de archivos:

#ZONE   DISPLAY         COMMENTS
net     Internet        The big bad Internet
loc     Local           Local Network
dmz     DMZ             Demilitarized zone.

En este archivo se definen tres zonas. El nombre y la interpretacion de cada zona son a eleccion del configurador.

interfaces

En este archivo se definen las interfaces a ser tomadas en cuenta por el firewall y su posible asociacion con alguna zona (puede no ser necesario). Ademas se identifican ciertas propiedades respecto de la interpretacion de los paquetes que ingresan o salen por esa interfaz. El formato de cada definicion es:

Zona  Interfaz  Broadcast  Opciones

Ejemplo:

net ppp+ - norfc1918,nobogons,routefilter,logmartians,blacklist,tcpflags,nosmurfs
loc eth0 detect dhcp
loc tun+ -

policy

En este archivo se describen la politicas por defecto para paquetes que viajan entre una zona y otra. El formato de las definiciones es:

Origen  Destino  Politica  Nivel Log  Tasa

Las posibles politicas son:

  • ACCEPT: Se acepta la conexion.
  • DROP: Se ignora la conexion.
  • REJECT: Se rechaza explicitamente la conexion.
  • QUEUE: Enviar el pedido a una aplicacion con el target QUEUE.
  • CONTINUE: Dejar que el pedido de conexion continue para se procesador por otras reglas.
  • NONE: Se asume que esta conexion no puede darse y no se generan reglas al respecto.

Ejemplo:

#SOURCE         DEST            POLICY          LOG
#                                               LEVEL
loc             net             ACCEPT
net             all             DROP            info
#
# THE FOLLOWING POLICY MUST BE LAST
#
all             all             REJECT          info

rules

Quizas el archivo de configuracion mas importante. Aqui se definen las reglas que permiten o denegan el acceso a servicios y puertos desde y hacia zonas o el firewall. Tambien se definen las reglas de DNAT y registro de ciertos paquetes.

El formato para la definicion de reglas es:

Accion  Origen  Destino  Protocolo  Puerto Destino  Puerto Origen  Destino Original  Tasa/Limite

Las acciones pueden ser: ACCEPT, DROP, REJECT, DNAT, DNAT-, REDIRECT, CONTINUE, LOG, QUEUE or una accion definida por el usuario.

Ejemplos:

DNAT net loc:192.168.0.2 tcp 6881:6889,4661,4662,4711
DNAT net loc:192.168.0.2 udp 6881:6889,4665,4672

AllowSMTP fw all

AllowSSH loc fw
AllowSSH:info net:170.210.239.0/24 fw

ACCEPT all fw tcp 3128

ACCEPT loc fw tcp 10000

masq

Este archivo se utiliza para definir masquerading y SNAT. Es esencial para las redes no enunciables que desean conectarse a la Internet a traves de un firewall. El formato de las definiciones es:

Interfaz  Subred  Direccion  Protocolo  Puertos  IPSEC

Ejemplos:

eth0 eth1

ppp+ 192.168.0.0/24

tun+ !192.168.0.0/24

modules

En este archivo se incluyen los modulos del kernel que se desean cargar (o descargar) cuando se inicial el firewall.

Ejemplo:

loadmodule ip_tables
loadmodule iptable_filter
loadmodule ip_conntrack
#loadmodule ip_conntrack_ftp
loadmodule ip_conntrack_ftp ports=21,2370
loadmodule ip_conntrack_tftp
loadmodule ip_conntrack_irc
loadmodule iptable_nat
#loadmodule ip_nat_ftp
loadmodule ip_nat_ftp ports=21,2370
loadmodule ip_nat_tftp
loadmodule ip_nat_irc

Otros

Otros archivos de configuracion (lista incompleta) utiles son:

  • hosts: Se utiliza para asociar grupos de hosts a una zona. Es esencial para definir multiples zonas sobre una interfaz.
  • tunnels: Se utiliza para configurar automaticamente reglas de Netfilter para distintos tipos de tuneles (IPSEC, OpenVPN, etc.)
  • tcrules: Se utiliza para cargar reglas de tc (herramienta para la configuracion de los servicios de traffic shaping del kernel) desde el firewall.
  • Muchos mas... (ver /etc/shorewall)

4. CASOS

Firewall standalone.

Un firewall conectado a Internet mediante una interfaz ppp. Se considera que solo hay una zona (Net) sobre la cual viven los posibles perpetradores.

------------------------------------------------------------
/etc/shorewall/shorewall.conf
----------
.
.
.
STARTUP_ENABLED=Yes
IP_FORWARDING=Off
.
.
.
#LAST LINE -- DO NOT REMOVE
------------------------------------------------------------

------------------------------------------------------------
/etc/shorewall/zones
----------
net Net Internet
#LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE
------------------------------------------------------------

------------------------------------------------------------
/etc/shorewall/interfaces
----------
net ppp+ - norfc1918,nobogons,routefilter,logmartians,blacklist,tcpflags,nosmurfs
#LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE
------------------------------------------------------------

------------------------------------------------------------
/etc/shorewall/policy
----------
fw all ACCEPT
net all DROP info
all all REJECT info
#LAST LINE -- DO NOT REMOVE
------------------------------------------------------------

------------------------------------------------------------
/etc/shorewall/rules
----------
AllowWeb net fw   # Servidor http,https
AllowSSH net fw   # Servidor ssh

AllowPing net:172.16.0.0/16 fw

ACCEPT net:172.16.0.0/16 fw tcp 10000
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
------------------------------------------------------------

Firewall red tipica dos zonas/dos interfaces.

Este caso se corresponde al de cualquier red hogareña o cyber. Se tiene una red interna que se desea conectar a (y proteger de) Internet. En este caso asumimos que la red interna esta conectada a una interfaz ethernet eth0 y a Internet por una interfaz ppp. Asumimos ademas que se desea hacer masquerading de la red interna y que el server posee un demonio DHCP para la auto-configuracion de los hosts en la red local.

------------------------------------------------------------
/etc/shorewall/shorewall.conf
----------
.
.
.
STARTUP_ENABLED=Yes
.
.
.
#LAST LINE -- DO NOT REMOVE
------------------------------------------------------------

------------------------------------------------------------
/etc/shorewall/zones
----------
loc Local Local networks
net Net Internet
#LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE
------------------------------------------------------------

------------------------------------------------------------
/etc/shorewall/interfaces
----------
net ppp+ - norfc1918,nobogons,routefilter,logmartians,blacklist,tcpflags,nosmurfs
loc eth0 detect dhcp
#LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE
------------------------------------------------------------

------------------------------------------------------------
/etc/shorewall/policy
----------
loc net ACCEPT
#loc fw ACCEPT
net all DROP info
all all REJECT info
#LAST LINE -- DO NOT REMOVE
------------------------------------------------------------

------------------------------------------------------------
/etc/shorewall/masq
----------
ppp+ eth0
#LAST LINE -- ADD YOUR ENTRIES ABOVE THIS LINE -- DO NOT REMOVE
------------------------------------------------------------

------------------------------------------------------------
/etc/shorewall/rules
----------
AllowWeb fw all
AllowWeb all fw   # Servidor http,https (para ambas zonas)

AllowSSH fw all
AllowSSH loc fw              # Servidor ssh para red interna
ACCEPT:info net fw tcp 22000 # Servidor ssh para Internet (Informando sobre conexiones)

AllowSMB loc fw # Servidor samba
AllowSMB fw loc # Servidor samba

ACCEPT loc fw tcp 3128

ACCEPT fw all tcp 6667:6669
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
------------------------------------------------------------

Multiples zonas sobre una interfaz.

En este ejemplo suponemos una configuracion de hardware de red identica a la del ejemplo anterior, o sea, un firewall/router con dos interfaces, una ethernet eth0 conectada a la red interna que deseamos conectar a Internet, y una interfaz ppp que conecta el host a dicha red. La diferencia radica en que ahora deseamos discriminar entre dos "clases" de hosts que pueden conectarse desde la red local: Uno con acceso a todos los servicios de red disponibles, y otro que solo puede utilizar http hacia la Internet y smtp hacia el firewall donde esta instalado un MTA. Tambien deseamos que los hosts de la red interna sean configurados via dhcp.

------------------------------------------------------------
/etc/shorewall/shorewall.conf
----------
.
.
.
STARTUP_ENABLED=Yes
.
.
.
#LAST LINE -- DO NOT REMOVE
------------------------------------------------------------

------------------------------------------------------------
/etc/shorewall/zones
----------
loc2 Local Local networks
loc1 Local Local networks
net Net Internet
#LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE
------------------------------------------------------------

------------------------------------------------------------
/etc/shorewall/interfaces
----------
net ppp+ - norfc1918,nobogons,routefilter,logmartians,blacklist,tcpflags,nosmurfs
- eth0 detect dhcp
#LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE
------------------------------------------------------------

------------------------------------------------------------
/etc/shorewall/host (primera opcion)
----------
loc1 eth0:192.168.0.0/25
loc2 eth0:192.168.0.128/25
net eth0:0.0.0.0/0
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS LINE -- DO NOT REMOVE
------------------------------------------------------------

------------------------------------------------------------
/etc/shorewall/host (segunda opcion)
----------
loc2 eth0:192.168.0.100/32,192.168.0.101/32,192.168.0.102/32
loc1 eth0:192.168.0.0/24
net eth0:0.0.0.0/0
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS LINE -- DO NOT REMOVE
------------------------------------------------------------

------------------------------------------------------------
/etc/shorewall/policy
----------
loc1 net ACCEPT

loc2 net REJECT

loc1 loc2 ACCEPT
loc2 loc1 ACCEPT

net all DROP info
all all REJECT info
#LAST LINE -- DO NOT REMOVE
------------------------------------------------------------

------------------------------------------------------------
/etc/shorewall/rules
----------
AllowWeb loc2 net
AllowSMTP loc2 fw

AllowWeb fw all
AllowWeb loc1 fw   # Servidor http,https (para ambas zonas)

AllowSSH fw all
AllowSSH loc1 fw             # Servidor ssh para red interna
ACCEPT:info net fw tcp 22000 # Servidor ssh para Internet (Informando sobre conexiones)

AllowSMB loc1 fw # Servidor samba
AllowSMB fw loc1 # Servidor samba
AllowSMB fw loc2 # Servidor samba

ACCEPT loc fw tcp 3128

ACCEPT fw all tcp 6667:6669
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
------------------------------------------------------------

Proxy transparente con Squid.

------------------------------------------------------------
/etc/squid/squid.conf
----------
.
.
.
ACL local_network src 192.168.0.0/24
.
.
http_access allow local_network
.
.
.
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
------------------------------------------------------------

------------------------------------------------------------
/etc/shorewall/rules
----------
REDIRECT  loc        3128     tcp      www
ACCEPT    fw         net      tcp      www
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
------------------------------------------------------------

Reglas para P2P.

------------------------------------------------------------
/etc/shorewall/rules (p2p sobre el firewall)
----------
ACCEPT net fw tcp 6881:6889,4661,4662,36711
ACCEPT net fw udp 6881:6889,4665,4672
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
------------------------------------------------------------

------------------------------------------------------------
/etc/shorewall/rules (p2p sobre una maquina interna)
----------
DNAT net loc:192.168.0.100 tcp 6881:6889,4661,4662,4711
DNAT net loc:192.168.0.100 udp 6881:6889,4665,4672
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
------------------------------------------------------------

Reglas para DNAT.

------------------------------------------------------------
/etc/shorewall/rules
----------
DNAT:info net loc:192.168.0.2 tcp www
DNAT:info net loc:192.168.0.2 tcp 443
DROP loc:!192.168.0.2 all tcp 25
DNAT:info net loc:192.168.0.2 tcp 25
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
------------------------------------------------------------

 

Volver a la página principal