OVH Cloud OVH Cloud

Bash & iptables

2 réponses
Avatar
François RONVAUX
Bonjour à tous.


Je désire intégrer dans mon firewall une liste d'adresses au format suivant
:

CSC COMPUTER SCIENCES CORP. CSC-COMP24-192-0 (NET-:12.164.192.0-12.164.192.7
ARMY HOUSING DIVISION, DAIM-FDH
ARMY-HOU13-208-128:12.165.208.128-12.165.208.255
CITY OF ELBERTON CITY-OF-53-228
(NET-12-166-228-0-:12.166.228.0-12.166.228.255
CITY OF WILLIAMSTOWN CITY-OF-25-35-128
(NET-12-169:12.169.35.128-12.169.35.159
DEPT. OF VERTERANS AFFAIRS 19D2 811 VERMONT AV NW
:12.170.154.0-12.170.155.255

Le problème est que la syntaxe d'iptables ne s'en accomode pas.
Je connais un moyen simple pour retenir uniquement la partie numérique de
l'adresse (grace à cut, en utilisant ":" comme séparateur) mais j'ignore
comment utiliser la partie "utile" pour qu'iptables construise ses règles.
Ce qui donnerait pour les deux dernières lignes quelque chose comme :

iptables [...] -s 12.169.35.128
...
iptables [...] -s 12.169.35.159

et

iptables [...] -s 12.170.154.0
iptables [...] -s 12.170.155.0


Merci d'avance aux gourous du bash :-)

2 réponses

Avatar
TiChou
Dans le message <news:40c32008$0$26917$,
*François RONVAUX* tapota sur f.c.o.l.configuration :

Bonjour à tous.


Bonsoir,

Je désire intégrer dans mon firewall une liste d'adresses au format
suivant :

CSC COMPUTER SCIENCES CORP. CSC-COMP24-192-0
(NET-:12.164.192.0-12.164.192.7 ARMY HOUSING DIVISION, DAIM-FDH
ARMY-HOU13-208-128:12.165.208.128-12.165.208.255
CITY OF ELBERTON CITY-OF-53-228
(NET-12-166-228-0-:12.166.228.0-12.166.228.255
CITY OF WILLIAMSTOWN CITY-OF-25-35-128
(NET-12-169:12.169.35.128-12.169.35.159
DEPT. OF VERTERANS AFFAIRS 19D2 811 VERMONT AV NW
:12.170.154.0-12.170.155.255

Le problème est que la syntaxe d'iptables ne s'en accomode pas.
Je connais un moyen simple pour retenir uniquement la partie numérique de
l'adresse (grace à cut, en utilisant ":" comme séparateur) mais j'ignore
comment utiliser la partie "utile" pour qu'iptables construise ses règles.
Ce qui donnerait pour les deux dernières lignes quelque chose comme :

iptables [...] -s 12.169.35.128
...
iptables [...] -s 12.169.35.159

et

iptables [...] -s 12.170.154.0
iptables [...] -s 12.170.155.0


Le but du jeu est d'extraire de cette liste l'adresse de début du bloc et
l'adresse de fin du bloc, de déterminer le masque réseau correspondant et de
passer en paramètre à la commande 'iptables' l'adresse de début avec le
masque réseau.
Soit le script suivant :

#!/bin/bash

LISTE=/chemin/liste

sed -rn 's/.*:(([0-9]+.){3}[0-9]+-([0-9]+.){3}[0-9]+).*/1/p' < $LISTE
| while read
do
IPSTART=${REPLY%-*}
IPEND=${REPLY#*-}
MASK=$[0xffffffff-((((${IPEND//./<<8)+})+((((${IPSTART//./<<8)+})]
MASK=$[$MASK>>24].$[$MASK>>16&0xff].$[$MASK>>8&0xff].$[$MASK&0xff]

echo iptables -A INPUT -s $IPSTART/$MASK
done

Le fichier /chemin/liste contient la liste d'adresses et on remplacera la
commande 'echo iptables ...' par la commande finale.

Merci d'avance aux gourous du bash :-)


De rien.

--
TiChou

Avatar
François RONVAUX
"TiChou" a écrit dans le message de
news:
sed -rn 's/.*:(([0-9]+.){3}[0-9]+-([0-9]+.){3}[0-9]+).*/1/p' < $LISTE
| while read
do
IPSTART=${REPLY%-*}
IPEND=${REPLY#*-}
MASK=$[0xffffffff-((((${IPEND//./<<8)+})+((((${IPSTART//./<<8)+})]
MASK=$[$MASK>>24].$[$MASK>>16&0xff].$[$MASK>>8&0xff].$[$MASK&0xff]

echo iptables -A INPUT -s $IPSTART/$MASK
done


Argh !
J'ai rien comprendu mais ça à l'air de marcher.

Un GRAND merci :-)



PS : c'est fort Linux :-)