Iptables

De doc.ubuntu-es
Saltar a: navegación, buscar
Important.png Uno o más colaboradores están trabajando actualmente en extender esta página. Es posible que, a causa de ello, haya lagunas de contenido, deficiencias de formato o texto en otros idiomas. Por favor, antes de realizar correcciones mayores o reescrituras, contacta con ellos en su página de usuario o en la página de discusión del artículo para poder coordinar la redacción.

El kernel Linux incluye el subsistema Netfilter, que es usado para manipular o decidir el destino del tráfico de red entre o a través de su red. Todas las soluciones firewall Linux modernas utilizan este sistema para el filtrado de paquetes.

El sistema de filtrado de paquetes del núcleo resulta de poca ayuda a los administradores si no se tiene una interfaz de usuario para gestionarlo. Éste es el proposito de Iptables. Cuando un paquete llega a su servidor, éste es gestionado por el subsistema Netfilter para aceptarlo, manipularlo o rechazarlo basándose en las reglas suministradas a éste via iptables. Así, iptables es todo lo que necesita para manejar su cortafuegos si está familiarizado con él, pero existen muchos interfaces de usuario disponibles para simplificar esta tarea., por ejemplo Firestarter

Contenido

Comandos básicos

Escribiendo

sudo iptables -L

se listan las actuales reglas en iptables. Si acabas de instalar un servidor, aun no tendrás normas, así que deberías ver:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination


Opciones básicas de Iptables

Aquí se muestra una explicación de algunas de las opciones básicas que verás en éste artículo. No te preocupes si no entiendes todo ahora, pero recuerda vovler y mirar ésta lista si encuentras nuevas opciones después

  • -A - Append this rule to a rule chain. Valid chains for what we're doing are INPUT, FORWARD and OUTPUT, but we mostly deal with INPUT in this tutorial, which aecta solo al tráfico entrante.
  • -L - Lista las reglas de filtrado actuales.
  • -m state - Permite a las reglas de filtrado coincidir basándose en el estado de conexión. Permite el uso de la opción --state.
  • --state - Define la lista de estados de una regla con los que coincidir. Los estados válidos son:
    • NEW - La conexión no ha sido vista aún.
    • RELATED - La conexión es nueva, pero está relacionada con otra conexión ya permitida.
    • ESTABLISHED - La conexión ya ha sido establecida.
    • INVALID - El tráfico no puede ser identificado por alguna razón.
  • -m limit - Requiere que la regla coincida solo un número limitado de veces. Permite el uso de la opción --limit. Muy útil para limitar las reglas de logging.
    • --limit - el máximo de concordancia, dada como un número seguido de "/second", "/minute", "/hour", o "/day" dependiendo de cuan a menudo quieras que la regla coincida. Si esta opción no se utiliza y se usa -m limit, por defecto será "3/hour".
  • -p - El protocolo de conexión usado.
  • --dport - El puerto(s) de destino requerido para esta regla. Se puede dar un puerto único o un rango, como inicio:fin que se ajustarán a todos los puertos desde el principio hasta el final, inclusive.
  • -j - Ir al objetivo especificado. Por defecto, iptables permite cuatro objetivos o targets:
    • ACCEPT - Aceptar el paquete y parar el procesamiento de las reglas de esta cadena.
    • REJECT - Rechazar el paquete y notificar al remitente que lo hicimos, y dejará de procesar reglas en esta cadena.
    • DROP - Omitir el paquete, y dejar de procesamiento de las reglas de esta cadena.
    • LOG - Acceder el paquete, y seguir procesando más reglas en esta cadena. Permite el uso de la opción -- log-prefix y -- log-level.
  • --log-prefix - Cuando accedamos, poner este texto antes del mensaje de log. Utiliza comillas dobles en todo el texto a utilizar.
  • --log-level - Acceda utilizando el nivel especificado syslog.7 es una buena elección a menos que necesites específicamente algo más. .
  • -i - Solo coincidir si el paquete viene del interfaz espeficicado.
  • -I - Inserta una regla. Toma dos opciones, la cadena donde insertar la regla y el número de regla que debería ser.
    • -I INPUT 5 insertará la regla en la cadena INPUT y hará de ella la quinta regla en la lista.
  • -v - Muestra más información en la salida. Útil por si tienes reglas que parecen similares sin usar -v.


Enmascaramiento IP

El propósito del Enmascaramiento IP (IP Masquerading) es permitir que máquinas con direcciones IP privadas no enrutables de una red accedan a Internet a través de la máquina que realiza el enmascaramiento. Se debe manipular el tráfico que va de su red privada con destino a Internet, para que las respuestas puedan encaminarse adecuadamente a la máquina que hizo la petición. Para ello, el núcleo debe modificar la dirección IP fuente de cada paquete de forma que las respuestas se encaminen hacia ella, en lugar de encaminarla hacia la dirección IP privada que hizo la petición, lo que resulta imposible en Internet. Linux usa Seguimiento de Conexión (Connection Tracking, conntrack) para llevar la cuenta de qué conexiones pertenencen a qué máquinas, y reencaminar adecuadamente cada paquete de retorno. El tráfico que sale de su red privada es, por consiguiente, «enmascarada» dando la sensación de que se ha originado en la máquina Ubuntu que hace de pasarela. Este proceso se denomina Compartición de Conexiones de Internet (Internet Connection Sharing) en la documentación de Microsoft.

Esto se puede conseguir con una sóla regla de iptables, que puede variar ligeramente en función de la configuración de su red:

sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE

La orden anterior supone que su espacio de direcciones privadas es 192.168.0.0/16 y que el dispositivo que conecta con Internet es ppp0. La sintaxis se descompone de la siguiente forma:

  • -t nat -- la regla es para ir a la tabla nat
  • -A POSTROUTING -- la regla es para añadir (-A) a la cadena POSTROUTING
  • -s 192.168.0.0/16 -- la regla se aplica al tráfico originado desde la dirección específica
  • -o ppp0 -- la regla se aplica al tráfico programado para ser enrutado a través del dispositivo de red especificado
  • -j MASQUERADE -- el tráfico que se ajuste a esta regla «saltará» («jump», -j) al destino MASQUERADE para ser manipulado como se describió anteriormente

Cada cadena en la tabla de filtrado (la tabla predeterminada, y donde ocurren la mayoría de los filtrados de paquetes) tiene una política predeterminada de ACCEPT, pero si está creando un firewall además de un dispositivo de pasarela, debería establecer las políticas a DROP o REJECT, en cuyo caso necesitará habilitar su tráfico enmascarado a través de la cadena FORWARD para que la regla anterior funcione:

sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.0/16 -m state --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT

Las órdenes anteriores permitirán todas las conexiones que vayan de su red local a Internet, así como el retorno a la máquina que las inició de todo el tráfico relacionado con esas conexiones.

Herramientas

Hay muchas herramientas disponibles que pueden ayudarle a construir un completo firewall sin necesidad de conocer iptables en profundidad. Para los que se inclinan por una solución gráfica, Firestarter es muy popular y fácil de usar, y fwbuilder es muy potente y tiene un aspecto familiar para aquellos administradores que hayan usado herramientas comerciales de firewall como Checkpoint FireWall-1. Si prefiere una utilidad de línea de órdenes con archivos de configuración en texto plano, Shorewall es una solución muy potente para ayudarle a configurar un firewall avanzado para cualquier red. Si su red es relativamente simple, o no dispone de red, ipkungfu le proporcionará un firewall funcional con desde el principio sin necesidad de configuración, y le permitirá crear fácilmente un firewall más avanzado editando archivos de configuración sencillos y bien documentados. Otra herramienta interesante es fireflier, diseñado para ser una aplicación firewall de escritorio. Está formada por un servidor (fireflier-server) y una selección de clientes GUI (GTK o QT), y se comporta de manera muy similar a muchas aplicaciones interactivas de firewall para Windows.

Logs

Los registros del firewall son esenciales para reconocer ataques, corregir problemas en las reglas de su firewall, y observar actividades inusuales en su red. Debe incluir reglas de registro en su firewall para poder activarlos, y las reglas de registro deben aparecer antes de cualquier otra regla final aplicable (una regla con un objetivo que decide el destino del paquete, como ACCEPT, DROP o REJECT). Por ejemplo,

sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "

Una petición al puerto 80 desde la máquina local, por tanto, podría generar un registro en dmesg con el siguiente aspecto:

[4304885.870000] NEW_HTTP_CONN: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=58288 DF PROTO=TCP SPT=53981 DPT=80 WINDOW=32767 RES=0x00 SYN URGP=0

El registro anterior también aparecerá en /var/log/messages, /var/log/syslog y /var/log/kern.log. Este comportamiento se puede cambiar editando apropiadamente el archivo /etc/syslog.conf, o instalando y configurando ulogd y utilizando el objetivo ULOG en lugar del LOG. El demonio ulogd es un servidor en espacio de usuario, que escucha las instrucciones de registro que provienen del núcleo y que sean específicamente para firewalls, y puede registrar cualquier archivo que desee, o incluso a una base de datos PostgreSQL o MySQL. Se puede simplificar la interpretación del significado de los registros del firewall usando una herramienta de análisis de registros como fwanalog, fwlogwatch o lire.

Fuentes

Herramientas personales