4.4Iptables

32
Firewall (Iptables)

description

Configuración de servidores

Transcript of 4.4Iptables

Firewall (Iptables)

Firewall

Con la gran cantidad de computadoras accediendo a Internet desde las casas y los centros de trabajo; ¿Que nos protege de que alguien entre en nuestra computadora o en nuestra red?

La respuesta es el Firewall y sus servicios.

Firewall

Un firewall es un sistema dedicado que esta situado entre Internet y la red interna (2 redes).

Esta configurado de manera tal que cada petición IP:puerto es “revisada”.

Toma las decisiones en base a reglas pre-escritas

Firewall-Iptables

Netfilter es un framework disponible en el núcleo Linux que permite interceptar y manipular paquetes de red. Dicho framework permite realizar el manejo de paquetes en diferentes estados del procesamiento.

El componente más popular construido sobre Netfilter es iptables, una herramienta de cortafuegos que permite filtrar paquetes, NAT, mantener registros de log

Funcionamiento Iptables

iptables permite definir reglas acerca de qué hacer con los paquetes de red. Las reglas se agrupan en cadenas: cada cadena es una lista ordenada de reglas. Las cadenas se agrupan en tablas: cada tabla está asociada con un tipo diferente de procesamiento de paquetes.

Cada regla especifica qué paquetes la cumplen (match) y un destino que indica qué hacer con el paquete si éste cumple la regla. Cada paquete de red que llega a una computadora o que se envía desde una computadora recorre por lo menos una cadena y cada regla de esa cadena se comprueba con el paquete.

Tablas

filter table (Tabla de filtros) — Esta tabla es la responsable del filtrado (es decir, de bloquear o permitir que un paquete continúe su camino).

INPUT chain (Cadena de ENTRADA) — Todos los paquetes destinados a este sistema atraviesan esta cadena

OUTPUT chain (Cadena de SALIDA) — Todos los paquetes creados por este sistema atraviesan esta cadena

FORWARD chain (Cadena de REDIRECCIÓN) — Todos los paquetes que meramente pasan por este sistema para ser encaminados a su destino recorren esta cadena

Tablas

nat table (Tabla de traducción de direcciones de red) —configura las reglas de reescritura de direcciones o de puertos de los paquetes. El primer paquete en cualquier conexión pasa a través de esta tabla; los veredictos determinan como van a reescribirse todos los paquetes de esa conexión.

PREROUTING chain (Cadena de PRERUTEO) — Los paquetes entrantes pasan a través de esta cadena antes de que se consulte la tabla de ruteo local, principalmente para DNAT (destination-NAT o traducción de direcciones de red de destino)

Tablas

POSTROUTING chain (Cadena de POSRUTEO) — Los paquetes salientes pasan por esta cadena después de haberse tomado la decisión del ruteo, principalmente para SNAT (source-NAT o traducción de direcciones de redvde origen)

OUTPUT chain (Cadena de SALIDA) — Permite hacer un DNAT limitado en paquetes generados localmente

Tablas

mangle table (Tabla de destrozo) — Esta tabla es la responsable de ajustar las opciones de los paquetes, como por ejemplo la calidad de servicio. Todos los paquetes pasan por esta tabla. Debido a que está diseñada para efectos avanzados, contiene todas las cadenas predefinidas posibles

Iptables (Esquema del framework)

Puntos de filtrado (Cadenas)

Tablas

filter nat mangle

INPUT x x

OUTPUT x x x

FORWARD x x

PREROUTING x x

POSTROUTING x x

Iptables (flujo del paquete)

Iptables (sintaxis)

iptables [-t tabla] comando [comparación (match)] [objetivo/salto (target/jump)]

comando-A Añadir una regla

-D Borrar una regla

-I Insert

-R Replace

-L –n Listar las reglas

-F Borrar todas las reglas

-P Establecer política

Iptables (sintaxis)

[comparaciones]

-i interface de llegada

-o interface de salida

-p Protocolo de nivel 4

-s IP origen

-d IP destino

--sport puerto origen

--dport puerto destino

-j Que hacer con el paquete

Iptables (sintaxis)

targetACCEPT: Acepta el paqueteDROP: Se desecha el paqueteREJECT: Idem que DROP pero se genera un mensaje de error.DNAT: Dirección destino del paquete debe ser modificadaSNAT: Dirección origen del paquete debe ser cambiada.

Iptables (políticas)

Es lo que se hace por defecto con el paquete si no se encuentra ninguna regla que coincida con el.

Acciones posibles:ACCEPT (acción por defecto)DROP (mas adecuada, pero mas difícil)

Iptables (políticas)

¿Como vemos las políticas activas?

etch:~# iptables -L

Chain INPUT (policy ACCEPT)

target prot opt source destination

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

Iptables (políticas)

¿Como cambiamos la política por defecto?

etch:~# iptables –t table -P CHAIN DROP

table:

filter, nat, mangle

CHAIN:

INPUT, FORWARD, OUTPUT,

PREROUTING, POSTROUTING

Iptables (políticas)

Cuando se usa la política DROP, se debe tener en cuenta que también estamos denegando las conexiones que se inician en la propia máquina, así como aquellas que utilizan la interfaz loopback (127.0.0.1).

Iptables (construir reglas ejemplo)

Definir la política a utilizar.Tener claro los puertos a abrir.Desde y hacia donde se permitirán las

conexiones entrantes y salientes.

Supongamos que vamos colocar un servidor Web en Internet y que ese servidor sea administrable remotamente mediante SSH.

Iptables (construir reglas ejemplo)

Conexiones entrantes:

iptables –A INPUT –p tcp --dport 22 –j ACCEPT

iptables –A INPUT –p tcp --dport 80 –j ACCEPT

iptables –A INPUT –j DROP

Conexiones salientes:

iptables –A OUTPUT –p tcp --sport 22 –j ACCEPT

iptables –A OUTPUT –p tcp --sport 80 –j ACCEPT

iptables –A OUTPUT –j DROP

Iptables (ejemplos de reglas)

iptables -t filter -A INPUT -s 10.0.0.2 -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -s 10.0.0.1 -p tcp --dport 22 -j DROP

iptables -A INPUT -m multiport -p tcp --dport 22,80,443 -j ACCEPT

iptables -A FORWARD -i eth1 -s ! 10.0.0.1 -j DROP

iptables -A OUTPUT -o eth0 -d 10.0.0.0/24 -j DROP

Iptables

Guardando las reglas:

touch firewall_reglas

iptables-save >> firewall_reglas

Editar /etc/network/interfaces y añadir

up iptables-restore < firewall_reglas

update-rc.d firewall defaults 00 99

Iptables (-j LOG)

iptables -A INPUT -i eth0 -p tcp --dport 22 -j LOG

iptables -A INPUT -i eth0 -p tcp --dport 22 -j LOG --log-prefix "Conexion al puerto 22“

Con la acción LOG podremos registrar las conexiones en el syslog del sistema.

Además podremos agregarle un prefijo.

Iptables (nat)

SNAT y DNAT: Permiten realizar transformaciones de dirección (origen y destino) de los paquetes.

Iptables (nat)

iptables -t nat -A POSTROUTING -d 1.1.1.1 -p tcp --dport 80 -j SNAT --to 2.2.2.2

iptables -t nat -A PREROUTING -d 3.3.3.3 -j DNAT --to 4.4.4.4

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128

Ejemplos Real

El FIREWALL tiene 2 interfaces de red: eth0 red externa, eth1 red interna1.Todo lo que venga de la red local al firewall ACEPTAR.

2.Todo lo que venga de la IP de mi casa al puerto tcp 22 ACEPTAR

Ejemplos Real

3. A un partner le dejamos usar el ftp4. Todo lo que venga de la red local y vaya al exterior

ENMASCARAR.5. No permitir ping al FIREWALL

6. Todo lo que venga al puerto tcp 1 al 1024 DENEGAR

7. Todo lo que venga del exterior al puerto tcp 10000 DENEGAR

Iptables (nat)

## FLUSH de reglas

iptables -F

iptables -X

iptables -Z

iptables -t nat –F

## Establecemos politica por defecto

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -t nat -P PREROUTING ACCEPT

iptables -t nat -P POSTROUTING ACCEPT

Iptables (nat)

###FILTRANDO…

# El localhost se deja (Ej:conexiones locales a mysql)

iptables -A INPUT -i lo -j ACCEPT

# Al firewall tenemos acceso desde la red local

iptables –A INPUT –s 192.168.10.0/24 –i eth1 –j ACCEPT

# A un partner se le deja usar el FTP

iptables –A INPUT –s 80.37.45.194 –p tcp –dport 20:21 –j ACCEPT

Iptables (nat)

# Enmascaramiento de la red local y activación del BIT DE FORWARDING (imprescindible!!!!!)

iptables -t nat -A POSTROUTING –s 192.168.10.0/24 -o eth0 -j MASQUERADE

echo 1 > /proc/sys/net/ipv4/ip_forward

# Filtrar los paquetes ICMP

Iptables -A INPUT –p icmp –j DROP

Iptables (nat)

# Se cierra el rango de puerto bien conocidoiptables –A INPUT –s 0.0.0.0/0 –p tcp –dport 1:1024 –j DROP

iptables –A INPUT –s 0.0.0.0/0 –p udp –dport 1:1024 –j DROP

# Se cierra el puerto de gestión: webminiptables –A INPUT –s 0.0.0.0/0 –p tcp –dport 10000 –j DROP

Ejercicio

¿Como podemos bloquear las conexiones al servidor SSH, dejando pasar las del cliente 10.2.2.2 nada más?

ClienteIP:10.2.2.2

Puerto:1025

Servidor SSHIP:10.2.2.1Puerto:22