Diferencia entre revisiones de «Iptables»

De Guifi.net - Wiki Hispano

m (1 revisión: Segunda columna)
m (13 revisiones: Artículos técnicos)
 
(No se muestran 11 ediciones intermedias realizadas por 4 usuarios)
Línea 11: Línea 11:
 
Para optimizar las comunicaciones en red se puede utilizar junto con [[Quality of Service]] (QoS) con este mismo software, de manera que se reserven anchos de banda determinados según la prioridad de las aplicaciones.
 
Para optimizar las comunicaciones en red se puede utilizar junto con [[Quality of Service]] (QoS) con este mismo software, de manera que se reserven anchos de banda determinados según la prioridad de las aplicaciones.
  
==Modo de empleo==
+
== Modo de empleo ==
 
La estructura general de una regla iptables es la que sigue:
 
La estructura general de una regla iptables es la que sigue:
  
Línea 44: Línea 44:
 
El criterio, nos va a determinar, la dirección ip o red de origen (-s) o de destino (-d), el puerto origen (-sport) o destino (-dport) o bien el protocolo (-p) o bien la interfaz (-i) al que se va aplicar la regla. Estas opciones (-s,-d,-i,-p,-sport-dport), y algunas más, que encontraréis en el man no son excluyentes entre sí.
 
El criterio, nos va a determinar, la dirección ip o red de origen (-s) o de destino (-d), el puerto origen (-sport) o destino (-dport) o bien el protocolo (-p) o bien la interfaz (-i) al que se va aplicar la regla. Estas opciones (-s,-d,-i,-p,-sport-dport), y algunas más, que encontraréis en el man no son excluyentes entre sí.
  
===-j [acción]===
+
=== -j [acción] ===
Nos va a decir exactamente que hacer con el paquete. Las opciones básicas son: ACCEPT: aceptar el paquete. REJECT: rechazar el paquete enviando un paquete de conexión no permitida, DROP: rechazar el paquete sin más. REDIRECT: redireccionar el paquete. LOG: logear el paquete.
+
Nos va a decir exactamente que hacer con el paquete. Las opciones básicas son:
 +
*ACCEPT: aceptar el paquete
 +
*REJECT: rechazar el paquete enviando un paquete de conexión no permitida
 +
*DROP: rechazar el paquete sin más
 +
*REDIRECT: redireccionar el paquete
 +
*LOG: loguear el paquete.
  
Ejemplos:
+
== Ejemplos ==
 +
*redirección de los paquetes que vienen al puerto 80, por la interfaz eth0, al puerto del [[squid]]. También se puede redirigir a una dirección IP:
  
 
  iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
 
  iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
  
se redirige los paquetes que vienen al puerto 80, por la interfaz eth0, al puerto del [[squid]]. También se puede redirigir a una dirección IP:
+
*redireccion para el correo corporativo de la junta de extremadura
  
  1. redireccion para el correo corporativo de la junta de extremadura
+
  /sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to-destination 62.175.249.2:25
 
+
  iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 110 -j DNAT --to-destination 62.175.249.2 /sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to-destination 62.175.249.2
+
  
 
*cerrar puerto de entrada del 5900 del vnc, vamos el primero de vnc (si se usa el display 0).
 
*cerrar puerto de entrada del 5900 del vnc, vamos el primero de vnc (si se usa el display 0).
Línea 65: Línea 69:
 
  iptables -A OUTPUT -p tcp --dport 22 -j DROP
 
  iptables -A OUTPUT -p tcp --dport 22 -j DROP
  
*puerto 22 esté abierto para mi red y cerrado para el resto? Pues dos reglas, en este orden (aunque puede haber otras entre ellas)
+
*puerto 22 ([[SSH]]) esté abierto para mi red y cerrado para el resto? Pues dos reglas, en este orden (aunque puede haber otras entre ellas)
  
 
  iptables -A INPUT -s 172.15.27.0/24 -p tcp --dport 22 -j ACCEPT
 
  iptables -A INPUT -s 172.15.27.0/24 -p tcp --dport 22 -j ACCEPT
 
  iptables -A INPUT -p tcp --dport 22 -j DROP
 
  iptables -A INPUT -p tcp --dport 22 -j DROP
 +
 +
*puerto 25 (correo [[SMTP]]) esté abierto sólo para unas IPs:
 +
<pre>
 +
iptables -N reglasmtp
 +
iptables -A reglasmtp --src 10.0.0.0/8 -j ACCEPT
 +
iptables -A reglasmtp --src 46.105.170.30 -j ACCEPT
 +
iptables -A reglasmtp -j DROP
 +
iptables -I INPUT -m tcp -p tcp --dport 25 -j reglasmtp
 +
</pre>
 +
 +
*cerrar puerto 22 para una máquina en concreto:
 +
iptables -A INPUT -s 80.83.157.42 -p tcp --dport 22 -j DROP
  
 
*Las políticas por defecto se ponen, por ejemplo así:
 
*Las políticas por defecto se ponen, por ejemplo así:
Línea 97: Línea 113:
 
  iptables -t nat -D PREROUTING 2
 
  iptables -t nat -D PREROUTING 2
  
Para que las reglas estén activas siempre que se encienda el ordenador, lo mejor es meterlas en un script #!/bin/sh en /etc/init.d y luego hacer una serie de enlaces en los directorios de los niveles de ejecución 2 al 5(/etc/rcx.d).
+
== Activar reglas al inicio ==
 +
Para que las reglas estén activas siempre que se encienda el ordenador, lo mejor es meterlas en un script <code>#!/bin/sh</code> en <code>/etc/init.d</code> y luego hacer una serie de enlaces en los directorios de los niveles de ejecución 2 al 5 (<code>/etc/rcx.d</code>).
  
 
==Enlaces externos==
 
==Enlaces externos==
 
*[http://www.pello.info/filez/IPTABLES_en_21_segundos.html IPTables en 21 segundos]
 
*[http://www.pello.info/filez/IPTABLES_en_21_segundos.html IPTables en 21 segundos]
 
*[http://www.pello.info/filez/firewall/iptables.html Versión extendida]
 
*[http://www.pello.info/filez/firewall/iptables.html Versión extendida]

Última revisión de 23:35 11 ene 2014

Icono de esbozo

Este artículo necesita desarrollarse más. Ampliándolo ayudarás a mejorar Guifi.net.
Tal vez puedas ayudarte con los wikis catalán, o inglés si tienen una página equivalente.



Descripción, uso

Iptables se usa para configurar, mantener y consultar las tablas de reglas de filtrado de paquetes IP en el kernel de GNU/Linux. Es posible definir diversas tablas, cada una de las cuales contiene conjuntos de reglas que especifican qué hacer con los paquetes que cumplan determinadas condiciones;

Podemos usar iptables para manipular el enrutamiento de paquetes en una red compleja (por ejemplo, una área sanitaria, una red inalámbrica ciudadana,...); los paquetes ip en que se descompone una comunicación, llevan valores escritos como direcciones, protocolos y puertos de origen y destino, que consultamos y variamos en caso necesario para activar determinadas características en la conexión de un equipo.

Funciones implementadas con iptables

Network address translation

Para optimizar las comunicaciones en red se puede utilizar junto con Quality of Service (QoS) con este mismo software, de manera que se reserven anchos de banda determinados según la prioridad de las aplicaciones.

Modo de empleo

La estructura general de una regla iptables es la que sigue:

iptables -t [tabla] -[ALFPDR] [regla] [criterio] -j [acción]

donde:

-t [tabla]

puede ser FILTER, NAT o MANGLE. La tabla habitual (la de filtrado) es FILTER, es también la opción por defecto, por lo que en las reglas de filtrado, podremos evitar poner -t FILTER, lo cual, nos simplificará las reglas, que generalmente serán complicadas.

La tabla NAT nos va a permitir redireccionar paquetes y enmascarar conexiones. En general se va a referir a modificaciones que va a hacer la regla en la conexión.

La tabla MANGLE, como la anterior, permite hacer modificaciones en las conexiones, pero va mucho más allá, por ejemplo puede modificar los flags de un paquete.

-[ALFPDR] [regla]

Cada una de estas opciones (si consultáis el man de iptables hay algunas más pero con estas hay suficientes para un manejo eficiente de iptables) tiene un significado.

Para añadir una regla usaremos -A.

Para listar las reglas que se están aplicando en un momento dado, -L.

Para borrar las reglas que se están aplicando en un momento dado, -F (de flush).

Para establecer la política por defecto, -P. La política por defecto, se refiere a la filosofía con la que vamos a hacer el firewall. En general, tenemos dos posibilidades:

a) Política por defecto “aceptar todo”. En este caso, miro que puertos tengo abiertos en el equipo (con nmap, o netstat -puta | grep LISTEN) y aplico las reglas de filtrado sobre esos puertos, porque un puerto que está cerrado no es peligroso.

b) Política por defecto “denegar todo”. En este caso deniego cualquier conexión y con las reglas de filtrado abro los puertos que me interesan para funcionar. Esta política es mucho mejor desde el punto de vista de la seguridad, pero requiere más experiencia y conocimiento del sistema. Para borrar una regla en particular utilizamos la opción -D. Si lo que queremos es insertar una regla en un orden determinado, usaremos -I. Hay que tener en cuenta que el orden de las reglas es fundamental para el diseño del firewall. Cuando entra un paquete el kernel coge las reglas de iptables que tiene y las va viendo en el orden en que son creadas, si se le puede aplicar alguna de ellas al paquete, en el momento que se aplica una regla, ya no se sigue mirando. Relacionado con la opción anterior está, -R, que sirve para reemplazar una determinada regla por otra.

Las reglas válidas son INPUT (paquete que entra), OUTPUT (paquete que sale) y FORDWARD (paquete que atraviesa).

El criterio, nos va a determinar, la dirección ip o red de origen (-s) o de destino (-d), el puerto origen (-sport) o destino (-dport) o bien el protocolo (-p) o bien la interfaz (-i) al que se va aplicar la regla. Estas opciones (-s,-d,-i,-p,-sport-dport), y algunas más, que encontraréis en el man no son excluyentes entre sí.

-j [acción]

Nos va a decir exactamente que hacer con el paquete. Las opciones básicas son:

  • ACCEPT: aceptar el paquete
  • REJECT: rechazar el paquete enviando un paquete de conexión no permitida
  • DROP: rechazar el paquete sin más
  • REDIRECT: redireccionar el paquete
  • LOG: loguear el paquete.

Ejemplos

  • redirección de los paquetes que vienen al puerto 80, por la interfaz eth0, al puerto del squid. También se puede redirigir a una dirección IP:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
  • redireccion para el correo corporativo de la junta de extremadura
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to-destination 62.175.249.2:25
  • cerrar puerto de entrada del 5900 del vnc, vamos el primero de vnc (si se usa el display 0).
iptables -A INPUT -p tcp --dport 5900 -j DROP
  • cerrar la salida del 22 de ssh:
iptables -A OUTPUT -p tcp --dport 22 -j DROP
  • puerto 22 (SSH) esté abierto para mi red y cerrado para el resto? Pues dos reglas, en este orden (aunque puede haber otras entre ellas)
iptables -A INPUT -s 172.15.27.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
  • puerto 25 (correo SMTP) esté abierto sólo para unas IPs:
iptables -N reglasmtp
iptables -A reglasmtp --src 10.0.0.0/8 -j ACCEPT
iptables -A reglasmtp --src 46.105.170.30 -j ACCEPT
iptables -A reglasmtp -j DROP
iptables -I INPUT -m tcp -p tcp --dport 25 -j reglasmtp
  • cerrar puerto 22 para una máquina en concreto:
iptables -A INPUT -s 80.83.157.42 -p tcp --dport 22 -j DROP
  • Las políticas por defecto se ponen, por ejemplo así:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -t nat -P PREROUTING DROP
iptables -t nat -P POSTROUTING DROP
  • Permitir todas las conexiones locales:
iptables -A INPUT -i lo -j ACCEPT
  • Permitir que yo desde mi ordenador no tenga limitaciones en el ordenador que tiene el firewall.
iptables -A INPUT -s mi_ip -j ACCEPT
  • Crear una ruta para salida a subred (eth0 es por donde sales), convierte un ordenador en un router
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  • listar las reglas de la tabla de NAT, sin nombre DNS, con números de línea para identificar la regla y paginado con less
iptables -t nat -L  -v -n --line-numbers|less
  • borrar la regla número 2 del canal PREROUTING de la tabla NAT
iptables -t nat -D PREROUTING 2

Activar reglas al inicio

Para que las reglas estén activas siempre que se encienda el ordenador, lo mejor es meterlas en un script #!/bin/sh en /etc/init.d y luego hacer una serie de enlaces en los directorios de los niveles de ejecución 2 al 5 (/etc/rcx.d).

Enlaces externos

Herramientas personales