Pivert's Blog

Ubuntu 24.04 – Contrôle parental


Reading Time: 3 minutes

Si vous avez de jeunes enfants, vous voudrez peut-être restreindre

  • le contenu auquel ils peuvent accéder
  • les applications
  • les plages horaires

Pour restreindre les applications et les plages horaires, vous pouvez utiliser Time Keeper NeXT. Manuel anglais.

Mais pour la restriction de contenu, nous allons utiliser une combinaison de OpenDNS et de iptables/nftables pour restreindre les catégories de site internet uniquement pour les utilisateurs concernés. (Les enfants).

Afin d’appliquer les restrictions aux enfants et pas aux adultes, il faut que les enfants aient des comptes.

Donc créez un compte pour chaque enfant utilisant le PC. Ici, kitty et zia.

Identification des enfants

Pour récupérer les uid des enfants on peut regarder dans le /etc/passwd ou utiliser la command id :

root@lisa:~# id zia kitty
uid=1001(zia) gid=1001(zia) groupes=1001(zia),100(users)
uid=1002(kitty) gid=1002(kitty) groupes=1002(kitty),100(users)

Les uid pour zia et kitty sont 1001 et 1002.

Configuration de OpenDNS

Créez un compte sur OpenDNS, et sélectionnez les catégories à autoriser. Exemple:

Mise à jour de l’IP

OpenDNS va identifier votre réseau d’après son IP source, IP qui va probablement changer lors des reconnexions.
Vous devrez probablement activer la mise à jour dynapique de l’IP et configurer ddclient:

Installez ddclient: apt install ddclient
Et configurez-le avec par exemple:

# Configuration file for ddclient
#
# /etc/ddclient.conf
# Feel free to use ifconfig.me or any other service to get your IP address
use=cmd, cmd='curl -s ifconfig.me'
ssl=yes

# Protocol
protocol=dyndns2, \
curl=yes, \
server=updates.opendns.com, \
login=opendnsusername, \
password='opendnspassword', \
Home

Redirections des requêtes DNS depuis les comptes enfants

Il faut donc intercepter les requêtes DNS (udp/53) en provenance des uid 1001 et 1002, et les rediriger vers le service de OpenDNS sur l’IP 208.67.222.222

Voici un exemple. Toutes les commandes doivent être exécutées en root

cat <<EOF >/usr/local/sbin/parental-control.sh
#!/bin/sh

# Flush nat table (equivalent to iptables -t nat -F)
nft flush ruleset table nat

# Create the nat table if it doesn't exist
nft add table ip nat

# Enable route_localnet
sysctl -w net.ipv4.conf.all.route_localnet=1

# Create the required chains
nft add chain ip nat OUTPUT { type nat hook output priority -100 \; }
nft add chain ip nat POSTROUTING { type nat hook postrouting priority 100 \; }

# Add DNS redirection rules (equivalent to the OUTPUT rules)
nft add rule ip nat OUTPUT ip daddr 127.0.0.53 udp dport 53 meta skuid 1001 dnat to 208.67.222.222
nft add rule ip nat OUTPUT ip daddr 127.0.0.53 udp dport 53 meta skuid 1002 dnat to 208.67.222.222

# Add MASQUERADE rules (equivalent to the POSTROUTING rules)
nft add rule ip nat POSTROUTING fib saddr type local fib daddr type unicast meta skuid 1001 masquerade
nft add rule ip nat POSTROUTING fib saddr type local fib daddr type unicast meta skuid 1002 masquerade
EOF


chmod u+x /usr/local/sbin/parental-control.sh

Sous Ubuntu 24.04, il n’y a plus de `/etc/rc.local` et il est préférable de créer un service pour que ces réglages s’activent automatiquement au démarrage:

cat <<EOF >/etc/systemd/system/parental-control.service
[Service]
Description=Kids Fencing Parental Control Service
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/sbin/parental-control.sh

[Install]
WantedBy=multi-user.target

[Unit]
Wants=network-online.target
EOF

N’oubliez pas de faire un systemctl daemon-reload après pour que systemctl prenne en compte le nouveau fichier de service.

Like it ?

Get notified on new posts (max 1 / month)
Soyez informés lors des prochains articles

Leave a Reply

Your email address will not be published. Required fields are marked *