iptables: Rule finden bzw. Duplicates verhindern

06/02/2009 - 18:20 von Bernd Hohmann | Report spam
Moin,

als kürzeste Variante einer Port-Redirection für alle lokalen IPs und
Schnittstellen habe ich das herausgefunden:

iptables -t nat -A PREROUTING -p tcp \

Das hab ich jetzt mal ins Startscript einer Applikation gepackt. Problem
ist, dass zum Testen das Script auch hàndisch aufgerufen werden kann,
er dann mehrfach über diese Zeile stolpert und die Rule dann auch
mehrfach eintràgt.

a) macht es Sinn, diesen Mehrfacheintrag zu vermeiden

b) wenn ja, wie?

man iptables war wenig segensreich (ausser --delete, aber was wàre im
obigen Beispiel die "rule-specification"?

Bernd

Well, there's egg and bacon; egg sausage and bacon; egg and
nospam@spamonly.de ; egg bacon and spam; egg bacon sausage
and kuckuck@spamonly.net ; spam bacon sausage and spam;spam
egg spam spam bacon and nospam@nixwill.de ; spam sausage
 

Lesen sie die antworten

#1 Henry Trommer
06/02/2009 - 20:56 | Warnen spam
Bernd Hohmann wrote:

als kürzeste Variante einer Port-Redirection für alle lokalen IPs und
Schnittstellen habe ich das herausgefunden:

iptables -t nat -A PREROUTING -p tcp \

Das hab ich jetzt mal ins Startscript einer Applikation gepackt. Problem
ist, dass zum Testen das Script auch hàndisch aufgerufen werden kann,
er dann mehrfach über diese Zeile stolpert und die Rule dann auch
mehrfach eintràgt.

a) macht es Sinn, diesen Mehrfacheintrag zu vermeiden



Es sollte jedenfalls keine negativen Auswirkungen haben...

b) wenn ja, wie?



Da gibt es mehrere Möglichkeiten. Du könntest bspw. Deinem Script
beibringen, sich zu merken, ob es die Regel schonmal gesetzt hat (einfach
ein File irgendwo anlegen und dafür sorgen dass es nach dem Neustart des
Systems nicht mehr da ist...).

Du kannst aber auch für Deine Regel eine eigene Chain (iptables -t nat -N
$chain) erstellen und die Pakete dann durch diese Chain leiten (iptables -t
nat -A PREROUTING [...] -j $CHAIN).

Das machst Du beim Systemstart (ggf. seperates Initscript) genau 1x - oder
Du parst die Ausgabe von iptables -t nat -L PREROUTING dahingehend, ob die
Chain schon existiert und nur falls dem nicht so ist, machst Du obiges.

Dein Script kann nun beim Start überprüfen, ob schon was in der Chain drin
ist (iptables -t nat -L $chain entsprechend parsen) und nur falls die Chain
noch leer ist, legt es die Regel an. Beim Beenden der Applikation leert das
Script dann die Chain wieder (iptables -t nat -F $chain).

MfG, Henry

Ähnliche fragen