Ejemplo de uso del generador de cortafuegos iptables/NETFILTER Shoreline Firewall (Shorewall)
Recursos complementarios
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.
alumno@pc: $ sh ejercicio-dmz-openvpn.sh
Powershell.exe -executionpolicy bypass -file ejercicio-dmz-openvpn.ps1
Notas:
$DIR_BASE
especifica donde se descargarán las imágenes y se crearán las MVs.
Por defecto en GNU/Linux será en $HOME/CDA1819 y en Windows en C:/CDA1819.
Puede modificarse antes de lanzar los scripts para hacer la instalación en otro directorio más conveniente (disco externo, etc)
.vdi.zip
de http://ccia.esei.uvigo.es/docencia/CDA/1819/practicas/ y copiarlos en el directorio anterior ($DIR_BASE
) para que el script haga el resto.
VBoxManage startvm <nombre MV>_<id>
Contiene un sistema Debian 9 con herramientas gráficas y un entorno gráfico ligero LXDE (Lighweight X11 Desktop Environment) [LXDE].
login | password |
---|---|
root | purple |
usuario | usuario |
root@datos:~# startx
Dispositivos -> Portapapeles compartido -> bidireccional
de la ventana de la máquina virtual.
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.
dentro:~# service mysql start (ó service mysql restart) dentro:~# service openbsd-inetd start (ó service openbsd-inetd restart) dmz:~# service apache2 start (servidor web [80]) (ó service apache2 restart) dmz:~# service postfix start (servidor smtp [25]) (ó service postfix restart) dmz:~# service dovecot start (servidor pop3 [110]) (ó service dovecot restart) fuera:~# service apache2 start (ó service apache2 restart) fuera:~# service openbsd-inetd start (ó service openbsd-inetd restart) fuera:~# service postfix start (ó service postfix restart)
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 ...
fuera:~# nmap -T4 193.147.87.47 [escaneo de firewall3 (unica máquina visible desde fuera)] fuera:~# nmap -T4 10.10.10.11 [escaneo de dentro (fallará)] fuera:~# nmap -T4 10.20.20.22 [escaneo de dmz (fallará)]
dentro:~# nmap -T4 193.147.87.33 [escaneo de fuera] dentro:~# nmap -T4 10.20.20.22 [escaneo de dmz] dentro:~# nmap -T4 10.10.10.1 [escaneo de firewall3]
dmz:~# nmap -T4 193.147.87.33 [escaneo de fuera] dmz:~# nmap -T4 10.10.10.11 [escaneo de dentro] dmz:~# nmap -T4 10.20.20.1 [escaneo de firewall3]
firewall3:~# nmap -T4 193.147.87.33 [escaneo de fuera] firewall3:~# nmap -T4 10.10.10.11 [escaneo de dentro] firewall3:~# nmap -T4 10.20.20.22 [escaneo de dmz]
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.
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.
firewall3:~# cd /etc/shorewall firewall3:/etc/shorewall# cp /usr/share/doc/shorewall/examples/three-interfaces/* . firewall3:/etc/shorewall# gunzip *.gz
Tendremos 4 zonas:
firewall3:/etc/shorewall# nano zones ############################################################################### #ZONE TYPE OPTIONS IN OUT # OPTIONS OPTIONS fw firewall net ipv4 loc ipv4 dmz ipv4 #LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE
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 tcpflags,routefilter,norfc1918,nosmurfs,logmartians loc enp0s3 tcpflags,detectnets,nosmurfs dmz enp0s8 tcpflags,detectnets,nosmurfs #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
El fichero por defecto incluye todas las combinaciones posibles entre nuestras 3 zonas (loc, dmz, net) indicando una política ACCEPT para el tráfico de la zona loc y una política por defecto de rechazar (REJECT) y generando un LOG de los ”rechazo” realizados.
firewall3:/etc/shorewall# nano policy ############################################################################### #SOURCE DEST POLICY LOG LEVEL LIMIT:BURST loc all DROP info net all DROP info dmz all DROP info # THE FOLLOWING POLICY MUST BE LAST all all REJECT info #LAST LINE -- ADD YOUR ENTRIES ABOVE THIS LINE -- DO NOT REMOVE
En nuestro ejemplo enmascararemos (SNAT: source NAT) el tráfico saliente de nuestras 2 redes internas (loc y dmz).
firewall3:/etc/shorewall# nano masq ############################################################################## #INTERFACE SOURCE ADDRESS PROTO PORT(S) IPSEC MARK enp0s9 10.10.10.0/24 enp0s9 10.20.20.0/24 #LAST LINE -- ADD YOUR ENTRIES ABOVE THIS LINE -- DO NOT REMOVEIndica que para el tráfico que pretenda salir de la red 10.10.10.0 y 10.20.20.0 a través del interface enp0s9 (red externa) se ”reescribirá” su dirección origen con la dirección IP del interfaz enp0s9 (IP publica de firewall3 (193.147.87.47))
Nota: hace uso de macros como Ping(DROP), SSH(ACCEPT) (abrevian la notación ahorrando el escribir los puertos concretos)
Implementaremos parte de las restricciones de tráfico descrita en el ejercicio 1:
Añadiremos al final del fichero (antes de la línea #LAST LINE ....) las reglas que las implementan.
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 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 #################################### #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
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 ...
Nota: Se hará uso de Shorewall de forma manual con los subcomandos start
, clear
o compile
.
stoppedrules
usado por el subcomando stop
firewall3:~# rm stoppedrules
firewall3:~# shorewall start
Más detalles sobre inicio, parada y deshabilitación de Shorewall
iptables
o analizando el script generado por Shorewall en /var/lib/shorewall/.start
)
firewall3:~# iptables -L -v firewall3:~# iptables -t nat -L -v ó firewall3:~# iptables-save > /tmp/volcado.txt firewall3:~# leafpad /tmp/volcado.txt ó firewall3:~# leafpad /var/lib/shorewall/.start
fuera:~# nmap -T4 193.147.87.47 10.10.10.11 10.20.20.22 dentro:~# nmap -T4 193.147.87.33 10.20.20.22 10.10.10.1 dmz:~# nmap -T4 193.147.87.33 10.10.10.11 10.20.20.1 firewall3:~# nmap -T4 193.147.87.33 10.10.10.11 10.20.20.22
fuera:~# tcptraceroute 193.147.87.47 80
who
y netstat
dentro:~# ssh usuario@193.147.87.33 (con la contraseña usuario) fuera:~# who fuera:~# netstat -at
netstat-nat -a
para ver las conexiones NAT establecidas actualmente.
firewall3:~# netstat-nat -n -N
Esquema propuesto (hasta un máximo de 5-6 páginas)
Incluir los resultados obtenidos en Tarea 2 y Tarea 3
Entrega: FAITIC
Fecha límite: 18/11/2018