Iptables beim booten starten [gelöst]

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Benutzeravatar
Heiko M.
Beiträge: 216
Registriert: 17.01.2005 12:31:34
Lizenz eigener Beiträge: MIT Lizenz

Iptables beim booten starten [gelöst]

Beitrag von Heiko M. » 27.09.2006 19:56:52

Hallo,

habe vor kurzem meinen ADSL-Zugang konfiguriert, so dass er beim booten die Verbindung herstellt (läuft mit pppoe). Nun möchte ich gerne ein iptables-script beim booten starten (mittels softlink von /etc/rc0.d/S99rc.iptables usw. zum script), doch da gibt es ein kleines Problem.
Da meine IP dynamisch ist, wird im iptables-script die aktuelle IP abgefragt.

Code: Alles auswählen

# Configuration Options

EXTERNAL_INTERFACE="ppp0"
LOOPBACK_INTERFACE="lo"
#LAN_INTERFACE_1="eth1"


# Get the IP Addresses for the network cards
IPADDR=`/sbin/ifconfig $EXTERNAL_INTERFACE | grep -i "Adresse:" | cut -f2 -d: | cut -f1 -d " "`
Da aber der Verbindungsaufbau etwas länger dauert, bekommt das Script keine IP-Adresse (obwohl es zuletzt gestartet wird) und gibt mir bei folgenden Zeilen im Script eine Fehlermeldung der Form "unknown argument -m try iptables -help", oder so ähnlich aus.

Code: Alles auswählen

iptables -A INPUT -p ALL -d $IPADDR -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p ALL -s $IPADDR -j ACCEPT

Das ist klar, da hier ja Bezug auf die nicht vorhandene IP-Adresse genommen wird. Die Fehler führen dann dazu, dass zunächst keine Verbindung ins Internet möglich ist. Erst nach einem manuellen Ausführen des Scripts funktioniert alles. Das manuelle Ausführen ist aber etwas lästig.
Meine Frage ist nun, kann ich das Script noch später ausführen, bzw. einen Befehl einfügen, der das Script erst später startet? Habe es in /etc/rc0.d usw. an die Stelle S99* verlinkt, das sind doch die, die als letztes ausgeführt werden, oder?

Hoffe ihr konntet mir folgen.

Gruß
Heiko
Zuletzt geändert von Heiko M. am 28.09.2006 16:22:39, insgesamt 1-mal geändert.

fake
Beiträge: 86
Registriert: 10.04.2006 18:19:32

Beitrag von fake » 27.09.2006 20:25:03

Naja du könntest das z.B. mit "at" machen. Damit kannst du angeben das das iptables in 1 min gestartet wird.

http://linux-weblog.de

Benutzeravatar
thorben
Beiträge: 722
Registriert: 14.09.2003 23:23:49

Beitrag von thorben » 27.09.2006 20:25:52

moin,
oder einen sleep befehl reinbauen

gruß
thorben

Benutzeravatar
Heiko M.
Beiträge: 216
Registriert: 17.01.2005 12:31:34
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von Heiko M. » 28.09.2006 08:56:15

Den sleep Befehl hab ich mal eingebaut. Er wartet dann auch brav 40 Sekunden, doch leider bekommt iptables dann immer noch keine IP-Adresse. Wenn ich mir meinen boot.log anschaue, weiß ich leider nicht welcher Dienst für die Internetverbindung verantwortlich ist. Es hat aber den Anschein, dass zu diesem Zeitpunkt noch keine Verbindung steht, obwohl das Script zuletzt ausgeführt wird.

Hier mein boot.log.
http://nopaste.debianforum.de/4215

Mit "at" würde ich es gerne mal testen, habe aber keinen Plan, wie ich "at" in ein Script einfügen kann, welches dann wiederum das iptables-Script startet, da "at" eine Art Konsole startet, welche man mit "Strg"+"d" wieder beenden muss.
Bin etwas ratlos.

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 28.09.2006 09:35:34

At kannst du in etwa so nutzen:

Code: Alles auswählen

 at now+1 min 
/pfad/zu/deinem/skript
STRG+D
Damit sagst du ihm, dass dein Skript in einer Minute starten soll. Sowas aehnliches nutze ich bei mir zu Hause, da die Fritz!DSL leider nach dem Booten noch ne Weile fuer die Synchronisation braucht.

Benutzeravatar
Heiko M.
Beiträge: 216
Registriert: 17.01.2005 12:31:34
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von Heiko M. » 28.09.2006 11:23:08

Hab mal folgendes "Script" verwendet.

Code: Alles auswählen

at now+1min
/etc/init.d/rc.iptables
STRG+D
Danke nepos.

Wenn ich es nun in der konsole teste, dann muss ich immer noch STRG+D drücken, damit es ausgeführt wird.

Code: Alles auswählen

sonne:heiko# /etc/init.d/startfirewall
warning: commands will be executed using /bin/sh
at> <EOT>
job 21 at Thu Sep 28 11:20:00 2006
Starting Firewalling...
iptables: Chain already exists
iptables: Chain already exists
iptables: Chain already exists
iptables: Chain already exists
/etc/init.d/startfirewall: line 3: STRG+D: command not found
Wenn ich STRG+D gedrückt habe, dann führt er das iptables-Script aus (siehe oben ab <EOT>) und teilt mir mit, dass er STRG+D nicht kennt. Hab´s mal mit CTRL+D versucht, hat nichts gebracht.
Wie kann ich diese Tastenkombination im Script benutzen, bzw. "at" mitteilen, dass er seine "Konsole" beendet?

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 28.09.2006 12:00:44

Oehm, das war nur als Beispiel gedacht und beileibe kein Shell-Skript ;)
Wenn du das Skripten willst, musst du das so machen:

Code: Alles auswählen

at -f /dein/skript now + 1 min
Mehr Infos findest du in der Manpage von at.

Benutzeravatar
Heiko M.
Beiträge: 216
Registriert: 17.01.2005 12:31:34
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von Heiko M. » 28.09.2006 13:21:58

Das habe ich ebenfalls ausprobiert. Doch leider löst das mein Problem nicht. Kann es sein, dass beim booten der Befehl ifconfig noch nicht funktionstüchtig ist, oder so was ähnliches?
Denn selbst wenn ich das Script mit "sleep" 2 Minuten warten oder mit "at" erst 2 Minuten später ausführen lasse, bekommt das iptables-Script offensichtlich keine IP-Adresse.

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 28.09.2006 13:32:24

Hm, mir faellt grade ein, gabs da nicht beim pppd ein Verzeichnis (/etc/ppp/ip-up.d/), in dem man Skripten ablegen konnte, wenn die Verbindung aufgebaut ist und die vom pppd ne Reihe von Werten uebergeben bekommen, unter anderem denke ich die IP-Adresse?
Dann wuerde sich der ganze Spass mit at eruebrigen denke ich.

Benutzeravatar
Heiko M.
Beiträge: 216
Registriert: 17.01.2005 12:31:34
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von Heiko M. » 28.09.2006 16:22:05

Danke für den Tipp. Zunächst hat es nicht funktioniert, da vom Script /etc/ppp/ip-up keine IP übergeben wurde. Find ich seltsam. Noch seltsamer ist allerdings, dass es funktioniert, wenn man im Script /etc/ppp/ip-up z.B. folgendes einträgt.

Code: Alles auswählen

echo Adresse=$4 > /var/log/local.ip
Dann wird die IP dauerhaft in /var/log/local.ip gespeichert. Darauf kann man sich mittels

Code: Alles auswählen

IPADDR=`grep -i "Adresse=" /var/log/local.ip | cut -f2 -d=`
im iptables-Script wieder beziehen, welches durch folgenden Eintrag in /etc/ppp/ip-up ausgeführt wird.

Code: Alles auswählen

/etc/ppp/ip-up.d/rc.iptables
Es hat den Anschein, dass die IP nur kurz zur Verfügung steht, denn eine manueller Aufruf des Scripts /etc/ppp/ip-up.d nach dem booten mit folgender Modifikation

Code: Alles auswählen

echo $4
gibt mir nur ´ne leere Zeile aus.
Danke nochmal an alle die mir weitergeholfen bzw. es versucht haben!

Gruß
Heiko

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 28.09.2006 16:42:36

Nein, der Parameter $4 wird dir uebergeben, wenn dein Skript automatisch gestartet wird. Ich glaube, run-parts erledigt das in dem Fall.
Wenn du es manuell startest, fehlen die Parameter natuerlich. Das ganze solltest du aber in der Doku finden, welche Parameter du da mit uebergeben bekommst.

Benutzeravatar
Heiko M.
Beiträge: 216
Registriert: 17.01.2005 12:31:34
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von Heiko M. » 28.09.2006 17:20:07

Habs endlich gerafft! Hat zunächst nicht funktioniert, weil run-parts alles auslässt, was z.B. einen Punkt im Dateinamen hat. Dies war bei mir der Fall. Darufhin habe ich begonnen alles falsch zu machen und bin auf die Idee gekommen im /etc/ppp/ip-up auf mein in /etc/ppp/ip-up.d liegendes Script zu verweisen. Das hat dann letztendlich funktioniert, aber auf eine sehr umständliche Art und Weise (siehe oben).
Besser so:
  • 1. Auszuführendes Script in /etc/ppp/ip-up.d Ablegen (Auf Punkte im Namen usw. achten!)
    2. Eventuell noch die Variablen im Script mit denen ersetzten, welche von /etc/ppp/ip-up übergeben werden
Fertig!

Besten Dank für den netten Hinweis!

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 28.09.2006 19:57:07

Freut mich, dass ich helfen konnte :)

Antworten