Table des matières

Contrôle parental à l'aide de CTparental

Nota :

Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !

Introduction

Nous allons mettre en place un contrôle parental sur une debian 12 à l'aide de CTparental. Pour les versions précédentes de debian, d'autres tutos existent :

Je me suis largement inspiré de ces tutos dont je vais donner les grandes étapes, en insistant sur les points qui ont été bloquant dans mon contexte, et en ajoutant des astuces de paramétrage qui m'ont été utiles.

Prérequis

Il faut disposer de deux comptes utilisateur sur le poste de travail : un compte enfant sans les droits administrateur et un parent avec les droits administrateur.

Si le poste de l'enfant est paramétré pour se connecter automatiquement à sa session au démarrage, il faut désactiver cette connexion automatique.

FIXME Certains tutos disent qu'il faut désactiver certain services qui seront pris en charge par CTparental. Je ne l'ai pas fait et ça fonctionne chez moi. Je vous laisse modifier ce tuto si vous constatez que cela est nécessaire pour certain services.

Installation de gdebi :

apt install gdebi
ATTENTION !
Il faut activer les dépôts trixie (testing actuel) et régler les priorités afin de régler le souci de dépendances dnscrypt-proxy non satisfaites avec debian 12. Cette modification doit être réalisée avec beaucoup de prudence si vous ne voulez pas rendre le système instable.

Pour éviter cela, il existe une série de tests que vous pouvez faire pour tester votre configuration, et de précautions à prendre.

Après avoir créé ou modifié votre fichier preferences, la première chose à faire est dans un terminal en root :

apt update

Puis vérifiez que vos modifications ont bien été prises en compte grâce à apt-cache policy.

Si les résultats affichés ne vous conviennent pas, vous risquez d'avoir une mauvaise surprise après une mise à jour…

le code ci-dessous configure le pinning pour n'installer que le paquet dnscrypt-proxy via la branche trixie (Debian testing), les autres serons pris dans la branche bookworm (Debian 12) ceci a fin d'éviter de basculer sur une testing à la prochaine mise à jour des paquets du système.

echo "deb http://ftp.de.debian.org/debian trixie main" > /etc/apt/sources.list.d/trixie.list
 
{
echo 'Package: dnscrypt-proxy
Pin: release n=trixie
Pin-Priority: 500
 
Package: *
Pin: release n=trixie
Pin-Priority: 1
'
} > /etc/apt/preferences.d/trixie.pref
ATTENTION !
On se souvient du warning précédent avant de continuer. Tout va bien ? Alors on continue en se rappelant que quoi qu'il advienne, vous êtes seul-e responsable ;-)

Installation

Visiter le site de téléchargement, choisir et télécharger la version qui vous convient. Il n'y a pas de version pour debian 12. J'ai choisi la version pour debian 11 full nginx.

On ouvre un terminal et on lance l'installation :

gdebi ctparental-full-nginx*.deb

Suivre les instructions dans le terminal :

…on patiente…plus ou moins longtemps…on va boire un café…on se gratte le nez…

Et voilà, à ce stade, c'est opérationnel.

Utilisation

Pour l'utilisation, je ne vais pas réinventer la roue, je vous renvoie vers ce lien pour la configuration et celui-ci pour l'administration.

Bonus : ouverture de ports

On rembobine l'histoire et on reprend la fin de l'install :

….blablabla….

Et voilà, à ce stade, c'est opérationnel.

…Ou pas ! :-)

Si, comme moi, vous aviez une politique d'accès bien définie via nftables, et bien du coup, non, ça n'est pas opérationnel car CTparental a pris la main sur nftables et votre configuration passe désormais par lui.

On édite le fichier /etc/CTparental/nftables.conf, on ajoute ses règles et on exécute la commande suivante :

CTparental -ipton

Bonus : accès distant à l'interface

Partons de la situation suivante : vos enfants ont des PC identifiés sur le réseau local par un nom d'hôte et une ip connus. Lorsque vous réalisez un ping depuis n'importe quel poste sur le réseau local vers le nom d'hôte de l'un d'eux, celui-ci fonctionne et tape bien dans l'ip voulue. Vous pouvez faire cela en modifiant les fichiers /etc/hosts de tous vos postes ou directement sur votre routeur. Ça n'est pas obligatoire mais c'est pratique.

Éditer le fichier /etc/nginx/sites-enabled/ctparental.conf et ajouter/modifier les lignes contenant IP_POSTE_ENFANT ou HOSTNAME_POSTE_ENFANT dans mon exemple ci-dessous :

server {
    listen 127.0.0.11:80 ;
    listen IP_POSTE_ENFANT:80 ;
    listen [fd00::127:11]:80 ;
    return 301 https://$host$request_uri;
}


server {
#    server_name admin.ct.local;
    server_name HOSTNAME_POSTE_ENFANT;
    # SSL configuration
    #
    #ssl on;
    listen 127.0.0.11:443 ssl ;
    listen IP_POSTE_ENFANT:443 ssl ;
    listen [fd00::127:11]:443 ssl ;
    ssl_certificate /etc/ssl/private/admin.ct.local.pem;
    ssl_certificate_key /etc/ssl/private/admin.ct.local.pem;
    root /var/www/CTadmin;
    index index.html index.php;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }

    # pass PHP scripts to FastCGI server
    #
    location ~ \.php$ {
        fastcgi_read_timeout 180;
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php-fpm.sock;
    }
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny all;
    }
}

server {
    server_name duckduckgo.com ;
    # SSL configuration
    #
    # ssl on;
    listen 127.0.0.11:443 ssl ;
    listen IP_POSTE_ENFANT:443 ssl ;
    listen [fd00::127:11]:443 ssl ;
    ssl_certificate /etc/ssl/private/duckduckgo.pem;
    ssl_certificate_key /etc/ssl/private/duckduckgo.pem;
    return 301 https://safe.duckduckgo.com$request_uri;
}

server {
    server_name www.qwant.com ;
    # SSL configuration
    #
    # ssl on;
    listen 127.0.0.11:443 ssl ;
    listen IP_POSTE_ENFANT:443 ssl ;
    listen [fd00::127:11]:443 ssl ;
    ssl_certificate /etc/ssl/private/qwant.pem;
    ssl_certificate_key /etc/ssl/private/qwant.pem;
    return 301 https://www.qwantjunior.com$request_uri;
}

Recharger le service nginx :

systemctl restart nginx.service

Il ne vous reste plus qu'à rentrer l'adresse https://HOSTNAME_POSTE_ENFANT dans votre navigateur pour gérer sa connexion depuis votre réseau local.

Désagréments

Au début je croyais que l'accès ssh était coupé et que ma configuration de nftables était mauvaise, en fait il n'y avait aucun problème. Les temps de démarrage de certains services sont significativement rallongés au démarrage du PC.

Par exemple, si vous avez l'habitude de réveiller les PC de vos enfants via wakeonlan et de tester que le démarrage est effectif via ping pour enchaîner directement par une commande ssh de mise à jour, celle-ci échouera car l'accès ssh sera différé de quelques dizaines de secondes.

Idem pour l'accès distant à l'interface.

1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !