Difference between revisions of "Iptables (Español)"

From ArchWiki
Jump to: navigation, search
(Actualizar)
(simplification and beautification of wikilinks, fixing whitespace, capitalization and section fragments (https://github.com/lahwaacz/wiki-scripts/blob/master/link-checker.py (interactive)))
 
(8 intermediate revisions by 6 users not shown)
Line 1: Line 1:
 
{{DISPLAYTITLE:iptables (Español)}}
 
{{DISPLAYTITLE:iptables (Español)}}
 
[[Category:Firewalls (Español)]]
 
[[Category:Firewalls (Español)]]
 +
[[de:Iptables]]
 +
[[el:Iptables]]
 
[[en:Iptables]]
 
[[en:Iptables]]
 +
[[fr:Iptables]]
 
[[it:Iptables]]
 
[[it:Iptables]]
 +
[[ja:Iptables]]
 
[[ru:Iptables]]
 
[[ru:Iptables]]
 
[[sr:Iptables]]
 
[[sr:Iptables]]
 
[[zh-CN:Iptables]]
 
[[zh-CN:Iptables]]
{{Article summary start|Sumario}}
+
{{Related articles start (Español)}}
{{Article summary text|Información relativa a la instalación y configuración de iptables.}}
+
{{Related|Firewalls (Español)}}
{{Article summary heading|Relacionado}}
+
{{Related|Simple stateful firewall}}
{{Article summary wiki|Firewalls (Español)}}
+
{{Related|Sysctl#TCP/IP stack hardening}}
{{Article summary wiki|Simple Stateful Firewall}}
+
{{Related|Sshguard}}
{{Article summary wiki|Sysctl#TCP/IP stack hardening}}
+
{{Related|Fail2ban}}
{{Article summary wiki|Sshguard}}
+
{{Related articles end}}
{{Article summary wiki|Fail2ban}}
+
{{Article summary end}}
+
  
 
Iptables es un poderoso [[Firewalls (Español)|firewall]] integrado en el kernel de Linux y que forma parte del proyecto [[Wikipedia:es:Netfilter|netfilter]]. Iptables puede ser configurado directamente, como también por medio de un  [[Firewalls_(Español)#Front-ends_para_iptables|frontend]] o una [[Firewalls_(Español)#GUI_para_iptables|GUI]]. iptables es usado por [[Wikipedia:es:IPv4|IPv4]], en tanto que ip6tables es usado para [[Wikipedia:es:IPv6|IPv6]].
 
Iptables es un poderoso [[Firewalls (Español)|firewall]] integrado en el kernel de Linux y que forma parte del proyecto [[Wikipedia:es:Netfilter|netfilter]]. Iptables puede ser configurado directamente, como también por medio de un  [[Firewalls_(Español)#Front-ends_para_iptables|frontend]] o una [[Firewalls_(Español)#GUI_para_iptables|GUI]]. iptables es usado por [[Wikipedia:es:IPv4|IPv4]], en tanto que ip6tables es usado para [[Wikipedia:es:IPv6|IPv6]].
 +
 +
[http://netfilter.org/projects/nftables/ nftables] está programada para [http://www.phoronix.com/scan.php?page=news_item&px=MTQ5MDU ser liberada con el kernel de Linux 3.13], y vendrá a sustituir definitivamente iptables como la principal utilidad de cortafuegos de Linux. Por ahora, un howto está disponible [https://home.regit.org/netfilter-en/nftables-quick-howto/ aquí].
  
 
== Instalación ==
 
== Instalación ==
  
Todos los kernels de serie de Arch Linux son compatibles con iptables. Solo necesita [[pacman (Español)|instalar]] las herramientas en el [[wikipedia:es:Espacio_de_usuario|espacio de usuario]], que son proporcionadas por el paquete {{Pkg|iptables}} presente en los [[Official Repositories (Español)|repositorios oficiales]].
+
Todos los kernels de serie de Arch Linux son compatibles con iptables. Solo necesita [[pacman (Español)|instalar]] las herramientas en el [[wikipedia:es:Espacio_de_usuario|espacio de usuario]], que son proporcionadas por el paquete {{Pkg|iptables}} presente en los [[Official repositories (Español)|repositorios oficiales]].
  
 
== Conceptos básicos ==
 
== Conceptos básicos ==
Line 88: Line 92:
 
}}
 
}}
  
{{Advertencia|El resto de esta sección está destinada a enseñar la sintaxis y los conceptos que se esconden detrás de las reglas de iptables. No tiene la pretensión de enseñar cómo proteger los servidores. Para mejorar la seguridad de su sistema, consulte [[Simple Stateful Firewall]] para una configuración de iptables mínimamente segura y [[Security]] para proteger Arch Linux en general.}}
+
{{Advertencia|El resto de esta sección está destinada a enseñar la sintaxis y los conceptos que se esconden detrás de las reglas de iptables. No tiene la pretensión de enseñar cómo proteger los servidores. Para mejorar la seguridad de su sistema, consulte [[Simple stateful firewall]] para una configuración de iptables mínimamente segura y [[Security]] para proteger Arch Linux en general.}}
  
 
El servicio LAN de sincronización de [[Wikipedia:es:Dropbox|Dropbox]] tiene la característica de [https://isc.sans.edu/port.html?port=17500 transmitir paquetes de red cada 30 segundos] a todos los equipos que estén en su área inalámbrica. Si estamos en una zona LAN con clientes de Dropbox y no usamos esta característica, entonces podríamos quererla para rechazar los paquetes.  
 
El servicio LAN de sincronización de [[Wikipedia:es:Dropbox|Dropbox]] tiene la característica de [https://isc.sans.edu/port.html?port=17500 transmitir paquetes de red cada 30 segundos] a todos los equipos que estén en su área inalámbrica. Si estamos en una zona LAN con clientes de Dropbox y no usamos esta característica, entonces podríamos quererla para rechazar los paquetes.  
Line 177: Line 181:
  
 
==== Restablecer las reglas ====
 
==== Restablecer las reglas ====
 
{{Expansion|These commands clear only the {{ic|filter}} table.}}
 
  
 
Puede vaciar y restablecer la configuración, por defecto, de iptables  utilizando las siguientes órdenes:
 
Puede vaciar y restablecer la configuración, por defecto, de iptables  utilizando las siguientes órdenes:
  
 +
# iptables -F
 +
# iptables -X
 +
# iptables -t nat -F
 +
# iptables -t nat -X
 +
# iptables -t mangle -F
 +
# iptables -t mangle -X
 +
# iptables -t raw -F
 +
# iptables -t raw -X
 +
# iptables -t security -F
 +
# iptables -t security -X
 
  # iptables -P INPUT ACCEPT
 
  # iptables -P INPUT ACCEPT
 
  # iptables -P FORWARD ACCEPT
 
  # iptables -P FORWARD ACCEPT
 
  # iptables -P OUTPUT ACCEPT
 
  # iptables -P OUTPUT ACCEPT
# iptables -F
+
 
# iptables -X
+
La orden {{ic|-F}} sin argumentos vuelca todas las cadenas en su tabla actual. Del mismo modo, {{ic|-X}} elimina todos las cadenas vacías no predeterminadas en una tabla.
 +
Las cadenas individuales pueden ser eliminados o borrados con {{ic|-F}} y {{ic|-X}} seguidas de un argumento {{ic|[chain]}}.
  
 
=== Archivo de configuración ===
 
=== Archivo de configuración ===
Line 269: Line 282:
  
 
== Véase también ==
 
== Véase también ==
 
+
[[wikipedia:es:iptables]]
{{wikipedia (Español)|iptables}}
+
* [[Port knocking]]
* [[Simple Stateful Firewall]]
+
 
* [http://www.netfilter.org/projects/iptables/index.html Sitio web oficial de iptables]
 
* [http://www.netfilter.org/projects/iptables/index.html Sitio web oficial de iptables]
 
* [http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html Tutorial de iptables 1.2.2] por Oskar Andreasson
 
* [http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html Tutorial de iptables 1.2.2] por Oskar Andreasson
 
* [http://wiki.debian.org/iptables iptables Debian] Wiki de Debian
 
* [http://wiki.debian.org/iptables iptables Debian] Wiki de Debian

Latest revision as of 15:55, 9 April 2016

Iptables es un poderoso firewall integrado 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.

nftables está programada para ser liberada con el kernel de Linux 3.13, y vendrá a sustituir definitivamente iptables como la principal utilidad de cortafuegos de Linux. Por ahora, un howto está disponible aquí.

Instalación

Todos los kernels de serie de Arch Linux son compatibles con iptables. Solo necesita instalar las herramientas en el espacio de usuario, que son proporcionadas por el paquete iptables presente en los repositorios oficiales.

Conceptos básicos

Tablas

iptables cuenta con cinco tablas, que son zonas en las que una cadena de reglas se puede aplicar:

  1. raw filtra los paquetes antes que cualquier otra tabla. Se utiliza principalmente para configurar exenciones de seguimiento de conexiones en combinación con el target NOTRACK.
  2. filter es la tabla por defecto (si no se pasa la opción -t).
  3. nat se utiliza para la yraducción de dirección de red (por ejemplo, el redirección de puertos). Debido a las limitaciones en iptables, el filtrado no se debe hacer aquí.
  4. mangle se utiliza para la alteración de los paquetes de red especializados (véase Mangles packet).
  5. security se utiliza para reglas de conexión de red Mandatory Access Control.

Cadenas

Las tablas contienen cadenas, que son listas de reglas que ordenan los paquete de red. Por defecto, la tabla filter contiene tres cadenas integradas: INPUT, OUTPUT y FORWARD.

  1. Todo el tráfico entrante, dirigido a la máquina, se hace pasar a través de la cadena INPUT.
  2. Todo el tráfico saliente, generado localmente, pasa a través de la cadena OUTPUT
  3. Todo el tráfico enrutado, que no se ha suministrado localmente, pasa a través de la cadena FORWARD.

Véase man 8 iptables para obtener una descripción de las cadenas integradas en otras tablas.

El usuario puede definir las reglas de las cadenas para hacerlas más eficientes.

Las cadenas compiladas tienen un target predefinido, que se utiliza si no hay reglas definidas. Ni las cadenas compiladas ni las definidas por el usuario pueden ser un target predefinido.

Reglas

El filtrado de los paquetes de red se basa en rules -reglas-, que se especifican por diversos matches -«coincidencias»- (condiciones que el paquete debe satisfacer para que la regla se puede aplicar), y un target -«objetivo» (acción a tomar cuando el paquete coincide con la condición plenamente). Si bien las condiciones individuales suelen ser muy simples, la especificación de la regla completa puede ser muy compleja.

Los targets se especifican mediante la opción -j o --jump. Los targets pueden ser tanto las cadenas definidas por el usuario, como uno de los targets integrados especiales, o una extensión de target. Los targets integrados son ACCEPT, DROP, QUEUE y RETURN; las extensiones de target son, por ejemplo, REJECT y LOG. Si el target es un target integrado, el destino del paquete es decidido inmediatamente y el procesamiento del paquete red en la tabla actual se detiene. Si el target es una cadena definida por el usuario y el paquete supera con éxito esta segunda cadena, se moverá a la siguiente regla de la cadena inicial. Las extensiones de target pueden ser tanto terminating (como los targets integrados) como non-terminating (como las cadenas especificadas por el usuario), Véase man 8 iptables-extensions para obtener más detalles

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 órdenes

Mostrar las reglas vigentes

Puede comprobar el ruleset1 en uso y el número de paquetes de red que ha 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. Nada está bloqueado.

Para mostrar los números de línea cuando se listan reglas, añada --line-numbers a esa entrada. Esto es útil cuando se eliminan y añaden reglas individuales.

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

Modificar las reglas

Las reglas pueden ser añadidas o bien como un apéndice a las reglas o a las cadenas, o insertarlas en una específica posición en la cadena. Exploraremos ambos métodos.

Primero de nada, nuestro equipo no es un router (salvo que, por supuesto, lo sea). Cambiaremos la política, por defecto, en la cadena FORWARD, de ACCEPT a DROP.

# iptables -P FORWARD DROP
Advertencia: El resto de esta sección está destinada a enseñar la sintaxis y los conceptos que se esconden detrás de las reglas de iptables. No tiene la pretensión de enseñar cómo proteger los servidores. Para mejorar la seguridad de su sistema, consulte Simple stateful firewall para una configuración de iptables mínimamente segura y Security para proteger Arch Linux en general.

El servicio LAN de sincronización de Dropbox tiene la característica de transmitir paquetes de red cada 30 segundos a todos los equipos que estén en su área inalámbrica. Si estamos en una zona LAN con clientes de Dropbox y no usamos esta característica, entonces podríamos quererla para rechazar los paquetes.

# iptables -A INPUT -p tcp --dport 17500 -j REJECT --reject-with icmp-port-unreachable
# iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:17500 reject-with icmp-port-unreachable

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Nota: Utilizamos REJECT en lugar de DROP aquí, porque RFC 1122 3.3.8 requiere que los hosts devuelvan los errores ICMP siempre que sea posible, en vez de dejar caer los paquetes de red. En realidad, lo mejor es REJECT para los paquetes de red del hosts que sepan acerca de la existencia de su servidor, y DROP para los paquetes de red del hosts que no sepan siquiera que existe el servidor.

Ahora, supongamos que decidimos utilizar Dropbox e instalarlo en nuestro ordenador. También queremos la sincronización LAN, pero solo con una IP en particular en nuestra red. Así que debemos utilizar -R para sustituir nuestra antigua regla. Donde 10.0.0.85 es nuestra otra IP:

# iptables -R INPUT 1 -p tcp --dport 17500 ! -s 10.0.0.85 -j REJECT --reject-with icmp-port-unreachable
# iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 REJECT     tcp  --  *      *      !10.0.0.85            0.0.0.0/0            tcp dpt:17500 reject-with icmp-port-unreachable

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Hemos reemplazado nuestra regla original con otra que nos permite usar 10.0.0.85 para acceder al puerto 17500 de nuestro equipo. Pero ahora nos damos cuenta de que este no es escalable. Si un usuario amigable de Dropbox está intentando acceder al puerto 17500 de nuestro dispositivo, se debe permitir acceder de inmediato, sin comprobación frente a cualquier regla de firewall que esté detrás.

Así que escribimos una nueva regla para permitir que nuestro usuario de confianza acceda inmediatamente. Utilizaremos -I para insertar la nueva regla antes de la antigua:

# iptables -I INPUT 1 -p tcp --dport 17500 -s 10.0.0.85 -j ACCEPT -m comment --comment "Friendly Dropbox"
# iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     tcp  --  *      *       10.0.0.85            0.0.0.0/0            tcp dpt:17500 /* Friendly Dropbox */
2        0     0 REJECT     tcp  --  *      *      !10.0.0.85            0.0.0.0/0            tcp dpt:17500 reject-with icmp-port-unreachable

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination    

Y reemplazar nuestra segunda regla con otra que rechace todo lo demás que entre al puerto 17500:

# iptables -R INPUT 2 -p tcp --dport 17500 -j REJECT --reject-with icmp-port-unreachable 

La lista de nuestra regla final ahora se vería así:

# iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     tcp  --  *      *       10.0.0.85            0.0.0.0/0            tcp dpt:17500 /* Friendly Dropbox */
2        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:17500 reject-with icmp-port-unreachable

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Restablecer las reglas

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

# iptables -F
# iptables -X
# iptables -t nat -F
# iptables -t nat -X
# iptables -t mangle -F
# iptables -t mangle -X
# iptables -t raw -F
# iptables -t raw -X
# iptables -t security -F
# iptables -t security -X
# iptables -P INPUT ACCEPT
# iptables -P FORWARD ACCEPT
# iptables -P OUTPUT ACCEPT

La orden -F sin argumentos vuelca todas las cadenas en su tabla actual. Del mismo modo, -X elimina todos las cadenas vacías no predeterminadas en una tabla. Las cadenas individuales pueden ser eliminados o borrados con -F y -X seguidas de un argumento [chain].

Archivo de configuración

Las reglas iptables son, por defecto, almacenadas en /etc/iptables/iptables.rules. Este archivo es leído por iptables.service:

# systemctl enable iptables.service
# systemctl start iptables.service

Las reglas iptables para ipv6 son, por defecto, almacenadas en el archivo /etc/iptables/ip6tables.rules, el cual es leido por ip6tables.service. Puede iniciarlo de la misma manera que el anterior.

Después de añadir las reglas a través de línea de órdenes, el archivo de configuración no se cambia automáticamente, tiene que guardarlo de forma manual:

# iptables-save > /etc/iptables/iptables.rules

Si modifica el archivo de configuración de forma manual, tiene que volver a cargarlo:

# systemctl reload iptables

Guías

Registro

El target LOG se puede utilizar para registrar los paquetes de red que satisfacen una regla. A diferencia de otros targets, como ACCEPT o DROP, el paquete de red continuará moviéndose a través de la cadena después de alcanzar un target LOG. Esto significa que, para activar el registro de todos los paquetes de red 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.

Cree la cadena con:

# iptables -N logdrop

Después, defínala:

## /etc/iptables/iptables.rules

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

... other user defined chains ..

## 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 registra todos los paquetes de red que pasan a través de ella. Los primeros 10 paquetes serán registrados, y de ahí en adelante quedarán registrados únicamente 5 paquetes por minuto. El «limit burst» es restaurado a uno cada vez que la «tasa límite» no se supera.

syslog-ng

Asumiendo 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); };

a

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

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

Si quiere que el registro de iptables se vuelque en un archivo distinto de /var/log/iptables.log, basta con cambiar el valor de destino de d_iptables (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

wikipedia:es:iptables