Saltar al contenido

IPtables lista blanca IP dinámica por nombre de host

Solución:

Solución 1:

iptables funciona en direcciones IP, no en nombres de host. Puede usar nombres de host como argumentos, pero se resolverán en el momento en que se ingrese el comando. Hacer una búsqueda de DNS para cada paquete que pasa sería demasiado lento.

Su idea de ajustar las reglas es, por lo tanto, el único enfoque. Esto puede ser en un horario regular, controlado por un programa como systemd o cron, o mejor si puede recibir una notificación cada vez que cambia la dirección IP.

No tiene que almacenar la dirección anterior, simplemente cree una cadena de iptables para su regla y reemplace la regla. Ver el -R opción a iptables. Para tener una regla para reemplazar en la primera verificación, simplemente agregue una regla ficticia para que haya una regla para reemplazar cuando se ejecute la primera verificación.

También puede evitar la cadena adicional y reemplazar una regla en una posición específica en INPUT o FORWARD, pero es mucho más trabajo de mantener, ya que el número de posición cambia cada vez que agrega o elimina reglas.

Solución 2:

La forma en que hago esto es:

  • Ejecute un script cada x minutos desde crontab para actualizar un “ipset”
  • Haga que IPtables use el ipset

Suponiendo que solo tiene 1 dirección IP en este ipset, la siguiente secuencia de comandos sería suficiente:

#!/bin/bash
# Update ipset to let my dynamic IP in

set=whitelist
host=myhost.dynamic.example.com

me=$(basename "$0")

ip=$(dig +short $host)

if [ -z "$ip" ]; then
    logger -t "$me" "IP for '$host' not found"
    exit 1
fi

# make sure the set exists
ipset -exist create $set hash:ip

if ipset -q test $set $host; then
    logger -t "$me" "IP '$ip' already in set '$set'."
else 
    logger -t "$me" "Adding IP '$ip' to set '$set'."
    ipset flush $set
    ipset add $set $host
fi

En crontab Llamo a este script cada 5 minutos:

*/5 * * * * root /usr/local/bin/ipset-update-dyn

En iptables, la regla que usa ipset se ve así:

-A INPUT -p tcp -m set --match-set whitelist src -m state --state NEW -j ACCEPT
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *