Script bash + iptables = probleme incomprehensible

Script bash + iptables = probleme incomprehensible - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 12-05-2008 à 16:14:58    

Sur ce petit bout de script , j'ai un probleme que je n'arrive pas a comprendre :
 


BAD_ADDRESS="224.0.0.0,169.254.0.0/16,172.16.0.0/12,192.168.0.0/16,10.0.0.0/8,127.0.0.0/8"
LOG="-j LOG --log-level $LOGLEVEL --log-prefix"
LOGLEVEL="debug"
 
IFS=","
for bad_network in $BAD_ADDRESS ; do
$IPT -A spoof_net -p ALL -i $NET_FACE -s $bad_network $LOG "RESERVED ADDR: "
$IPT -A spoof_net -p ALL -i $NET_FACE -s $bad_network -j DROP
done
unset IFS
 


 
l'execution me donne cette erreur  


iptables v1.3.6: Invalid target name ` LOG --log-level debug --log-prefix' (31 chars max)
Try `iptables -h' or 'iptables --help' for more information.


 
Au bout de deux heures d'acharnement , j'ai compris que le probleme venais de la variable $LOG , et j'ai resolue ce pb. avec :
 


$IPT -A spoof_net -p ALL -i $NET_FACE -s $bad_network -j LOG --log-level $LOGLEVEL --log-prefix "RESERVED ADDR: "


 
Mais comme j'aime le travail soigné , et comme la variable $LOG marche tres bien ailleurs dans le script , je voudrais comprendre pourquoi cela ne marche pas dans cette boucle . J'ai remarqué que les autres variables marchaient dedans , mais n'avaient qu'une entrée .
 
Une idée ?  :hello:


Message édité par ipnoz le 12-05-2008 à 16:20:10
Reply

Marsh Posté le 12-05-2008 à 16:14:58   

Reply

Marsh Posté le 13-05-2008 à 09:38:54    

C'est parce que $LOG est interprété comme un seul "mot" contenant des espaces, et non comme une suite de "mots". Bref la commande iptables voit arriver un argument "-j LOG --log-level $LOGLEVEL --log-prefix", au lieu de voir arriver un argrument "-j", suivi d'un argument "LOG", suivi d'un argument "--log-level" et ainsi de suite.
 
Pour régler le problème, deux solutions :


1) avec echo : $IPT ... `echo $LOG` ...
2) avec eval : eval $IPT ... $LOG ...

Reply

Marsh Posté le 13-05-2008 à 14:55:56    

Merci pour ta reponse , c'est bien ce que j'avais cru comprendre au niveau de la variable LOG ...
 
La solution 1 ne marche pas , elle me renvoie la meme erreur que j'ai deja indiqué dans mon premier post .
 
La solution 2 marche a condition de rajouter : ' "RESERVED ADDR: " ' meme si j'aurais preferer qlq. chose dans le style de la 1 . Parce que meme apres qlq. recherche , je ne comprends pas trop ce qu'apporte eval meme si "ca marche" ^^ .

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed