| Línea 13: | Línea 13: | ||
Describimos los elementos y luego vemos un sencillo script básico. | Describimos los elementos y luego vemos un sencillo script básico. | ||
| − | + | ===Las Tablas=== | |
:'''FILTER''' ''(filtrado)''Permite generar las ''reglas de filtrado'' o sea, que paquetes aceptar, cuales rechazar o cuales omitir.Es la tabla por defecto. Las cadenas serán: '''INPUT OUTPUT y FORWARD.''' | :'''FILTER''' ''(filtrado)''Permite generar las ''reglas de filtrado'' o sea, que paquetes aceptar, cuales rechazar o cuales omitir.Es la tabla por defecto. Las cadenas serán: '''INPUT OUTPUT y FORWARD.''' | ||
| Línea 68: | Línea 68: | ||
A partir de aquí, dividiremos las opciones en algunos grupos | A partir de aquí, dividiremos las opciones en algunos grupos | ||
| − | + | ===Comandos de Iptables=== | |
:Como hacíamos referencia mas arriba, dentro de las ''tablas'' hay ''cadenas'' a su vez vez formadas por agrupaciones de ''reglas''. Es importante ver que, cada tabla tiene cadena por defecto, que no se pueden eliminar. | :Como hacíamos referencia mas arriba, dentro de las ''tablas'' hay ''cadenas'' a su vez vez formadas por agrupaciones de ''reglas''. Es importante ver que, cada tabla tiene cadena por defecto, que no se pueden eliminar. | ||
| Línea 120: | Línea 120: | ||
| − | + | ===Parámetros=== | |
:Todas las reglas en iptables tienen definida su condición por los parámetros, que constituyen su parte primordial. | :Todas las reglas en iptables tienen definida su condición por los parámetros, que constituyen su parte primordial. | ||
| Línea 154: | Línea 154: | ||
|align="right"|(''Ver lista completa en: man iptables'') | |align="right"|(''Ver lista completa en: man iptables'') | ||
|} | |} | ||
| + | <br> | ||
| − | + | ===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: | |
| − | + | ||
| Línea 184: | Línea 184: | ||
:::::''Por consiguiente, si la primera regla en la tabla filter de la cadena<br> input es rechazar cualquier paquete,las siguientes reglas no serán verificadas,'' | :::::''Por consiguiente, si la primera regla en la tabla filter de la cadena<br> input es rechazar cualquier paquete,las siguientes reglas no serán verificadas,'' | ||
:::::'' y se rechazará cualquier paquete.'' | :::::'' y se rechazará cualquier paquete.'' | ||
| + | <br> | ||
| + | |||
| + | ===Modelo de Cadena de Reglas=== | ||
Que es un firewall?
Como traducción, un cortafuegos. En realidad es un muro virtual de protección. ¿Contra qué nos protege? Controla a voluntad la entrada y/o salida de tráfico en nuestra red o redes o sea el filtrado de paquetes.
Para que un firewall tenga actividad, es necesario que por lo menos haya dos redes conectadas, lo mas simple: nuestro ordenador y la red Internet. Pero también podemos implementarlo en caso de tener una red en la oficina o en nuestra propia casa, donde aplicaremos las restricciones o los accesos que deseemos para cada máquina.
Un firewall puede ser hardware o software. En nuestro caso veremos el software que trae el kernel Linux y la manera de configurarlo según nuestras necesidades. Puede ser muy simple o de una complicación extrema, dependiendo de la cantidad de máquinas, la naturaleza del filtrado y la relación permisividad-restricción que hagan posible el tráfico, porque al fin y al cabo necesitamos comunicarnos con otras máquinas. Lo conocemos como IPTABLES.
Aclaramos que en versiones anteriores al kernal 2.4.* se llamaba ipchain, pero a partir de esta versión se cambió a Iptables, mucho mas potente.
Iptables está basado en el uso de TABLAS dentro de las tablas, CADENAS, formadas por agrupación de REGLAS, parámetros que relativizan las reglas y finalmente una ACCION, que es la encargada de decir qué destino tiene el paquete.
Describimos los elementos y luego vemos un sencillo script básico.
Contenido |
| TABLA | FUNCION | CADENA | FUNCION de la CADENA |
|---|---|---|---|
| FILTER | Filtrado de paquetes | INPUT |
Filtrado de paquetes que llegan al firewall |
OUTPUT |
Filtrado de los paquetes de salida | ||
FORWARD |
Permite el paso de paquetes a otra dirección del firewall | ||
| NAT | Enrutamiento de direcciones de red |
PREROUTING |
Chequea la dirección de red antes de reenviarla. Facilita la modificación de la información para facilitar el enrutado Se usa también como DESTINATION NAT o DNAT |
POSTROUTING |
Tratamiento de la dirección IP después del enrutado.Esto hace que no sea necesario la modificación del destino de la dirección IP del paquete como en pre-routing.Se usa como SOURCE NAT o SNAT | ||
OUTPUT |
Interpretación de las direcciones de Red de los paquetes que salen del firewall.Escasamente usado. | ||
| MANGLE | Modificación de las cabeceras de TCP |
PREROUTING
|
Permite la modificación del paquete como puede ser TOS (type of Service), marcado de los mismos para QOS o calidad de servicio |
| RAW | Acción NOTRACK | PREROUTING |
Esta tabla se usa para configurar principalmente excepciones en el seguimiento de paquetes en combinación con la acción o target NOTRACK. |
OUTPUT |
A partir de aquí, dividiremos las opciones en algunos grupos
Describimos algunos de los comandos mas comunes.
| COMANDO | 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 sometida. |
| -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 existenes. |
| -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. |
| (Lista completa en: man iptables) |
| 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 |
| (Ver lista completa en: man iptables) |
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:
La estructura o el esqueleto de una regla basicamente sería:
iptables --> -t -->tabla -->tipo_operación -->cadena -->regla_con_parámetros -->Acción
Explicamos por pasos agregando debajo valores reales:
| iptables | -t--> | tabla--> | tipo_operacion--> | cadena--> | regla_con_parámetros--> | ACCION | |
|---|---|---|---|---|---|---|---|
| iptables | -t | filter | -A | INPUT | -p tcp -dport 23 | -j DROP |
Ahora quitando espacios:
iptables -t filter -A INPUT -p tcp -dport 23 -j DROP
¿Qué nos dice esta cadena de reglas?
Que en la tabla filter, la cadena input filtra los paquetes con protocolo tcp que entran por el puerto 23 (puerto asignado a telnet) y éstos son rechazados (DROP) sin ninguna notificación.
Algunas consideraciones. De acuerdo con lo hemos comentado antes, podríamos escribir lo mismo de otra forma,por ej. quitando "-t filter", ya que es la tabla por defecto, además podemos cambiar el número de puerto por"telnet" que en realidad es su puerto asignado. Queda:
iptables -A INPUT -p tcp -dport telnet -j DROP
Si por el contrario, quisiéramos aceptar estos paquetes:
iptables -A INPUT -p tcp -dport telnet -j ACCEPT
O aceptamos tráfico http:
iptables -A INPUT -p tcp -dport http -j ACCEPT
donde también podemos especificar el interfaz de entrada (-i etho)
iptables -A INPUT -i eth0 -p tcp -dport http -j ACCEPT
también: