[Tuto/HowTo] Concevoir une camera de surveillance avec un Raspberry Pi

Avatar du membre
voxdemonix
Messages : 1237
Enregistré le : lun. févr. 02, 2015 7:28 pm

[Tuto/HowTo] Concevoir une camera de surveillance avec un Raspberry Pi

Message par voxdemonix » lun. janv. 16, 2017 2:18 pm

musique d'entrain : Best of NCS 2017 Mix |♫ Gaming Music♫ | Dubstep, EDM, Trap
Tuto testé sur un Raspberry Pi type 1A avec Raspbian Jessie (la version (25/07/2016) sans pixel)

Un grand pouvoir implique de grandes responsabilités sacré non didju!


Créer une camera de surveillance:
Principe de base : créer une camera de surveillance sécurisée compatible avec ZoneMinder. Cette camera sera plus sécurisée que les cameras grand publique que l'on trouve dans le commerce. Par contre elle ne bénéficiera pas d'un IR cut (lentille anti infrarouge qui se positionne devant la camera le jour et s'enlève la nuit), mais on peut compenser en utilisant deux cameras et cron.
Note : Elle n'apprécie pas du tout les contres jours. Les RPI type 1 sont à éviter (ils tournent à 0,85FPS !!! ).
Côté Hardware (matériel)
  • Nous allons créer une camera Hardware avec un Raspberry Pi (conseillé type 2 voir plus), un vieux spot halogène de travail (protection métal), une webcam et du câble RJ45 Cat5 ou 6, un morceau de carton (recup), une alimentation pour raspberry pi (même que chargeur smartphone, moyen de passer par la récup).
    Pour pouvoir voir la nuit en utilisant des Leds infrarouge, vous devez ouvrir la webcam (sans la casser) et enlever la lentille rectangulaire qui se situe devant la camera. Par contre la camera sera plus éblouie durant la journée (vous pouvez utiliser deux webcams, une avec la lentille infrarouge (jour) et une sans (nuit)).
Côté Software (logiciel)
  • Sur une Raspbian seront installé motion, openssh-server, autossh, Tor.
    Avec ces logiciels nous allons établir une liaison SSH permanente depuis le serveur ZoneMinder vers la camera de surveillance. Ainsi les communications seront protégées par le tunnel de données SSH dont la cible sera Motion.
    Motion quant à lui sera chargé de "lire" la webcam et de générer un flux de données lisible par ZoneMinder.
Informations supplémentaires :
  • Consommation réseau : +-45ko/s en continu
    Consommation électrique : [a éditer] (pour une webcam)
    Étanchéité : si vous avez bien colmaté les trous assez solide pour descendre au fond d'une piscine. (rappel pour la rédaction : à tester!)
    Sécurité des communications : SSH tunneling
    Prix : [a éditer] (RPI + webcam + alimentation RPI + carte SD + câble RJ45)
Farm Link

Software :
Installation et configuration des logiciels de la caméra
Note : je pars du principe que tu viens d'installer Raspbian et n'a encore rien fait dessus.
Système
  1. Mettre à jours le système et supprimer les trucs inutile
    • Code : Tout sélectionner

      sudo su
      apt-get purge libreoffice* wolfram-engine sonic-pi minecraft-pi greenfoot pcmanfm realvnc-vnc-server supercollider-ide
      apt-get update
      apt-get upgrade
      apt-get autoremove
      apt-get autoclean
      rpi-update
  2. Installer les pré-requis
  3. Redémarrer la machine
Liaison SSH
  1. Créer un utilisateur dédié à recevoir le tunnel de données
  2. Ajouter l'utilisateur au groupe videos
  3. Éditer /etc/ssh/sshd/config
  4. Ajouter les lignes suivantes en adaptant à vos besoins
    • Code : Tout sélectionner

      Match user video_surveillance
              PermitOpen 127.0.0.1:*
      PermitOpen 127.0.0.1:* Hostname:Port, ici nous restreignons les tunnels de l'utilisateur à la boucle locale; le caractère * signifie "tous".
  5. Redémarrer le serveur SSH

Motion
  1. Créer le répertoire de travail, ici j'ai choisis /opt/scripts/motion/
  2. Créer le fichier de configuration
  3. Coller le code suivant en l'adaptant éventuellement
    Attention : suivant les versions du logiciel motion, certains paramètres peuvent avoir changé de "nom".
    • Code : Tout sélectionner

      videodevice /dev/video0
      input -1
      start_motion_daemon=no
      webcam_localhost off
      quiet on
      post_capture 0
      output_all off
      control_localhost off
      output_normal off
      width 640
      height 480
      webcam_maxrate 25
      ffmpeg_video_codec msmpeg4
      stream_localhost off
      stream_port 6881
      output_pictures off
      
      Si tu ne l'utilises que via le tunnel SSH remplaces webcam_localhost off par webcam_localhost on afin d'empêcher d'autres personnes/bot d'accéder à ta camera.
  4. Créer le script de démarrage
  5. Ajouter dedans les lignes suivantes en les adaptant éventuellement
    • Code : Tout sélectionner

      #!/bin/bash
      sleep 5
      su video_surveillance -c "/usr/bin/screen -d -m -S motion motion -c /opt/scripts/motion/motion.conf"
  6. Créer le script d’arrêt
  7. Ajouter dedans les lignes suivantes en les adaptant éventuellement
    • Code : Tout sélectionner

      #!/bin/bash
      su video_surveillance -c "/usr/bin/screen -S motion -X quit"
  8. Accorder les bonnes permissions sur le script de lancement
    • Code : Tout sélectionner

      sudo chown root:root -R /opt/scripts/motion
      sudo chmod 755 -R /opt/scripts/motion
  9. Ajouter le script au démarrage du système
    1. Éditer /etc/rc.local
    2. Ajouter la ligne suivante juste avant exit 0

Tor
Note : Tor n'est normalement pas nécessaire si ta camera ne change pas de réseau. Néanmoins dans l'utilisation que nous allons en faire en cas de vol de la camera tu pourras récupérer quand même le flux vidéos. Si ton réseau passe d'IPv4 à IPv6 cette méthode devrait aussi permettre la communication entre Zoneminder et la camera en attendant que tu reconfigures ton réseau.
  1. Lances la suite de commandes suivante qui va créer un hidden service ssh
    • Code : Tout sélectionner

      sudo su
      mkdir -p /var/lib/tor/hidden_service
      mkdir -p /var/lib/tor/hidden_service/ssh
      echo "HiddenServiceDir /var/lib/tor/hidden_service/ssh" >> /etc/tor/torrc
      echo "HiddenServicePort 22 127.0.0.1:22" >> /etc/tor/torrc
      chown debian-tor:root -R /var/lib/tor/hidden_service/
      chmod 700 -R /var/lib/tor/hidden_service/
      service tor restart
      cat /var/lib/tor/hidden_service/ssh/hostname
      Note : Penses à noter l'adresse en .onion que la dernière commande va te fournir, tu en aura besoin pour la suite.
      Si par la suite tu souhaites la ré-afficher, entres cette commande sur votre camera
Mise en place sur le serveur ZoneMinder
Liaison SSH
  1. Installez les pré-requis
  2. Exporter la clés SSH
    • Code : Tout sélectionner

      sudo su
      ssh-copy-id -i ~/.ssh/id_rsa.pub video_surveillance@adresseCamera
      Note : si tu n'as jamais créés de clés pour votre utilisateur root (admin) alors lances les commandes suivantes Pour vérifier l’existence de la clés RSA de root entres la commande suivante
  3. Vérifier que la connexion sans mot de passe fonctionne
  4. Rendre compatible le client ssh avec le réseau Tor
  5. Créer le script de démarrage qui va créer la liaison peu après le boot
  6. Ajouter le script suivant en adaptant ses variables
    • Code : Tout sélectionner

      #!/bin/bash
      #  -> WTFPL - infos script : https://www.0rion.netlib.re/forum4/viewtopic.php?f=34&t=498
      # -> code by voxdemonix <-
      
         #pour tester que la création de tunnel fonctionne vous pouvez adapter la ligne suivante puis la lancer dans votre shell
      #su myUser -c 'autossh -M 0 -q -N -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -L 6881:127.0.0.1:6881 video_surveillance@HOSTNAME'
      
      
      ipCameraLan="192.168.1.42" # l'adresse IP locale de votre camera
      adresseCameraTor="monTorHiddenService.onion" # l'adresse en .onion de ta camera que je t'ai dis de noter quelques paragraphes plus haut
      adresseMacCamera="00:00:00:00:00:00" #l'adresse mac de votre camera (tapez ifconfig dans un terminal sur votre server pour la voir)
      UserLocalForSshTunneling="root" # l'user a utiliser sur votre ordinateur pour le montage du tunnel (dans ce tuto on utilise root afin d'empêcher un virus ayant piraté l'user principale d’exécuter des commandes sur la camera)
      UserRemoteForSshTunneling="video_surveillance" # l'user a utiliser côté server/camera ( /!\ n'utilisez jamais root ni pi !)
      portEntree="6881" # le port sur le serveur ZoneMinder ; un port par camera
      portSortie="6881" # le port sur le serveur/camera
      
      if [ ! "$SUDO_USER" ]; then
      exit 0
      fi
      sleep 60 # petit délais d'attente afin que le réseau soit prêt et la machine démarrée
      
      ping $ipCameraLan -c 1 >> /dev/null 2>&1
      macRecover=$(arp -n | grep -i -o $adresseMacCamera)
      
      if [ "$macRecover" == "$adresseMacCamera" ]; then
         su $UserLocalForSshTunneling -c "autossh -M 0 -q -N -o 'ServerAliveInterval 60' -o 'ServerAliveCountMax 3' -L $portEntree:127.0.0.1:$portSortie $UserRemoteForSshTunneling@$ipCameraLan -f"
      else
         su $UserLocalForSshTunneling -c "autossh -M 0 -q -N -o 'ServerAliveInterval 60' -o 'ServerAliveCountMax 3' -L $portEntree:127.0.0.1:$portSortie $UserRemoteForSshTunneling@$adresseCameraTor -f"
      fi
      
      • ipCameraLan="192.168.1.42" => l'adresse IP locale de votre camera
        adresseCameraTor="monTorHiddenService.onion" => l'hostname WAN ou l'adresse Tor Hidden Service au choix
        adresseMacCamera="00:00:00:00:00:00" => l'adresse mac de votre camera (tapez ifconfig dans un terminal sur votre server pour la voir)
        UserLocalForSshTunneling="root" => l'user a utiliser sur votre ordinateur pour le montage du tunnel (dans ce tuto on utilise root afin d'empêcher un virus ayant piraté l'user principale d’exécuter des commandes sur la camera)
        UserRemoteForSshTunneling="myUserServer" => l'user a utiliser côté server ( /!\ n'utilises jamais root ou pi !)
        portEntree="6881" => le port sur ZoneMinder
        portSortie="6881" => le port de motion (voir paramètre stream_port de motion.conf) sur la camera
  7. Accorder les bons droits sur le script
    • Code : Tout sélectionner

      sudo chown root:root /opt/scriptss/creatTunnelForvideo_surveillance.sh
      sudo chmod 755 /opt/scriptss/creatTunnelForvideo_surveillance.sh
  8. Éditer /etc/rc.local
  9. Ajouter la ligne suivante juste avant exit 0
Ajouter la webcam à ZoneMinder
Cliquez sur Ajouter une camera
  • Onglet General
    • Type de source : Distant (remote)
    Onglet Source
    • Protocole : HTTP
      Méthode : Simple
      Nom d'hôte : 127.0.0.1
      Port : 6881
      Largeur (nb pixels) : 640
      Hauteur (nb pixels) : 480
  • screenshot-2016_01_07-ZoneMinder-addCamera_General-motionSoftware.png
    screenshot-2016_01_07-ZoneMinder-addCamera_Source-motionSoftware.png
Hardware :

  1. Récupérez un vieux spot halogène de chantier en métal (les anciens sont plus robuste avec plus de place à l'intérieur)
  2. Percez un trou à l'arrière afin de faire passer les câbles (le RJ45 + le câble d'alim du RaspberryPi prennent un peu plus de place que le câble d’alimentation d'origine)
  3. Soit vous passez vos cables puis colmatez l'espace avec du silicone (pas très propre), soit, comme dans les photos suivantes, procurez-vous une boite de dérivation et forez deux trous pour la fixer avec des visses. Veillez bien à ce qe l'eau ne puisse pas s'infiltrer.
  4. Fixez la webcam et le Raspberry Pi avec de la toile isolante (papier collant américain). Pour la stabiliser (le spot n'étant pas cubique) utilisez du carton que vous pliez pour lui donner un effet ressort.
  5. Insérez votre Raspberry Pi et branchez le (évitez d'enrouler les surplus de câbles, faites plus tôt des 8 )
  6. Découpez un morceau de carton (ici récupéré sur un pack de 6 bièrres) afin de couvrir la vitre du spot, le but étant de protéger l'intérieur du soleil tout en laissant en espace de visibilité pour la webcam
  7. Refermez le tout et colmatez avec du silicone les éventuels trou de forage
    • Note : Si vous l'installez en extérieur et que vous n'avez pas de boites de dérivations pour l'alimentation, il est probable que vous deviez d'abord faire un trou dans le mur pour passer le câble, brancher l'alim au raspberry pi puis seulement siliconez le tout.
  8. Enjoy!
    IMAG0133.jpg
    IMAG0136.jpg
    IMAG0132.jpg
    IMAG0123.jpg
    IMAG0120.jpg
    IMAG0126.jpg
    IMAG0128.jpg
    IMAG0130.jpg
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par voxdemonix le sam. sept. 16, 2017 3:28 pm, modifié 24 fois.
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Avatar du membre
voxdemonix
Messages : 1237
Enregistré le : lun. févr. 02, 2015 7:28 pm

Re: [Tuto/HowTo] Concevoir une camera de surveillance avec un Raspberry Pi

Message par voxdemonix » mar. janv. 17, 2017 4:26 pm

Résistance face aux attaques

DOS
  • Un attaquant peut faire du arp spoof pour empêcher la communication Lan entre ZoneMinder et la camera et entre ZoneMinder/camera et le réseau Tor.

MITM
  • Impossible a moins d'avoir réussi à récupérer les clés publiques et privées de la camera ou un accès (privilégié) sur le serveur ZoneMinder.
    On ne peut pas récupérer les logins/password via écoute avec ettercap/wireshark comme sur les cameras Foscam ou Trendnet.
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité