99 lines
3.8 KiB
Markdown
99 lines
3.8 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 :
|
|
- Autoriser que ce qui est nécessaire sur l'interface principale.
|
|
- Option pour autorisé le protocole VRRP.
|
|
- Option port UDP pour le DNS.
|
|
|
|
Voici comment le filtrage ce fera en OUTPUT :
|
|
- Autoriser que ce qui est nécessaire et les connexions établies sur l'interface principale.
|
|
- Option port UDP pour le DNS.
|
|
|
|
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_FRONT : Nom du point d'entrée principal sur le conteneur
|
|
- IF_VRRP : Nom de l'interface ayant besoin d'utiliser le protocole VRRP, mettre NEED_VRRP à 1 si besoin de VRRP.
|
|
|
|
#### Ports TCP ouverts
|
|
- HAVE_FRONT_ACCESS : Doit accéder à des conteneurs qui sont sur l'interface principale
|
|
- HAVE_FRONT_REQUEST : Doit être accessible depuis des conteneurs qui sont sur l'interface principale
|
|
- OPEN_PORT_FRONT_REQUEST : Liste des ports TCP à ouvrir en entrée sur l'interface principale
|
|
- OPEN_PORT_FRONT_ACCESS : Liste des ports TCP à ouvrir en sortie sur l'interface principale
|
|
|
|
|
|
#### Ports UDP ouverts
|
|
- NEED_UDP_FRONT_ACCESS : 0 si pas besoin d'ouvrir un port UDP en sortie 1 sinon
|
|
- NEED_UDP_FRONT_REQUEST : 0 si pas besoin d'ouvrir un port UDP en entrée 1 sinon
|
|
- UDP_OPEN_PORT_FRONT_ACCESS : Liste des ports UDP à ouvrir en sortie sur l'interface principale
|
|
- UDP_OPEN_PORT_FRONT_REQUEST : Liste des ports UDP à ouvrir en entrée sur l'interface principale
|
|
|
|
Les règles restrictives en sortie permettent d'éviter qu'un attaquant puisse accéder à tout le reste du réseau.
|
|
|
|
```
|
|
@def $IF_FRONT = eth0;
|
|
# REQUEST : EXT -> INT | ACCESS : INT -> EXT
|
|
|
|
# Depuis l'extérieur sur l'interface principale
|
|
@def $HAVE_FRONT_REQUEST = 1; #0 pour NON 1 pour OUI
|
|
@def $OPEN_PORT_FRONT_REQUEST = (80 3128 9999); #Par défaut 80/3128/9999
|
|
@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 $HAVE_FRONT_ACCESS = 1; #0 pour NON 1 pour OUI
|
|
@def $OPEN_PORT_FRONT_ACCESS = (53); #Par défaut 53
|
|
@def $NEED_UDP_FRONT_ACCESS = 1; #0 pour NON 1 pour OUI
|
|
@def $UDP_OPEN_PORT_FRONT_ACCESS = (53); #Par défaut 53
|
|
|
|
# Besoin de VRRP
|
|
@def $NEED_VRRP = 0; #0 pour NON 1 pour OUI
|
|
|
|
|
|
table filter {
|
|
chain INPUT {
|
|
policy DROP;
|
|
mod state state INVALID DROP;
|
|
mod state state (ESTABLISHED RELATED) ACCEPT;
|
|
interface lo ACCEPT;
|
|
|
|
@if $HAVE_FRONT_REQUEST {
|
|
interface $IF_FRONT proto tcp dport $OPEN_PORT_FRONT_REQUEST ACCEPT;
|
|
}
|
|
|
|
@if $NEED_VRRP {
|
|
interface $IF_FRONT proto vrrp ACCEPT;
|
|
}
|
|
@if $NEED_UDP_FRONT_REQUEST {
|
|
interface $IF_FRONT proto udp dport $UDP_OPEN_PORT_FRONT_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;
|
|
@if $HAVE_FRONT_ACCESS {
|
|
outerface $IF_FRONT proto tcp dport $OPEN_PORT_FRONT_ACCESS ACCEPT;
|
|
}
|
|
@if $NEED_VRRP {
|
|
outerface $IF_FRONT proto vrrp ACCEPT;
|
|
}
|
|
@if $NEED_UDP_FRONT_ACCESS {
|
|
outerface $IF_FRONT proto udp dport $UDP_OPEN_PORT_FRONT_ACCESS ACCEPT;
|
|
}
|
|
proto icmp ACCEPT;
|
|
}
|
|
chain FORWARD policy DROP;
|
|
}
|
|
```
|