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 :
- les pages de manuel relatives au programme et à ses fichiers de configuration;
- les pages du wiki-admin relatives au programme et à sa configuration courante, les raisons des choix précédents;
- é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 :
- éditer le fichier de configuration
- recharger les règles du pare-feu
- établir une nouvelle connexion
S'il n'y a pas de problème, on peut se contenter de faire
sudo etckeeper commit