Uso básico de IPtables

   Se trata de  un programa de utilidad de espacio de usuario que permite a un administrador de sistema configurar las tablas​ proporcionadas por el cortafuegos del núcleo de un sistema operativo Linux [implementado como diferentes módulos Netfilter (comunidad de desarrolladores de software e ingenieros conocidos principalmente por el framework disponible en el núcleo de Linux que permite interceptar y manipular paquetes de red)] y las cadenas y reglas que almacena. Se utilizan diferentes módulos del núcleo y programas para protocolos diferentes.
  Este programa viene incluido en el núcleo de Linux desde su versión 2.4, por lo que no suele ser necesario instalarlo en ninguna de sus distribuciones.
  Sin embargo, este cortafuegos sólo se puede usar con permisos de administrador (utilizando el comando sudo si no se ha iniciado sesión como administrador). Las tablas ("tables", en inglés) creadas en el núcleo y cargadas por el programa contienen cadenas ("chains", en inglés) de reglas ("rules", en inglés), que definen cómo deben ser tratados los paquetes de datos entrantes y salientes. Los paquetes enviados pasan por una cadena de regla en regla, donde cada regla provoca una acción (conocida por su término en inglés "jump target") o genera un cambio (conocido por su término en inglés "goto chain") a otra cadena.
  Cuando una regla se corresponde con un paquete de datos se producen, principalmente, las siguientes acciones:
  •   ACCEPT: El paquete será aceptado.
  •   DROP: El paquete será descartado.
  •   QUEUE: Mueve el paquete a los procesos de usuario; requiere un intermediario (conocido por su término en inglés  como "queue handler") que reenvíe todos los paquetes a una aplicación.
  •   RETURN: El paquete se envía de nuevo a la cadena anterior en caso de que esta haya sido definida por el usuario. Las cadenas estándar se guían por la directriz ("policy", en inglés) de la cadena (por defecto y sin necesidad de configuración: ACCEPT) y están especificadas, por defecto, en las tablas de filtrado de Iptables, siendo: INPUT (se encarga de paquetes que deben ser entregados al sistema), FORWARD (procesa los paquetes de datos entrantes destinados a ser reenviados) y OUTPUT (cadena de salida que controla el tráfico generado a partir del propio equipo).
 A mayores de la tabla de filtros existe una tabla NAT para la traducción de las direcciones de red y una MANGLE para la manipulación de paquetes.

PARÁMETROS

  Los principales parámetros para gestionar este cortafuegos se pueden dividir en argumentos, condiciones generales y condiciones TCP/UDP.

Argumentos
  Son las órdenes principales que se darán en la regla:
  •   -A (--append): Añade una regla a una cadena.
  •   -D (--delete): Borra una regla de una cadena especificada.
  •   -R (--replace): Sustituye una regla.
  •   -I (--insert): Inserta una regla en lugar de una cadena.
  •   -L (--list): Muestra las reglas que se le pasan como argumento.
  •   -S (--list-rules): Muestra las reglas de una o varias cadenas de modo sencillo. 
  •   -F (--flush): Borra todas las reglas de una cadena.
  •   -Z (--zero): Pone a cero todos los contadores de una cadena.
  •   -N (--new-chain): Permite al usuario crear su propia cadena.
  •   -X (--delete-chain): borra la cadena especificada.
  •   -P (--policy): Explica al núcleo qué hacer con los paquetes que no coincidan con ninguna regla. Las políticas a utilizar son: PREROUTING (tráfico entrante, justo antes de ingresar a la pila de red del núcleo. Las reglas en esta cadena son procesadas antes de tomar cualquier decisión de enrutamiento respecto hacia dónde enviar el paquete), INPUT (tráfico entrante, tras haber sido enrutado y destinado al sistema local), FORWARD [tráfico entrante, después de haber sido enrutado y destinado hacia otro anfitrión (reenviado)], OUTPUT (tráfico saliente originado en el sistema local, inmediatamente después de haber ingresado a la pila de red del núcleo), y POSTROUTING (tráfico saliente originado en el sistema local o reenviado, tras haber sido enrutado y justo antes de ser puesto en el cable).
  •   -E (--rename-chain): Cambia el orden de una cadena.

Condiciones generales


  Se trata de los parámetros relacionados con los elementos propios con los que trabaja un cortafuegos (IPs, dirección MAC, protocolos de red, etc.):
  •   -m (--match): La regla se aplica a un elemento igual al especificado.
  •   --mac-source: La regla se aplica a una dirección MAC de origen.
  •   -n (--numeric): Devuelve las direcciones IP y sus correspondientes puertos sin pasar por un servidor DNS.
  •   -p (--protocol): La regla se aplica a un protocolo.
  •   -s (--src, --source): La regla se aplica a una dirección IP de origen.
  •   -d (--dst, --destination): la regla se aplica a una dirección IP de destino.
  •   -i (--in-interface): La regla de aplica a una interfaz de origen.
  •   -o (--out-interface): La regla se aplica a una interfaz de destino.
  •   -t (--table): La regla se aplica a una tabla especificada.
  •   -v (--verbose): Permite recibir más información sobre las conexiones.

Condiciones TCP/UDP
  Parámetros específicos de red:
  •   -sport (--source-port): Selecciona o excluye puertos de un determinado puerto de origen.
  •   -dport (--destination-port): Selecciona o excluye puertos de un determinado puerto de destino.

USO DE REGLAS

  La sintaxis básica del empleo de IPtables es:
iptables <argumentos> <condiciones básicas> <condiciones TCP/UDP>

  Así, para insertar una regla en la última posición de una cadena se emplearía la sintaxis iptables -A INPUT <condiciones de la regla>; aunque, si se pretende añadir en una posición concreta de la cadena, su sintaxis cambia un poco, siendo iptables -I INPUT <nº de posición> <condiciones de la regla>. Del mismo modo, la sintaxis para eliminar una regla sería iptables -D INPUT <condiciones de la regla>, o bien iptables -D INPUT <nº de posición> (si se conoce la posición de la regla).
 No obstante, se debe tener en cuenta que este programa lee de manera secuencial las cadenas de reglas, es decir, que comienza por la primera y verifica que se cumpla la condición y la ejecuta sin verificar las siguientes. Por este motivo, se debe tener precaución con el orden de las reglas.

Ejemplos prácticos
 Para tener una visión general de las reglas existentes actualmente se utilizará el comando iptables -S.

  Si se quiere  ver el estado del cortafuegos de un modo más detallado, se puede usar el comando iptables -L -n -v.

  Por otra parte, para comprobar el número de posición de las reglas del cortafuegos, se empleará el mismo comando con un parámetro adicional para tal efecto: iptables -L -n -v --line-numbers.


  Para borrar toda la configuración del cortafuegos, es decir, todas las reglas que tenga, el comando es iptables -F.
  Si se pretende permitir ciertas conexiones entrantes, el comando a utilizar sería iptables -A INPUT -i <interfaz> -p <protocolo> --dport <puerto> -m state--state NEW,ESTABLISHED -j ACCEPT.

  Y se puede hacer lo mismo con las conexiones salientes mediante el comando iptables -A OUTPUT -o <interfaz> -p <protocolo> --sport <puerto> -m state --state ESTABLISHED -j ACCEPT.

 Si se quiere prevenir y bloquear ataques de denegación de servicio, el comando a emplear será iptables -A INPUT -p tcp--dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT.
  
  Si se pretende bloquear todo el tráfico entrante, el comando apropiado es iptables -P INPUT DROP (pero eso aislará el equipo de cualquier red interna y/o externa).
  Aunque también se puede bloquear el tráfico de una IP determinada con el comando iptables -A INPUT -p <protocolo> -m iprange --src-range <rango de direcciones IP>, o bien con iptables -A INPUT -s <dirección IP/máscara de red> -j DROP.


  O bien hacer lo mismo bloqueando una dirección MAC determinada mediante el comando iptables -A INPUT -m mac --mac-source <dirección MAC>, o también con iptables -A INPUT -m mac --mac-source <dirección MAC> -j DROP.
  Otra cosa que se puede bloquear son las peticiones ping utilizando el comando iptables -A INPUT -p icmp --icmp-type echo-request -j DROP. 

  También es posible crear una cadena para poder consultar los paquetes rechazados por IPtables. Se empleará el comando iptables -N LOGGING.

MANTENER LAS REGLAS CREADAS

  En este programa, las reglas y cadenas creadas en este cortafuegos durante una sesión sólo se mantienen en esa sesión, es decir, en cuanto se cierra la sesión se desvanecen.
  Sin embargo, es posible guardar y recargar una configuración de reglas en equipos que no estén continuamente encendidos.

Comandos de IPtables
  El primer método para hacer permanente una configuración del cortafuegos consiste en utilizar el comando iptables-save > /etc/iptables/<nombre del archivo>.rules para crear un archivo con dicha configuración, que se podrá recargar y modificar como cualquier archivo de texto.
  Cuando se pretenda recargar la configuración así guardada manualmente, sólo hay que ejecutar el comando iptables-restore < /etc/iptables/<nombre del archivo>.rules. Naturalmente, también es posible crear una secuencia de comandos para que la recarga de esta configuración sea automática.

IPtables-persistent
  Se trata de un paquete para el propio IPtables con el que se pueden mantener las configuraciones creadas para este programa aunque se apague o se reinicie el equipo.
  Para instalarlo sólo hay que seguir los pasos básicos de actualización de lista de paquetes [comando apt update (añadiendo sudo al inicio si no se está en una sesión de administrador)], actualización de los paquetes [comando apt upgrade (añadiendo sudo al inicio si no se está en una sesión de administrador)] e instalación del paquete en cuestión [comando apt-get install iptables-persistent (añadiendo sudo al inicio si no se está en una sesión de administrador)]. Durante la instalación del paquete aparecerá una pantalla en la que explica que se guardará la configuración actual de IPtables y dónde (normalmente en la ruta "etc/iptables", donde se crearán los archivos "rules.v4" y "rules.v6" para guardar reglas de IPv4 e IPv6 respectivamente), sólo hay que pulsar en "Yes".
  Esos archivos pueden modificarse con un editor de texto, como cualquier otro archivo similar en Linux.


  Espero que la presente entrada haya sido interesante para el lector.  De ser así, aguardo que éste la comente y/o la comparta, por favor.

No hay comentarios:

Publicar un comentario

Deje aquí su comentario, si no puede comentar, pruebe a hacerlo desde otro navegador de red u otro equipo.