Génération du test pour iptables avec shell

Résolu/Fermé
tmedtcom Messages postés 48 Date d'inscription dimanche 24 mai 2009 Statut Membre Dernière intervention 14 février 2013 - 24 mai 2009 à 05:04
tmedtcom Messages postés 48 Date d'inscription dimanche 24 mai 2009 Statut Membre Dernière intervention 14 février 2013 - 25 mai 2009 à 21:55
Bonjour,
voila ,je suis bloqué dans cette étape , dans mon projet fin d'étude, je doit faire un script shell qui lire le fichier de configuration d'Iptables qui lire les règles dans cette fichier ligne par ligne puis affiche les testes a faire depuis hping2.
les règles d'iptables son stocké dans /ect/sysconfig/iptables de cette magnanière:
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT  

j'ai fait une tentative avec cette script qui doit lire ligne par ligne cette fichier et sauvegarde chaque mot dans une colonne du tableau pour nous permettre de faire une comparaison avec des critère spécifique comme "INPUT" puis on fait la génération des test la sortie sera a l'ecran comme ce si:
il faut tester le protocol TCP dans le port  d'entrée 80 à partir une adresse ip source 192.168.2.22

mon essai c'est là:
#!/bin/bash
monfich=/home/tmed/Bureau/iptables
var_monfich='$monfich'
i=1
cat < iptables | while true
do
read ligne
if [ "$ligne" = "" ]; then break; fi
if [ `echo ${ligne} | awk '{print $4}'` ];
then
while [ "$ligne" != "" ]
do
ch=`echo ${ligne} | awk '{print $2}' | cut -d: -f4`
tab[$i]=$ch


                if [  "${tab[$i]}" = "INPUT" ]; then echo "`echo ${ligne} | awk '{print $2 " " $3 " "$4" "$5 " " $6 " "$7}'`"
else break
fi
i=$(expr $i + 1)
echo " `echo ${ligne} | awk '{print $2 " " $3 " "$4}'`" >> ${monfich}.out

done
fi
#echo "`echo ${ligne} | awk '{print $2 " " $3 " "$4" "$5 " " $6 " "$7}'`"
done

et merci d'avance ;)
A voir également:

13 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
24 mai 2009 à 13:40
Salut,

Dis-nous plutôt ce que tu voudrais obtenir en sortie, parce que ton script est plein d'incohérences et d'erreurs de syntaxe ;-((

Par exemple :
if [ `echo ${ligne} | awk '{print $4}'` ];
then
if quoi ? Tu n'évalues rien ! Même s'il en résulte un motif de ta commande, rien ne se passera ;-(

Ou encore :
ch=`echo ${ligne} | awk '{print $2}' | cut -d: -f4`
Il n'y a aucun 2nd champ dans le listing d'iptables (de ton exemple) qui contient un double point (:), donc rien à couper avec "cut". J'ai l'impression que tu confonds les lignes et les champs. Et quand bien même il y aurait une ligne contenant un "deux points", il en faudrait plusieurs pour s'en servir comme délimiteur (-d:) et n'afficher que le 4ème (-f4) ;-\
1
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
24 mai 2009 à 18:48
Toutes les lignes ou certaines sont à exclure ?

Exemple :

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]


On les garde ?
1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
24 mai 2009 à 18:55
Salut,

Je pense qu'il veux traiter seulement les règles de chaînes iptables

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited


et pas la politiques des chaînes iptables
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

1
tmedtcom Messages postés 48 Date d'inscription dimanche 24 mai 2009 Statut Membre Dernière intervention 14 février 2013 13
24 mai 2009 à 18:44
merci pour votre reponce, voila jai besoin en sortie un tableau qui contenue chaque chaine de caractère d'une ligne:
par exemples:
-A INPUT -p icmp -j ACCEPT
sera:
t[1]='-A' ; t[2]= 'INPUT' ; t[3]='-p' ; t[4]='icmp' ; t[4]='-j' ; t[5 ]='ACCEPT' etc....
pour chaque ligne il fait la même manière pour je puisse faire le teste a chaque condition après
merci d'avance pour me répondre je suis là connecté tout le jour si il y a quelque chose n'est pas claire#j'ai besoin de la réponse#
merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tmedtcom Messages postés 48 Date d'inscription dimanche 24 mai 2009 Statut Membre Dernière intervention 14 février 2013 13
24 mai 2009 à 18:54
c'est pas la peine pour ces 3 lignes:
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

mais juste pour ces lignes:
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

et merci beaucoup
0
tmedtcom Messages postés 48 Date d'inscription dimanche 24 mai 2009 Statut Membre Dernière intervention 14 février 2013 13
24 mai 2009 à 18:57
oui peut êtres je ne sait pas moi, mon encadreur me dit juste de montrer les testes a faire a partir d'un script en shell qui fait monter les testes a faire a partir du politiques de sécurité d'iptables. donc je pense que tu est juste
0
tmedtcom Messages postés 48 Date d'inscription dimanche 24 mai 2009 Statut Membre Dernière intervention 14 février 2013 13
24 mai 2009 à 19:20
oui c'est juste:
il faut traiter ces lignes:
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 

donc?
0
tmedtcom Messages postés 48 Date d'inscription dimanche 24 mai 2009 Statut Membre Dernière intervention 14 février 2013 13
25 mai 2009 à 01:10
bonjour
Voila merci a tous jai réussie finalement
mon script:

#!/bin/sh
exec 3</home/tmed/Bureau/iptables
while read ligne 0<&3
do
i=0
A=1
if [ "$ligne" = "" ]; then break; fi



while [ "`echo ${ligne} | awk '{print $a}' a="$A"`" != "" ]
do

ch=`echo ${ligne} | awk '{print $a}' a="$A"`
tab[$i]=$ch
echo "${tab[$i]}"
echo -e "\n"

i=$(expr $i + 1)
A=$(($A + 1))


done
done
exit 0


il affiche chaque mot du ligne séparépar espace de cette manière:

-A


INPUT


-i


lo


-j


ACCEPT
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
25 mai 2009 à 06:14
Salut,

Si le but était juste d'afficher pourquoi pas faire tout simplement
lami20j@debian:~$ cat fic.txt
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
lami20j@debian:~$ sed 's/ /\n/g' fic.txt
-A
INPUT
-m
state
--state
ESTABLISHED,RELATED
-j
ACCEPT
-A
INPUT
-p
icmp
-j
ACCEPT
-A
INPUT
-i
lo
-j
ACCEPT
0
tmedtcom Messages postés 48 Date d'inscription dimanche 24 mai 2009 Statut Membre Dernière intervention 14 février 2013 13
25 mai 2009 à 16:33
merci beaucoup monsieur, oui la première demande de mon encadreur était l'affichage, j'ai réussie a faire mais maintenant il me demande de sauvgarder chaque champs du ligne dans une case du tableau, s'il y a une solution je vous attend, et merci d'avance.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
25 mai 2009 à 19:12
Salut,

Un exemple, à toi d'adapter
$ cat fic.txt
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
lami20j@debian:~$ tab=($(cat fic.txt|sed 's/ /\n/g' fic.txt))
$ for i in $(seq ${#tab[*]});do echo tab[$(($i-1))]=${tab[$(($i-1))]};done
tab[0]=-A
tab[1]=INPUT
tab[2]=-m
tab[3]=state
tab[4]=--state
tab[5]=ESTABLISHED,RELATED
tab[6]=-j
tab[7]=ACCEPT
tab[8]=-A
tab[9]=INPUT
tab[10]=-p
tab[11]=icmp
tab[12]=-j
tab[13]=ACCEPT
tab[14]=-A
tab[15]=INPUT
tab[16]=-i
tab[17]=lo
tab[18]=-j
tab[19]=ACCEPT
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
25 mai 2009 à 20:18
Re,

La commande cat est inutile
$ tab=($(sed 's/ /\n/g' fic.txt))
$ for i in $(seq ${#tab[*]});do echo tab[$(($i-1))]=${tab[$(($i-1))]};done
tab[0]=-A
tab[1]=INPUT
tab[2]=-m
tab[3]=state
tab[4]=--state
tab[5]=ESTABLISHED,RELATED
tab[6]=-j
tab[7]=ACCEPT
tab[8]=-A
tab[9]=INPUT
tab[10]=-p
tab[11]=icmp
tab[12]=-j
tab[13]=ACCEPT
tab[14]=-A
tab[15]=INPUT
tab[16]=-i
tab[17]=lo
tab[18]=-j
tab[19]=ACCEPT
0
tmedtcom Messages postés 48 Date d'inscription dimanche 24 mai 2009 Statut Membre Dernière intervention 14 février 2013 13
25 mai 2009 à 21:55
<ital>ohhh, merci beaucouououououououououp, c'est trés gentil!!!!</ital>
0