PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : keine Variable für Interface bei dynamischen Kernelparametern



pixel
23.10.02, 21:17
Hi@all,

im Firewall-Handbuch bzw. in Filterskript von anderen Usern habe ich gesehen/gelesen das man zum aktivieren/deaktivieren von dynamischen Kernelparametern anstelle des Interfaces ja eine Variable definieren kann um anschliessend lediglich die Funktion einmal aufrufen zu müssen z.B.

erst die Variable $IF definieren:

set IF = ( $EXT $INT )

und anschliessend die Funktion mit:

echo "1" > /proc/sys/net/ipv4/conf/$IF/rp_filter

diesen Parameter für beide Interfaceses definieren. Klingt logisch und gut. Mit entsetzen habe ich jedoch im Web einen Artikel (von einem Autor von IX) gefunden der vermeldet das genau das gar nicht funktionieren würde:

http://www.trapkit.de/linux-sicherheit/erg_anha_redirect

Kann das einer von euch bestätigen oder dementieren?

Gruss Pixel

tomes
23.10.02, 21:55
erst die Variable $IF definieren:

set IF = ( $EXT $INT )

und anschliessend die Funktion mit:

echo "1" > /proc/sys/net/ipv4/conf/$IF/rp_filter

diesen Parameter für beide Interfaceses definieren
Das kann so auch nicht *funcen* ! --> echo "1" > /proc/sys/net/ipv4/conf/$EXT $INT/rp_filter
wuerde da stehen.
Deshalb gibt es Schleifen -->


for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $i
done

z.B. laed in alle Interfaces eine 1 in rp_filter, auch wenn neue Interface dazu kommen.


for i in $IF; do
echo "1" > /proc/sys/net/ipv4/conf/$IF/rp_filter
done

wuerde bei --> set IF = ( $EXT $INT )
z.B. gehen

T;o)Mes

pixel
24.10.02, 10:24
Hi@all,

danke. Bei mir funktioniert das setzen der Variablen nicht.

set IF = ( $EXT $INT )

fürt bei mir zu:

line 1: syntax error near unexpected token '('
line 1: 'set IF = ( $EXT $INT )'

Was stimmt da nicht?

Gruss Sven

Jasper
24.10.02, 10:32
Original geschrieben von pixel
Hi@all,

danke. Bei mir funktioniert das setzen der Variablen nicht.

set IF = ( $EXT $INT )

fürt bei mir zu:

line 1: syntax error near unexpected token '('
line 1: 'set IF = ( $EXT $INT )'

Was stimmt da nicht?


das obige ist csh-syntax. du verwendet was bash-ähnliches. da sieht das so aus:

IF="$EXT $INT"

-j

pixel
24.10.02, 14:51
Hi@all,

ja mit einem klappt das. Was mache ich aber wenn ich mehrere brauche? Ich habe mal ganz naiv:

IF="$EXT $INT"

for i in $IF; do
echo "1" > /proc/sys/net/ipv4/conf/$IF/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/$IF/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/$IF/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/$IF/bootp_relay
done

klappt nicht.

Gruss Pixel

Jasper
24.10.02, 14:59
Original geschrieben von pixel
Hi@all,

ja mit einem klappt das. Was mache ich aber wenn ich mehrere brauche? Ich habe mal ganz naiv:

IF="$EXT $INT"

for i in $IF; do
echo "1" > /proc/sys/net/ipv4/conf/$IF/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/$IF/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/$IF/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/$IF/bootp_relay
done

klappt nicht.


klappt nicht, weil falsch:

IF="$EXT $INT"

for i in $IF; do
echo "1" > /proc/sys/net/ipv4/conf/$i/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/$i/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/$i/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/$i/bootp_relay
done

in $IF stehen alle werte, in $i der aktuelle (iteratorwert).

-j

pixel
24.10.02, 16:00
hat geklappt, vielen Danke für deine Geduld. Kennst du zufällig ein gutes Buch zur Einführung/Skriptprogrammierung mit Bash?

Gruss Pixel

Jasper
24.10.02, 16:39
Original geschrieben von pixel
hat geklappt, vielen Danke für deine Geduld. Kennst du zufällig ein gutes Buch zur Einführung/Skriptprogrammierung mit Bash?


http://www.tldp.org/LDP/abs/html/

man bash (als referenz)

da steht eigentlich alles drin.

-j