Iptables (Español)

From ArchWiki
Revision as of 16:01, 6 February 2013 by Pedro (Talk | contribs)

Jump to: navigation, search

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary end

Iptables es un poderoso firewall compilado en el kernel de Linux y que forma parte del proyecto netfilter. Iptables puede ser configurado directamente, como también por medio de un frontend o una GUI. iptables es usado por IPv4, en tanto que ip6tables es usado para IPv6.

Instalación

Nota: El propio kernel debe estar compilado con apoyo para iptables. Todos los kernels de serie de Arch Linux son compatibles con iptables.

Primero, instale las herramientas en el espacio de usuario, que son proporcionadas por el paquete iptables presente en los repositorios oficiales.

A continuación, active e inicie el servicio iptables para systemd:

# systemctl enable iptables
# systemctl start iptables

Si desea compatibilidad con IPv6, active e inicie el servicio ip6tables para systemd:

# systemctl enable ip6tables
# systemctl start ip6tables

Conceptos básicos

tablas

iptables cuenta con cuatro tablas: raw, filter, nat y mangle.

cadenas

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: please use the first argument of the template to provide a brief explanation. (Discuss in Talk:Iptables (Español)#)

Las cadenas son usadas para especificar rulesets1. Un paquete de red comienza su recorrido en una cadena y va avanzando progresivamente hasta alcanzar una regla con la que se corresponde. Existen tres cadenas predefinidas: INPUT, OUTPUT y FORWARD. Todo el tráfico saliente, generado localmente, pasa a través de la cadena OUTPUT; todo el tráfico entrante, dirigido a la máquina, se hace pasar a través de la cadena INPUT; y todo el tráfico enrutado, que no se ha suministrado localmente, pasa a través de la cadena FORWARD. Las tres cadenas predefinidas tienen objetivos («targets») predeterminados que se utilizan para el caso de que algún paquete no se corresponda con ninguna regla. El usuario puede definir las reglas de las cadenas para hacerlas más eficientes.

1. Los «rulesets» son una agrupación de conjuntos de reglas que funcionan a modo de «subrutina» de cualquier lenguaje de programación.

objetivos

Un «objetivo» (target) es el resultado que se produce cuando un paquete de red se corresponde o satisface una regla. Los objetivos se especifican mediante el uso de «jump» (-j) («salto»). Los objetivos más comunes son ACCEPT, DROP, REJECT y LOG.

módulos

Hay muchos módulos que pueden ser utilizados para reforzar iptables, como connlimit, conntrack, limit y recent. Estos módulos añaden funcionalidad extra al permitir reglas de filtrado avanzadas.

Configuración

Desde la linea de comandos

Puede comprobar el ruleset en uso y el número de paquetes de red que han satisfecho cada regla usando la orden::

# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination   
     
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination    
    
Chain OUTPUT (policy ACCEPT 0K packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Si la salida se parece a lo anterior, significa que no hay reglas establecidas.

Puede vaciar y restablecer la configuración de iptables por defecto, utilizando las siguientes órdenes:

# iptables -P INPUT ACCEPT
# iptables -P FORWARD ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -F
# iptables -X

Archivo de configuración

En el archivo /etc/conf.d/iptables se establece la ubicación de los archivos de configuración de iptables. El ruleset se carga cuando el demonio se ha iniciado.

/etc/conf.d/iptables
# Configuración de las reglas iptables
IPTABLES_CONF=/etc/iptables/iptables.rules
IP6TABLES_CONF=/etc/iptables/ip6tables.rules

# Activar redireccionamiento IP (tanto IPv4 como IPv6)
# NOTA: Esta no es la forma recomendada para hacer esto, y es proporcionado solamente para
# dar compatibilidad a versiones antiguas. En su lugar, utilice /etc/sysctl.conf y ajuste el redireccionamiento
# opciones:
# * net.ipv4.ip_forward=1
# * net.ipv6.conf.default.forwarding=1
# * net.ipv6.conf.all.forwarding=1
#IPTABLES_FORWARD=0

Para guardar el ruleset, utilice la orden:

# rc.d save iptables

Para cargar el ruleset, utilie la orden:

# systemctl restart iptables

Para los usuarios de systemd, después de modificar las reglas, hay que ejecutar:

# iptables-save > /etc/iptables/iptables.rules
# systemctl enable iptables
# systemctl start iptables

Guardar los contadores

Nota: Esto no funcionará si está utilizando systemd. Tendrá que editar los archivos de servicio de systemd.

También puede, opcionalmente, guardar los contadores de los paquetes de red y de los byte. Para lograr esto, edite /etc/rc.d/iptables

En la sección save), cambie la línea:

/usr/sbin/iptables-save > $IPTABLES_CONF

por:

/usr/sbin/iptables-save -c > $IPTABLES_CONF

En la sección stop) añada lo siguiente para guardar antes de deterner el demonio:

stop)
     $0 save
     sleep 2

En la sección start), cambie la línea:

/usr/sbin/iptables-restore < $IPTABLES_CONF

por

/usr/sbin/iptables-restore -c < $IPTABLES_CONF

y guarde el archivo.

Guías

Registro

El objetivo LOG se puede utilizar para registrar los paquetes que satisfacen una regla. A diferencia de otros objetivos, como ACCEPT o DROP, el paquete continuará moviéndose a través de la cadena después de alcanzar un objetivo LOG. Esto significa que, para habilitar el registro de todos los paquetes perdidos, se tendría que agregar una regla LOG duplicada antes de cada regla DROP. Como esto reduce la eficiencia y hace que las cosas sean menos simples, se puede crear, en su lugar, una cadena LOGDROP.

## /etc/iptables/iptables.rules

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

... otras cadenas definidas por el usuario ..

## LOGDROP chain
:LOGDROP - [0:0]

-A LOGDROP -m limit --limit 5/m --limit-burst 10 -j LOG
-A LOGDROP -j DROP

... reglas ...

## log AND drop packets that hit this rule:
-A INPUT -m state --state INVALID -j LOGDROP

... más reglas ...

Limitar el tamaño del registro

El módulo limit se debe usar para prevenir que el registro de iptables se haga demasiado grande o haga que el disco duro se escriba innecesariamente. Sin limitación, un atacante podría llenar el disco (o al menos la partición /var) causando la saturación del registro de iptables.

-m limit se utiliza para llamar al módulo limit. Puede usar --limit para utilizar una tasa promedio y --limit-burst para establecer una tasa de ráfaga («limit burst») inicial. Por ejemplo:

-A LOGDROP -m limit --limit 5/m --limit-burst 10 -j LOG

Esto agrega una regla a la cadena LOGDROP que registrar todos los paquetes que pasan a través de ella. Los primeros 10 paquetes serán registrados, y de ahí en adelante únicamente 5 paquetes por minuto quedarán registrados. El «limit burst» es restaurado cada vez que la «tasa límite» no se supera.

syslog-ng

Aumiendo que usa syslog-ng, puede controlar donde será guardada la salida del registro de iptables de este modo:

filter f_everything { level(debug..emerg) and not facility(auth, authpriv); };

to

filter f_everything { level(debug..emerg) and not facility(auth, authpriv) and not filter(f_iptables); };

Esto concluirá la salida del registro de iptables en el archivo /var/log/everything.log.

Si quiere que el registro de iptables se produzca en un archivo distinto de /var/log/iptables.log, basta con cambiar el valor de destino de d_iptables aquí (siempre en el archivo syslog-ng.conf)

destination d_iptables { file("/var/log/iptables.log"); };

ulogd

ulogd es un demonio especializado en el registro de los paquetes de red ejecutado en el espacio de usuario para netfilter que puede sustituir el target LOG predeterminado. El paquete ulogd está disponible en el repositorio [community].

Véase también

Template:Wikipedia (Español)