« Contrôle parental » : différence entre les versions

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche
(up version 3.10)
 
(183 versions intermédiaires par 5 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
lien sur le [http://www.debian-fr.org/controle-parental-pour-le-pc-debian-de-vos-enfants-t42009.html forum]
__TOC__


<code bash>
Petit rappel : Le contrôle parental ne doit pas se substituer aux coups d’œil et dialogues avec vos enfants de temps en temps mais apporte un plus.
#!/bin/bash
# CTparental.sh
#
# par guillaume MARSAT
# une parti du code est tirer du scripte alcasar-bl.sh créer par Franck BOUIJOUX and Richard REY
# présent dans le code du projet alcasar en version 2.6.1 ; web page http://www.alcasar.net/


# This script is distributed under the Gnu General Public License (GPL)
Je vous propose donc de mettre en place un filtrage directement sur le pc a protéger, à l'aide de :
#if [ ! $UID -eq 0 ]; then
#  echo "Il vous faut les droit root pour lancer ce scripte"
#  exit 1
#fi
args=${1}
SED="/bin/sed -i"
DIR_CONF="/usr/local/etc/CTparental"
FILE_CONF="$DIR_CONF/CTparental.conf"
FILE_HCONF="$DIR_CONF/CThours.conf";
if [ ! -f $FILE_CONF ] ; then
mkdir -p $DIR_CONF
cat << EOF > $FILE_CONF
LASTUPDATE=0
DNSMASQ=BLACK
AUTOUPDATE=OFF
HOURSCONNECT=OFF
EOF


fi
iptables+dnsmasq+dansguardian+privoxy (Pour le filtrage)


tempDIR="/tmp/alcasar"
lighttpd (Pour la page de redirection et l'interface d'administration)
RougeD="\033[1;31m"
BleuD="\033[1;36m"
VertD="\033[1;32m"
Fcolor="\033[0m"
GESTIONNAIREDESESSIONS=" login gdm lightdm slim kdm xdm "
FILEPAMTIMECONF="/etc/security/time.conf"
DIRPAM="/etc/pam.d/"
DAYS=( lundi mardi mercredi jeudi vendredi samedi dimanche )
DAYSPAM=( Mo Tu We Th Fr Sa Su )
DAYSCRON=( mon tue wed thu fri sat sun )
service --help 2&> /dev/null
if [ $? -eq 0 ] ; then
  CMDSERVICE="service "
else
  CMDSERVICE="/etc/init.d/"
fi
DNSMASQCONF="/etc/dnsmasq.conf"
MAINCONFHTTPD="/etc/lighttpd/lighttpd.conf"
DIRCONFENABLEDHTTPD="/etc/lighttpd/conf-enabled"
CTPARENTALCONFHTTPD=$DIRCONFENABLEDHTTPD"/10-CTparental.conf"
RESOLVCONFMAIN="/etc/resolvconf"
RESOLVDNSMASQ="$RESOLVCONFMAIN/run/interface/lo.dnsmasq"
RESOLVCONFORDER="$RESOLVCONFMAIN/interface-order"
DIRHTML="/var/www/CTparental"
DIRadminHTML="/var/www/CTadmin"
namservicednsmaq="dnsmasq"
namservicehttpd="lighttpd"
namservicecrond="cron"
PASSWORDFILEHTTPD="/etc/lighttpd/lighttpd-htdigest.user"
REALMADMINHTTPD="interface admin"
CMDINSTALL=""
yum help 2&> /dev/null
if [ $? -eq 0 ] ; then
  ## "Distribution baser sur yum exemple readhat,fedora..."
  CMDINSTALL="yum install "
  CMDREMOVE="yum remove "
  yum info openresolv 2&> /dev/null
  if [ $? -eq 0 ] ; then
paquetresolv="openresolv"
  else
        paquetresolv="resolvconf"
  fi
fi
urpmi --help 2&> /dev/null
if [ $? -eq 1 ] ; then
  ## "Distribution baser sur urpmi exemple mandriva..."
  CMDINSTALL="urpmi -a --auto "
  CMDREMOVE="urpme --auto "
  namservicecrond="crond"
  paquetresolv="openresolv"
fi
apt-get -h 2&> /dev/null
if [ $? -eq 0 ] ; then
  ## "Distribution baser sur apt-get exemple debian,ubuntu ..."
  CMDINSTALL="apt-get -y --force-yes install "
  CMDREMOVE="apt-get -y --force-yes remove --purge "
  paquetresolv="resolvconf" # pour compatibiliter debian 6
fi
if [ $args="-i" ] ; then
  namserviceNetworkManager="network-manager"
  if [ -f /etc/NetworkManager/NetworkManager.conf ];then
    $SED "s/^dns=dnsmasq/#dns=dnsmasq/g" /etc/NetworkManager/NetworkManager.conf
    $CMDSERVICE$namserviceNetworkManager restart
    sleep 5
  fi
fi
if [ $( echo $CMDINSTALL | wc -m ) -eq 1 ] ; then
  echo "Aucun gestionner de paquet connu , n'a été détecté."
  exit 1
fi






interface_WAN=$(ip route | awk '/^default via/{print $5}') # suppose que la passerelle est la route par default
== Les sources. ==


if [ -f $DIR_CONF/resolv.conf.sav ];then
Toutes les sources sont sur le [https://gitlab.com/marsat/CTparental site officiel]
  DNS1=$(cat $DIR_CONF/resolv.conf.sav | grep ^nameserver | cut -d " " -f2 | tr "\n" " " | cut -d " " -f1)
  DNS2=$(cat $DIR_CONF/resolv.conf.sav | grep ^nameserver | cut -d " " -f2 | tr "\n" " " | cut -d " " -f2)
else
  DNS1=$(cat /etc/resolv.conf | grep ^nameserver | cut -d " " -f2 | tr "\n" " " | cut -d " " -f1)
  DNS2=$(cat /etc/resolv.conf | grep ^nameserver | cut -d " " -f2 | tr "\n" " " | cut -d " " -f2)
fi


PRIVATE_IP="127.0.0.10"
== Installation par le deb : ==
FILE_tmp="$tempDIR/filetmp.txt"
BL_SERVER="dsi.ut-capitole.fr"
CATEGORIES_ENABLED="$DIR_CONF/categories-enabled"
BL_CATEGORIES_AVAILABLE="$DIR_CONF/bl-categories-available"
WL_CATEGORIES_AVAILABLE="$DIR_CONF/wl-categories-available"
DIR_DNS_FILTER_AVAILABLE="$DIR_CONF/dnsfilter-available"
DIR_DNS_BLACKLISTE_ENABLED="$DIR_CONF/blackliste-enabled"
DIR_DNS_WHITELIST_ENABLED="$DIR_CONF/whitelist-enabled"
DNS_FILTER_OSSI="$DIR_CONF/blackliste-local"
DREAB="$DIR_CONF/domaine-rehabiliter"
THISDAYS=$(expr $(date +%Y) \* 365 + $(date +%j))
MAXDAYSFORUPDATE="7" # update tous les 7 jours
CHEMINCTPARENTLE=$(readlink -f $0)


initblenabled () {
Téléchargez la dernière version deb correspondant à votre distribution sur https://gitlab.com/marsat/CTparental/-/releases .
  cat << EOF > $CATEGORIES_ENABLED
adult
agressif
dangerous_material
dating
drogue
gambling
hacking
malware
marketingware
mixed_adult
phishing
redirector
sect
strict_redirector
strong_redirector
tricheur
warez
ossi 
EOF
       


}
il y a 2 branches encore actives du logiciel en fonction des paquets utilisés pour effectuer le filtrages, ce qui permet d’être plus modulable en fonction des machines et distributions utilisées.
(à partir des versions versions 5.x.x)


addadminhttpd() {
- '''master''' = nftables (successeur d'iptables), dnscrypt-proxy (remplaçant dnsmasq), lighttpd ou nginx, privoxy et e2guardian ( successeur de dansguardian ).
if [ ! -f $PASSWORDFILEHTTPD ] ; then
    echo -n > $PASSWORDFILEHTTPD 
fi
chown root:$USERHTTPD $PASSWORDFILEHTTPD
chmod 640 $PASSWORDFILEHTTPD
USERADMINHTTPD=${1}
pass=${2}
hash=`echo -n "$USERADMINHTTPD:$REALMADMINHTTPD:$pass" | md5sum | cut -b -32`
ligne=$(echo "$USERADMINHTTPD:$REALMADMINHTTPD:$hash")
$SED "/^$USERADMINHTTPD:$REALMADMINHTTPD.*/d" $PASSWORDFILEHTTPD
echo $ligne >> $PASSWORDFILEHTTPD
}


download() {
- '''min''' = nftables = nftables (successeur d'iptables), dnscrypt-proxy (remplaçant dnsmasq), lighttpd ou nginx.
  rm -rf $tempDIR
  mkdir $tempDIR
  wget -P $tempDIR http://$BL_SERVER/blacklists/download/blacklists.tar.gz 2>&1 | cat
  if [ ! $? -eq 0 ]; then
      echo "erreur lors du téléchargement processu interompu"
      rm -rf $tempDIR
      exit 1
  fi
  tar -xzf $tempDIR/blacklists.tar.gz -C $tempDIR
  if [ ! $? -eq 0 ]; then
      echo "erreur d'extraction de l'archive processu interompu"
      exit 1
  fi
  rm -rf $DIR_DNS_FILTER_AVAILABLE/
  mkdir $DIR_DNS_FILTER_AVAILABLE
}
autoupdate() {
        LASTUPDATEDAY=`grep LASTUPDATE= $FILE_CONF | cut -d"=" -f2`
        LASTUPDATEDAY=${LASTUPDATEDAY:=0}
        DIFFDAY=$(expr $THISDAYS - $LASTUPDATEDAY)
if [ $DIFFDAY -ge $MAXDAYSFORUPDATE ] ; then
download
adapt
catChoice
dnsmasqon
                $SED "s?^LASTUPDATE.*?LASTUPDATE=$THISDAYS=`date +%d-%m-%Y\ %T`?g" $FILE_CONF
exit 0
fi
}
autoupdateon() {
$SED "s?^AUTOUPDATE.*?AUTOUPDATE=ON?g" $FILE_CONF
echo "*/10 * * * * root $CHEMINCTPARENTLE -aup" > /etc/cron.d/CTparental-autoupdate
$CMDSERVICE$namservicecrond restart
}


autoupdateoff() {
et 5 branches historique, non maintenu qui ce basé sur dnsmasq, dansguardian , iptables .(jusqu'aux versions 4.x.x)
$SED "s?^AUTOUPDATE.*?AUTOUPDATE=OFF?g" $FILE_CONF
rm -f /etc/cron.d/CTparental-autoupdate
$CMDSERVICE$namservicecrond restart
}
adapt() {
  dnsmasqoff
  if [ ! -f $DNS_FILTER_OSSI ] ; then
            echo > $DNS_FILTER_OSSI
  fi


  if [ -d $tempDIR  ] ; then
- '''dnsmasq''' = nftables (successeur d'iptables), dnsmasq, lighttpd ou nginx, privoxy et e2guardian ( successeur de dansguardian ).
  CATEGORIES_AVAILABLE=$tempDIR/categories_available
  ls -FR $tempDIR/blacklists | grep '/$' | sed -e "s/\///g" > $CATEGORIES_AVAILABLE
          echo -n > $BL_CATEGORIES_AVAILABLE
          echo -n > $WL_CATEGORIES_AVAILABLE
          if [ ! -f $DIR_DNS_FILTER_AVAILABLE/ossi.conf ] ; then
echo > $DIR_DNS_FILTER_AVAILABLE/ossi.conf
  fi
  for categorie in `cat $CATEGORIES_AVAILABLE` # creation des deux fichiers de categories (BL / WL)
  do
if [ -e $tempDIR/blacklists/$categorie/usage ]
then
is_whitelist=`grep white $tempDIR/blacklists/$categorie/usage|wc -l`
else
is_whitelist=0 # ou si le fichier 'usage' n'existe pas, on considère que la catégorie est une BL
fi
if [ $is_whitelist -eq "0" ]
then
echo "$categorie" >> $BL_CATEGORIES_AVAILABLE
else
echo "$categorie" >> $WL_CATEGORIES_AVAILABLE
fi
  done
        echo -n "Toulouse Black and White List migration process. Please wait : "
        for DOMAINE in `cat  $CATEGORIES_AVAILABLE`  # pour chaque catégorie
        do
            echo -n "."
            # suppression des @IP, de caractères acccentués et des lignes commentées ou vide
            egrep  -v "([0-9]{1,3}\.){3}[0-9]{1,3}" $tempDIR/blacklists/$DOMAINE/domains > $FILE_tmp
            $SED "/[äâëêïîöôüû]/d" $FILE_tmp
            $SED "/^#.*/d" $FILE_tmp
            $SED "/^$/d" $FILE_tmp
            $SED "s/\.\{2,1000\}/\./g" $FILE_tmp # supprime les suite de "." exemple: address=/fucking-big-tits..com/127.0.0.10 devient address=/fucking-big-tits.com/127.0.0.10
    is_blacklist=`grep $DOMAINE $BL_CATEGORIES_AVAILABLE |wc -l`
    if [ $is_blacklist -ge "1" ] ; then
            $SED "s?.*?address=/&/$PRIVATE_IP?g" $FILE_tmp  # Mise en forme dnsmasq des listes noires
mv $FILE_tmp $DIR_DNS_FILTER_AVAILABLE/$DOMAINE.conf 
            else
$SED "s?.*?server=/&/#?g" $FILE_tmp  # Mise en forme dnsmasq des listes blanches
mv $FILE_tmp $DIR_DNS_FILTER_AVAILABLE/$DOMAINE.conf
            fi
        done
  else
        mkdir  $tempDIR
        echo -n "."
# suppression des @IP, de caractères acccentués et des lignes commentées ou vide
        egrep  -v "([0-9]{1,3}\.){3}[0-9]{1,3}" $DNS_FILTER_OSSI  > $FILE_tmp
        $SED "/[äâëêïîöôüû]/d" $FILE_tmp
        $SED "/^#.*/d" $FILE_tmp
        $SED "/^$/d" $FILE_tmp
        $SED "s/\.\{2,1000\}/\./g" $FILE_tmp # supprime les suite de "." exemple: address=/fucking-big-tits..com/127.0.0.10 devient address=/fucking-big-tits.com/127.0.0.10
        $SED "s?.*?address=/&/$PRIVATE_IP?g" $FILE_tmp  # Mise en forme dnsmasq
        mv $FILE_tmp $DIR_DNS_FILTER_AVAILABLE/ossi.conf
  fi   
  echo
  rm -rf $tempDIR
}
catChoice() {
#  echo "catChoice"
  rm -rf $DIR_DNS_BLACKLISTE_ENABLED/
  mkdir $DIR_DNS_BLACKLISTE_ENABLED
  rm -rf  $DIR_DNS_WHITELIST_ENABLED/
  mkdir  $DIR_DNS_WHITELIST_ENABLED
   
      for CATEGORIE in `cat $CATEGORIES_ENABLED` # on affecte les catégories dnsmasq
      do
is_blacklist=`grep $CATEGORIE $BL_CATEGORIES_AVAILABLE |wc -l`
if [ $is_blacklist -ge "1" ] ; then
cp $DIR_DNS_FILTER_AVAILABLE/$CATEGORIE.conf $DIR_DNS_BLACKLISTE_ENABLED/
        else
cp $DIR_DNS_FILTER_AVAILABLE/$CATEGORIE.conf $DIR_DNS_WHITELIST_ENABLED/
    fi   
      done
      cp $DIR_DNS_FILTER_AVAILABLE/ossi.conf $DIR_DNS_BLACKLISTE_ENABLED/
#      echo "fincatChoice"
      reabdomaine
}


reabdomaine () {
- '''dnsmasq_min''' = nftables = nftables (successeur d'iptables), dnsmasq, lighttpd ou nginx.
if [ ! -f $DREAB ] ; then
cat << EOF > $DREAB
  www.google.com
  www.google.fr
EOF
fi
if [ ! -f $DIR_DNS_BLACKLISTE_ENABLED/ossi.conf ] ; then
echo > $DIR_DNS_BLACKLISTE_ENABLED/ossi.conf
fi
echo
echo -n "Application de la liste blanche (domaine réabiliter):"
for CATEGORIE in `cat  $CATEGORIES_ENABLED  `  # pour chaque catégorie
do
is_blacklist=`grep $CATEGORIE $BL_CATEGORIES_AVAILABLE |wc -l`
if [ $is_blacklist -ge "1" ] ; then
echo -n "."
for DOMAINE in `cat  $DREAB`
do
    $SED "/$DOMAINE/d" $DIR_DNS_BLACKLISTE_ENABLED/$CATEGORIE.conf
done
        fi
done
echo -n "."
cat $DREAB | sed -e "s? ??g" | sed -e "s?.*?server=/&/#?g" >  $DIR_DNS_WHITELIST_ENABLED/whiteliste.ossi.conf
echo
}


dnsmasqon () {
- '''iptables''' = iptables, ipset, dnsmasq, lighttpd ou nginx, privoxy et e2guardian ( successeur de dansguardian ).
  categorie1=`sed -n "1 p" $CATEGORIES_ENABLED` # on considaire que si la 1 er categorie activer est un blackliste on fonctionne par blackliste.
  is_blacklist=`grep $categorie1 $BL_CATEGORIES_AVAILABLE |wc -l`
  if [ $is_blacklist -ge "1" ] ; then
  $SED "s?^DNSMASQ.*?DNSMASQ=BLACK?g" $FILE_CONF
  cat << EOF > $DNSMASQCONF
        # Configuration file for "dnsmasq with blackhole"
  # Inclusion de la blacklist <domains> de Toulouse dans la configuration
  conf-dir=$DIR_DNS_BLACKLISTE_ENABLED
  # conf-file=$DIR_DEST_ETC/alcasar-dns-name  # zone de definition de noms DNS locaux
  no-dhcp-interface=$interface_WAN
  bind-interfaces
  cache-size=1024
  domain-needed
  expand-hosts
  bogus-priv
  server=$DNS1
  server=$DNS2
 
EOF
$CMDSERVICE$namservicednsmaq restart
else
  dnsmasqwhitelistonly
fi
}
dnsmasqoff () {
  $SED "s?^DNSMASQ.*?DNSMASQ=OFF?g" $FILE_CONF
  cat << EOF > $DNSMASQCONF
        # Configuration file for "dnsmasq with blackhole"
  # Inclusion de la blacklist <domains> de Toulouse dans la configuration
  # conf-dir=$DIR_DNS_BLACKLISTE_ENABLED
  # conf-file=$DIR_DEST_ETC/alcasar-dns-name  # zone de definition de noms DNS locaux
  no-dhcp-interface=$interface_WAN
  bind-interfaces
  cache-size=0
  domain-needed
  expand-hosts
  bogus-priv
  server=$DNS1
  server=$DNS2
 
EOF


$CMDSERVICE$namservicednsmaq restart
- '''dansguardian''' = iptables, ipset, dnsmasq, lighttpd, privoxy et dansguardian.
}
dnsmasqwhitelistonly  () {
  $SED "s?^DNSMASQ.*?DNSMASQ=WHITE?g" $FILE_CONF
  cat << EOF > $DNSMASQCONF
        # Configuration file for "dnsmasq with blackhole"
  # Inclusion de la blacklist <domains> de Toulouse dans la configuration
  conf-dir=$DIR_DNS_WHITELIST_ENABLED
  # conf-file=$DIR_DEST_ETC/alcasar-dns-name  # zone de definition de noms DNS locaux
  no-dhcp-interface=$interface_WAN
  bind-interfaces
  cache-size=0
  domain-needed
  expand-hosts
  bogus-priv
  server=$DNS1
  server=$DNS2
  address=/#/$PRIVATE_IP #redirige vers $PRIVATE_IP pour tous ce qui n'a pas étais resolut dans les listes blanches
EOF


$CMDSERVICE$namservicednsmaq restart
- '''iptables_min''' = iptables, ipset,dnsmasq, lighttpd ou nginx.
}


exemple pour debian9 il y a 4 paquet possible. 2 paquet dérivé de la branche iptables avec lighttpd ou nginx et 2 autres dérivé de la branche iptables_min si l'on veut utiliser moins de ressources.


FoncHTTPDCONF () {
== Pour ceux qui veulent tester en ipv6 ==
$CMDSERVICE$namservicehttpd stop
rm -rf $DIRHTML/*
mkdir -v $DIRHTML
if [ ! -z $DIRhtmlPersonaliser ];then
  cp -r $DIRhtmlPersonaliser/* $DIRHTML
else
s="span"
st="style"
c="$c"
cab=";\">"


cat << EOF > $DIRHTML/index.html
c'est possible avec la dernière les version 4.20.x sous debian testing/sid ,<br />
<HTML>
il faudra au préalable s’assurer que son fournisseur d'accès accepte bien l'ipv6 , ce qui n'est malheureusement pas mon cas.
<HEAD>
  <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
  <TITLE>danger</TITLE>
</HEAD>
<BODY LANG="fr-FR" DIR="LTR">
<CENTER>
<img alt="Site dangereux pour des mineurs"
  HEIGHT="600" 
  src="data:image/png;base64,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
QmCC" />
</CENTER>
</BODY>
</HTML>
EOF


fi
l'ipv6 n'étant pas encore implémentée dans e2guardian , ctparental ne force pas le passage par celui-ci mais attaque directement privoxy.
## GENERATION


ln -s  $DIRHTML/index.html $DIRHTML/err404.html
Une désinstallation avec purge est nécessaire en cas de mise à jour d'une version antérieure.
USERHTTPD=$(cat /etc/passwd | grep /var/www | cut -d":" -f1)
GROUPHTTPD=$(cat /etc/group | grep $USERHTTPD | cut -d":" -f1)


cat << EOF > $MAINCONFHTTPD
  # apt-get remove --purge ctparental privoxy e2guardian dansguardian dnsmasq lighttpd
server.modules = (
"mod_access",
"mod_alias",
"mod_redirect",
"mod_auth", #pour insteface admin
"mod_fastcgi",  #pour insteface admin (activation du php)
# "mod_rewrite",
)
auth.debug                = 0
auth.backend              = "htdigest"
auth.backend.htdigest.userfile = "$PASSWORDFILEHTTPD"


server.document-root = "/var/www"
  $ wget -c https://gitlab.com/marsat/CTparental/uploads/d5567eb1a43ffde679193bce87be5f69/ctparental_debian10_lighttpd_4.44.18-1.0_all.deb
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
server.username = "$USERHTTPD"
server.groupname = "$GROUPHTTPD"
server.port = 80
server.bind = "127.0.0.1"


Pour tester le filtrage avec un utilisateur non filtré il suffit que celui-ci ajoute le proxy http et https suivant dans son navigateur.<br />
http et https '''::1''' port '''8888'''


index-file.names = ( "index.php", "index.html" )
Pour les utilisateurs filtrés c'est automatique, il n'y a rien à faire.
url.access-deny = ( "~", ".inc" )
static-file.exclude-extensions = (".php", ".pl", ".fcgi" )


compress.cache-dir = "/var/cache/lighttpd/compress/"
== Nettoyage des versions précédentes : ==
compress.filetype = ( "text/css", "text/html", "text/plain" )
si vous utilisé l'instance dnscrypt-proxy du deb pour vos connexions système il faut installer celui-ci de manière autonome via la commande ci dessous:
 
  # apt-get install dnscrypt-proxy


server.tag = ""
cela éviteras la surpression de dnscrypt-proxy durant la procédure de dés-installation de ctparental, et ainsi une perte de connexion système.  


include_shell "/usr/share/lighttpd/create-mime.assign.pl"
  # apt-get autoremove --purge  ctparental clamav-* privoxy lighttpd dansguardian dnsmasq nginx e2guardian
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
EOF


mkdir -p /usr/share/lighttpd/
  # rm -rf /etc/CTparental


if [ ! -f /usr/share/lighttpd/create-mime.assign.pl ];then
== Installez le deb : ==
cat << EOF > /usr/share/lighttpd/create-mime.assign.pl
#!/usr/bin/perl -w
use strict;
open MIMETYPES, "/etc/mime.types" or exit;
print "mimetype.assign = (\n";
my %extensions;
while(<MIMETYPES>) {
  chomp;
  s/\#.*//;
  next if /^\w*$/;
  if(/^([a-z0-9\/+-.]+)\s+((?:[a-z0-9.+-]+[ ]?)+)$/) {
    foreach(split / /, \$2) {
      # mime.types can have same extension for different
      # mime types
      next if \$extensions{\$_};
      \$extensions{\$_} = 1;
      print "\".\$_\" => \"\$1\",\n";
    }
  }
}
print ")\n";
EOF
chmod +x /usr/share/lighttpd/create-mime.assign.pl
fi


  # gdebi ctparental_*_all.deb


if [ ! -f /usr/share/lighttpd/include-conf-enabled.pl ];then
(J'utilise gdebit car cela évite le téléchargement et l'installation manuelle des dépendances.)
cat << EOF > /usr/share/lighttpd/include-conf-enabled.pl
#!/usr/bin/perl -wl


use strict;
Important : Depuis la version 3.92 les paramètres proxy changent automatiquement au premier démarrage de la session, ce qui fait que c'est transparent pour l'utilisateur.<br />
use File::Glob ':glob';
Si après avoir redémarré votre session vous avez encore des problèmes de connexion aux sites https tels que google.com, testez avant tout l'ajout du proxy suivant.<br />
proxy http 127.0.0.1 sur port 8080<br />
proxy https 127.0.0.1 sur port 8080<br />


my \$confdir = shift || "/etc/lighttpd/";
=== Pour les versions avant la 3.95-3 ===
my \$enabled = "conf-enabled/*.conf";
Il est conseillé d'ajouter tous les domaines de vos dépôts dans les domaines réhabilités cela peut éviter certaines erreurs quand on utilise su au lieu de su - avant des commandes apt-get aptitude …


chdir(\$confdir);
Lancez cette ligne de commandes pour les connaître.
my @files = bsd_glob(\$enabled);
  $ cat /etc/apt/sources.list /etc/apt/sources.list.d/* 2>/dev/null | awk -F/ '/^deb/ {print $3}' | sort -u


for my \$file (@files)
Pour la version 3.95-3 et supérieure, après l'ajout d'un nouveau dépôt, il faut juste penser à lancer la commande suivante :
{
 
        print "include \"\$file\"";
  # CTparental -ubl
}
EOF
chmod +x /usr/share/lighttpd/include-conf-enabled.pl


fi
Pour tester si ça fonctionne faire un ping à partir d'un compte filtré.


mkdir -p $DIRCONFENABLEDHTTPD
  $ su child -c "ping youporn.com"
mkdir -p $DIRadminHTML
cp -rf CTadmin/* $DIRadminHTML/
clear
echo "Entrer le login pour l'interface d'administration :"
while (true); do
read loginhttp
case $loginhttp in
* )
echo "login:  $loginhttp" > /root/passwordCTadmin
break
;;
        esac
      done
clear
      echo "Entrer le mot de $loginhttp :"
      while (true); do
read password
case $password in
* )
echo "password: $password" >> /root/passwordCTadmin
                addadminhttpd "$loginhttp" "$password"
break
;;
        esac
      done
chmod 700 /root/passwordCTadmin
chown root:root /root/passwordCTadmin
cat << EOF > $CTPARENTALCONFHTTPD


fastcgi.server = (
''child'' est à remplacer par le compte pour lequel vous voulez tester.
    ".php" => (
      "localhost" => (
        "bin-path" => "/usr/bin/php-cgi",
        "socket" => "/run/lighttpd/php-fastcgi.sock",
        "max-procs" => 4, # default value
        "bin-environment" => (
          "PHP_FCGI_CHILDREN" => "1", # default value
        ),
        "broken-scriptfilename" => "enable"
      ))
)
  fastcgi.map-extensions    = ( ".php3" => ".php",
                              ".php4" => ".php",
                              ".php5" => ".php",
                              ".phps" => ".php",
                              ".phtml" => ".php" )


\$HTTP["url"] =~ ".*CTadmin.*" {
doit retourner quelque chose comme ça :
  auth.require = ( "" =>
                  (
                    "method"  => "digest",
                    "realm"  => "$REALMADMINHTTPD",
                    "require" => "user=$USERADMINHTTPD"
                  )
                )


}
  PING youporn.com (127.0.0.10) 56(84) bytes of data.
\$SERVER["socket"] == "$PRIVATE_IP:80" {
server.document-root = "$DIRHTML"
server.errorfile-prefix = "$DIRHTML/err"
#ssl.engine = "enable"
#ssl.pemfile = "/etc/lighttpd/ssl/$PRIVATE_IP.pem"
}


EOF
  bytes from 127.0.0.10: icmp_req=1 ttl=64 time=0.026 ms
chown root:$GROUPHTTPD $DREAB
chmod 660 $DREAB
chown root:$GROUPHTTPD $DNS_FILTER_OSSI
chmod 660 $DNS_FILTER_OSSI
chown root:$GROUPHTTPD $CATEGORIES_ENABLED
chmod 660 $CATEGORIES_ENABLED
chmod 660 /etc/sudoers
is_sudo_ok=`grep $USERHTTPD /etc/sudoers |wc -l`
        if [ $is_sudo_ok -ge "1" ] ; then
$SED "s?^$USERHTTPD.*?$USERHTTPD ALL=(ALL) NOPASSWD:/usr/local/bin/CTparental.sh -tlu,/usr/local/bin/CTparental.sh -trf,/usr/local/bin/CTparental.sh -dble,/usr/local/bin/CTparental.sh -ubl,/usr/local/bin/CTparental.sh -dl,/usr/local/bin/CTparental.sh -on,/usr/local/bin/CTparental.sh -off,/usr/local/bin/CTparental.sh -aupon,/usr/local/bin/CTparental.sh -aupoff?g" /etc/sudoers
        else
        echo "$USERHTTPD ALL=(ALL) NOPASSWD:/usr/local/bin/CTparental.sh -tlu,/usr/local/bin/CTparental.sh -trf,/usr/local/bin/CTparental.sh -dble,/usr/local/bin/CTparental.sh -ubl,/usr/local/bin/CTparental.sh -dl,/usr/local/bin/CTparental.sh -on,/usr/local/bin/CTparental.sh -off,/usr/local/bin/CTparental.sh -aupon,/usr/local/bin/CTparental.sh -aupoff" >> /etc/sudoers
        fi
chmod 440 /etc/sudoers
if [ ! -f $FILE_HCONF ] ; then
echo > $FILE_HCONF
fi
chown root:$GROUPHTTPD $FILE_HCONF
chmod 660 $FILE_HCONF
$CMDSERVICE$namservicehttpd start
}


install () {
Si l'adresse IP est différente de 127.0.0.10 c'est que le filtrage ne fonctionne pas.
      if [ $(netstat -anlp | grep -w LISTEN | grep ":80" | cut -d"/" -f2 | wc -l ) -gt 0 ] ; then
  echo "le Serveur Web $(netstat -anlp | grep -w LISTEN | grep ":80" | cut -d"/" -f2 | sort -u ) tourne deja sur ce pc"
  echo "veuiller le désinstaler avant d'installer le control parental."
  exit 1
      fi
      mkdir $tempDIR
      mkdir -p $DIR_CONF
      initblenabled
      cat /etc/resolv.conf > $DIR_CONF/resolv.conf.sav
      $CMDINSTALL dnsmasq
      $CMDINSTALL lighttpd
      $CMDINSTALL php5-cgi
      if [ ! -f blacklists.tar.gz ]
      then
        download
      else
        tar -xzf blacklists.tar.gz -C $tempDIR
        if [ ! $? -eq 0 ]; then
            echo "erreur d'extraction de l'archive processu interompu"
            exit 1
        fi
        rm -rf $DIR_DNS_FILTER_AVAILABLE/
        mkdir $DIR_DNS_FILTER_AVAILABLE
      fi
      adapt
      catChoice
      dnsmasqon
      $SED "s?^LASTUPDATE.*?LASTUPDATE=$THISDAYS=`date +%d-%m-%Y\ %T`?g" $FILE_CONF
      $CMDINSTALL $paquetresolv
      confresolvconf


      FoncHTTPDCONF
Pour l'aide tapez :
}


confresolvconf () {
  # CTparental
echo "nameserver 127.0.0.1" > $RESOLVDNSMASQ
if [ ! -f $RESOLVCONFORDER ];then
cat << EOF > $RESOLVCONFORDER
# interface-order(5)
lo.inet*
lo.dnsmasq
lo.pdnsd
lo.!(pdns|pdns-recursor)
lo
tun*
tap*
hso*
em+([0-9])?[+([0-9]))*
p+([0-9]p+([0-9])?(_+([0-9]))*
eth*
ath*
wlan*
ppp*
*
EOF
fi
resolvconf -u
}


uninstall () {
sans aucun paramètre.
  rm -f /etc/cron.d/CTparental*
  $CMDSERVICE$namservicecrond restart
  $CMDSERVICE$namservicehttpd stop
  rm -f /var/www/index.lighttpd.html
  rm -rf $tempDIR
  rm -rf $DIR_CONF
  rm -rf $DIRHTML


  if [ -f /etc/NetworkManager/NetworkManager.conf ];then
== Configuration ==
$SED "s/^#dns=dnsmasq/dns=dnsmasq/g" /etc/NetworkManager/NetworkManager.conf
Pour les versions 4.20.27  et supérieures on accède à l'interface d'administration par le lien web suivant: https://admin.ct.local
$CMDSERVICE$namserviceNetworkManager restart
  sleep 5
  fi
  rm -rf /usr/share/lighttpd/*
  rm -f $CTPARENTALCONFHTTPD
  rm -rf $DIRadminHTML
  rm -f $RESOLVDNSMASQ
  resolvconf -u


  $CMDREMOVE lighttpd
Pour les versions 4.20.26  on accède à l'interface d'administration par le lien web suivant: https://admin.ct.localhost
  $CMDREMOVE dnsmasq
  $CMDREMOVE $paquetresolv
}


choiblenabled () {
Pour les versions inférieure à  4.20.26 on accède à l'interface d'administration par le lien web suivant: http://127.0.0.1/CTadmin
echo -n > $CATEGORIES_ENABLED
clear
echo "Voulez Filtre par Blackliste ou Whiteliste :"
echo -n " B/W :"
while (true); do
        read choi
        case $choi in
        B | b )
        echo "Vous aller maintenant choisir les \"Black listes\" a appliquer."
for CATEGORIE in `cat  $BL_CATEGORIES_AVAILABLE`  # pour chaque catégorie
do 
      clear
      echo "Voulez vous activer la categorie :"
      echo -n "$CATEGORIE  O/N :"
      while (true); do
read choi
case $choi in
O | o )
echo $CATEGORIE >> $CATEGORIES_ENABLED
break
;;
N | n )
break
;;
      esac
      done
done
        break
        ;;
        W | w )
        echo "Vous aller maintenant choisir les \"White listes\" a appliquer."
for CATEGORIE in `cat  $WL_CATEGORIES_AVAILABLE`  # pour chaque catégorie
do 
      clear
      echo "Voulez vous activer la categorie :"
      echo -n "$CATEGORIE  O/N :"
      while (true); do
read choi
case $choi in
O | o )
echo $CATEGORIE >> $CATEGORIES_ENABLED
break
;;
N | n )
break
;;
      esac
      done
done
        break
        ;;
      esac
done
}


Pour les versions 4.20.9 et supérieures dans le Choix des catégories à filtrer ajouter la catégorie '''ctparental'''<br />
Pour les versions inférieures ajouter la liste ci dessous dans les [https://github.com/marsat/CTparental/wiki/Noms-de-domaine-filtr%C3%A9s-%28ossi%29 Noms de domaine filtrés]


errortime1 () {
Pour les utilisateurs des applications winehq et playonelinux en ctparental versions 4.20.11 et inférieures,<br />
clear
si le proxy système n'est pas pris en compte il faut le paramétrer via la base de registre de votre disque dur virtuel ou par le menu configuration de l’application qui a besoin d'accéder à internet.<br />
echo -e "L'heure de debut doit ètre strictement inférieur a l'heure de fin: $RougeD$input$Fcolor "
Les versions 4.20.12 et supérieures ne sont pas affectées par ce problème.
echo "exemple: 08h00 a 24h00 ou 08h00 a 12h00 et 14h00 a 24h00"
echo -e -n "$RougeD$PCUSER$Fcolor est autorisés à se connecter le $BleuD${DAYS[$NumDAY]}$Fcolor de:"
}
errortime2 () {
clear
echo -e "Mauvaise syntaxe: $RougeD$input$Fcolor "
echo "exemple: 08h00 a 24h00 ou 08h00 a 12h00 et 14h00 a 24h00"
echo -e -n "$RougeD$PCUSER$Fcolor est autorisés à se connecter le $BleuD${DAYS[$NumDAY]}$Fcolor de:"
}


pause () {  # fonction pause pour debugage
Par exemple, pour Internet Explorer :
      choi=""
      echo  "pour continuer  press Q :"
      while (true); do
        read choi
        case $choi in
        Q | q )
        break
        ;;
      esac
      done
}
activetimelogin () {
  TESTGESTIONNAIRE=""
  for FILE in `echo $GESTIONNAIREDESESSIONS`
  do
      if [ -f $DIRPAM$FILE ];then
        if [ $(cat $DIRPAM$FILE | grep -c "account required pam_time.so") -eq 0  ] ; then
            echo "account required pam_time.so" >> $DIRPAM$FILE
        fi
        TESTGESTIONNAIRE=$TESTGESTIONNAIRE\ $FILE
      fi
  done
  if [ $( echo $TESTGESTIONNAIRE | wc -m ) -eq 1 ] ; then
      echo "Aucun gestionner de session connu , n'a été détecté."
      echo " il est donc impossible d'activer le controle horaires des connections"
      desactivetimelogin
      exit 1
  fi
 
  if [ ! -f $FILEPAMTIMECONF.old ] ; then
  cp $FILEPAMTIMECONF $FILEPAMTIMECONF.old
  fi
  echo "*;*;root;Al0000-2400" > $FILEPAMTIMECONF
  for NumDAY in 0 1 2 3 4 5 6
  do
  echo  > /etc/cron.d/CTparental${DAYS[$NumDAY]}
  done
  for PCUSER in `cat /etc/passwd | cut -d":" -f1,3| grep -E [1-9][0-9][0-9][0-9] | cut -d ":" -f1`
  do
  $SED "/^$PCUSER=/d" $FILE_HCONF
  echo -e -n "$PCUSER est autoriser a ce connecter 7j/7 24h/24 O/N?"
  choi=""
  while (true); do
  read choi
        case $choi in
        O | o )
alltime="O"
  break
        ;;
N| n )
        alltime="N"
  break
        ;;
  esac
  done
      HORAIRES=""
      for NumDAY in 0 1 2 3 4 5 6
        do
if [$alltime = "O"];then
echo "*;*;$PCUSER;Al0000-2400" >> $FILEPAMTIMECONF
echo "$PCUSER=admin=" >> $FILE_HCONF
break
else
echo "$PCUSER=user=" >> $FILE_HCONF
fi
        clear
        echo "exemple: 00h00 a 23h59 ou 08h00 a 12h00 et 14h00 a 16h50"
        echo -e -n "$RougeD$PCUSER$Fcolor est autorisés à se connecter le $BleuD${DAYS[$NumDAY]}$Fcolor de:"
        while (true); do
            read choi
            input=$choi
            choi=$(echo $choi | sed -e "s/h//g" | sed -e "s/ //g" | sed -e "s/a/-/g" | sed -e "s/et/:/g" ) # mise en forme de choi pour pam 
              if [ $( echo $choi | grep -E -c "^[0-2][0-9][0-5][0-9]-[0-2][0-9][0-5][0-9]$|^[0-2][0-9][0-5][0-9]-[0-2][0-9][0-5][0-9]:[0-2][0-9][0-5][0-9]-[0-2][0-9][0-5][0-9]$" ) -eq 1 ];then
                  int1=$(echo $choi | cut -d ":" -f1 | cut -d "-" -f1)
                  int2=$(echo $choi | cut -d ":" -f1 | cut -d "-" -f2)
                  int3=$(echo $choi | cut -d ":" -f2 | cut -d "-" -f1)
                  int4=$(echo $choi | cut -d ":" -f2 | cut -d "-" -f2)
                  if [ $int1 -lt $int2 ];then
                    if [ ! $(echo $choi | grep -E -c ":") -eq 1 ] ; then
                        if [ $NumDAY -eq 6 ] ; then
                          HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$int1-$int2"
                        else
                          HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$int1-$int2|"
                        fi
                        MINUTES1=$(echo $int1 | sed -e 's/.\{02\}//')
                        HEURES1=$(echo $int1 | sed -e 's/.\{02\}$//')
                        MINUTES2=$(echo $int2 | sed -e 's/.\{02\}//')
                        HEURES2=$(echo $int2 | sed -e 's/.\{02\}$//')
echo "$PCUSER=$NumDAY=$HEURES1\h$MINUTES1\:$HEURES2\h$MINUTES2" >> $FILE_HCONF 
                        echo "$MINUTES2 $HEURES2 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
                        break
 
                    else 
                        if [ $int2 -lt $int3 ];then
                          if [ $int3 -lt $int4 ];then
                              if [ $NumDAY -eq 6 ] ; then
                                HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$int1-$int2|${DAYSPAM[$NumDAY]}$int3-$int4"
                              else
                                HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$int1-$int2|${DAYSPAM[$NumDAY]}$int3-$int4|"
                              fi
                              MINUTES1=$(echo $int1 | sed -e 's/.\{02\}//')
                              HEURES1=$(echo $int1 | sed -e 's/.\{02\}$//') 
                              MINUTES2=$(echo $int2 | sed -e 's/.\{02\}//')
                              HEURES2=$(echo $int2 | sed -e 's/.\{02\}$//') 
                              MINUTES3=$(echo $int3 | sed -e 's/.\{02\}//')
                              HEURES3=$(echo $int3 | sed -e 's/.\{02\}$//') 
                              MINUTES4=$(echo $int4 | sed -e 's/.\{02\}//')
                              HEURES4=$(echo $int4 | sed -e 's/.\{02\}$//') 
                              ## minutes heures jourdumoi moi jourdelasemaine utilisateur  commande
      echo "$PCUSER=$NumDAY=$HEURES1\h$MINUTES1\:$HEURES2\h$MINUTES2:$HEURES3\h$MINUTES3\:$HEURES4\h$MINUTES4" >> $FILE_HCONF
                              echo "$MINUTES2 $HEURES2 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
                              echo "$MINUTES4 $HEURES4 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
                              break 
                          else
                              errortime1
                          fi
                        else
                          errortime1
                        fi
                    fi
                  else
                    errortime1
 
                  fi
                     
              else
                  errortime2 
              fi
         
        done
   
        done
   
      echo "*;*;$PCUSER;$HORAIRESPAM" >> $FILEPAMTIMECONF
  done
 
  for NumDAY in 0 1 2 3 4 5 6
  do
      echo >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
  done
  echo >> $FILE_HCONF
$SED "s?^HOURSCONNECT.*?HOURSCONNECT=ON?g" $FILE_CONF
$CMDSERVICE$namservicecrond restart
}


desactivetimelogin () {
<pre>
for FILE in `echo $GESTIONNAIREDESESSIONS`
REGEDIT4
do
  $SED "/account required pam_time.so/d" $DIRPAM$FILE
done
cat $FILEPAMTIMECONF.old > $FILEPAMTIMECONF
for NumDAY in 0 1 2 3 4 5 6
do
  rm -f /etc/cron.d/CTparental${DAYS[$NumDAY]}
done
$SED "s?^HOURSCONNECT.*?HOURSCONNECT=OFF?g" $FILE_CONF


$CMDSERVICE$namservicecrond restart
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
}


"ProxyEnable"=dword:00000001


readTimeFILECONF () {
"ProxyServer"="http=127.0.0.1:8080;https=127.0.0.1:8080"
  TESTGESTIONNAIRE=""
  for FILE in `echo $GESTIONNAIREDESESSIONS`
  do
      if [ -f $DIRPAM$FILE ];then
        if [ $(cat $DIRPAM$FILE | grep -c "account required pam_time.so") -eq 0 ] ; then
            echo "account required pam_time.so" >> $DIRPAM$FILE
        fi
        TESTGESTIONNAIRE=$TESTGESTIONNAIRE\ $FILE
      fi
  done
  if [ $( echo $TESTGESTIONNAIRE | wc -m ) -eq 1 ] ; then
      echo "Aucun gestionner de session connu , n'a été détecté."
      echo " il est donc impossible d'activer le controle horaires des connections"
      desactivetimelogin
      exit 1
  fi
 
  if [ ! -f $FILEPAMTIMECONF.old ] ; then
  cp $FILEPAMTIMECONF $FILEPAMTIMECONF.old
  fi
  echo "*;*;root;Al0000-2400" > $FILEPAMTIMECONF
  for NumDAY in 0 1 2 3 4 5 6
  do
  echo  > /etc/cron.d/CTparental${DAYS[$NumDAY]}
  done
 
  for PCUSER in `cat /etc/passwd | cut -d":" -f1,3| grep -E [1-9][0-9][0-9][0-9] | cut -d ":" -f1`
  do
  HORAIRESPAM=""
  userisconfigured="0"


while read line
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap]
do
if [ $( echo $line | grep -E -c "^$PCUSER=[0-6]=" ) -eq 1 ] ; then
echo "$line"
NumDAY=$(echo $line | cut -d"=" -f2)
h1=$(echo $line | cut -d"=" -f3 | cut -d":" -f1 | cut -d"h" -f1)
m1=$(echo $line | cut -d"=" -f3 | cut -d":" -f1 | cut -d"h" -f2)
h2=$(echo $line | cut -d"=" -f3 | cut -d":" -f2 | cut -d"h" -f1)
m2=$(echo $line | cut -d"=" -f3 | cut -d":" -f2 | cut -d"h" -f2)
h3=$(echo $line | cut -d"=" -f3 | cut -d":" -f3 | cut -d"h" -f1)
m3=$(echo $line | cut -d"=" -f3 | cut -d":" -f3 | cut -d"h" -f2)
h4=$(echo $line | cut -d"=" -f3 | cut -d":" -f4 | cut -d"h" -f1)
m4=$(echo $line | cut -d"=" -f3 | cut -d":" -f4 | cut -d"h" -f2)
if [ $(echo -n $h3$m3 | wc -c) -gt 2 ]; then
if [ $NumDAY -eq 6 ] ; then
                        HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$h1$m1-$h2$m2|${DAYSPAM[$NumDAY]}$h3$m3-$h4$m4"
                      else
                        HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$h1$m1-$h2$m2|${DAYSPAM[$NumDAY]}$h3$m3-$h4$m4|"
                      fi
echo "$m2 $h2 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
echo "$m4 $h4 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
userisconfigured="1"


else
"AutoDetect"=dword:00000000
        if [ $NumDAY -eq 6 ] ; then
          HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$h1$m1-$h2$m2"
        else
          HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$h1$m1-$h2$m2|"
        fi
echo "$m2 $h2 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
userisconfigured="1"
fi
fi
done < $FILE_HCONF
if [ $userisconfigured -eq 1 ] ; then
echo "*;*;$PCUSER;$HORAIRESPAM" >> $FILEPAMTIMECONF
else
echo "*;*;$PCUSER;Al0000-2400" >> $FILEPAMTIMECONF
fi
  done


$SED "s?^HOURSCONNECT.*?HOURSCONNECT=ON?g" $FILE_CONF
"IntranetName"=dword:00000001
$CMDSERVICE$namservicecrond restart
}


"ProxyByPass"=dword:00000001
</pre>


if [ ! -z ${2} ];then
[[Catégorie:Logiciels Divers]]
  DIRhtmlPersonaliser=${2}
  if [ ! -d $DIRhtmlPersonaliser ];then
      echo "Chemin de répertoir non valide!"
      exit 0
  fi
fi
usage="Usage: CTparental.sh    {-i }|{ -u }|{ -dl }|{ -ubl }|{ -rl }|{ -on }|{ -off }|{ -cble }|{ -dble }
                              |{ -tlo }|{ -tlu }|{ -uhtml }|{ -aupon }|{ -aupoff }|{ -aup }
-i      => Install le controll parental sur l'ordinateur (pc de bureau) peut ètre utiliser avec
          un paramètre suplémentaire pour indiquer un chemin de sources pour la page web de redirection.
          exemple : CTparental.sh -i /home/toto/html/
          si pas d'option le \"sens interdit\" est utiliser par default.
-u      => désinstall le controll parental de l'ordinateur (pc de bureau)
-dl    => mais a jour le controll a partir de la black liste de l'université de toulouse
-ubl    => A faire aprés chaque modification du fichier $DNS_FILTER_OSSI
-rl    => A faire aprés chaque modification manuel du fichier $DREAB
-on    => Active le controll parental
-off    => Désactive le controll parental
-cble  => Configure du mode de filtrage par liste blanche ou par liste noir(default) ainssi que les
          catégories que l'on veux activer.
-dble  => Remet les catégories activent par défaut et filtrage par liste noir.
-tlo    => Active est paramètre les restrictions horaire de login pour les utilisateurs.
          Compatible avec les gestionnaire de sessions suivant $GESTIONNAIREDESESSIONS .
-tlu    => Desative les restrictions horaire de login pour les utilisateurs.
-uhtml  => mait a jour la page de redirection a partir d'un repertoir source ou par defaut avec
            le \"sens interdit\".
            exemples:
                    - avec un repertoir source : CTparental.sh -uhtml /home/toto/html/
      - par default :              CTparental.sh -uhtml
-aupon  => active la mise ajour automatique de la black liste de toulouse (tous les 7 jours).
-aupoff => desactve la mise ajour automatique de la black liste de toulouse.
-aup    => comme -dl mais seulement si il n'y a pas eu de mise a jour depuis plus de 7 jours.
"
case $args in
  -\? | -h* | --h*)
      echo "$usage"
      exit 0
      ;;
  -i | --install )
      install
      exit 0
      ;;
  -u | --uninstall )
      autoupdateoff
      dnsmasqoff
      desactivetimelogin
      uninstall
      exit 0
      ;;
  -dl | --download )
      download
      adapt
      catChoice
      dnsmasqon
      $SED "s?^LASTUPDATE.*?LASTUPDATE=$THISDAYS=`date +%d-%m-%Y\ %T`?g" $FILE_CONF
      exit 0
      ;;
  -ubl | --updatebl )
      adapt
      catChoice
      dnsmasqon
      exit 0
      ;;
  -uhtml | --updatehtml )
      FoncHTTPDCONF
      exit 0
      ;;
  -rl | --reload )
      catChoice
      dnsmasqon
      exit 0
      ;;
  -on | --on )
      dnsmasqon
      exit 0
      ;;
  -off | --off )
      autoupdateoff
      dnsmasqoff
      exit 0
      ;;
  -wlo | --whitelistonly )
      dnsmasqwhitelistonly
      exit 0
      ;;
  -cble | --confblenable )
      choiblenabled
      catChoice
      dnsmasqon
      exit 0
      ;;
    -dble | --defaultblenable )
      initblenabled
      catChoice
      dnsmasqon
      ;;
    -tlo | --timeloginon )
      activetimelogin
      ;;
    -tlu | --timeloginon )
      desactivetimelogin
      ;;
    -trf | --timeloginon )
      readTimeFILECONF
      ;;
    -aupon | --autoupdateon )
      autoupdateon
      ;;
    -aupoff | --autoupdateoff )
      autoupdateoff
      ;;
    -aup | --autoupdate )
      autoupdate
      ;;
     
  *)
      echo "Argument inconnu :$1";
      echo "$usage";
      exit 1
      ;;
esac
 
 
</code>
 
[[Catégorie:Scripts]]

Dernière version du 26 mars 2022 à 07:18

Petit rappel : Le contrôle parental ne doit pas se substituer aux coups d’œil et dialogues avec vos enfants de temps en temps mais apporte un plus.

Je vous propose donc de mettre en place un filtrage directement sur le pc a protéger, à l'aide de :

iptables+dnsmasq+dansguardian+privoxy (Pour le filtrage)

lighttpd (Pour la page de redirection et l'interface d'administration)


Les sources.

Toutes les sources sont sur le site officiel

Installation par le deb :

Téléchargez la dernière version deb correspondant à votre distribution sur https://gitlab.com/marsat/CTparental/-/releases .

il y a 2 branches encore actives du logiciel en fonction des paquets utilisés pour effectuer le filtrages, ce qui permet d’être plus modulable en fonction des machines et distributions utilisées. (à partir des versions versions 5.x.x)

- master = nftables (successeur d'iptables), dnscrypt-proxy (remplaçant dnsmasq), lighttpd ou nginx, privoxy et e2guardian ( successeur de dansguardian ).

- min = nftables = nftables (successeur d'iptables), dnscrypt-proxy (remplaçant dnsmasq), lighttpd ou nginx.

et 5 branches historique, non maintenu qui ce basé sur dnsmasq, dansguardian , iptables .(jusqu'aux versions 4.x.x)

- dnsmasq = nftables (successeur d'iptables), dnsmasq, lighttpd ou nginx, privoxy et e2guardian ( successeur de dansguardian ).

- dnsmasq_min = nftables = nftables (successeur d'iptables), dnsmasq, lighttpd ou nginx.

- iptables = iptables, ipset, dnsmasq, lighttpd ou nginx, privoxy et e2guardian ( successeur de dansguardian ).

- dansguardian = iptables, ipset, dnsmasq, lighttpd, privoxy et dansguardian.

- iptables_min = iptables, ipset,dnsmasq, lighttpd ou nginx.

exemple pour debian9 il y a 4 paquet possible. 2 paquet dérivé de la branche iptables avec lighttpd ou nginx et 2 autres dérivé de la branche iptables_min si l'on veut utiliser moins de ressources.

Pour ceux qui veulent tester en ipv6

c'est possible avec la dernière les version 4.20.x sous debian testing/sid ,
il faudra au préalable s’assurer que son fournisseur d'accès accepte bien l'ipv6 , ce qui n'est malheureusement pas mon cas.

l'ipv6 n'étant pas encore implémentée dans e2guardian , ctparental ne force pas le passage par celui-ci mais attaque directement privoxy.

Une désinstallation avec purge est nécessaire en cas de mise à jour d'une version antérieure.

 # apt-get remove --purge ctparental privoxy e2guardian dansguardian dnsmasq lighttpd
 $ wget -c https://gitlab.com/marsat/CTparental/uploads/d5567eb1a43ffde679193bce87be5f69/ctparental_debian10_lighttpd_4.44.18-1.0_all.deb

Pour tester le filtrage avec un utilisateur non filtré il suffit que celui-ci ajoute le proxy http et https suivant dans son navigateur.
http et https ::1 port 8888

Pour les utilisateurs filtrés c'est automatique, il n'y a rien à faire.

Nettoyage des versions précédentes :

si vous utilisé l'instance dnscrypt-proxy du deb pour vos connexions système il faut installer celui-ci de manière autonome via la commande ci dessous:

 # apt-get install dnscrypt-proxy

cela éviteras la surpression de dnscrypt-proxy durant la procédure de dés-installation de ctparental, et ainsi une perte de connexion système.

 # apt-get autoremove --purge  ctparental clamav-* privoxy lighttpd dansguardian dnsmasq nginx e2guardian
 # rm -rf /etc/CTparental

Installez le deb :

 # gdebi ctparental_*_all.deb

(J'utilise gdebit car cela évite le téléchargement et l'installation manuelle des dépendances.)

Important : Depuis la version 3.92 les paramètres proxy changent automatiquement au premier démarrage de la session, ce qui fait que c'est transparent pour l'utilisateur.
Si après avoir redémarré votre session vous avez encore des problèmes de connexion aux sites https tels que google.com, testez avant tout l'ajout du proxy suivant.
proxy http 127.0.0.1 sur port 8080
proxy https 127.0.0.1 sur port 8080

Pour les versions avant la 3.95-3

Il est conseillé d'ajouter tous les domaines de vos dépôts dans les domaines réhabilités cela peut éviter certaines erreurs quand on utilise su au lieu de su - avant des commandes apt-get aptitude …

Lancez cette ligne de commandes pour les connaître.

  $ cat /etc/apt/sources.list /etc/apt/sources.list.d/* 2>/dev/null | awk -F/ '/^deb/ {print $3}' | sort -u

Pour la version 3.95-3 et supérieure, après l'ajout d'un nouveau dépôt, il faut juste penser à lancer la commande suivante :

  # CTparental -ubl

Pour tester si ça fonctionne faire un ping à partir d'un compte filtré.

  $ su child -c "ping youporn.com"

child est à remplacer par le compte pour lequel vous voulez tester.

doit retourner quelque chose comme ça :

 PING youporn.com (127.0.0.10) 56(84) bytes of data.
 bytes from 127.0.0.10: icmp_req=1 ttl=64 time=0.026 ms

Si l'adresse IP est différente de 127.0.0.10 c'est que le filtrage ne fonctionne pas.

Pour l'aide tapez :

 # CTparental

sans aucun paramètre.

Configuration

Pour les versions 4.20.27 et supérieures on accède à l'interface d'administration par le lien web suivant: https://admin.ct.local

Pour les versions 4.20.26 on accède à l'interface d'administration par le lien web suivant: https://admin.ct.localhost

Pour les versions inférieure à 4.20.26 on accède à l'interface d'administration par le lien web suivant: http://127.0.0.1/CTadmin

Pour les versions 4.20.9 et supérieures dans le Choix des catégories à filtrer ajouter la catégorie ctparental
Pour les versions inférieures ajouter la liste ci dessous dans les Noms de domaine filtrés

Pour les utilisateurs des applications winehq et playonelinux en ctparental versions 4.20.11 et inférieures,
si le proxy système n'est pas pris en compte il faut le paramétrer via la base de registre de votre disque dur virtuel ou par le menu configuration de l’application qui a besoin d'accéder à internet.
Les versions 4.20.12 et supérieures ne sont pas affectées par ce problème.

Par exemple, pour Internet Explorer :

REGEDIT4

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]

"ProxyEnable"=dword:00000001

"ProxyServer"="http=127.0.0.1:8080;https=127.0.0.1:8080"

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap]

"AutoDetect"=dword:00000000

"IntranetName"=dword:00000001

"ProxyByPass"=dword:00000001