Inicio wiki
Aula Virtual
 Administración de Sistemas Operativos
Inicio ASO Aula Virtual

Vistas
  •   2. Guia rápida de iptables
De ASO

La tecnología de firewall de Linux ha evolucionado desde sencillos filtros de paquetes lineales hasta los motores actuales de inspección de paquetes de estado. Los núcleos de Linux 2.0 emplean una implementación de reglas de filtrado de paquetes que utilizan tres pilas: INPUT (tráfico de entrada), OUTPUT (tráfico de salida) y FORWARD (paquetes que se reenvían a otro equipo). Los paquetes llegan a la parte superior de las pilas y se filtran a través de las reglas hasta que exista una coincidencia. En este punto, cada paquete se puede aceptar, descartar, rechazar o reenviar. Si el paquete no coincide con ninguna de las reglas, pasa a la directiva predeterminada, que normalmente descarta el paquete.

Aunque la capacidad nativa de firewall de los núcleos de Linux 2.0 era más que adecuada para generar firewalls, en la siguiente versión del núcleo 2.2 apareció Ipchains que incorporó nuevas y eficaces características: permite la definición de nuevas pilas y mejora la administración de las reglas de una pila.

A partir del desarrollo del núcleo 2.3, los programadores de Linux comenzaron a trabajar en iptables (también llamado netfilter). Iptables mejoró las ventajas de administración de conjuntos de reglas al permitir la capacidad de crear y anular asociaciones de conjunto de reglas con sesiones existentes. Con Iptables, el firewall se puede programar para asociar el tráfico devuelto generado a partir de una regla INPUT anterior. El tráfico que entra correctamente en el host puede salir automáticamente del host al ser devuelto, indicando simplemente al firewall que genere dinámicamente una regla de devolución.

Las ventajas de la tecnología de inspección de paquetes de estado (SPI, State Packet Inspection) no se limitan a la eficacia de las reglas. Ipchains no permite diferenciar la “verdadera naturaleza” del tráfico de la red. Por ejemplo, un firewall ipchains programado para permitir el tráfico FTP de salida también tendrá una regla INPUT asociada para permitir la devolución de paquetes. Si un atacante puede fabricar paquetes FTP devueltos, Ipchains permite su entrada. Con SPI no existe ninguna sesión para asociar estos paquetes falsificados y, por tanto, el firewall los rechazaría.

Iptables puede manejar varias tablas, pero las más importantes son:

  • Filter. Es la tabla predeterminada que permite el filtrado de las comunicaciones. La tabla Filter está compuesta por tres pilas:
    • INPUT. Referencia el tráfico de entrada.
    • OUTPUT. Referencia el tráfico de salida.
    • FORWARD. Referencia el tráfico que el router reenvía a otros equipos.
  • NAT. El servicio que permite dar acceso a Internet a una red interna. Esta tabla permite definir el tipo de comunicaciones entre la red externa y las redes internas. La tabla NAT tiene dos pilas:
    • POSTROUTING. Permite establecer las comunicaciones desde la red interna al exterior. Por ejemplo, para hacer que la red interna tenga Internet.
    • PREROUTING. Permite establecer las comunicaciones desde la red externa a la red interna. Por ejemplo, se utiliza para que desde el exterior se tenga acceso a un servidor interno.


Figura 1. Parámetros para especificar las reglas de iptables)

Los comandos básicos de iptables son:

  • iptables –L. Muestra el estado de la tabla predeterminada (filter). Si quiere ver el estado de la tabla NAT ejecute iptables –t nat –L.
  • iptables –A <parámetros> -j <acción>. Permite añadir una regla para que el cortafuegos realice una acción sobre un tráfico determinado.
  • iptables –D <parámetros> -j <acción>. Permite quitar una regla del cortafuegos.
  • iptables –F. Limpia la tabla de cortafuegos. Si quiere limpiar la tabla NAT ejecute iptables –t nat –F.
  • iptables –P <cadena> <acción>. Permite establecer por defecto una acción determinada sobre una pila. Por ejemplo, si quiere que por defecto el router deniegue todo el tráfico de la pila FORWARD ejecute el comando iptables –P FORWARD DROP.


Las acciones que se pueden realizar en la tabla FILTER son:

  • -j ACCEPT. Acepta el tráfico.
  • -j DROP. Elimina el tráfico.
  • -j REJECT. Rechaza el tráfico e informa al equipo de origen.
  • -j LOG –log-prefix “IPTABLES_L”. Registra el tráfico que cumple los criterios en /var/log.


Las acciones que se pueden realizar en la tabla NAT son:

  • -j MASQUERADE. Hace enmascaramiento del tráfico (NAT) de forma que la red interna sale al exterior con la dirección externa del router.
  • -j DNAT --to <ip>. Se utiliza para que desde el exterior se tenga acceso a un servidor que se encuentra en la red interna.


De esta forma puede “jugar” con los parámetros de una determinada regla para poder especificar la acción que se aplica. A continuación puede ver tres reglas, para permitir el tráfico que reenvía el router, que van desde la más general a la más específica:

  • iptables -A FORWARD -j ACCEPT. Permite todo el tráfico.
  • iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT. Permite sólo el tráfico de la red interna 192.168.0.0/24.
  • iptables -A FORWARD -s 192.168.0.0/24 -p TCP –dport 80 -j ACCEPT. Permite sólo el tráfico de la red interna 192.168.0.0/24 en el puerto 80.


Para comprender mejor iptables imagine que tiene un router con tres redes: la externa, la red interna (192.168.1.0/24) y la zona neutra (172.16.0.0/24). Lo que desea hacer es configurar el cortafuegos para que permita el acceso de la red interna al exterior en los puertos web (80/TCP) y DNS (53/UDP). Además, se va a publicar un servidor web interno que se encuentra en la dirección 172.16.0.100.

# Limpiamos la configuración del cortafuegos
iptables -F
iptables -t nat -F

# Indicamos que la red interna tiene acceso al exterior en los 
# puertos http(80/TCP), dns (53/UDP) y todo el tráfico que proviene 
# de conexiones establecidas en los puertos anteriores
iptables -A FORWARD -s 192.168.1.0/24 -p TCP --dport 80 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -p UDP --dport 53 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# Todo lo demás se deniega. Es igual que IPTABLES –P FORWARD DROP
iptables -A FORWARD -s 0.0.0.0/0 -j DROP

# Indicamos que la red interna tiene salida al exterior por NAT. 
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 0.0.0.0/0 -j MASQUERADE
# Permitimos el reenvío de tráfico
echo "1" >/proc/sys/net/ipv4/ip_forward
 
# Redirigmos el tráfico web que entra por la interfaz 
# externa (eth0) al servidor que hay en la zona neutra
iptables -t nat -A PREROUTING -i eth0 –p tcp --dport 80 -j DNAT -- to 172.16.0.100:80

Finalmente, para guardar la configuración del sistema, primero tiene que guardar la configuración del cortafuegos ejecutando el comando:

iptables-save >/etc/sysconfig/iptables

y modificar el fichero /etc/sysctl.conf para establecer la variable net.ipv4.ip_forward=1. También se puede guardar la configuración de iptables ejecutando

service iptables save


Como se ha comentado antes, con el comando iptables –A <parámetros> -j <acción> puede definir la acción que quiere que realice el cortafuegos con un determinado tráfico. En la tabla 1 puede ver los parámetros que se utilizan para especificar el tráfico.



Libro Recomendado

ADMINISTRACION DE SISTEMAS GNU/LINUX.
Ver fichaVer ficha
Comprar libroComprar