Introduction
Confronté au sujet de contrôle parental, je me suis demandé s’il était possible de limiter l’accès réseau d’un utilisateur. La configuration doit être persistante, active dès le démarrage, et accessible en tant que super utilisateur seulement.
Firewall
C’est au niveau du firewall que la solution est la plus intuitive, mes recherches en ligne proposent presque toutes le même raisonnement :
- Ajouter une règle spécifique pour bloquer les flux,
- Spécifier le nom d’utilisateur,
DROP
toutes les connexions sauf pour l’interface loopbacklo
.
Ce qui donne, pour un système basé sur Debian équipé d’ iptables
:
$ iptables -A OUTPUT ! -o lo -m owner --uid-owner $USER -j DROP
La partie ! -o lo
exclut l’interface lo
. Le résultat est le suivant :
$ iptables -vL
[...]
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- any !lo anywhere anywhere owner UID match antoine
[...]
Pour revenir à la normale, on supprime simplement la règle. Attention, dans mon cas cette règle était la seule de la chain OUTPUT
.
$ iptables -D OUTPUT 1
Persistence
Pour que la persistence soit effective sur une machine Debian, une solution consiste en l’installation du package iptables-persistent
, et de copier les règles souhaitées dans le répertoire /etc/iptables/
, en suivant le nommage rules.v4
et rules.v6
pour les règles ipv4 et ipv6.
On lancera donc, pour sauvegarder les règles actuelles, les commandes suivantes :
# save ipv4 rules
$ iptables-save > /etc/iptables/rules.v4
# save ipv6 rules
$ ip6tables-save > /etc/iptables/rules.v6
Conclusion
La solution proposée semble binaire, mais on bénéficie toutefois de la granularité du firewall pour définir finement les accès réseaux, et donc les accès extérieurs vers internet.
Et pour aller un peu plus loin, on pourrait se conformer à l’utilisation de nftables
, successeur d’iptables
.