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: