Rechercher : dans
Par :

Génération du test pour iptables avec shell

Dernière réponse le 25 mai 2009 à 21:55:38 tmedtcom, le 24 mai 2009 à 05:04:25 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « Génération du test pour iptables avec shell » dans :
[Shell] Tester une variable numérique VoirTester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à...
Guide d'utilisation du Shell pour débutant VoirSHELL BASH - GUIDE D'UTILISATION - Niveau Débutant Introduction Appel aux membres CCM II. C'est quoi le shell ? III. Comment accéder à la ligne de commande IV. Les consoles virtuelles Exemple : Accéder à la console 3 depuis l'interface...
[Mémoire] Utiliser Windows Memory Test VoirWindows Memory Test est un utilitaire permettant de tester la mémoire vive d'un PC. Il fonctionne sans tenir compte du système d'exploitation. 1. Création d'un support bootable 2. Exécution du test 3. Interprétation simplifiée des...
Télécharger MultiFolder Generator VoirLorsque vous posséder des centaines de fichiers que vous devez classer par thème ou par genre, il faut créer des dizaines de dossiers qui correspondent à chacun d’eux. MultiFolder Generator est un utilitaire permettant de générer des dossiers...
Systèmes UNIX - Le shell VoirIntroduction au shell L'interpréteur de commandes est l'interface entre l'utilisateur et le système d'exploitation, d'où son nom anglais «shell», qui signifie «coquille». Le shell est ainsi chargé de faire l'intermédiaire entre le système...
Linux - Le shell VoirIntroduction au shell L'interpréteur de commandes est l'interface entre l'utilisateur et le système d'exploitation, d'où son nom anglais «shell», qui signifie «coquille». Le shell est ainsi chargé de faire l'intermédiaire le système...

1

jipicy, le 24 mai 2009 à 13:40:27
  • +1

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) ;-\
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

2

tmedtcom, le 24 mai 2009 à 18:44:21

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

Répondre à tmedtcom

3

jipicy, le 24 mai 2009 à 18:48:19
  • +1

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 ?
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

4

tmedtcom, le 24 mai 2009 à 18:54:02

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

Répondre à tmedtcom

5

lami20j, le 24 mai 2009 à 18:55:01
  • +1

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]

106485010510997108

Répondre à lami20j

6

tmedtcom, le 24 mai 2009 à 18:57:53

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

Répondre à tmedtcom

7

tmedtcom, le 24 mai 2009 à 19:20:37

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?

Répondre à tmedtcom

8

tmedtcom, le 25 mai 2009 à 01:10:17

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

Répondre à tmedtcom

9

lami20j, le 25 mai 2009 à 06:14:41

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
106485010510997108

Répondre à lami20j

10

tmedtcom, le 25 mai 2009 à 16:33:35

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.

Répondre à tmedtcom

11

lami20j, le 25 mai 2009 à 19:12:04

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
106485010510997108

Répondre à lami20j

12

lami20j, le 25 mai 2009 à 20:18:07

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
106485010510997108

Répondre à lami20j

13

 tmedtcom, le 25 mai 2009 à 21:55:38

<ital>ohhh, merci beaucouououououououououp, c'est trés gentil!!!!</ital>

Répondre à tmedtcom
Collection CommentÇaMarche.net