So schließen Sie alle Dateien aus einem Verzeichnis in ein Shell-Skript ein (in diesem Fall /etc/init.d/iptables)

So schließen Sie alle Dateien aus einem Verzeichnis in ein Shell-Skript ein (in diesem Fall /etc/init.d/iptables)

Ich habe ein /etc/init.d/iptables start|stop|restartSkript auf verschiedenen Ubuntu-Servern (das ist ein normales Shell-Skript)

Für jeden neuen Dienst muss ich eine Zeile bearbeiten und einfügen, um einen Port zu öffnen. Dies führt zu vielen verschiedenen Versionen des init.d-Skripts auf verschiedenen Maschinen.

Ist es möglich, beispielsweise alle Dateien automatisch einzuschließen /etc/iptables/include.d/?

Das Ziel ist, dass nur eine Zeile in derStartFunktion von /etc/init.d/iptables wie

include /etc/iptables/include.d/*

Und nach einer zusätzlichen Datei /etc/iptables/include.d/würde ich einfach sagen

/etc/init.d/iptables restart

Bearbeiten:Wie Saurabh anmerkte, kann dies zu Problemen führen, wenn Befehle eine bestimmte Reihenfolge erfordern. Ein erweitertes Setup könnte verschiedene Verzeichnisse haben, wie:

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

und sie wie folgt einbinden:

    include /etc/iptables/include01.d/*
    ... vielleicht gehört hier etwas Code in die Hauptdatei ...
    include /etc/iptables/include02.d/*
    include /etc/iptables/include03.d/*

Antwort1

Fügen Sie Ihrem init.d-Skript die folgende Zeile hinzu.

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

Es wird alles im Verzeichnis als Shell-Skript ausführen (muss ausführbar sein).

Wenn Sie nur Dateien ausführen möchten, die mit .port enden, können Sie etwas wie Folgendes verwenden:

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

Wenn Sie sicherstellen möchten, dass die Reihenfolge richtig ist, können Sie die Dateien wie folgt benennen:

10_web.port
20_ssh.port
etc..

Antwort2

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

Beachten Sie das Leerzeichen zwischen Punkt und %f

Saurabh hat Recht – das wird nicht unbedingt wie beabsichtigt funktionieren, aber verwenden Sie eine Namenskonvention, z. B. 10-xxx, 20-yyy usw., dann könnte es zu bewältigen sein.

Antwort3

Sie können eine einfache Funktion in Bash definieren:

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

und dann:

include some_dir/*

oder auch:

include some_dir/*.conf

Antwort4

Ich glaube nicht, dass Sie Dateien in die iptables-Konfiguration aufnehmen können. Die Wahl ist sinnvoll, da Firewall-Regeln stark von der Reihenfolge abhängen, in der sie geschrieben werden. Wenn wir nur Dateien in Ordner aufnehmen, weiß iptables nicht, welche Regeln zuerst und welche später eingefügt werden sollen.

verwandte Informationen