Problem mit iptables: Falls möglich, Regeln mit bestimmten Syntax bestehen lassen

FreeBSD, Gentoo, openSUSE, CentOS, Ubuntu, Debian
michseel2
Posts: 34
Joined: 2007-07-09 23:00

Problem mit iptables: Falls möglich, Regeln mit bestimmten Syntax bestehen lassen

Post by michseel2 » 2007-08-16 19:00

Hallo,

ich habe mehrere iptables Regeln:

Code: Select all

## "Traffic Counter"
iptables -A INPUT  -i eth0 -d XX.XX.XX.50
iptables -A OUTPUT -o eth0 -s XX.XX.XX.50

iptables -A INPUT  -i eth0 -d XX.XX.XX.51
iptables -A OUTPUT -o eth0 -s XX.XX.XX.51

iptables -A INPUT  -i eth0 -d XX.XX.XX.52
iptables -A OUTPUT -o eth0 -s XX.XX.XX.52

## VMware Server
iptables -A INPUT -i eth0 -s bla1.dyndns.org -d XX.XX.XX.50 -p TCP --dport 8523 -j ACCEPT
iptables -A INPUT -i eth0 -s bla2.dyndns.org -d XX.XX.XX.50 -p TCP --dport 8523 -j ACCEPT

uvm.


Zusätzlich habe ich ein kleines Shellscript, um den Traffic auszugeben:

Code: Select all

#!/bin/sh
echo "Eingehender Traffic: `iptables -nvxL | grep  $1 | awk '{ print $2 }' | head -n 1`"
echo "Ausgehender Traffic: `iptables -nvxL | grep  $1 | awk '{ print $2 }' | tail -n 1`"


Wenn ich "iptables -F" ausführe, werden alle Regeln gelöscht. Nun habe ich 2 Fragen:

-Ist es möglich, alle Regeln außer die des "Traffic Counters" zu löschen?
-Ist es möglich, den "Traffic Counter" auf 0 zurückzusetzen, ohne dass Regeln verändert werden?

Gruß
michseel2

michseel2
Posts: 34
Joined: 2007-07-09 23:00

Re: Problem mit iptables: Falls möglich, Regeln mit bestimmten Syntax bestehen lassen

Post by michseel2 » 2007-08-16 19:36

Hallo,

mir ist ein kleiner Lösungsansatz eingefallen.

Code: Select all

iptables -nvxL INPUT | awk '{ print $3 }'


gibt aus:

s6:/test# iptables -nvxL INPUT | awk '{ print $3 }'
(policy
target
0
0
0
0
0
0
0
DROP
DROP
DROP
ACCEPT
ACCEPT
ACCEPT
DROP
DROP
DROP
ACCEPT
ACCEPT
ACCEPT
DROP
DROP
ACCEPT
0
0
0
0


Als Lösung ist mir eingefallen, nun auszulesen wie viele Zeilen ausgegeben werden falls das möglich ist, in diesem Fall also 28 Zeilen.

Dann könnte ich mit einer while-Schleife prüfen ob Zeile X eine "0" ist, falls ja handelt es sich um eine "Traffic Counter" Regel, falls nein, wird diese Zeile einfach mit:

Code: Select all

iptables -D INPUT X


gelöscht.

Oder ist dies ein eher schlechter / umständlicher Lösungsansatz?

Falls dieser Ansatz möglich ist, bräuchte ich einen Befehl um auszulesen wie viele Zeilen im obigen Zitat ausgegeben wurden.

michseel2
Posts: 34
Joined: 2007-07-09 23:00

Re: Problem mit iptables: Falls möglich, Regeln mit bestimmten Syntax bestehen lassen

Post by michseel2 » 2007-08-16 19:40

Kleiner Denkfehler, in meinem Beispiel müssen es 26 Zeilen sein, da mein Befehl erst ab Zeile 3 ausgeben darf, also die Zeilen "(policy)" und "target" dürfen nicht als Zeile mitgezählt und nicht ausgegeben werden.

hornox
Posts: 139
Joined: 2005-09-22 23:09

Re: Problem mit iptables: Falls möglich, Regeln mit bestimmten Syntax bestehen lassen

Post by hornox » 2007-08-16 19:58

michseel2 wrote:-Ist es möglich, den "Traffic Counter" auf 0 zurückzusetzen, ohne dass Regeln verändert werden?
-Z, --zero [chain]
Zero the packet and byte counters in all chains. It is legal to
specify the -L, --list (list) option as well, to see the coun-
ters immediately before they are cleared. (See above.)

michseel2
Posts: 34
Joined: 2007-07-09 23:00

Re: Problem mit iptables: Falls möglich, Regeln mit bestimmten Syntax bestehen lassen

Post by michseel2 » 2007-08-17 18:18

Nun habe ich etwas bezüglich meinen Problem nur bestimmte Regeln zu löschen hinbekommen.

Code: Select all

#!/bin/bash

ROWCOUNT=`iptables -nvxL INPUT | awk '{ print $3 }' | wc -l`

COUNT=$[$ROWCOUNT - 2]

i=1
z=$COUNT
w=$[$COUNT + 1 ]

while [ $i != $w ];
do
        RULE=`iptables -nvxL INPUT | awk '{ print $3 }' | head -n $i | tail -1`

        if [ "$RULE" != "0" ] && [ "$RULE" != "target" ] && [ "$RULE" != "(policy" ]
        then
                y=$[$i - 2 ]
                echo $RULE $y
                iptables -D INPUT $y
        fi

        i=$[$i + 1]
done


Wenn ich dieses Script starte, wird ausgegeben:

s6:/test# sh test.sh
DROP 38
DROP 39
DROP 40
ACCEPT 41
ACCEPT 42
ACCEPT 43
DROP 44
DROP 45
DROP 46
ACCEPT 47
ACCEPT 48
ACCEPT 49
DROP 50


Das einzigste Problem ist, dass ich das Script 4 mal starten muss dass alle DROP und ACCEPT Regeln weg sind. Ich vermute dass das an den Zeilennummern liegt, also daran, dass die Zeilennummern nicht aktualisiert werden sobald 1 Regel gelöscht ist.

Weiß jemand die Lösung hierfür?