Zonas desmilitarizadas (doble firewall)
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.
- Scripts de instalación
Notas:
- Se pedirá un identificador (sin espacios) para poder reutilizar las versiones personalizadas de las imágenes creadas (usad por ejemplo el nombre del grupo de prácticas o el login LDAP)
- En ambos scripts la variable
$DIR_BASE
especifica donde se descargarán las imágenes y se crearán las MVs.
Por defecto en GNU/Linux será en $HOME/SSI1819 y en Windows en C:/SSI1819.
Puede modificarse antes de lanzar los scripts para hacer la instalación en otro directorio más conveniente (disco externo, etc)
- Es posible descargar las imágenes comprimidas manualmente (o intercambiarlas con USB), basta descargar los archivos
con extensión
.vdi.zip
de http://ccia.esei.uvigo.es/docencia/SSI/1819/practicas/ y copiarlos en el directorio anterior ($DIR_BASE
) para que el script haga el resto.
- Si no lo hacen desde el script anterior, se pueden arrancar las instancias VIRTUALBOX desde el interfaz gráfico de VirtualBOX
o desde la línea de comandos con
VBoxManage startvm <nombre MV>_<id>
- Imágenes descargadas
- Usuarios configurados e inicio en el sistema
- Usuarios disponibles
login |
password |
root |
purple |
usuario |
usuario |
- Acceso al entorno gráfico una vez logueado (necesario para poder copiar y pegar desde/hacia el anfitrión)
root@datos:~# startx
- Habilitar copiar y pegar desde/hacia el anfitrión en el menú
Dispositivos -> Portapapeles compartido -> bidireccional
de la ventana de la máquina virtual.
- Redes donde se realizarán los ejercicios:
- Red interna (10.10.10.0 ... 10.10.10.255): máquina dentro (enp0s3) [10.10.10.11] + interfaz enp0s3 de contencion [10.10.10.1]
- Red DMZ (10.20.20.0 ... 10.20.20.255): máquina dmz (enp0s3) [10.20.20.22] + interfaz enp0s8 de contencion [10.20.20.2] + interfaz enp0s3 de acceso [10.10.10.1]
- Red externa (193.147.87.0 ... 193.147.87.255): máquina fuera (enp0s3) [193.147.87.33] + interfaz enp0s8 de acceso [193.147.87.47]
- Máquinas virtuales
- Máquina dentro: equipo de la red interna
- IP: 10.10.10.11
- Puerta de enlace por defecto: 10.10.10.1
- Máquina contención: cortafuegos de contención, separa la red interna de la DMZ
- IP en la red interna: 10.10.10.11
- IP en la DMZ: 10.20.20.2
- Puerta de enlace por defecto: 10.20.20.1
- Máquina dmz: equipo de la DMZ (con servidores públicos HTTP, HTTPS, SMTP, POP3)
- IP: 10.20.20.22
- Puerta de enlace por defecto: 10.20.20.1
- Máquina acceso: cortafuegos de acceso, separa la DMZ de la red externa
- IP en la DMZ: 10.20.20.1
- IP en la red externa (pública): 193.147.87.47
- Máquina fuera: equipo de la red externa
- IP en la red externa (pública): 193.147.87.33
- Servicios arrancados por defecto en todas las máquinas (no es necesario iniciarlos manualmente)
- servidor web (Apache 2) [Nota: puede ser necesario reiniciarlo manualmente con ” service apache2 restart ”]
- servidor telnet (arrancado por openbsd-inetd)
- servidor SSH (openSSH)
- servidor ftp (arrancado por openbsd-inetd)
- servidor finger (arrancado por openbsd-inetd)
- servidor MySQL
- servidor SMTP (postfix)
- servidores POP3 e IMAP (dovecot)
- Habilitar la redirección de tráfico en los dos cortafuegos: acceso[10.20.20.1, 193.147.87.47]
y contencion[10.10.10.1, 10.20.20.2]
acceso:~# echo 1 > /proc/sys/net/ipv4/ip_forward
contencion:~# echo 1 > /proc/sys/net/ipv4/ip_forward
- Ajustar las tablas de enrutado
- La ruta por defecto (default gateway) de la máquina contención[10.10.10.1, 10.20.20.2]
está establecida hacia la máquina acceso [10.20.20.1] para que el tráfico de la red interna pueda
salir al exterior.
- Justificación: Es necesario hacerlo así ya que en el cortafuegos contención[10.10.10.1, 10.20.20.2] no
hacemos enmascaramiento (SNAT) de la red interna (10.10.10.0/24)
- En el cortafuegos acceso: añadir una ruta que encamine el tráfico hacia las IPs de la red interna (10.10.10.0/24) a través de la IP
del cortafuegos contención en la DMZ (10.20.20.2)
acceso:~# route add -net 10.10.10.0/24 gw 10.20.20.2
acceso:~# route -n
- Justificación: Es necesario hacerlo así para proporcionar al cortafuegos acceso una ruta para encaminar
hacia la red interna (10.10.10.0/24) los paquetes de respuesta al tráfico saliente
generado por los equipos de la propia red interna (10.10.10.0/24)
- En los equipos de la DMZ (dmz en el ejemplo): añadir una ruta que encamine el tráfico hacia las IPs de la red interna (10.10.10.0/24) a través de la IP
del cortafuegos contención en la DMZ (10.20.20.2)
dmz:~# route add -net 10.10.10.0/24 gw 10.20.20.2
dmz:~# route -n
Nota: Sin restricciones adicionales, esta ruta no sería estrictamente necesaria.
- La ruta por defecto (deafult gateway) de dmz[10.20.20.22]
encaminará el tráfico hacia la red 10.10.10.0/24 a la máquina 10.20.20.1 que a su vez, empleando
la regla anterior, acabará por enviar esos paquetes a la máquina contención[10.20.20.2]
- No obstante, puesto que en el cortafuegos acceso, Shorewall decidirá la aceptación o denegación de tráfico
en el momento del inicio de conexión, y dado que dichos paquetes de inicio no llegarán a pasar
por acceso, sino sólo por contencion, sí es necesario establecer esta regla de enrutado en las máquinas del DMZ.
El ejercicio consiste en la configuración de los dos cortafuegos acceso y contención
empleando el generador de reglas iptables Shorewall.
Material de partida:
Se pretende conseguir un comportamiento que cumpla las restricciones de filtrado descritas en la sección 3.1.
Una vez configurados los dos cortafuegos, se deberá comprobar su funcionamiento con escaneos nmap
desde cada una de las máquinas del ejercicio hacia las restantes para verificar los puertos abiertos y cerrados en cada caso (incluir en el entregable la salida de estos escaneos)
3.1 Restricciones de filtrado a soportar
- Enmascaramiento (SNAT) de la red interna (10.10.10.0/24) y de la DMZ (10.20.20.0/24) al salir hacia la red externa
- Redireccionamiento (DNAT) de los servicios públicos que ofrecerá
la red hacia la máquina dmz (10.20.20.22) de la DMZ
- peticiones WEB (http y https)
- tráfico de correo saliente (smtp) y entrante (pop3)
- Control de tráfico con política ”denegar por defecto” (DROP)
- desde la red externa sólo se permiten las conexiones hacia la DMZ
contempladas en las redirecciones del punto anterior (http, https, smtp, pop3)
- desde la red interna hacia la red externa sólo se permite tráfico de tipo WEB y SSH
- desde la red interna hacia la DMZ sólo se permite tráfico WEB (http, https), e-mail (smtp, pop3), hacia sus respectivos servidores, y SSH para la adminsitración de los equipos de la DMZ
- 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)
- 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
- se permite la salida a la red externa de las consultas DNS originadas en la red interna y en la DMZ
- los dos firewalls sólo admiten conexiones SSH desde la red interna
- Registro (log) de los intentos de acceso no contemplados.
El cortafuegos de acceso regula el tráfico entre la red externa y los equipos de la DMZ y de la red interna.
En nuestro caso, además de las responsabilidades de filtrado del tráfico entrante y/o saliente se debe de encargar de
la traducción de direcciones.
- Enmascaramiento (SNAT) de las direcciones de la DMZ (10.20.20.0/24) y de la red interna (10.10.10.0/24) en el tráfico saliente
hacia la red externa.
- Redirección del tráfico procedente de la red externa hacia los servicios públicos de la DMZ (en este caso HTTP, HTTPS, SMTP y POP3 en la máquina dmz)
Existen varias alternativas para implementar este cortafuegos, pero la más sencilla es emplear un esquema con tres zonas basado en el
esquema ”Parallel Zones” del documento de Shorewall Multiple-Zones.html
- Dado que varias zonas (dmz y loc) ”comparten” un interfaz (enp0s3), se declarará ese
interfaz en el fichero interfaces, pero sin vincularlo a ninguna zona. Por lo que
será necesario hacer uso del fichero hosts para distinguirlas en base a los rangos de
direcciones IP empleados en cada caso.
- Más información: shorewall-zones,
shorewall-interfaces,
shorewall-hosts
El cortafuegos de contención regula el tráfico entre la red interna y los equipo de la DMZ y de la red externa.
En nuestro caso no se contempla traducción de direcciones: el enmascaramiento (SNAT) de la red interna se delega en
el cortafuegos de acceso y el acceso a la DMZ se realiza con las propias direcciones de la red interna [10.10.10.0/24]
(requiere fijar adecuadamente las tablas de enrutado, como se hizo al incio).
Existen varias alternativas para implementar este cortafuegos, pero la más sencilla es emplear un esquema con tres zonas basado en el
esquema ”Nested Zones” del documento de Shorewall Multiple-Zones.html
- Nota 1. En caso de utilizar la plantilla Three Interfaces Firewall de Shorewall se incluye un fichero
stoppedrules
en /etc/shorewall
, en nuestro caso no será necesario y se debe eliminar (si no se elimina, fallará la compilación de las reglas)
stoppedrules
es una réplica de policy
que define el tráfico permitido por el cortafuegos cuando se ejecuta el comando shorewall stop
- En nuestro caso usaremos sólo
shorewall start
para iniciar el filtrado en los cortafuegos y shorewall clear
para eliminar las reglas de filtrado, por lo que no es necesario
- Nota 2. En las comprobaciones realizadas con nmap incluir la opción -P0
- Esta opción omite la verificación de accesibilidad de los hosts escaneados empleando mensajes Ping
- Con la configuración por defecto, en caso de que los cortafuegos bloquearan el tráfico ICMP, nmap omitiría el escaneo
El material entregable de este ejercicio constará de una
pequeña memoria (máximo 3-4 páginas) cubriendo los siguientes puntos
- Tarea 1: DMZ con doble firewall
- Descripción del filtrado realizado por cada cortafuegos
- Detallar la configuración
Shorewall empleada en cada uno de los dos cortafuegos (acceso y contención)
explicando las decisiones tomadas.
- Explicar cada fichero de configuración (
zones
, interfaces
, hosts
, policy
, rules
, masq
, etc), indicando los aspectos relevantes de cada uno (especialmente del fichero rules
de cada cortafuego).
- Descripción de las pruebas de funcionamiento realizadas para verificar el cumplimiento de los requisitos
indicados en la sección 3.1 y los resultados obtenidos.