1. Scénario type :
Sur un serveur Debian 9 qui fait tourner Syncthing, logiciel de synchronisation de dossiers et fichiers (cf https://syncthing.net/), une des méthodes possibles pour permettre d’avoir plusieurs utilisateurs qui synchronisent leurs données en parallèle est d’attribuer un port spécifique à chaque utilisateur. Cela permet d’avoir des instances multiples de Syncthing sans aucun échange possible entre les utilisateurs.
La difficulté de cette méthode est que, par défaut, le firewall du serveur, Iptables, bloque tous les ports qui ne sont pas explicitement ouverts. L’idée est donc d’ouvrir un port spécifique dans le firewall à chaque fois que l’on ajoute une instance de Syncthing afin que le nouvel utilisateur puisse communiquer avec le serveur.
2. Ajouter une règle dans Iptables : ouverture d’un port en entrée/sortie
Par exemple ici on souhaite ouvrir le port 22001 :
- iptables -A OUTPUT -p tcp --dport 22001 -j ACCEPT
- iptables -A INPUT -p tcp --dport 22001 -j ACCEPT
On vérifie alors que les nouvelles règles permettant les entrées et sorties sur le port 22001 sont opérationnelles :
- iptables -L
doit alors retourner quelque chose comme (seules les lignes qui nous intéressent sont affichées) :
- Chain INPUT (policy DROP)
- target prot opt source destination
- [...]
- ACCEPT tcp -- anywhere anywhere tcp dpt:22001
- Chain OUTPUT (policy DROP)
- target prot opt source destination
- [...]
- ACCEPT tcp -- anywhere anywhere tcp dpt:22001
- ACCEPT all -- anywhere anywhere
On a donc bien entrée/sortie autorisées sur le port 22001.
NB : autre modification courante lors d’essais et bricolages sur iptables :
autoriser l’IP xx.yyy.zzz.aa quelque soit le protocole et le port :
- iptables -A INPUT -s xx.yyy.zzz.aa -j ACCEPT
- iptables -A OUTPUT -d xx.yyy.zzz.aa -j ACCEPT
3. Rendre les règles permanentes : iptables-save
La commande iptables ... utilisée ci-dessus à pour caractéristique que les règles sont bien intégrées dans le firewall et opérationnelles immédiatement (c’est le principe même de fonctionnement de fail2ban par exemple) mais qu’en revanche ces règles seront perdues au prochain redémarrage d’iptable (typiquement au prochain redémarrage du serveur).
Pour rendre les règles permanentes il faut alors les sauvegarder dans le fichier /etc/iptables/rules.v4 ou /etc/iptables/rules.v6 (selon qu’il s’agit de règles spécifiques pour IP V4 ou V6).
Deux méthodes sont possibles :
- méthode 1 : éditer le fichier voulu : par exemple
- nano /etc/iptables/rules.v4
puis copier/coller les règles dans le fichier (AVANT la dernière ligne)
- méthode 2 : enregistrer iptables tel qu’il est avec l’utilitaire iptables-save :
- iptables-save > /etc/iptables/rules.v4
Attention ! si vous utilisez fail2ban ou un autre utilitaire qui ajoute temporairement des règles à iptables, il est conseillé de réinitialiser les règles à l’état de démarrage pour ne pas se retrouver à sauvegarder les règles temporaires.
Pour cela on va "redémarrer" iptables AVANT de créer les nouvelle règles permanentes :- service netfilter-persistent restart
commande qui sera donc faite avant celles du paragraphe 2 qui ajoutent les règles.
Références :
- doc de base sur iptables : https://debian-facile.org/doc:reseau:iptables-pare-feu-pour-un-client
- gérer les règles et leur sauvegarde sous Debian 9 : https://www.geek17.com/fr/content/debian-9-stretch-securiser-votre-serveur-avec-le-firewall-iptables-32
- ipables-save : https://www.thomas-krenn.com/en/wiki/Saving_Iptables_Firewall_Rules_Permanently
- des exemples de syntaxe d’iptables : http://lea-linux.org/documentations/Iptables
- et la doc ultra complète et poussée sur iptables : https://www.inetdoc.net/guides/iptables-tutorial/