Semana 9 SEI4501

Anuncio
Semana 9: Firewalls
Semana 9: Firewalls
Filtrado de paquetes y NAT
Aprendizajes esperados
Contenidos:
• Filtrado de paquetes
• NAT NAT
Filtrado de paquetes
•Un
# ping –c 1 127.0.0.1 Filtrado de paquetes
Filtrado de paquetes
• Cada regla especifica un conjunto de
que un p
paquete
q
debe cumplir,
p y lo
condiciones q
que haremos si cumple dichas condiciones
(efectuaremos una “acción”)
acción ). Por ejemplo,
ejemplo
puede que quieras hacer DROP de los
paquetes ICMP provenientes de la dirección
127.0.0.1. En este caso definiremos el
protocolo como ICMP, la dirección de origen
como 127.0.0.1 y la acción será DROP.
Filtrado de paquetes
Filtrado de paquetes
• 127.0.0.1 es la
l interface
i
f
d “loopback”
de
“l
b k” que
tendrá en su máquina incluso si no dispone de
una conexión real a la red. Puede hacer un
“ping” para generar dichos paquetes.
• un ping simplemente envía paquetes ICMP del
p 8 (p
(petición de eco – echo request)
q
)q
que
tipo
todos los hosts operativos deberán responder
con un paquete ICMP de tipo 0 (respuesta del
eco – echo reply).
Filtrado de paquetes
Filtrado de paquetes
# ping –c 1 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms
64 bytes from
127 0 0 1: icmp seq=0 ttl=64 time=0 2 ms
‐‐‐ 127.0.0.1 ping statistics ‐‐‐
1 packets transmitted, 1 packets received, 0% packet loss
round‐trip min/avg/max = 0.2/0.2/0.2 ms # iptables
p
–A INPUT –s 127.0.0.1 –p icmp
p
p –j DROP j
# ping –c 1 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes
‐‐‐ 127.0.0.1 ping statistics ‐‐‐
1 packets transmitted, 0 packets received, 100% packet loss
#
Filtrado de paquetes
Filtrado de paquetes
• Agregamos (‐A) a la cadena INPUT una regla
p
que los p
q
paquetes
q
que vengan
q
g de
especificando
127.0.0.1 (‐s 127.0.0.1) con el protocolo ICMP
((‐p
p icmp) deberán tomar la acción DROP ((‐jj
DROP).
• Una vez hecho
h h esto, probamos
b
l regla
la
l con un
segundo ping. El programa esperará una
respuesta que nunca llegará.
Filtrado de paquetes
Filtrado de paquetes
• Podemos eliminar esta regla de dos formas. La
primera, yya q
p
que sabemos q
que es la única regla
g
en la cadena INPUT, podemos utilizar su
número para borrarla:
# iptables –D INPUT 1
# iptables –D INPUT 1
• La
La segunda forma es igual a la del comando segunda forma es igual a la del comando
‐A, pero sustituyendo ‐A por ‐D.
Filtrado de paquetes
Filtrado de paquetes
• Esto es útil cuando tiene varias reglas
p j y no q
quieres tener q
que contarlas
complejas
hasta encontrar la que buscabas. Para estos
casos usaremos:
## iptables iptables –D
D INPUT INPUT –ss 127.0.0.1 127.0.0.1 –p
p icmp icmp –jj DROP
Filtrado de paquetes
Filtrado de paquetes
• La sintaxis de ‐D debe ser exactamente igual a
) Si hayy múltiples
p
reglas
g
la de ‐A ((o ‐I o ‐R).
iguales en la misma cadena, sólo la primera
será eliminada.
eliminada
Filtrado de paquetes
Filtrado de paquetes
# iptables ‐F i bl
• Para “vaciar”
vaciar (Flush) todas las cadenas.
# iptables ‐X
• Borrar la cadena definida‐por‐usuario
((opcional)
p
) especificada.
p
# iptables ‐Z
• Poner a cero (Zero) los contadores de bytes y
paquetes de todas las cadenas.
Filtrado de paquetes
Filtrado de paquetes
# iptables –A INPUT –j DROP
# iptables –A
# iptables A OUTPUT OUTPUT –jj DROP
DROP
# iptables –A FORWARD –j DROP
• Agregar (‐A) una regla para descartar (‐j
paquetes
q
de entrada ((INPUT),
)
DROP)) todos los p
salida (OUPUT) y reenvío (FORWARD),
respectivamente.
respectivamente
Filtrado de paquetes
Filtrado de paquetes
# iptables –A INPUT –p udp –j DROP
• Agregar (‐A) una regla a la cadena de INPUT
en la
l tabla
bl FILTER (la
(l tabla
bl por defecto
d f
cuando
d
la opción ‐t no se especifica) que descarte (‐j
DROP) todos los paquetes UDP (‐p UDP).
Filtrado de paquetes
Filtrado de paquetes
# iptables –A INPUT –p icmp –s 192.168.1.123 –j DROP
• Agregar (‐A) una regla a la cadena de entrada ((INPUT) para que cualquier paquete ICMP
) p
q
q
p q
((‐p p
icmp) con origen en 192.168.1.123 (‐s 192 168 1 123) sea descartado (‐j DROP)
192.168.1.123) sea descartado (‐j DROP).
Filtrado de paquetes
Filtrado de paquetes
# iptables –A INPUT –p tcp –s p
j
192.168.1.123 –dport 21 –j DROP
• Agregar (‐A) una regla a la cadena de entrada
(INPUT) para que cualquier
l i paquete TCP (‐p
(
tcp) con origen en 192.168.1.123 (‐s
192.168.1.123) a través de FTP por el puerto
21 ((‐‐dport
dport 21) sea descartado ((‐jj DROP).
Filtrado de paquetes
Filtrado de paquetes
# iptables –A INPUT –p tcp –dport 22 –j bl
d
ACCEPT
• Agregar (‐A) una regla a la cadena de entrada
(INPUT) para aceptar (‐j
( j ACCEPT) conexiones
i
a nuestra máquina a través de SSH por el
puerto 22 (‐‐dport 22).
¿Qué es NAT?
¿Qué es NAT?
• Normalmente, los paquetes viajan en una red
g determinado (p
(por ejemplo,
j p
desde un origen
desde mi computador) a un destino específico
(como por ejemplo www.google.com)
www google com) a través
de varios enlaces diferentes.
• Ninguno de estos enlaces
l
alteran
l
realmente
l
los paquetes: simplemente lo envían un paso
adelante.
¿Qué es NAT?
¿Qué es NAT?
• Si uno de estos enlaces hiciera NAT, podría
g
o destino de los p
paquete
q
alterar el origen
según pasa a través suyo.
• Normalmente,
Normalmente el enlace que esté haciendo
NAT recordará cómo y qué modificó del
paquete, para hacer
h
l acción
la
ó inversa con ell
paquete de respuesta, de manera que todo
funciona como se esperaba.
Razones para usar NAT
Razones para usar NAT
•
•
•
•
•
•
Remedio frente a la escasez de direcciones
Simplificación de la gestión de redes
Mejora de la seguridad
Conexiones con módem a Internet
Varios servidores
Proxy transparente
Tipos de NAT
Tipos de NAT
• Source NAT (SNAT, por origen), y Destination
por destino).
)
NAT ((DNAT, p
• Source NAT es cuando alteramos el origen del
primer paquete: esto es,
es estamos cambiando
el lugar de donde viene la conexión.
• Source NAT siempre se hace después del
encaminamiento, justo antes de que el
paquete
salga
por
el
cable.
El
enmascaramiento es una forma especializada
de SNAT.
Tipos de NAT
Tipos de NAT
• El enmascaramiento (masquerading) es una
p
de SNAT.
forma especializada
Source NAT
Source NAT
Tipos de NAT
Tipos de NAT
• Destination
i i
NAT es cuando
d alteramos
l
l
la
dirección de destino del primer paquete: esto
es, cambiamos la dirección a donde se dirige
la conexión.
• DNAT siempre se hace antes del
paquete
q
entra p
por
encaminamiento,, cuando el p
el cable. El port forwarding (reenvío de
puerto), el balanceo de carga y el proxy
transparente son formas de DNAT.
Destination NAT
Destination NAT
Controlar el NAT
Controlar el NAT
• Se necesitan crear reglas NAT que le digan al
qué conexiones cambiar, y
núcleo ((kernel)) q
cómo hacerlo.
• Para hacer esto se utiliza la muy versátil
herramienta IPTABLES, y le diremos que altere
l tabla
la
bl de NAT usando la
l opción
ó ‐t nat.
Controlar el NAT
Controlar el NAT
• La tabla de reglas NAT contiene tres listas
g se examina
llamadas “cadenas”: cada regla
por orden hasta que una coincide.
• Las tres cadenas se llaman PREROUTING (para
Destination NAT, según los paquetes entran),
POSTROUTING (para
(
Source NAT, según
ú los
l
paquetes salen), y OUTPUT (para Destination
NAT con los paquetes generados en la propia
máquina).
Controlar el NAT
Controlar el NAT
• Para todas las operaciones de NAT, se debe
para especificar
p
que se operará
q
p
usar ‐t nat p
sobre la tabla NAT.
• Otra opciones importantes son ‐A
A para añadir
una nueva regla al final de una cadena (‐A
POSTROUTING),
) o ‐I para insertarla
l all
principio (‐I PREROUTING).
Controlar el NAT
Controlar el NAT
• Se puede especificar el origen (‐s o ‐‐source) y
paquetes
q
el destino ((‐d o ‐‐destination)) de los p
sobre los que se quiere hacer NAT.
• Estas opciones pueden ir seguidas por una IP
sencilla (por ejemplo, 192.168.1.1), un
nombre
b (por
(
ejemplo,
l www.duoc.cl),
l) o una
dirección de red (192.168.1.0 / 24 o
192.168.1.0 / 255.255.255.0).
Controlar el NAT
Controlar el NAT
• Se puede especificar qué interfaz de entrada o
p
‐i o ‐‐in‐
de salida considerar con las opciones
interface
y
‐o
o
‐‐out‐interface,
respectivamente Pero lo que se puede
respectivamente.
especificar depende de en qué cadena esté
poniendo la regla: en PREROUTING sólo
puede elegir la interfaz de entrada, y en
POSTROUTING (y OUTPUT) sólo la de salida.
Controlar el NAT
Controlar el NAT
• Si usa la equivocada, IPTABLES le avisará con
j de error.
un mensaje
• También puede indicar un protocolo
específico (‐p
( p o ‐‐protocol),
protocol) como TCP o UDP;
sólo los paquetes de este protocolo
coincidirán
á con la
l regla.
l
Controlar el NAT
Controlar el NAT
• La razón principal para hacer esto es que
p
uno de los p
protocolos TCP o UDP
especificar
permite más opciones: específicamente las
opciones ‐‐source‐port
source port y ‐‐destination‐port
destination port
(abreviadas como ‐‐sport y ‐‐dport,
respectivamente).
respectivamente)
Source NAT
Source NAT
• Hacer Source NAT quiere decir que vamos a
g
de las
cambiar la dirección de origen
conexiones a algo diferente.
• Source NAT se hace en la cadena de
POSTROUTING, justo antes de que sea
enviado. Este es un detalle
ll importante, ya que
significa que cualquier otro servicio de la
máquina LINUX (encaminamiento, filtrado de
paquetes) verá el paquete sin cambiar.
Source NAT
Source NAT
• También significa que se puede utilizar la
p
‐o ((interfaz de salida).
)
opción
• El Source NAT se especifica indicando ‐j SNAT,
y la opción ‐‐to‐source
to source especifica una
dirección IP, un rango de direcciones IP, y un
puerto o rango de puertos opcionales
l (sólo
( ól
con los protocolos UDP y TCP).
Source NAT
Source NAT
• Cambiar la dirección de origen por 1.2.3.4
# iptables –tt nat # iptables nat –A
A POSTROUTING POSTROUTING –o
o eth0 eth0
–j SNAT ‐‐to 1.2.3.4
• Cambiar la dirección de origen a 1.2.3.4,
1.2.3.5 o 1.2.3.6
# iptables –t nat –A POSTROUTING –o eth0 –j SNAT ‐‐to 1.2.3.4‐1.2.3.6
j SNAT
12341236
Source NAT
Source NAT
• Cambiar la dirección de origen por 1.2.3.4,
puertos 1‐1023.
p
# iptables –t nat –A POSTROUTING –p tcp –o eth0 –j SNAT ‐‐to 1.2.3.4:1‐1023
Enmascaramiento
• Hay un caso especial de Source NAT que se
(
q
g)
denomina enmascaramiento (masquerading).
• sólo debería ser usado para direcciones IP
asignadas de forma dinámica,
dinámica tales como las
de conexiones por llamada estándar (para
direcciones IP estáticas,
á
se debe
b utilizar
l
ell
SNAT descrito anteriormente).
Enmascaramiento
• No es necesario
i escribir
ibi la
l dirección
di
ió de
d origen
i
de forma explícita con el enmascaramiento:
utilizará la dirección de origen de la interfaz
por la que el paquete está saliendo. Pero más
importante aún, si el enlace cae, las
conexiones (que se iban a perder de todas
maneras) se olvidan, lo que significa que
habrá menos problemas cuando la conexión
vuelva a la normalidad con una IP diferente.
Enmascaramiento
• Enmascarar todo lo que salga por ppp0.
## iptables –t nat –A POSTROUTING –o ppp0 iptables t nat A POSTROUTING o ppp0
–j MASQUERADE
Destination NAT
Destination NAT
• Esto se hace
h
en la
l cadena
d
PREROUTING,
según entra el paquete; esto significa que
cualquier otro servicio de la máquina con
LINUX (encaminamiento, filtrado de paquetes)
verá el paquete yendo a su destino “real” (el
definitivo).
• Esto significa que se puede utilizar la opción ‐i
(interfaz de entrada).
Destination NAT
Destination NAT
• Para alterar el destino de un paquete
ggenerado de forma local ((en la máquina
q
que
q
hace el NAT), se debe usar la cadena OUTPUT,
pero esto es más inusual.
inusual
• Destination NAT se especifica utilizando ‐j
DNAT, y la
l opción
ó ‐‐to‐destination especifica
f
una dirección IP, un rango de direcciones IP, y
un puerto o rango de puertos opcionales (sólo
para los protocolos UDP y TCP).
Destination NAT
Destination NAT
• Cambia la dirección de destino por 5.6.7.8
# iptables –tt nat # iptables nat –A
A PREROUTING PREROUTING –ii eth1 eth1 –jj DNAT ‐‐to 5.6.7.8
• Cambia la dirección de destino por 5.6.7.8,
5.6.7.9 o 5.6.7.10.
# iptables –t nat –A PREROUTING –i eth1 –j DNAT ‐‐to 5.6.7.8‐5.6.7.10
Destination NAT
Destination NAT
• Cambia la dirección de destino del tráfico web
por 5.6.7.8, p
p
puerto 8080.
# iptables –t nat –A PREROUTING –p tcp ‐‐dport 80 –i eth1 –j DNAT ‐‐to 5.6.7.8:8080
d t 80 i th1 j DNAT t 5 6 7 8 8080
• Redirige
g los p
paquetes
q
locales q
que van a 1.2.3.4
hacia el dispositivo loopback.
# iptables –t nat –A OUTPUT –d 1.2.3.4 –j i bl
d
j
DNAT ‐‐to 127.0.0.1
Configuración de un PROXY
Configuración de un PROXY
• Vamos a suponer que tenemos un PROXY en
puerto 3128 p
para
la dirección 192.168.0.1 y el p
las conexiones a servidores web de internet,
con la siguiente regla se redirigirán todas las
peticiones que se realicen hacia un servidor
WEB (puerto 80) hacia el puerto 3128 de la
máquina 192.168.0.1:
# iptables –t nat –A PREROUTING –p tcp ‐‐dport 80 –j DNAT ‐‐to 192 168 0 1:3128
‐‐dport 80 –j DNAT ‐‐to 192.168.0.1:3128
Configuración de un PROXY
Configuración de un PROXY
• Envía el tráfico que entra dirigido al puerto 80
((web)) a nuestro p
proxyy squid
q
((transparente).
p
)
## iptables iptables –tt nat nat –A
A PREROUTING PREROUTING –ii eth1 eth1
–p tcp ‐‐dport 80 –j REDIRECT ‐‐to‐port 3128
Configuración de un PROXY
Configuración de un PROXY
Resumen
•Un
Descargar