Cómo incluir todos los archivos de un directorio en el script de shell (/etc/init.d/iptables en este caso)

Cómo incluir todos los archivos de un directorio en el script de shell (/etc/init.d/iptables en este caso)

Tengo un /etc/init.d/iptables start|stop|restartscript en diferentes servidores de Ubuntu (que es un script de shell normal)

Para cada nuevo servicio tengo que editar e insertar una línea para abrir un puerto. Esto lleva a muchas versiones diferentes del script init.d en diferentes máquinas.

¿Es posible incluir automáticamente, digamos, todos los archivos /etc/iptables/include.d/?

El objetivo es que sólo debería haber una línea en elcomenzarfunción de /etc/init.d/iptables como

include /etc/iptables/include.d/*

Y después de un archivo adicional en /etc/iptables/include.d/simplemente diría

/etc/init.d/iptables restart

Editar:Como señaló Saurabh, esto puede generar problemas cuando los comandos necesitan un orden determinado. Una configuración avanzada podría tener diferentes directorios como:

/etc/iptables/include01.d/
/etc/iptables/include02.d/
/etc/iptables/include03.d/

e incluyéndolos así:

    incluir /etc/iptables/include01.d/*
    ... tal vez algún código vaya aquí en el archivo principal...
    incluir /etc/iptables/include02.d/*
    incluir /etc/iptables/include03.d/*

Respuesta1

Agregue la siguiente línea a su script init.d.

run-parts --report /etc/iptables/include.d

Ejecutará todo lo que esté en el directorio como un script de shell (debe ser ejecutable).

Si solo deseas ejecutar archivos que terminen en .port, puedes usar algo como:

run-parts --regex '\.port$' /etc/iptables/include.d/

Si desea asegurarse de que el orden sea correcto, puede nombrar los archivos:

10_web.port
20_ssh.port
etc..

Respuesta2

for f in /etc/iptables/include.d/*
 . $f
done

note el espacio entre el punto y %f

Saurabh tiene razón: esto no funcionará necesariamente como lo desea, pero use alguna convención de nomenclatura, por ejemplo, 10-xxx, 20-yyy, etc., y podría ser manejable.

Respuesta3

Puedes definir una función simple en bash:

function include() {
    for FILE in $( find "$1" -type f -print | sort )
    do
        source $FILE
    done
}

y luego:

include some_dir/*

o incluso:

include some_dir/*.conf

Respuesta4

No creo que puedas incluir archivos en la configuración de iptables. La elección tiene sentido ya que las reglas del firewall dependen en gran medida del orden en que están escritas. Si sólo incluimos archivos en la carpeta, iptables no sabrá qué reglas poner primero y cuáles después.

información relacionada