iptables (Español)
zh-CN:Iptables 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.
Contents
Instalación
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
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 actual: # rc.d save iptables
Para los usuarios de systemd, después de añadir las reglas a través de la línea de órdenes: # iptables-save > /etc/iptables/iptables.rules
Por último: # systemctl restart iptables
Y para asegurarse de que todo ha salido bien: $ systemctl status iptables
Guardar los contadores
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
- Sitio web oficial de iptables
- Tutorial de iptables 1.2.2 por Oskar Andreasson
- iptables Debian Wiki de Debian