| Línea 22: | Línea 22: | ||
:'''RAW ''' Esta tabla se usa para configurar principalmente excepciones en el seguimiento de paquetes en combinación con la acción o target NOTRACK. Trabaja sobre la cadena PREROUTING Y OUTPUT y su única acción es Notrack. Puede evitar que iptables haga un seguimiento de los paquetes. | :'''RAW ''' Esta tabla se usa para configurar principalmente excepciones en el seguimiento de paquetes en combinación con la acción o target NOTRACK. Trabaja sobre la cadena PREROUTING Y OUTPUT y su única acción es Notrack. Puede evitar que iptables haga un seguimiento de los paquetes. | ||
| + | :Describimos los elementos y luego vemos un sencillo script básico. | ||
{|class="wikitable" border="0" cellpadding="6" cellspacing="0" style="margin: 1em 1em 1em 1em; background:#faac58; border: 1px solid #eee; font-size: 95%;" | {|class="wikitable" border="0" cellpadding="6" cellspacing="0" style="margin: 1em 1em 1em 1em; background:#faac58; border: 1px solid #eee; font-size: 95%;" | ||
| Línea 68: | Línea 69: | ||
Describimos algunos de los comandos mas comunes. | Describimos algunos de los comandos mas comunes. | ||
| − | |||
| − | | - | + | |
| − | |- | + | |
| − | | -I | + | |
| − | |- | + | {|class="wikitable" border="0" cellpadding="6" cellspacing="0" style="margin:1em 1em 1em 1em; background:#faac58; color:#000; font-size: 95%;" |
| − | | -R | + | |+''' FUNCION de COMANDOS''' |
| − | |- | + | ! COMANDO !! FUNCION |
| − | | -E | + | |-style="background:#eee6d8" |
| − | |- | + | |align="center"|'''-A''' |
| − | | -L | + | |Agregar nueva regla a la cadena especificada. |
| − | |- | + | |-style="background:#ebd4ab" |
| − | | -N | + | |align="center" |'''-I''' |
| − | |- | + | |Insertar nueva regla antes de la regla número_regla(rulenum)<br> en la cadena especificada de acuerdo a los parámetros sometida. |
| − | | -P | + | |-style="background:#eee6d8" |
| − | |- | + | |align="center" |'''-R''' |
| − | | -D | + | |Reemplazar la regla (rulenum) en la cadena especificada. |
| − | |- | + | |-style="background:#ebd4ab" |
| − | | -Z | + | |align="center" |'''-E''' |
| − | |- | + | |Modifica el nombre de la cadena.<br> [nombre-anterior-cadena por nombre-nueva-cadena] |
| − | + | |-style="background:#eee6d8" | |
| − | + | |align="center" |'''-L''' | |
| + | |Listado de reglas de la cadena especificada. Si no se determina una<br> cadena en particular, listará todas las cadenas existenes. | ||
| + | |-style="background:#ebd4ab" | ||
| + | |align="center" |'''-N''' | ||
| + | |Crear nueva cadena asociándola a un nombre. | ||
| + | |-style="background:#eee6d8" | ||
| + | |align="center" |'''-P''' | ||
| + | |Modifica la acción por defecto de la cadena preseleccionada. | ||
| + | |-style="background:#ebd4ab" | ||
| + | |align="center" |'''-D''' | ||
| + | |Eliminar la regla_número(rulenum) en la cadena seleccionada. | ||
| + | |-style="background:#eee6d8" | ||
| + | |align="center" |'''-Z''' | ||
| + | |Pone los contadores de paquetes y bytes a cero en la cadena seleccionada.<br> De no poner seleccionar una cadena, pondrá a cero todos los contadores de<br> todas las reglas en todas cadenas. | ||
| + | |-style="background:#ebd4ab" | ||
| | | | ||
| + | |align="right" |''(Lista completa en: man iptables)'' | ||
| + | |||
|} | |} | ||
| + | |||
| + | |||
| Línea 97: | Línea 115: | ||
*'''''LOS PARAMETROS''''' | *'''''LOS PARAMETROS''''' | ||
| − | :Todas las reglas en iptables tienen definida su condición por los parámetros, que constituyen su parte | + | :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: | ||
| − | {|class="wikitable" style=" | + | {|class="wikitable" border="0" cellpadding="6" cellspacing="0" style="margin:1em 1em 1em 1em; background:#faac58; color:#000; font-size: 95%;" |
| − | | -i | + | |+'''PARAMETROS y su FUNCION''' |
| + | !PARAMETRO !! FUNCION | ||
| + | |-style="background:#e3e7f4" | ||
| + | |align="center"|'''-i''' | ||
|Interfaz de entrada (eth0,eth1,eth2...) | |Interfaz de entrada (eth0,eth1,eth2...) | ||
| − | |- | + | |-style="background:#f5e5d6" |
| − | | -o | + | |align="center"|'''-o''' |
|Interfaz de salida (eth0,eth1,eth2...) | |Interfaz de salida (eth0,eth1,eth2...) | ||
| − | |- | + | |-style="background:#e3e7f4" |
| − | | --sport | + | |align="center"|'''--sport''' |
|Puerto de origen | |Puerto de origen | ||
| − | |- | + | |-style="background:#f5e5d6" |
| − | | --dport | + | |align="center"|''' --dport''' |
|Puerto destino | |Puerto destino | ||
| − | |- | + | |-style="background:#e3e7f4" |
| − | | -p | + | |align="center"| -p |
|El protocolo del paquete a comprobar, tcp, udp, icmp ó all. Por defecto es all | |El protocolo del paquete a comprobar, tcp, udp, icmp ó all. Por defecto es all | ||
| − | |- | + | |-style="background:#f5e5d6" |
| − | | -j | + | |align="center"|''' -j''' |
|Esto especifica el objetivo de la cadena de reglas, o sea una acción | |Esto especifica el objetivo de la cadena de reglas, o sea una acción | ||
| − | |- | + | |-style="background:#e3e7f4" |
| − | | --line-numbers | + | |align="center"| '''--line-numbers''' |
|Cuando listamos las reglas, agrega el número que ocupa cada regla dentro de la cadena | |Cuando listamos las reglas, agrega el número que ocupa cada regla dentro de la cadena | ||
| − | |- | + | |-style="background:#f5e5d6" |
| − | + | ||
| − | + | ||
| | | | ||
| − | + | |align="right"|(''Ver lista completa en: man iptables'') | |
| − | + | ||
|} | |} | ||
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.
| 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 |
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) |
La estructura o el esqueleto de una regla basicamente sería:
iptables --> -t -->tabla -->tipo_operación -->cadena -->regla_con_parámetros -->Acción -->parámetros_acción
Explicamos por pasos agregando debajo valores reales:
| iptables | -t--> | tabla--> | tipo_operacion--> | cadena--> | regla_con_parámetros--> | ACCION--> | 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: