Skip to content

Instantly share code, notes, and snippets.

@javierav
Last active February 19, 2024 11:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save javierav/18e81449ea68b278481cca6ac24dc5cd to your computer and use it in GitHub Desktop.
Save javierav/18e81449ea68b278481cca6ac24dc5cd to your computer and use it in GitHub Desktop.
IPTables

IPTables

Estructura

Table > Chain > Rule

La primera regla que coincida es la que se aplica.

Cadenas

  • PREROUTING - para paquetes que llegan a la interfaz de red
  • INPUT - para paquetes entrantes justo antes de enviarse al proceso local que los gestiona
  • FORWARD - para paquetes que pasan a través del servidor
  • OUTPUT para paquetes que salen de los procesos locales hacia fuera
  • POSTROUTING - para paquetes que salen de la interfaz de red

IPTABLES drawio

Tablas con las cadenas por defecto

filter (default)

Esta tabla se encarga del filtrado de paquetes.

  • INPUT - para paquetes que llegan al servidor
  • OUTPUT - para paquetes que salen del servidor
  • FORWARD - para paquetes que pasan a través del servidor

nat

Esta tabla se encarga de la traducción de direcciones.

  • PREROUTING - permite alterar paquetes antes de que sean enrutados, como cambiar la dirección IP de destino (destination NAT)
  • POSTROUTING - permite alterar paquetes antes de salir del servidor, por ejemplo cambiar la dirección IP de origen (source NAT)
  • OUTPUT - NAT para paquetes generados en el propio firewall

mangle

Esta tabla permite alterar paquetes especiales.

  • PREROUTING
  • INPUT
  • FORWARD
  • OUTPUT
  • POSTROUTING

raw

  • PREROUTING
  • OUTPUT

Objetivos (targets)

  • ACCEPT - acepta el paquete
  • DROP - rechaza el paquete sin un motivo
  • REJECT - rechaza el paquete con "destination host unreacheable"
  • RETURN - continua la ejecución por la cadena superior o si es la última, por la acción por defecto.
  • Nombre de la cadena creada por nosotros en la misma tabla

Comandos

  • -A, --append chain rule-specification: Añade una regla al final de la cadena seleccionada.
  • -I, --insert chain [rulenum] rule-specification: Añade la regla al principio de la cadena o en la posición indicada.
  • -N, --new-chain chain: Crea una nueva cadena
  • -P, --policy chain target: Define la política por defecto de una cadena si no encuentra una regla que coincida.

Parámetros para definir una regla

  • [!] -p, --protocol protocol: Especifica el protocolo. Opciones: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh, all. Por defecto es all. Se puede negar con ! delante del protocolo.
  • [!] -s, --source address[/mask][,...]: Especifica la IP de origen.
  • -j, --jump target: Especifica el objetivo de la regla. Puede ser una cadena definida por el usuario o uno de los objetivos especiales. La regla continúa su ejecución en la cadena de origen después de finalizar en la de destino.
  • -g, --goto chain: Lo mismo que jump pero la ejecución no vuelve a la cadena de origen.
  • [!] -i, --in-interface name: Permite especificar la interfaz de red de entrada.
  • [!] -sport -source-port port: Especifica el puerto de origen.
  • [!] -dport -destination-port port: Especifica el puerto de salida.

Comandos útiles

Resetear el firewall

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

Configurar la política por defecto de una cadena

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Listar las cadenas existentes en una tabla

$ iptables -t filter -S

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

Podemos omitir la opción -t dado que la tabla por defecto es la filter.

Reglas para trabajar con Docker

Bloquear el puerto 80 expuesto por un contenedor:

iptables -I DOCKER-USER -i eth0 -p tcp -m tcp --dport 80 -j DROP

Uso con Docker

https://gist.github.com/x-yuri/abf90a18895c62f8d4c9e4c0f7a5c188

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment