Discusión:Iptables

De doc.ubuntu-es
(Diferencias entre revisiones)
Saltar a: navegación, buscar
(Removing all content from page)
 
Línea 1: Línea 1:
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.
 
 
===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.'''
 
 
:'''NAT'''    ''(Network Address Translation)'' Desde esta tabla es posible el enmascaramiento de IP, se usa para redireccionar puertos o cambiar las :IPs de origen y  destino a través de interface de red. Las cadenas serán :'''PREROUTING y POSTROUTING
 
'''
 
:'''MANGLE''' ''(Modificado de paquetes)''Permite la modificación de paquetes como ToS (Type of Service), TTL (Time to live)o mark, marcar el paquete.
 
 
:'''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="1" style="margin: 1em 1em 1em 1em; background:#faac58; border:1px solid #eee; font-size: 95%;"
 
|+  '''CORRESPONDENCIA  de TABLAS, CADENAS  y FUNCION'''
 
!TABLA !!FUNCION !! CADENA !!width="500"| FUNCION de la CADENA
 
|-style="background:#f5e5d6"
 
|rowspan=3 |'''FILTER'''
 
|rowspan=3 |Filtrado de paquetes
 
|<pre>INPUT</pre>
 
|Filtrado de paquetes que llegan al firewall
 
|-style="background:#f5e5d6"
 
|<pre>OUTPUT</pre>
 
|Filtrado de los paquetes de salida
 
|-style="background:#f5e5d6"
 
|<pre>FORWARD</pre>
 
|Permite el paso de paquetes a otra dirección del firewall
 
|-style="background:#e3e7f4"
 
|rowspan=3 |'''NAT'''
 
|rowspan=3 |Enrutamiento de<br>direcciones de red
 
|<pre>PREROUTING</pre>
 
|Chequea  la dirección de red antes de reenviarla.<br>Facilita la modificación de la información para facilitar el enrutado<br>Se usa también como DESTINATION NAT o DNAT
 
|-style="background:#e3e7f4"
 
|<pre>POSTROUTING</pre>
 
|Tratamiento de la dirección IP después del enrutado.Esto hace<br> que no sea necesario la modificación del destino de la dirección IP<br> del paquete como en pre-routing.Se usa como SOURCE NAT o SNAT
 
|-style="background:#e3e7f4"
 
|<pre>OUTPUT</pre>
 
|Interpretación de las direcciones de Red de los paquetes<br>que salen del firewall.Escasamente usado.
 
|-style="background:#f5e5d6"
 
|'''MANGLE'''
 
|Modificación de las<br> cabeceras de TCP
 
|<code>PREROUTING<br>POSTROUTING<br>INPUT<br>OUTPUT<br>FORWARD</code>
 
|Permite la modificación del paquete como puede ser TOS<br> (type of Service), marcado de los mismos para <br>QOS o calidad de servicio
 
|-style="background:#e3e7f4"
 
|rowspan=2|'''RAW'''
 
|rowspan=2 |Acción NOTRACK
 
|<pre>PREROUTING</PRE>
 
|rowspan=2|Esta tabla se usa para configurar principalmente excepciones<BR> en el seguimiento de paquetes en combinación<br> con la acción o target NOTRACK.
 
|-style="background:#e3e7f4"
 
|<pre>OUTPUT</pre>
 
|}
 
 
 
 
 
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.
 
:A las CADENAS por defecto podemos unir cadenas creadas por nosotros mismos para un mejor funcionamiento del filtrado o el enrutamiento.
 
 
:El comando IPTABLES tiene a su vez parámetros y comandos que permitirán definir el comportamiento de una o varias reglas. Esto es, agregar una regla, modificar una regla existente, eliminar el nombre de una cadena
 
Describimos algunos de los comandos mas comunes.
 
 
 
 
 
 
{|class="wikitable" border="0"  cellpadding="6" cellspacing="0" style="margin:1em 1em 1em 1em; background:#faac58; color:#000; font-size: 95%;"
 
|+''' FUNCION  de  COMANDOS'''
 
! COMANDO !! FUNCION
 
|-style="background:#eee6d8"
 
|align="center"|'''-A'''
 
|Agregar nueva regla a la cadena especificada.
 
|-style="background:#ebd4ab"
 
|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.
 
|-style="background:#eee6d8"
 
|align="center" |'''-R'''
 
|Reemplazar la regla (rulenum) en la cadena especificada.
 
|-style="background:#ebd4ab"
 
|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)''
 
 
|}
 
 
 
 
 
 
===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:
 
 
 
{|class="wikitable" border="0"  cellpadding="6" cellspacing="0" style="margin:1em 1em 1em 1em; background:#faac58; color:#000; font-size: 95%;"
 
|+'''PARAMETROS y su FUNCION'''
 
!PARAMETRO !! FUNCION
 
|-style="background:#e3e7f4"
 
|align="center"|'''-i'''
 
|Interfaz de entrada (eth0,eth1,eth2...)
 
|-style="background:#f5e5d6"
 
|align="center"|'''-o'''
 
|Interfaz de salida  (eth0,eth1,eth2...)
 
|-style="background:#e3e7f4"
 
|align="center"|'''--sport'''
 
|Puerto de origen
 
|-style="background:#f5e5d6"
 
|align="center"|''' --dport'''
 
|Puerto destino
 
|-style="background:#e3e7f4"
 
|align="center"| -p
 
|El protocolo del paquete a comprobar, tcp, udp, icmp ó all.<br> Por defecto es all
 
|-style="background:#f5e5d6"
 
|align="center"|''' -j'''
 
|Esto especifica el objetivo de la cadena de reglas, o sea una acción
 
|-style="background:#e3e7f4"
 
|align="center"| '''--line-numbers'''
 
|Cuando listamos las reglas, agrega el número que ocupa cada regla<br> dentro de la cadena
 
|-style="background:#f5e5d6"
 
|
 
|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:
 
 
 
:'''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.
 
 
 
 
:Ya tenemos los componetes 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.
 
 
 
:::::''MUY IMPORTANTE. Cuidado con el orden en el cual disponemos las reglas.''
 
:::::'''IPTABLES LEE DE MANERA SECUENCIAL LAS CADENAS DE REGLAS'''.
 
:::::''Es decir, comienza por la primera y verifica que se cumpla la condición y<br> la ejecuta sin verificar las siguientes.''
 
:::::''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.''
 
<br>
 
 
===Modelo de Cadena de Reglas===
 
 
 
La estructura o el esqueleto de una regla basicamente sería:
 
 
 
::<pre>iptables --> -t -->tabla -->tipo_operación -->cadena -->regla_con_parámetros -->Acción</pre>
 
 
 
Explicamos por pasos agregando debajo valores reales:
 
 
{|class="wikitable" style="background:#eee6d8;" align=center cellpadding="4" cellspacing="0"
 
!iptables !!-t--> !! tabla--> !! tipo_operacion--> !! cadena--> !! regla_con_parámetros--> !! ACCION
 
|-style="background:#ebd4ab" align="center"
 
|iptables ||-t || filter ||-A || INPUT || -p tcp -dport 23 || -j DROP ||
 
|}
 
 
 
Ahora quitando espacios:
 
 
<pre>iptables -t filter -A INPUT -p tcp -dport 23 -j DROP</pre>
 
 
¿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:
 
 
<pre>iptables -A INPUT -p tcp -dport telnet -j DROP</pre>
 
 
Si por el contrario, quisiéramos aceptar estos paquetes:
 
 
<pre>iptables -A INPUT -p tcp -dport telnet -j ACCEPT</pre>
 
 
O aceptamos tráfico http:
 
 
<pre>iptables -A INPUT -p tcp -dport http -j ACCEPT</pre>
 
 
donde también podemos especificar el interfaz de entrada (-i etho)
 
 
<pre>iptables -A INPUT -i eth0 -p tcp -dport http -j ACCEPT</pre>
 
 
también:
 

Última revisión de 02:44 7 mar 2008

Herramientas personales