IPTABLES - Laboratorio de Telemática | Lab-273 ¿QUÉ SON LAS IPTABLES? Esta es una herramienta que...

13
IPTABLES ¿QUÉ SON LAS IPTABLES? Esta es una herramienta que permite configurar las reglas del sistema de filtrado de paquetes del kernel de Linux, desde su versión 2.4. Con esta herramienta podemos configurar un firewall adecuado a nuestras necesidades. En tal sentido, la iptables son un conjunto de reglas de filtrado de paquetes que regulan y controlan el tráfico entre redes (o el tráfico individual de un equipo). Las Iptables permiten crear e insertar en el núcleo las distintas reglas de filtrado que vamos a establecer sobre los paquetes. ¿CÓMO IMPLEMENTAR IPTABLES? Primero debemos conocer las tablas, comandos, parámetros y acciones que usan los iptables. Tablas de IPTABLES TABLA DESCRIPCION filter Esta tabla es usada para filtrar paquetes, por ejemplo con los objetivos ACCEPT, DROP y REJECT. Cadenas predefinidas: FORWARD, INPUT y OUTPUT. nat Esta tabla permite realizar traducción de direcciones, pudiendo traducir tanto origen como destino. Nótese que sólo el primer paquete de la conexión pasa por la tabla, después todos los paquetes de la conexión son tratados de la misma forma. Objetivos válidos en esta tabla son SNAT, DNAT, MASQUERADE (similar a SNAT con IP dinámica) o REDIRECT. Cadenas predefinidas: PREROUTING, POSTROUTING y OUTPUT. mangle Esta tabla esta diseñada para manipular paquetes. Ciertos objetivos sólo son aplicables en esta tabla: TOS, TTL, MARK, SECMARK y CONNSECMARK. Con ellos podemos modificar los paquetes o marcarlos para luego realizar QoS o control de seguridad con SELinux. Cadenas predefinidas: PREROUTING, POSTROUTING, OUTPUT, INPUT y FORWARD. raw Esta tabla permite marcar paquetes que no serán controlados con estado de conexión. Para ello usaremos el objetivo NOTRACK y lo haremos en las cadenas PREROUTING o OUTPUT.

Transcript of IPTABLES - Laboratorio de Telemática | Lab-273 ¿QUÉ SON LAS IPTABLES? Esta es una herramienta que...

IPTABLES

¿QUÉ SON LAS IPTABLES?

Esta es una herramienta que permite configurar las reglas del sistema de

filtrado de paquetes del kernel de Linux, desde su versión 2.4.

Con esta herramienta podemos configurar un firewall adecuado a nuestras

necesidades. En tal sentido, la iptables son un conjunto de reglas de filtrado de

paquetes que regulan y controlan el tráfico entre redes (o el tráfico individual

de un equipo).

Las Iptables permiten crear e insertar en el núcleo las distintas reglas de filtrado

que vamos a establecer sobre los paquetes.

¿CÓMO IMPLEMENTAR IPTABLES?

Primero debemos conocer las tablas, comandos, parámetros y acciones que

usan los iptables.

Tablas de IPTABLES

TABLA DESCRIPCION

filter

Esta tabla es usada para filtrar paquetes, por ejemplo con

los objetivos ACCEPT, DROP y REJECT. Cadenas

predefinidas: FORWARD, INPUT y OUTPUT.

nat

Esta tabla permite realizar traducción de direcciones,

pudiendo traducir tanto origen como destino. Nótese que

sólo el primer paquete de la conexión pasa por la tabla,

después todos los paquetes de la conexión son tratados

de la misma forma. Objetivos válidos en esta tabla son

SNAT, DNAT, MASQUERADE (similar a SNAT con IP

dinámica) o REDIRECT. Cadenas predefinidas:

PREROUTING, POSTROUTING y OUTPUT.

mangle

Esta tabla esta diseñada para manipular paquetes.

Ciertos objetivos sólo son aplicables en esta tabla: TOS,

TTL, MARK, SECMARK y CONNSECMARK. Con ellos

podemos modificar los paquetes o marcarlos para luego

realizar QoS o control de seguridad con SELinux. Cadenas

predefinidas: PREROUTING, POSTROUTING, OUTPUT, INPUT y

FORWARD.

raw

Esta tabla permite marcar paquetes que no serán

controlados con estado de conexión. Para ello usaremos

el objetivo NOTRACK y lo haremos en las cadenas

PREROUTING o OUTPUT.

COMANDOS

COMANDOS FUNCION

-A Agregar nueva regla a la cadena especificada

-I Insertar nueva regla antes de la regla número regla

(rulenum)

en la cadena especificada de acuerdo a los parámetros

sometidos.

-R Reemplazar la regla (rulenum) en la cadena

especificada.

-E Modifica el nombre de la cadena.

[nombre-anterior-cadena por nombre-nueva-cadena]

-L Listado de reglas de la cadena especificada. Si no se

determina una

cadena en particular, listará todas las cadenas existentes.

-N Crear nueva cadena asociándola a un nombre.

-P Modifica la acción por defecto de la cadena

preseleccionada.

-D Eliminar la regla número (rulenum) en la cadena

seleccionada.

-Z Pone los contadores de paquetes y bytes a cero en la

cadena seleccionada.

De no poner seleccionar una cadena, pondrá a cero

todos los contadores de

todas las reglas en todas cadenas.

PARÁMETROS

Todas las reglas en iptables tienen definida su condición por los parámetros,

que constituyen su parte primordial. Algunos de estos parámetros son:

PARAMETRO FUNCION

-i Interfaz de entrada (eth0,eth1,eth2...)

-o Interfaz de salida (eth0,eth1,eth2...)

--sport Puerto de origen

--dport Puerto destino

-p El protocolo del paquete a comprobar, tcp, udp, icmp ó

all.

Por defecto es all

-j Esto especifica el objetivo de la cadena de reglas, o sea

una acción

--line-

numbers

Cuando listamos las reglas, agrega el número que ocupa

cada regla

dentro de la cadena

ACCIONES

Y finalmente, las ACCIONES que estarán siempre al final de cada regla que

determinará que hacer con los paquetes afectados. Si no se especifica

ninguna acción, se ejecutará la opción por defecto que cada cadena tiene

asignada. Las acciones serían:

ACCION FUNCION

ACCEPT Paquete aceptado.

REJECT Paquete rechazado. Se envía notificación a través del

protocolo ICMP

DROP Paquete rechazado. Sin notificación

MASQUERADE Enmascaramiento de la dirección IP origen de forma

dinámica.Esta acción es sólo válida en la tabla NAT en la

cadena postrouting.

DNAT Enmascaramiento de la dirección destino, muy

conveniente para re-enrutado de paquetes.

SNAT enmascaramiento de la IP origen de forma similar a

masquerade, pero con IP fija

¿CÓMO SE USAN?

Anteriormente se vio los componentes esenciales para formar las reglas que

determinarán la aceptación o denegación de entrada y salida de paquetes

de nuestra máquina, tanto a través de Internet, como de nuestra propia red

doméstica.

Ahora veremos cómo se construyen las reglas y como hacer un script de shell

en el que se van aplicando aquellas reglas que necesitemos.

Entonces el esquema será

iptables --> -t -->tabla

-->tipo_operación -->cadena

-->regla_con_parámetros -->Acción

Nota: Si no se pone el parámetro –t [nombre de la tabla], por defecto se usa la tabla filter. Pero si se desea usar otro tabla distinta es necesario especificar

EJEMPLO 1.- Permitir acceso al puerto 80 (http) y denegar conexiones telnet

Debemos ingresar como administradores para poder realizar cualquier cambio en los iptables.

sudo –s

: ******

Primero hay que “borrar” las reglas anteriores

iptables -F

iptables -t nat –F

Aceptamos conexiones a nuestro servidor http

iptables -A INPUT -p tcp --dport http -j ACCEPT

Denegamos conexiones remotas con telnet a nuestro equipo

iptables -A INPUT -p tcp --dport telnet -j DROP

Finalmente, denegamos cualquier tipo de conexión entrante

iptables -A INPUT -j DROP

Para ver las reglas establecidas ponemos

iptables -L

Ejemplo 2.- Imaginemos que tenemos una maquina servidor que brinda

servicios web, servicios ftp, servicios dns y de correo. Lo que se desea hacer es

habilitar el tráfico de todos estos servicios solo para la red LAN

(192.168.184.0/24) y permitir el uso de otros puertos solo al servidor de manera

local

Debemos ingresar como administradores para poder realizar cualquier cambio en los iptables.

sudo –s

: ******

Introducimos las reglas necesarias

# Borramos reglas anteriores

iptables -F

# Permitimos que se conecten a nuestro servidor web.

iptables -A INPUT -p TCP --dport 80 -j ACCEPT

# Permitimos la comunicación con el servidor dns

iptables -A INPUT -p UDP --dport 53 -j ACCEPT

iptables -A INPUT -p TCP --dport 53 -j ACCEPT

#Permitimos uso de ftp.

iptables -A INPUT -p TCP --dport 21 -j ACCEPT

#Permitimos acceso pop3.

iptables -A INPUT -p TCP --dport 110 -j ACCEPT

# Permitimos uso de smtp

iptables -A INPUT -p TCP --dport 25 -j ACCEPT

# Permitimos acceso imap.

iptables -A INPUT -p TCP --dport 143 -j ACCEPT

iptables -A INPUT -p UDP --dport 143 -j ACCEPT

#Permitimos todo el tráfico de la LAN

iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT

#Permitimos accesos al localhost

iptables -A INPUT -i lo -j ACCEPT

Verificando reglas

NOTA: Al momento de reiniciar la maquina las reglas serán restablecidas

(borradas) para ello es conveniente crear un programa que ejecute todas

estas reglas para no escribirlas nuevamente.

Para ello creamos un archivo.

nano miiptables.sh

Copiamos en siguiente código e instrucciones.

Una vez guardado damos permiso de ejecución a nuestro archivo

Una vez asignados los permisos correspondientes

ACL (Listas de control de Acceso)

¿QUÉ SON LAS ACLS?

Una lista de control de acceso o ACL (del inglés, Access control list) es un

concepto de seguridad informática usado para fomentar la separación de

privilegios. Las ACL permiten controlar el flujo del tráfico en equipos de redes,

tales como enrutadores y conmutadores. Su principal objetivo es filtrar tráfico,

permitiendo o denegando el tráfico de red de acuerdo a alguna condición.

Las ACLs son un mecanismo que usan diversos dispositivos y aplicaciones para

filtrar o clasificar el tráfico que interceptan. En Cisco las ACLs se usan en

muchos contextos, como mecanismo de seguridad para filtrar selectivamente

tráfico que cruza por el enrutador. Dentro de las ACL más comunes están las

ACL estándar y las ACL extendidas.

¿CÓMO IMPLEMENTAR UN ACL ESTÁNDAR?

La idea de las ACLs estándar es filtrar tráfico con base en las direcciones

origen de los paquetes que entran o salen de una interfaz

La creación de la ACL consiste en crear una secuencia de reglas con un

mismo identificador, cuyo orden filtre el tráfico según los objetivos. Cada regla

tiene la forma:

access-list <n> [ permit | deny ] <referencia1> <wildcard1>

Donde n es el número que identifica la ACL (1 a 99 ó 1300 a 1999 para ACLs

estándar) y referencia / wildcard identifican a los hosts con los que se

compararán los paquetes para aplicarles la acción.

Ejemplo

Se tiene la siguiente Red, compuesta por 2 subredes,

La SUBRED A tiene 1 servidor FTP y 1 maquina cliente (host),

La SUBRED B tiene 2 máquinas clientes (host)

Se desea denegar el acceso de la SUBRED B hacia la SUBRED A

Paso 1.- Nos dirigimos al router R-A e ingresamos a su consola

Paso 2.- Ingresamos a configuración

Router>enable

Router#configure terminal

Enter configuration commands, one per line. End with

CNTL/Z.

Router(config)#

Paso 3.- Creamos una lista control de acceso estándar, nótese que ponemos

la dirección de red de la SUBRED B seguido se su Wildcard. Y ponemos una

línea adicional para que permita garantizar tráfico de otros orígenes.

Router(config)#access-list 1 deny 192.168.1.0 0.0.0.255

Router(config)#access-list 1 permit any

Paso 4.- finalmente asignamos la lista de acceso a la interfaz fastEthernet 0/0.

Nótese que “1” representa a mi lista de control de acceso.

Router(config)#interface fastEthernet 0/0

Router(config-if)#ip access-group 1 out

Router(config-if)#

Para ver si se crearon las listas de acceso escribimos show access-lists

Router#show access-lists

Standard IP access list 1

deny 192.168.1.0 0.0.0.255

permit any

Router#

Haciendo ping desde la maquina PC2 (subred B) hacia la PC3 (subred A)

¿CÓMO IMPLEMENTAR UN ACL EXTENDIDA?

A diferencia de lo que sucede con la ACL estándar, las extendidas permiten

especificar hacia dónde se dirige el tráfico (origen y destino) y con ésta

característica, se puede bloquear o permitir un tráfico mucho más específico

teniendo un mayor control en el control de tráfico entrante y saliente.

access-list <n> [ permit | deny ] [ ip | tcp| udp ]

<referencia1> <wildcard1 [ Origen ]>

<referencia1> <wildcard1 [ Destino ] [Puerto]>

Donde n es el número que identifica la ACL (100 a 199 ó 2000 al 2699 para

ACLs extendidas. Donde además se tiene una referencia de origen y de

destino

Ejemplo

Se tiene la siguiente Red, compuesta por 2 subredes,

La SUBRED A tiene 1 servidor FTP y 1 maquina cliente (host),

La SUBRED B tiene 2 máquinas clientes (host)

Se desea denegar el acceso de la SUBRED B hacia el SERVIDOR más

propiamente al servicio FTP, (Es decir que se tenga acceso a los demás

servicios y que solo el ftp este restringido)

Paso 1.- Nos dirigimos al router R-A e ingresamos a su consola

Paso 2.- Ingresamos a configuración

Router>enable

Router#configure terminal

Enter configuration commands, one per line. End with

CNTL/Z.

Router(config)#

Paso 3.- Creamos una lista control de acceso extendida,

Nótese que ponemos la dirección de red de la SUBRED B (origen) seguido se su

Wildcard. Luego ponemos la dirección y wildcard de nuestro SERVIDOR

(destino) e indicamos que puerto filtrar. Finalmente ponemos una línea

adicional que permita garantizar tráfico de otros orígenes.

Router(config)#access-list 105 deny tcp 192.168.1.0

0.0.0.255 187.1.55.3 0.0.0.0 eq ftp

Router(config)#access-list 105 permit tcp any any

Router(config)#

Paso 4.- finalmente asignamos la lista de acceso a la interfaz fastEthernet 0/0.

Nótese que “105” representa a mi lista de control de acceso.

Router(config)#interface fastEthernet 0/0

Router(config-if)#ip access-group 105 out

Router(config-if)#

Para ver si se crearon las listas de acceso escribimos show access-lists

Router#show access-lists

Extended IP access list 105

deny tcp 192.168.1.0 0.0.0.255 host 187.1.55.3 eq ftp

permit ip any any

PROBANDO

Conectándose al servidor FTP desde la maquina PC1 (subred B)

Como se puede apreciar en las capturas NO es posible acceder al servicio ftp,

sin embargo es posible acceder a otros servicios que ofrece el servidor.

Conectándose al servidor FTP desde la maquina PC3 (Subred A)

Como se puede apreciar en las capturas es posible acceder al servidor ftp y a

cualquier otro servicio que esté disponible