131 lines
4.7 KiB
Markdown
131 lines
4.7 KiB
Markdown
# Templace Ferm
|
||
|
||
L'installation et la configuration de ferm est faite par tout les playbook Ansible.
|
||
|
||
Si vous n'utilisez pas ces playbook voilà la marche à suivre.
|
||
|
||
Nous présentons ici une template pour la sécurisation des conteneurs avec ferm.
|
||
|
||
Tout les conteneurs et toutes les VM auront un firewall dédié (ferm) qui filtrera en INPUT / OUTPUT et bloquera tout en FORWARDING
|
||
|
||
Voici comment le filtrage ce fera en INPUT :
|
||
- Tout autoriser sur l'interface admin.
|
||
- Autoriser que ce qui est nécessaire sur l'interface principale.
|
||
- Autoriser que ce qui est nécessaire sur les interfaces secondaires avec la possibilité de rien ouvrir.
|
||
- Option port UDP dans les deux cas.
|
||
|
||
Voici comment le filtrage ce fera en OUTPUT :
|
||
- Tout bloquer, sauf les connexions établies, sur l'interface admin.
|
||
- Autoriser que ce qui est nécessaire sur l'interface principale.
|
||
- Autoriser que ce qui est nécessaire sur les interfaces secondaires avec la possibilité de rien ouvrir.
|
||
- Option port UDP dans les deux cas.
|
||
|
||
La template utilise des paramètres pour éviter d'avoir à modifier la configuration. Il vous suffit d'adapter les paramètres suivant en fonction de la configuration souhaité.
|
||
|
||
#### Interfaces
|
||
- IF_ADMIN : Nom de l'interface d'administration
|
||
- IF_FRONT : Nom du point d'entrée principal sur le conteneur
|
||
- IF_BACK : Liste des interfaces secondaire, ne doit inclure ni l'interface administration ni les interfaces qui n'ont pas besoin de règles autre que DROP.
|
||
|
||
#### Ports TCP ouverts
|
||
HAVE_BACK_ACCESS : Doit accéder à des conteneurs qui sont sur des interfaces secondaires
|
||
HAVE_BACK_REQUEST : Doit être accessible depuis des conteneurs qui sont sur des interfaces secondaires
|
||
OPEN_PORT_FRONT : Liste des ports TCP à ouvrir en entrée sur l'interface principale
|
||
OPEN_PORT_BACK_REQUEST : Liste des ports TCP à ouvrir en entrée sur les interfaces secondaires
|
||
OPEN_PORT_BACK_ACCESS : Liste des ports TCP à ouvrir en sortie sur les interfaces secondaires
|
||
|
||
#### Ports UDP ouverts
|
||
NEED_UDP_* : 0 si pas besoin d'ouvrir un port UDP 1 sinon
|
||
UDP_OPEN_PORT_FRONT : Liste des ports UDP à ouvrir en entrée sur l'interface principale
|
||
UDP_OPEN_PORT_BACK_ACCESS : Liste des ports UDP à ouvrir en sortie sur les interfaces secondaires
|
||
UDP_OPEN_PORT_BACK_REQUEST : Liste des ports UDP à ouvrir en entrée sur les interfaces secondaires
|
||
|
||
Les règles restrictives en sortie permettent d'éviter qu'un attaquant puisse accéder à tout le rester du réseau.
|
||
|
||
```
|
||
@def $IF_ADMIN = ;
|
||
@def $IF_FRONT = ;
|
||
@def $IF_BACK = ();
|
||
|
||
# REQUEST : EXT -> INT | ACCESS : INT -> EXT
|
||
|
||
# Depuis l'extérieur sur l'interface principale
|
||
@def $OPEN_PORT_FRONT_REQUEST = ();
|
||
@def $NEED_UDP_FRONT_REQUEST = 0; #0 pour NON 1 pour OUI
|
||
@def $UDP_OPEN_PORT_FRONT_REQUEST = ();
|
||
|
||
# Depuis l'intérieur sur l'interface principale
|
||
@def $OPEN_PORT_FRONT_ACCESS = ();
|
||
@def $NEED_UDP_FRONT_ACCESS = 0; #0 pour NON 1 pour OUI
|
||
@def $UDP_OPEN_PORT_FRONT_ACCESS = ();
|
||
|
||
|
||
# Depuis l'extérieur sur les interfaces secondaires
|
||
@def $HAVE_BACK_REQUEST = 0; #0 pour NON 1 pour OUI
|
||
@def $OPEN_PORT_BACK_REQUEST = ();
|
||
@def $NEED_UDP_BACK_REQUEST = 0; #0 pour NON 1 pour OUI
|
||
@def $UDP_OPEN_PORT_BACK_REQUEST = ();
|
||
|
||
# Depuis l'intérieur sur les interfaces secondaires
|
||
@def $HAVE_BACK_ACCESS = 1; #0 pour NON 1 pour OUI
|
||
@def $OPEN_PORT_BACK_ACCESS = (53);
|
||
@def $NEED_UDP_BACK_ACCESS = 1; #0 pour NON 1 pour OUI
|
||
@def $UDP_OPEN_PORT_BACK_ACCESS = (53);
|
||
|
||
|
||
table filter {
|
||
chain INPUT {
|
||
policy DROP;
|
||
mod state state INVALID DROP;
|
||
mod state state (ESTABLISHED RELATED) ACCEPT;
|
||
interface lo ACCEPT;
|
||
interface $IF_ADMIN ACCEPT;
|
||
|
||
|
||
interface $IF_FRONT proto tcp dport $OPEN_PORT_FRONT_REQUEST ACCEPT;
|
||
|
||
@if $NEED_UDP_FRONT_REQUEST {
|
||
interface $IF_FRONT proto udp dport $UDP_OPEN_PORT_FRONT_REQUEST ACCEPT;
|
||
}
|
||
|
||
|
||
@if $HAVE_BACK_REQUEST {
|
||
interface $IF_BACK proto tcp dport $OPEN_PORT_BACK_REQUEST ACCEPT;
|
||
}
|
||
|
||
@if $NEED_UDP_BACK_REQUEST {
|
||
interface $IF_BACK proto udp dport $UDP_OPEN_PORT_BACK_REQUEST ACCEPT;
|
||
}
|
||
|
||
|
||
proto icmp icmp-type echo-request ACCEPT;
|
||
}
|
||
|
||
chain OUTPUT {
|
||
policy DROP;
|
||
mod state state INVALID DROP;
|
||
mod state state (ESTABLISHED RELATED) ACCEPT;
|
||
outerface lo ACCEPT;
|
||
|
||
|
||
outerface $IF_FRONT proto tcp dport $OPEN_PORT_FRONT_ACCESS ACCEPT;
|
||
|
||
@if $NEED_UDP_FRONT_ACCESS {
|
||
outerface $IF_BACK proto udp dport $UDP_OPEN_PORT_FRONT_ACCESS ACCEPT;
|
||
}
|
||
|
||
@if $HAVE_BACK_ACCESS {
|
||
outerface $IF_BACK proto tcp dport $OPEN_PORT_BACK_ACCESS ACCEPT;
|
||
}
|
||
|
||
@if $NEED_UDP_BACK_ACCESS {
|
||
outerface $IF_BACK proto udp dport $UDP_OPEN_PORT_BACK_ACCESS ACCEPT;
|
||
}
|
||
|
||
proto icmp ACCEPT;
|
||
}
|
||
|
||
chain FORWARD policy DROP;
|
||
}
|
||
```
|