Upload
edelahozuah
View
35
Download
1
Tags:
Embed Size (px)
Citation preview
Seguridad2013-2014
Cortafuegos: iptables
Recorrido de un paquete en Netfilter
InputChain
Route
FORWARD
Chain
Output
Chain
DROP
DROP
LocalProcesses
DROP
2
Cadenas de filtrado y tablas
iptables opera sobre el concepto de tablas separadas para distintas funcionalidades de procesamiento de paquetes: Tabla filter Tabla nat Tabla mangle
Por defecto, se opera sobre la tabla filter
3
Tabla filter
Tabla por defecto Permite (para tanto INPUT, OUTPUT y FORWARD
como para otra que quisiéramos definir): Operaciones sobre los paquetes:
Aceptar: ACCEPT Descartar: DROP Rechazarlo: REJECT Log: LOG y ULOG Otras: CLASSIFY, CONNMARK, TRACE, BALANCE Y CLUSTERIP
Selecciona paquetes basándose en cualquier campo, en la longitud del paquete, en el instante de recepción, en el número de orden, en la tasa de llegada…
4
Tabla nat
Para funcionalidad de NAT. Permite las siguientes acciones:
Source NAT: SNAT Destination NAT: DNAT MASQUERADE: (SNAT con IP dinámica) REDIRECT: caso especial de DNAT que redirige el
paquete al equipo local con independencia de la IP destino. Ej. Proxy transparente
5
NAT con iptables
iptables permite NAT fuente, destino y de puerto. Podemos modificar la dirección y puerto tanto fuente
como destino. Tiene 3 cadenas predefinidas:
PREROUTING: especifica cambios en el destino de los paquetes entrantes antes de que sean enrutados (DNAT)
OUTPUT: permite especificar cambios a los paquetes generados localmente antes de que se les aplique la decisión de encaminamiento (DNAT, REDIRECT)
POSTROUTING: especifica cambios en la dirección fuente de los paquetes que se enruten, después de que hayan sido enrutados (SNAT, MASQUERADE)
6
Recorrido de un paquete en Netfilter: NAT
InputChain
Route
Forward Chain
Output
Chain
Drop
DROP
LocalProcesses
Drop
Source NAT Post-routing
Destination NAT
Prerouting
7
Tabla mangle
La tabla mangle permite “marcar” los paquetes así como cambiar los paquetes antes de enviarlos al destino
Uso: QoS usando Linux (wondershaper)Cinco cadenas:
PREROUTING INPUT: después de PREROUTING POSTROUTING FORWARD OUTPUT
8
Manejo básico de Iptables
Con iptables manipularemos las tablas anteriores que especifican procesado de paquetes sobre alguna de las cadenas que hemos visto filter: INPUT, OUTPUT, FORWARD nat: PREROUTING (DNAT, REDIRECT), OUTPUT
(DNAT/REDIRECT), POSTROUTING (SNAT/MASQUERADE)
mangle: PREROUTING, INPUT, FORWARD, POSTROUTING, OUTPUT
9
Manejo básico de iptables
Se opera sobre una tabla de una de las cadenas Siempre hay que especificar la cadena Si no se especifica la tabla se asume que se modifica filter Operaciones sobre cadenas enteras:
Acción por defecto: iptables -P cadena accion
iptables –P INPUT DROP
Borrar las reglas: iptables –F cadena
Listar las reglas: iptables –L [cadena]
Resetear contadores de cadena: iptables –Z [cadena]
10
Iptables: operaciones sobre reglas
Añadir: iptables –A <cadena> <regla>
Insertar en una posición concreta: iptables –I <cadena> <número_de_orden> <regla>
Reemplazar: iptables –R <cadena> <número> <regla>
Borrar: iptables –D <cadena> <número> <regla>
11
Reglas en iptables
Hay que especificar: Paquetes a los que se aplica la regla Acción que se ejecutará (-j)
ACCEPT y DROP son las básicas
Se puede filtrar basándose en casi cualquier cosa: Interfaz de entrada (-i) Interfaz de salida (-o) Protocolo: tcp, udp, icmp (-p) IP origen (-s) o destino (-d)
12
Reglas en iptables
Hay posibilidades adicionales de filtrado: Si usamos –p tcp:
Puertos origen (--sport) y destino (--dport) (también válida para –p udp)
Flags (--tcp-flags) SYN flag (-syn)
Si usamos –p icmp: Tipo: --icmp-type
Lista de puertos (-m multiport): Puertos fuente:
-m multiport --source-port 1024,1025,1026 Puertos destino
13
Reglas en iptables: estado
Es el módulo más interesante Se habilita en una regla empleando –m state Estados soportados:
NEW: Segmento TCP con SYN activo o primer paquete UDP
ESTABLISHED: comunicación en curso. Permite también enviar respuestas a los pings que recibimos sin habilitar estas respuestas explícitamente.
RELATED: INVALID: situaciones raras
14
Construir un firewall
Vamos a ver cómo construir un firewall basado en iptables paso a paso
Crearemos un script de shell que contendrá las reglas
El script será parametrizable para facilitar su modificación, lectura y comprensión IPT=“/sbin/iptables” INTERNET=“eth0” PRIVPORTS=“0:1023” UNPRIVPORTS=“1024:65535”
15
Paso 2: Habilitar protecciones del kernel
Ignoramos ping a broadcastDeshabilitamos encaminamiento de fuenteHabilitamos SYN Cookies para detectar y
recuperarnos de un ataque de SYN floodDeshabilitamos el ICMP redirectHabilitamos rp_filterRegistramos paquetes recibidos con direcciones
raras
16
Paso 3: Reseteamos el fw
Eliminamos reglas existentesReseteamos las políticas por defecto a ACCEPT
iptables –F iptables –t nat –F iptables –t mangle –F iptables –X iptables –t nat –X iptables –t mangle –X
17
Paso 4: Habilitamos la interfaz lo
Todo el tráfico de la interfaz de loopback debe estar habilitado para que el equipo funcione: iptables –A INPUT –i lo –j ACCEPT iptables –A OUTPUT –o lo –j ACCEPT
18
Paso 5: Definimos la política por defecto
La política por defecto debería ser DROP. La establecemos para todas las tablas: iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -t nat -P PREROUTING DROP iptables -t nat -P OUTPUT DROP iptables -t nat -P POSTROUTING DROP iptables -t mangle -P PREROUTING DROP iptables -t mangle -P PREROUTING DROP iptables -t mangle -P OUTPUT DROP
19
Paso 6: Comprobamos flags
Realizamos una serie de comprobaciones de combinaciones raras de flags TCP para evitar escaneos: iptables –A INPUT –m unclean DROP iptables –A INPUT –p tcp –tcp-flags ALL NONE –j DROP iptables –A INPUT –p tcp –tcp-flags SYN, FIN SYN,FIN –j
DROP iptables –A INPUT –p tcp –tcp-flags SYN,RST SYN,RST –j
DROP iptables –A INPUT –p tcp –tcp-flags SYN,RST SYN,RST –j
DROP iptables –A INPUT –p tcp –tcp-flags FIN,RST FInN,RST –j
DROP iptables –A INPUT –p tcp –tcp-flags ACK,FIN FIN –j DROP iptables –A INPUT –p tcp –tcp-flags ACK,PSH PSH –j DROP iptables –A INPUT –p tcp –tcp-flags ACK,URG URG –j DROP
20
Paso 7: Permitimos las conexiones establecidas y relacionadas
iptables –A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables –A OUTPUT -m state --state ESTABLISHED, RELATED --j ACCEPT
21
Paso 8:Rechazamos las direcciones “extrañas”
Rechazamos los paquetes entrantes por una interfaz provenientes de otra interfaz de la máquina y las direcciones privadas
Rechazamos los ping a direcciones de broadcast (dirección de la red y dirección de broadcast de la red)
Rechazamos paquetes con direcciones de multicast (clase D) que no vaya sobre UDP
Rechazamos las direcciones definidas como reservadas por el IANA 0.*.*.*, 169.254.0.0/16, 192.0.2.0/24
22
Paso 9: Impedimos las conexiones a puertos no privilegiados
X Windows iptables –A OUTPUT –o $INTERNET –p tcp –syn –destination-port $XWINDOW_PORTS –j REJECT
NFS, OpenWindows, SOCKS o SQUID: iptables –A OUTPUT –o $INTERNET –p tcp –m multiport –destination-port $NFS_PORT,$OPENWINDOWS_PORT,$SOCKS_PORT –syn –j REJECT
iptables –A INPUT –i $INTERNET –p tcp –m multiport –destination-port $NFS_PORT,$OPENWINDOWS_PORT,$SOCKS_PORT –syn –j REJECT
Para UDP debería considerar NFS y RPC lock (4045)
23
Paso 10: Habilitamos los servicios que necesitemos
Empezando por DNS Todo se simplifica mucho si usamos el módulo state Ejemplo DNS:
iptables -A OUTPUT –o $INTERNET –p udp –s $IP –sport $UNPRIVPORTS –d $NAMESERVER –dport 53 –m state –state NEW –j ACCEPT
iptables -A OUTPUT –o $INTERNET –p tcp –s $IP –sport $UNPRIVPORTS –d $NAMESERVER –dport 53 –m state –state NEW –j ACCEPT
24
Ejemplo: FTP
Cliente FTP: (requiere cargar el módulo del kernel ip_conntrack_ftp): iptables –A OUTPUT -o $INTERNET –p tcp –s $IP –sport $UNPRIVPORTS –dport 21 –m state NEW -j ACCEPT
Modo activo: iptables –A INPUT –i $INTERNET –p tcp –sport 20 –d $IP –dport UNPRIVPORTS –m state –state ESTABLISHED,RELATED –j ACCEPT
Modo pasivo: iptables –A OUTPUT –o $INTERNET –p tcp –s $IP –sport 1024: $UNPRIVPORTS –dport 1024: -m state --state RELATED –j ACCEPT
25