Le régionnement par zones de sécurité
L'éditeur Era suit un modèle par flux de règles plutôt que par règles simples. Cela signifie que les règles sont classées d'après leur origine et leur destination. Pour pouvoir ordonner ce classement en vue d'une cohérence globale de sécurité, il convient de définir une modélisation du pare-feu nommée matrice de flux.
- zone de sécurité
- régionnement d'un parc de machines en réseau, sous-réseau, etc suivant un découpage à partir du pare-feu, le pare-feu lui-même étant une zone à part (la zone la plus sécurisée).Cette cartographie permet d'affecter un niveau de sécurité (arbitraire) à chaque zone.
- niveau de sécurité
- nombre entier (entre 0 et 100) permettant d'ordonner les zones.

Une modélisation générique des zones sécurisées regroupe les différentes zones en "maisons", en "cour", (pour des zones moins sécurisées type dmz), la zone minimale de sécurité étant "l'extérieur".
Le bastion est une zone particulière, par définition la zone la plus sécurisée.
Description des zones dans le format xml interne
Une balise pour chaque découpage en zone
<zones> <zone name="exterieur" level="10" ip="" network="" netmask="" interface=""/> <zone name="bastion" level="100" ip="127.0.0.1" network="0.0.0.0" netmask="255.255.255.255" interface="lo"/> </zones>
Les extremités
Les zones sont elles-mêmes découpées en réseaux et sous-réseaux qui sont appelées extrémités. Ces extrémités peuvent être soit des machines, soit des groupes de machines.
<extremites> <extremite zone="bastion" name="bastion" libelle="Zone entièe" netmask="255.255.255.255" subnet="1"> <ip address="127.0.0.1"/> </extremite> <extremite zone="exterieur" name="exterieur" libelle="Zone entière" netmask="" subnet="1"> <ip address="%%adresse_ip_eth0%%"/> </extremite> </extremites>
subnet
est fixé à 0.
La matrice de flux et les flux de directives
- matrice de flux
- Tableau représentant les autorisations et les interdictions, bref la politique de sécurité entre chaque zone, de manière à orienter le flux de règles.
Un exemple
Soient trois zones classées par ordre de sécurité décroissant :
- Gestion
- Pédagogie
- Extérieur
Chaque zone est donc reliée à une autre zone par des flux de règles. Les "flux montants" concernent les interactions d'un niveau de sécurité plus faible vers un niveau de sécurité plus élevé, et réciproquement pour les "flux descendants".
Ces nom utilisent l'imagerie de l'écoulement des fluides (flux montants, flux descendants, ponts, barrages) pour que le niveau de sécurité reste en mémoire de chacun à chaque instant de la conception du pare-feu. Pour "l'écoulement" de règles d'un niveau plus élevé vers un niveau moins élevé, on parle de flux descendant, et pour le moins élevé vers le plus élevé, on parle de flux montant.
- flux montant
- pont (acqueduc, pompe pour faire remonter l'eau)
- flux descendant
- barrage (pour retenir l'eau)
Matrice de flux et politique par défaut
Lorsque les flux montants et les flux descendants sont définis, il est possible de spécifier une politique par défaut à partir de règles d'autorisation ou d'interdiction sur ces flux orientés.
Ici, la politique de sécurité par défaut qui résulte de la matrice de flux est :
Vue technique globale
Récapitulatif des composants de la matrice de flux
Les composantes de la matrice de flux sont :
- les flux
- les zones
- les directives montantes et descendantes
La hiérarchie des objets
FwObject
: contexte (éditable, etc.)Directive(FwObject), DirectiveStrore(FwObject)
: directive et classeur de directivesService(FwObject), ServiceGroupe(FwObject)
: service et liste de servicesZone(FwObject), Extremite(FwObject)
Flux(FwObject,Observer)
Description des flux dans le format xml interne
Voici des flux entre différentes zones. Pour chaque flux, les directives sont classées en directives montantes et descendantes.
<flux-list> <flux zoneA="bastion" zoneB="exterieur"> <montantes> </montantes> <descendantes> </descendantes> </flux> <flux zoneA="exterieur" zoneB="admin"> <montantes> </montantes> <descendantes> </descendantes> </flux> <flux zoneA="bastion" zoneB="admin"> <montantes> </montantes> <descendantes> </descendantes> </flux> [...] </flux-list>
Classeur de directives
Les classeurs (DirectiveStore
) de
directives sont comme des listes de règles, ils encapsulent les règles
iptables en directives.
L'accès aux directives d'une matrice se fait par l'accès aux flux. On
se donne une matrice m era.noyau.model.MatrixModel()
,
cette matrice contient une
liste de flux flux_list = m.flux
et pour
chaque élément de cette liste de flux, il faut repérer les deux
classeurs de directives
classeur = flux.up_directives_store # est un objet de type DirectiveStore classeur = flux.down_directives_store # est un objet de type DirectiveStoreEnfin, les directives sont accessibles pour chaque classeur de directives
directives = classeur.directive_list()