Ejercicio 11 - Cortafuegos
PREGUNTAS
¿En qué consiste un cortafuegos o "firewall"? ¿Qué tipo de tráfico bloquea y a quien va dirigido dicho tráfico? ¿Qué tipo de tráfico no bloquea? ¿Qué no es capaz de hacer un cortafuegos?
¿Es lo mismo un cortafuegos de red que un cortafuegos personal? ¿Qué tipo de tráfico bloquea un cortafuegos personal y a quien va dirigido dicho tráfico?
¿Qué es un cortafuegos sin estado o "stateless firewall"? ¿Qué diferencia hay con un cortafuegos con estado o "stateful firewall"?
¿Puede un cortafuegos incorporar reglas dinámicamente des de aplicaciones? Pon un ejemplo
¿Qué es una DMZ ("zona desmilitarizada") y para qué sirve?
¿Qué es un cortafuegos a nivel de paquete? ¿Qué es un cortafuegos a nivel de circuito? ¿Qué es un cortafuegos a nivel de aplicación?
¿Viene algún software cortafuegos con Windows Server? ¿Desde dónde se instala y desde dónde se administra? ¿Cuál es el software de cortafuegos comercial más conocido para Windows?
¿Cuál es el software de cortafuegos más conocido para Linux? ¿Y para otros sistemas Unix? ¿Qué sistema Unix y distribuciones Linux son especialmente seguras para instalar PCs que hagan de cortafuegos y sistemas de detección de intrusos?
Queremos instalar un cortafuegos en una pequeña red local de cinco PCs y un servidor HTTP y SQL, todos con IP pública y salida a Internet. Dicho cortafuegos debe proteger los ordenadores de la red de ataques del exterior. También debe proteger el servidor SQL de los ordenadores de la red interna y del exterior, que sólo accederán al servicio de HTTP. (el servicio SQL es accedido sólo por el servicio HTTP del mismo ordenador para crear páginas web dinámicas a partir de la base de datos, pero no queremos que los usuarios realicen consultas directas sobre el servidor de bases de datos). De momento dejamos que los usuarios de nuestra red accedan a cualquier servicio de Internet.
a) Piensa dónde colocarías el cortafuegos y dibuja un esquema de la red.
b) Escribe las reglas del cortafuegos en la siguiente tabla:
red origenpuerto origenred destinopuerto destinoprotocoloestadoacciónEn el ejercicio anterior que normas añadirías al cortafuegos para impedir que los usuarios de nuestra red accedan al exterior excepto a un servidor de correo que utiliza IMAP y SMTP en los puertos estándar.
PRÁCTICA
Tenemos la siguiente configuración en máquinas virtuales:
En nuestra red local un cortafuegos/router accesible por ssh.
En nuestra red local un servidor web también accesible por ssh.
En internet un cliente, para hacer pruebas.
El cortafuegos tendrá dos tarjetas de red para unir Internet con la red local:
El cliente en Internet y el cortafuegos estarán conectados en modo puente (-si dicho cliente quieres que sea la máquina real o "anfitrión"-) o en red NAT (-si dicho cliente es otra máquina virtual).
El cortafuegos y el servidor de la red local, máquinas virtuales los dos, estarán conectados en red interna.
Queremos manipular el tráfico en el cortafuegos para que:
Des de Internet sólo permitiremos tráfico a la red interna hacia el servidor web, a sus puertos 80 y 443.
Des de la red interna hacia el cortafuegos sólo permitiremos conexiones ssh al puerto tcp/22 y preguntas dns al puerto udp/53.
Tanto el servidor web como el cortafuegos podrán acceder hacia fuera, excepto al puerto tcp/1337.
El cortafuegos enrutará de la red interna hacia el exterior.
Realiza el ejercicio con reglas des de la línea de comandos con iptables, nftables o ufw.
Programa las reglas del cortafuegos para que cumpla los anteriores requisitos. Entrega dichas reglas.
Entrega todas las pruebas que has hecho para comprobar el correcto funcionamiento del cortafuegos.
Las reglas deben arrancar con el cortafuegos. ¿Cómo lo consigues?
Para escribir las reglas del cortafuegos es muy importante que sigas estos consejos:
Debes entender muy bien la diferencia entre tráfico input, output y forward. Tráfico input es el que va específicamente dirigido a la máquina que hace de cortafuegos, como por ejemplo una actualización de sus paquetes o un intento de conexión ssh. Sin embargo, tráfico forward es el que llega al cortafuegos, porque este hace de router, pero su destino final es otra máquina.
Establece las reglas por defecto. A continuación, para poder aclararte, crea seis apartados para ir escribiendo las diferentes reglas:
tráfico del exterior hacia la red local,
tráfico de la red local hacia el exterior,
tráfico del exterior hacia el cortafuegos,
tráfico del cortafuegos hacia el exterior,
tráfico de la red local hacia el cortafuegos,
tráfico del cortafuegos hacia la red local
A la hora de bloquear tráfico, comprueba que no estés bloqueando las respuestas a tráfico establecido. Por ejemplo, si permites el tráfico de salida de una red local hacia el exterior, pero bloqueas el tráfico de entrada, cuando un ordenador de la red local inicie una conexión hacia el exterior (-para, por ejemplo, actualizarse-) la respuesta del exterior quedará bloqueada. Para solucionar esto pon reglas que permitan el paso de paquetes de comunicaciones establecidas. Por ejemplo, en iptbles esto se soluciona utilizando los módulos conntrack y state
No te olvides de permitir el tráfico de localhost dentro del cortafuegos, por si algunos servicios se necesitan comunicar con otros en la misma máquina vía sockets.
No te olvides de permitir el tráfico de DNS (udp/53), para la resolución de nombres.
REFERENCIAS
man iptables
,man iptables-extensions
,man nft
ANEXO: MANUAL DE IPTABLES
ACCIONES DE IPTABLES
Vacía la lista de reglas:
iptables -F
Ejemplo:Establece política por defecto:
iptables -P
Ejemplo:Añade nuevas reglas:
iptables -A
Ejemplo:Lista las reglas:
iptables -L
Ejemplo:Guarda las reglas:
Pero si lo que queremos es guardarlas y que se carguen cada vez que iniciamos el ordenador:
Existen muchos más comandos sobre reglas (borrar, insertar, modificar, etc) , pero para una introducción sólo vamos a necesitar los anteriores.
Para cada paquete, las reglas se evalúan de una en una en el orden que se introdujeron, hasta que el paquete encaja con una regla. Si encaja, se le aplica la acción asociada a la regla y se deja de evaluar las siguientes reglas de la lista. Si no encajó con ninguna, entonces se le aplica la política por defecto.
Las cadenas donde guardaremos reglas son INPUT
, OUTPUT
, FORWARD
, PREROUTING
y POSTROUTING
.
INPUT
para filtrar paquetes que van dirigidos específicamente a las IPs del cortafuegos. Se utiliza bastante en cortafuegos personales y también en cortafuegos de red que ofrecen otros servicios.OUTPUT
para filtrar paquetes que parten de las IPs del cortafuegos. Se utiliza bastante en cortafuegos personales y también para permitir que el cortafuegos se comunique con otros ordenadores.FORWARD
para filtrar paquetes que pasarán a través del cortafuegos, que venían de un segmento de red y se dirigían hacia otro segmento de red. Se utiliza en cortafuegos de red. ¡No os confundáis conINPUT
yOUTPUT
! Un cortafuegos de red puede recibir paquetes que no iban destinados a él, si esta actuando como router.PREROUTING
para modificar IPs y puertos de paquetes que llegan al cortafuegos, antes de que se les apliquen las cadenasINPUT
oFORWARD
.POSTROUTING
para modificar IPs y puertos de paquetes que salen del cortafuegos, después de que se les apliquen las cadenasOUTPUT
oFORWARD
.
ARGUMENTOS DE IPTABLES
La opción
-t
especifica la tabla de reglas a la que se aplica el comando, que puede serfilter
(por defecto),nat
,mangle
,raw
ysecurity
. Nosotros sólo trabajaremos el filtrado de paquetes (filter
) y el enrutamiento (nat
).La opción
-j { ACCEPT | DROP | REJECT | LOG | SNAT | DNAT | MASQUERADE }
especifica la acción a realizar con el paquete. Las más comunes son aceptarlo (ACCEPT
) o bloquearlo (DROP
).Las opciones
-s { IP | nombre | red/mask }
y-d { IP | nombre | red/mask }
especifican el origen y el destino del paquete, respectivamente. Puede ser una IP, el nombre de una máquina, o toda un rango de IPs.Las opciones
-i tarjeta_entrada
y-o tarjeta_salida
permiten especificar el origen y el destino del paquete, respectivamente, utilizando los nombres de tarjetas de red en lugar de rangos de IPs.La opción
-p { tcp | udp | icmp }
especifica el tipo de tráfico (-ver siguientes opciones-).Las opciones
--dport puerto
y--sport puerto
indican el puerto de origen y destino, respectivamente, si el tráfico especificado en la anterior opción es TCP o UDP.La opción
--icmp-type tipo_mensaje
indica tipo de mensaje si el tráfico es ICMP.La opción
-m conntrack --ctstate { NEW | ESTABLISHED | RELATED | INVALID | ... }
permite filtrar paquetes según el estado de la conexión TCP. Antiguamente esta opción se escribía-m state --state { ... }
. Es muy útil cuando quiero bloquear tráfico hacia un puerto sólo en una dirección, ya que no querremos bloquear las respuestas de una conexión ya establecidas por dicho puerto.La opción
--to IP:puerto
, utilizado en enrutamiento (NAT, PNAT) para modificar la IP o puerto de un paquete, especifica la nueva IP o puerto.
EJEMPLOS DE IPTABLES
ANEXO: MANUAL DE NFTABLES
ACCIONES DE NFTABLES
Vacía la lista de reglas:
nft flush ruleset
Crea tablas para añadir después cadenas:
nft add table *familia* *tabla*
Ejemplo:Establece política por defecto:
nft chain *familia* *tabla* *hook* { policy *acción* }
Ejemplo:Añade nuevas cadenas:
nft add chain *familia* *tabla* *cadena* { type *tipo* hook *hook* priority *valor* \; [policy *acción*] }
Ejemplo:Añade nuevas reglas:
nft add chain *familia* *tabla* *regla* { type *tipo* hook *hook* priority *valor* \; policy *acción* }
Ejemplo:Lista las reglas:
nft list ruleset
Guarda las reglas:
Carga las reglas de un fichero:
Traducir reglas de IPTables a NFTables:
iptables-translate *regla_iptables*
Existen muchos más comandos sobre reglas (borrar, insertar, modificar, etc) , pero para una introducción sólo vamos a necesitar los anteriores.
Para cada paquete, las reglas se evalúan de una en una según el orden de prioridad, hasta que el paquete encaja con una regla. Si encaja, se le aplica la acción asociada a la regla y se deja de evaluar las siguientes reglas de la lista. Si no encajó con ninguna, entonces se le aplica la política por defecto.
Los grupos donde guardaremos reglas son input
, output
, forward
, prerouting
y postrouting
.
input
para filtrar paquetes que van dirigidos específicamente a las IPs del cortafuegos. Se utiliza bastante en cortafuegos personales y también en cortafuegos de red que ofrecen otros servicios.output
para filtrar paquetes que parten de las IPs del cortafuegos. Se utiliza bastante en cortafuegos personales y también para permitir que el cortafuegos se comunique con otros ordenadores.forward
para filtrar paquetes que pasarán a través del cortafuegos, que venían de un segmento de red y se dirigían hacia otro segmento de red. Se utiliza en cortafuegos de red. ¡No os confundáis coninput
youtput
! Un cortafuegos de red puede recibir paquetes que no iban destinados a él, si esta actuando como router.prerouting
para modificar IPs y puertos de paquetes que llegan al cortafuegos, antes de que se les apliquen las cadenasinput
oforward
.postrouting
para modificar IPs y puertos de paquetes que salen del cortafuegos, después de que se les apliquen las cadenasoutput
oforward
.
EJEMPLOS DE NFTABLES
Last updated