Une mauvaise configuration du pare-feu peut amener à perdre la main sur une machine. La résolution d'un tel problème ne peut alors passer que par un accès physique à la machine. Pour éviter d'en arriver là, il vaut mieux respecter quelques règles de prudence, même si elles semblent un peu contraignantes.

ferm n'est pas réellement vital. C'est simplement une enveloppe autour de iptables et ip6tables, qui sont eux-mêmes des moyens de communiquer en espace utilisateur avec la partie du noyau chargée de traiter les données qui transitent par les sockets réseau, et appelée netfilter.

En revanche, ce qui peut être qualifié ici de vital, c'est l'accessibilité à la machine par ssh. Le but de cette procédure est de s'assurer que la machine reste accessible.

Préliminaires

La première chose à faire avant de se lancer dans la reconfiguration, même minime, d'un programme vital, est de se demander si c'est le bon moment : évaluer son propre état de fatigue, d'alcoolémie, le temps qu'on a devant soi dans le cas où tout ne se passerait pas comme prévu, l'urgence réelle ou supposée de la tâche, etc.

Ensuite, si le moment est jugé opportun, alors commencer par lire ou relire la documentation :

  1. les pages de manuel relatives au programme et à ses fichiers de configuration;
  2. les pages du wiki-admin relatives au programme et à sa configuration courante, les raisons des choix précédents;
  3. éventuellement, des pages web traitant du même sujet.

Ensuite, on peut y aller posément, mais pas sans filet…

Procédure

Le programme ferm propose une option dite interactive qui permet de tester une configuration sans risquer de se retrouver enfermé dehors :

sudo ferm --interactive /tmp/test.ferm

Le script /tmp/test.ferm est alors exécuté et ses paramètres appliqués. Le programme demande alors une confirmation de la part de l'user. Si cette confirmation n'est pas obtenue dans les 30 secondes, le programme revient à sa configuration précédente. Cela permet de profiter de ces trente secondes (même si c'est un peu court) pour tenter d'ouvrir une nouvelle connexion ssh (ou autre, ça dépend à quoi s'applique la configuration qu'on veut tester) afin de vérifier la validité des nouveaux paramètres.

Valider une configuration

La configuration se trouve dans les fichiers /etc/ferm/ferm.conf et éventuellement dans d'autres fichiers du même répertoire s'ils sont appelés depuis le fichier principal à l'aide de la fonction interne @include.

L'édition de ces fichiers ne pose pas de problème particulier, dans la mesure où leurs modifications ne seront pas prises en compte avant leur rechargement par le pare-feu, qui peut se faire avec la commande :

sudo ferm --interactive /etc/ferm/ferm.conf

Si cette nouvelle configuration est validée, on peut la pérenniser avec :

sudo service ferm restart

Mais avant ça, il faut veiller à ce que subsiste une règle permettant de maintenir les connexions déjà établies. Dans le langage de ferm, cela donne, en début de script :

domain (ip ip6) table filter chain INPUT protocol tcp module state state (ESTABLISHED RELATED) ACCEPT;

qui peut se traduire par :

iptables -t filter -I INPUT -p tcp -m state --state ESTABLISHED,RELATED ACCEPT
ip6tables -t filter -I INPUT -p tcp -m state --state ESTABLISHED,RELATED ACCEPT

À ce moment là, c'est à dire quand le pare-feu utilise les nouvelles règles, il est impératif de :

  • garder ouverte la connexion en cours;
  • ouvrir une autre connexion pour s'assurer qu'on a toujours un accès shell à la machine avec les nouveaux paramètres.

Évidemment, si le deuxième point échoue, recommencer le cycle :

  1. éditer le fichier de configuration
  2. recharger les règles du pare-feu
  3. établir une nouvelle connexion

S'il n'y a pas de problème, on peut se contenter de faire

sudo etckeeper commit

Voir aussi