Génération du test pour iptables avec shell
Résolu
tmedtcom
Messages postés
60
Statut
Membre
-
tmedtcom Messages postés 60 Statut Membre -
tmedtcom Messages postés 60 Statut Membre -
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:
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:
mon essai c'est là:
et merci d'avance ;)
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:
- Génération du test pour iptables avec shell
- Test performance pc - Guide
- Test steam deck oled - Guide
- Classic shell - Télécharger - Personnalisation
- Test disque dur - Télécharger - Informations & Diagnostic
- Test composant pc - Guide
13 réponses
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 :
Ou encore :
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}'` ];
thenif 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) ;-\
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 ?
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 ?
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]
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]
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
c'est pas la peine pour ces 3 lignes:
mais juste pour ces lignes:
et merci beaucoup
# 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
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
oui c'est juste:
il faut traiter ces lignes:
donc?
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?
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
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
Salut,
Si le but était juste d'afficher pourquoi pas faire tout simplement
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
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.
Salut,
Un exemple, à toi d'adapter
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
Re,
La commande cat est inutile
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