Definición de zonas desmilitarizadas con Shorewall

CDA 2022/23


Índice General

1 Descripción

Ejemplo de uso del generador de cortafuegos iptables/NETFILTER Shoreline Firewall (Shorewall)

2 Entorno de prácticas

2.1 Software de virtualización VIRTUALBOX

En estas prácticas se empleará el software de virtualización VIRTUALBOX para simular los equipos GNU/Linux sobre los que se realizarán las pruebas.

2.2 Imágenes a utilizar

  1. Scripts de instalación

    Notas:

  2. Imágenes descargadas

  3. Usuarios configurados e inicio en el sistema

2.3 Máquinas virtuales y redes creadas

Una vez ejecutado el script se habrán definido las 3 redes y los 4 equipos virtualizados donde se realizarán los ejercicios:

Image dmz-vpn

3 Shorewall (Shoreline Firewall)

Shorewall (Shoreline firewall) es un generador de reglas iptables a partir de una especificación expresada en un conjunto ficheros en formato texto (ubicados por defecto en /etc/shorewall).

Recursos complementarios

3.1 Funcionamiento

Al compilar los ficheros de configuración, la información detallada en zones, interfaces y hosts permite a Shorewall identificar las zonas de origen y destino de cada paquete inspeccionado.

Internamente lo que hará Shorewall es crear una cadena iptables para cada par (zona origen, zona destino).

Con la información presente en interfaces y, opcionalmente, en hosts, se crearán reglas en las cadenas por defecto input, output y forward para capturar los paquetes con ese origen y ese destino y derivar el procesamiento de dichos paquetes a la correspondiente cadena (de nombre [origen]-[destino]).

La estructura de las cadenas [origen]-[destino] generadas es siempre la misma, por este orden:

  1. Se permite el tráfico de conexiones ya abiertas
  2. Reglas iptables resultado de traducir las entradas del fichero rules aplicables a las correspondientes zonas de origen y destino
  3. Reglas iptables correspondientes al comportamiento por defecto entre las zonas origen y destino indicado en el fichero de configuración policy

Los ficheros de configuración complementarios (snat, tunnels, etc) son procesados y las respectivas reglas iptables son generadas conforme a su contenido y añadidas al script de Shell final generado por el compilador de configuraciones de Shorewall.

3.1.1 Comandos de control

Shorewall ofrece el comando shorewall con diferentes subcomandos (ver man shorewall ó https://shorewall.org/manpages/shorewall.html):

Adicionalmente, en entornos Debian, Ubuntu y derivados, se proporciona un script de arranque (/etc/init.d/shorewall) que activa y desactiva el cortafuegos durante el inicio del sistema (ver https://wiki.debian.org/HowTo/shorewall) o desde línea de comandos con systemctl [accion] shorewall.service.

3.2 Descripción de la red (zones, interfaces, hosts)

zones
(ver https://shorewall.org/manpages/shorewall-zones.html)

Formato: (una línea por cada zona declarada)

ZONE TYPE OPTIONS IN OPTIONS OUT OPTIONS

interfaces
(ver https://shorewall.org/manpages/shorewall-interfaces.html)

Formato (versión 2, ?FORMAT 2): (una línea por cada interfaz de red [indicando - como zona si es necesario])

ZONE INTERFACE OPTIONS

hosts
(opcional) (ver https://shorewall.org/manpages/shorewall-hosts.html)

Formato:

ZONE HOST(S) OPTIONS

3.3 Definición del filtrado (policy, rules)

Shorewall hace uso del módulo conntrack de iptables que permite hacer seguimiento de las conexiones, usando Netfilter como un filtro de paquetes con estado.

policy
(ver https://shorewall.org/manpages/shorewall-policy.html)

Formato: (una línea por combinación origen y destino)

SOURCE DEST POLICY LOG BURST:LIMIT

rules
(ver https://shorewall.org/manpages/shorewall-rules.html)

Formato: (una línea por regla)

ACTION SOURCE DEST PROTO DPORT SPORT ORIGDEST ...

3.4 Configuración adicional (snat, tunnels, stoppedrules)

snat
(ver https://shorewall.org/manpages/shorewall-snat.html)

Formato:

ACTION SOURCE DEST ...

tunnels
(ver https://shorewall.org/manpages/shorewall-tunnels.html)

Formato:

TYPE ZONE GATEWAY GATEWAY ZONES

stoppedrules
(ver https://shorewall.org/manpages/shorewall-stoppedrules.html)

Formato:

ACTION SOURCE DEST PROTO DPORT SPORT

4 Configuración de una DMZ (DeMilitarized Zone) usando el generador de firewalls ip-tables Shoreline Firewall (ShoreWall)

4.1 Descripción

Se desarrollará un ejercicio de configuración básica de un firewall con DMZ empleando el generador de reglas iptables Shorewall. Se usará un equipo con tres interfaces para hacer el papel de firewall.

4.2 Restriciones de acceso a implementar

 
  1. Enmascaramiento (SNAT) de la red interna (10.10.10.0/24) y de la DMZ (10.20.20.0/24)
  2. Redireccionamiento (DNAT) de los servicios públicos que ofrecerá la red hacia la máquina dentro (10.20.20.22) de la DMZ
    1. peticiones WEB (http y https)
    2. tráfico de correo saliente (smtp) y entrante (pop3)
  3. Control de tráfico con política ”denegar por defecto” (DROP)
    1. desde la red externa sólo se permiten las conexiones hacia la DMZ contempladas en las redirecciones del punto anterior (http, https, smtp, pop3)
    2. desde la red interna hacia la red externa sólo se permite tráfico de tipo WEB y SSH
    3. desde la red interna hacia la DMZ sólo se permite tráfico WEB (http, https), e-mail (smtp, pop3), hacia los respectivos servidores, y tráfico SSH para tareas de administración en los equipos de la DMZ
    4. desde el servidor SMTP de la red DMZ (máquina dmz (10.20.20.22)) hacia el exterior se permite la salida de conexiones SMTP (para el reenvío del e-mail saliente)
    5. desde la máquina dmz (10.20.20.22) se permiten conexiones MySQL única y exclusivamente hacia la máquina dentro (10.10.10.11) de la red interna

      Nota: Esta restricción va contra el principio general de las DMZ, que establece que se deben impedir conexiones desde la DMZ hacia la zona interna. En este caso se asume una excepción a este princpio, que debería ser limitada lo máximo posible y convenientemente monitorizada. Una solución más robusta a este caso sería plantear una DMZ de dos niveles.

    6. se permite la salida a la red externa de las consultas DNS originadas en la red interna y en la DMZ
    7. firewall sólo admite conexiones SSH desde la red interna para tareas de administración
  4. Registro (log) de intentos de acceso no contemplados desde red externa a firewall3 (193.147.87.47) y a los equipos internos

4.3 Pasos previos (preparación del entorno)

  1. PREVIO 1: Habilitar la redirección de tráfico en la máquina firewall3 [10.10.10.1, 10.20.20.1, 193.147.87.47]
    	firewall3:~#  echo 1 > /proc/sys/net/ipv4/ip_forward
    

    Nota: Esta configuración no es permanente, se puede descomentar la línea #net.ipv4.ip_forward=1 en el fichero /etc/sysctl.conf para que se habilite la redirección de tráfico cada vez que arranque la máquina.

  2. PREVIO 2: Tarea 1: (a incluir en la memoria entregable) Escaneo de las máquinas del ejercicio para verificar los servicios accesibles inicialmente

    Nota: En la imagen común a todas las máquinas virtuales fue habilitado el acceso exterior al servidor MySQL (en principio sólo será relevante para la máquina dentro(10.10.10.11)) [ya hecho en las MV de prácticas]

    		dentro~# nano /etc/mysql/mariadb.conf.d/50-server.cnf
    		
    		(comentar la linea donde aparece bind-address 127.0.0.1)
    		...
    		# bind-address 127.0.0.1
    		...
    

4.4 Pasos a seguir

Se usará el esquema three-interfaces incluido en la distribución estándar de Shorewall y descrito en http://www.shorewall.net/three-interface.htm.

La plantilla para configurar el firewall está en el directorio /usr/share/doc/shorewall/examples/three-interfaces/

Todas las tareas de configuración de Shorewall se realizarán en la máquina firewall3.

  1. Copiamos los ficheros de configuración en el directorio de configuración de Shorewall (/etc/shorewall/)
    firewall3:~#  cd /etc/shorewall
    firewall3:/etc/shorewall# cp /usr/share/doc/shorewall/examples/three-interfaces/* .
    

  2. Configurar las zonas (/etc/shorewall/zones) [lo dejaremos como está]

    Tendremos 4 zonas:

    firewall3:/etc/shorewall# nano zones 
    
    ###############################################################################
    #ZONE   TYPE    OPTIONS                 IN                      OUT
    #                                       OPTIONS                 OPTIONS
    fw      firewall
    net     ipv4
    loc     ipv4
    dmz     ipv4
    

  3. Configurar los interfaces (/etc/shorewall/interfaces)

    Ajustar los interfaces de red de cada zona para que se ajusten a nuestra configuración (en columna INTERFACE)

    firewall3:/etc/shorewall# nano interfaces
    
    ###############################################################################
    ?FORMAT 2
    ###############################################################################
    #ZONE   INTERFACE       OPTIONS
    #
    net     enp0s9
    loc     enp0s3
    dmz     enp0s8
    #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
    

  4. Definir el enmascaramiento (/etc/shorewall/snat)

    En nuestro ejemplo enmascararemos (SNAT: source NAT) el tráfico saliente de nuestras 2 redes internas (loc y dmz) para salga a la red pública con la IP del cortafuegos.

    firewall3:/etc/shorewall# nano snat
    
    #########################################################################################################################
    #ACTION      SOURCE             DEST         PROTO   PORT    IPSEC   MARK    USER    SWITCH  ORIGDEST        PROBABILITY
    #
    MASQUERADE   10.10.10.0/24      enp0s9
    MASQUERADE   10.20.20.0/24      enp0s9
    
    Indica que el tráfico de la red 10.10.10.0 y de 10.20.20.0 que pretenda salir a través del interface enp0s9 (red externa) se ”reescribirá” su dirección origen con la dirección IP del interfaz enp0s9 (IP pública de firewall3 (193.147.87.47))

  5. Definir las políticas (/etc/shorewall/policy)

    En nuestro caso fijaremos unas políticas restrictivas que descartarán por defecto todo el tráfico entre las zonas definidas. En el fichero /etc/shorewall/rules se ajustarán las excepciones pertinentes.

    firewall3:/etc/shorewall# nano policy
    
    ###############################################################################
    #SOURCE         DEST            POLICY          LOG LEVEL       LIMIT:BURST
    #
    loc             all             DROP            
    net             all             DROP            info 
    dmz             all             DROP            
    
    # THE FOLLOWING POLICY MUST BE LAST
    all             all             REJECT          info
    

  6. Incluir las excepciones y redirecciones en /etc/shorewall/rules

    Mantendremos las excepciones (reglas) incluidas en el fichero rules de muestra.

    Implementaremos las restricciones de tráfico descritas en la sección 4.2 y añadiremos al final del fichero las reglas correspondientes.

    firewall3:/etc/shorewall# nano rules
    
    ####################################################################################
    #ACTION         SOURCE           DEST              PROTO   DEST    SOURCE   ORIGINAL ...        
    #                                                          PORT    PORT(S)  DEST            
    
    #       Accept DNS connections from the firewall to the Internet
    ############### COMENTAR (no nos interesa) #################
    # DNS(ACCEPT)      $FW              net
    ############################################################
    
    #       Accept SSH connections from the local network to the firewall and DMZ
    SSH(ACCEPT)      loc              $FW    # Cubre parte de las restricciones 3c
    SSH(ACCEPT)      loc              dmz    # Cubre parte de las restricciones 3c
    
    .
    .
    . (sigue)
    .
    .
    
    ########################################################################################
    ##
    ## ANADIDOS para implementar reglas de filtrado  (AÑADIR al final del fichero "rules" DESDE AQUI)
    ##
    ########################################################################################
    
    ## Anadidos para 2a, 2b: redirec. puertos (servicios publicos: http, https, smtp, pop3) a DMZ
    DNAT            net              dmz:10.20.20.22   tcp     80,443
    DNAT            net              dmz:10.20.20.22   tcp     25,110
    
    
    ## Anadidos para 3b: acceso desde local a red externa (solo WEB y SSH)
    ACCEPT          loc              net               tcp     80,443
    ACCEPT          loc              net               tcp     22
    
    
    ## Anadidos para 3c: acceso desde local a servidores web y correo de DMZ y ssh a equipos DMZ
    ACCEPT          loc              dmz:10.20.20.22   tcp     80,443
    ACCEPT          loc              dmz:10.20.20.22   tcp     25,110
    ACCEPT          loc              dmz               tcp     22  # No sería necesario, cubierto por una regla anterior
    
    ## Anadidos para 3d: acceso del servidor SMTP de DMZ a servidores SMTP externos para (re)envío de e-mails
    ACCEPT          dmz:10.20.20.22  net               tcp     25
    
    ## Anadidos para 3e: acceso del servidor web de DMZ al servidor mysql
    ACCEPT          dmz:10.20.20.22  loc:10.10.10.11   tcp     3306
    
    ## Anadidos para 3f: acceso al exterior para consultas DNS desde red interna y dmz
    DNS(ACCEPT)     loc              net
    DNS(ACCEPT)     dmz              net
    
    ######## NOTA: Reglas 3f equivalen a:
    #ACCEPT          loc              net               tcp     53
    #ACCEPT          loc              net               udp     53
    #ACCEPT          dmz              net               tcp     53
    #ACCEPT          dmz              net               udp     53
    #################################### 
    
    ## Anadidos para 3f: acceso al cortafuegos mediante SSH desde local
    ACCEPT           loc              fw               tcp     22
    

  7. Ajustar el fichero de configuración de Shorewall (/etc/shorewall/shorewall.conf)

    Como mínimo debe establecerse la variable STARTUP_ENABLED a yes, para que el compilador Shorewall procese los ficheros y genere las reglas iptables.

    También debe habilitarse el forwarding de paquetes: Asegurar que la variable IP_FORWARDING está a on (o Keep si se garantiza que se habilita ip forwarding antes de iniciar el firewall)

    firewall3:/etc/shorewall# nano shorewall.conf
    
    ###############################################################################
    #                      S T A R T U P   E N A B L E D
    ###############################################################################
    STARTUP_ENABLED=Yes
    .
    .
    .
    
    ###############################################################################
    #                       F I R E W A L L   O P T I O N S
    ###############################################################################
    ...
    IP_FORWARDING=Yes 
    ...
    

  8. Arrancar Shorewall

    Nota: Se hará uso de Shorewall de forma manual con los subcomandos start, clear o compile.

    firewall3:/etc/shorewall# shorewall start
    

    Más detalles sobre inicio, parada y deshabilitación de Shorewall

4.4.1 Pruebas a realizar

 

  1. Comprobar la configuración actual de iptables en firewall3 (puede consultarse la configuración directamente con los comandos de iptables o analizando el script generado por Shorewall en /var/lib/shorewall/.start)

    Opcion 1. Volcado de la configuración de iptables

    firewall3:~# iptables -L -n
    firewall3:~# iptables -t nat -L -n
    
    Opcion 2. Volcado de los comandos iptables con iptables-save
    firewall3:~# iptables-save > /tmp/volcado.txt
    firewall3:~# mousepad /tmp/volcado.txt
    
    Opcion 3. Fichero de comandos generado por shorewall (incluye la salida de iptable-save)
    firewall3:~# mousepad /var/lib/shorewall/.start
    

    Nota: También es posible ver el contenido a una cadena iptables concreta de las generadas por Shorewall (cadena [origen]-[destino], por ejemplo loc-net) [con shorewall show policies se pueden ver las cadenas generadas]

    firewall3:~# iptables -L loc-net
    ó 
    firewall3:~# shorewall show loc-net
    

  2. Tarea 2: (a incluir en memoria entregable) revisar la configuración de Shorewall y estructura de las reglas generadas automáticamente a partir de ella.
    1. Señalar las configuraciones de Shorewall (entradas en policy, rules, zones, interfaces, hosts, etc) que dan soporte al tráfico redireccionado hacia la DMZ
    2. Identificar y describir las reglas iptables generadas por Shorewall para dar soporte al tráfico redireccionado hacia la DMZ
    3. Señalar las configuraciones de Shorewall (entradas en policy, rules, zones, interfaces, host, etc) que habilitan el acceso desde la DMZ al servidor MySQL de la red interna
    4. Identificar y describir las reglas iptables generadas por Shorewall que permiten el acceso desde la DMZ al servidor MySQL de la red interna

  3. Tarea 3: (a incluir en memoria entregable) Comprobar que se verifican las redirecciones y restriciones de tráfico desde las distintas máquinas (fuera, dentro, dmz)

5 Documentación a entregar

Esquema propuesto

Entrega: MOOVI

Fecha límite: 13/11/2022