Génération du test pour iptables avec shell

Résolu
tmedtcom Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   -  
tmedtcom Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   -
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 ;)
Configuration: Windows Vista
Firefox 3.0.10

13 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  4. tmedtcom Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   13
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. tmedtcom Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   13
     
    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
  7. tmedtcom Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   13
     
    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
  8. tmedtcom Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   13
     
    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
  9. tmedtcom Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   13
     
    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
  10. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  11. tmedtcom Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   13
     
    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
  12. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  13. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  14. tmedtcom Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   13
     
    <ital>ohhh, merci beaucouououououououououp, c'est trés gentil!!!!</ital>
    0