Sommaire
Tuto testé sur un Raspberry Pi type 1A avec Raspbian Jessie (la version (25/07/2016) sans pixel) et un serveur Zoneminder
Tuto d'origine : [Tuto/HowTo] Concevoir une camera de surveillance avec un Raspberry Pi
Introduction
Principe de base
- Créer une camera de surveillance sécurisée compatible avec ZoneMinder. Cette camera sera plus sécurisée que les caméras grand public que l'on trouve dans le commerce.
Côté Hardware
- Nous allons créer une caméra 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 (min 1A, conseillé 2A)). 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
- 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.
Farm Link
- [Tuto/HowTo] [GNU/Linux] Sécuriser utilisateur dédié pour Proxy/Tunneling SSH
- [Tuto/HowTo] [GNU/Linux] mettre en place un ou plusieurs Tunnels SSH
- Une caméra de surveillance vidéo avec le Raspberry Pi
- [Tuto/HowTo] [GNU/Linux] SSH
- motionPie, surveillance vidéo avec Raspberry Pi
- [Tuto/HowTo] [GNU/Linux] Add distant webcam to Zoneminder and Motion software
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
- Mettre à jour le système et supprimer les trucs inutiles
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
- Installer les pré-requis
apt-get install motion tor screen
- Redémarrer la machine
reboot
Liaison SSH
- Créer un utilisateur dédié à recevoir le tunnel de données
sudo adduser video_surveillance
- Ajouter l'utilisateur au groupe videos
usermod -a -G video video_surveillance
- Éditer /etc/ssh/sshd/config
sudo nano /etc/ssh/sshd_config
- Ajouter les lignes suivantes en adaptant à vos besoins
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". Une fois sûr de votre config vous pouvez remplacer par le ou les ports pour joindre vos caméras- Redémarrer le serveur SSH
sudo service ssh restart
Motion
- Créer le répertoire de travail, ici j'ai choisi /opt/script/motion/
sudo mkdir -p /opt/script/motion/
- Créer le fichier de configuration
sudo nano /opt/script/motion/motion.conf
- Coller la configuration suivante en l'adaptant éventuellement
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
-
Si vous ne l'utilisez que via le tunnel SSH remplacez webcam_localhost off par webcam_localhost on afin d'empêcher d'autres d'accéder à la caméra
- Créer le script de démarrage
sudo nano /opt/script/motion/startMotion.sh
- Ajouter dedans les lignes suivantes en les adaptant éventuellement
#!/bin/bash
sleep 5
su video_surveillance -c "/usr/bin/screen -d -m -S motion motion -c /opt/script/motion/motion.conf"
- Créer le script d’arrêt
sudo nano /opt/script/motion/stopMotion.sh
- Ajouter dedans les lignes suivantes en les adaptant éventuellement
#!/bin/bash
su video_surveillance -c "/usr/bin/screen -S motion -X quit"
- Accorder les bonnes permissions sur le script de lancement
sudo chown root:root -R /opt/script/motion
sudo chmod 755 -R /opt/script/motion
- Ajouter le script au démarrage du système en éditant /etc/rc.local
sudo nano /etc/rc.local
- Ajouter la ligne suivante juste avant exit 0
sudo /opt/script/motion/startMotion.sh
Tor
Note : Tor n'est normalement pas nécéssaire si votre caméra ne change pas de réseau. Néanmoins dans l'utilisation que nous allons en faire en cas de vol de la caméra vous pourrez récupérer quand même le flux vidéo. Si votre réseau passe d'IPv4 à IPv6 cette méthode devrait aussi permettre la communication entre Zoneminder et votre caméra en attendant que vous reconfiguriez votre réseau.
- Lancer la suite de commandes suivantes qui va créer un hidden service ssh
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 : Pensez à noter l'adresse en .onion que la dernière commande va vous fournir, vous en aurez besoin pour la suite. Si par la suite vous souhaitez la ré-afficher, entrez cette commande sur votre caméra
sudo cat /var/lib/tor/hidden_service/ssh/hostname
Mise en place sur le serveur ZoneMinder
Liaison SSH
- Installer les pré-requis
sudo apt-get install autossh tor
- Exporter la clé SSH
sudo su
ssh-copy-id -i ~/.ssh/id_rsa.pub video_surveillance@adresseCamera
- Note : si vous n'avez jamais créé de clés pour votre utilisateur root (admin) alors envoyez les commandes suivantes
sudo su
ssh-keygen -t rsa -b 4096 -o -a 666
- Pour vérifier l’existence de la clé RSA de root entrerz la commande suivante
sudo cat /root/.ssh/id_rsa.pub
- Vérifier que la connexion sans mot de passe fonctionne
ssh video_surveillance@adresseCamera
- Rendre compatible le client ssh avec le réseau Tor
sudo nano /etc/ssh/ssh_config
- Et ajouter ces lignes
Host *.onion
ProxyCommand nc -xlocalhost:9050 -X5 %h %p
- Créer le script de démarrage qui va créer la liaison peu après le boot
sudo nano /opt/scripts/creatTunnelForvideo_surveillance.sh
- Ajouter le script suivant en adaptant ses variables
#!/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/caméra ( /!\ n'utilisez jamais root ni pi !)
portEntree="6881" # le port sur le serveur ZoneMinder ; un port par caméra
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'utilisez 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 caméra
- Accorder les bons droits sur le script
sudo chown root:root /opt/scripts/creatTunnelForvideo_surveillance.sh
sudo chmod 755 /opt/scripts/creatTunnelForvideo_surveillance.sh
- Éditer /etc/rc.local
sudo nano /etc/rc.local
- Ajouter la ligne suivante juste avant exit 0
sudo /opt/scripts/creatTunnelForvideo_surveillance.sh
Ajouter la webcam à ZoneMinder
Rendez-vous sur la WEBUI de ZoneMinder avec un utilisateur pouvant ajouter une cam
-
Cliquer sur "Ajouter une caméra"
- 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
Hardware
Récupérez un vieux spot halogène de chantier en métal (les anciens sont plus robustes avec plus de place à l'intérieur)
Percez un trou un l'arrière afin de faire passer le câble (le RJ45 + le câble d'alim du RaspberryPi prennent un peu plus de place que le câble d'alimentation d'origine)
Soit vous passez vos câbles 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 vis. Veillez à ce qe l'eau ne puisse s'infiltrer.
Fixez la webcam avec de la toile isolante (papier américain). Pour la stabiliser (le spot n'étant pas cubique) utilisez du carton que vous pliez pour lui donner un effet ressort.
Insérez votre Raspberry Pi et branchez le
Découpez un morceau de carton (ici récupéré sur un pack de 6 bières) afin de couvrir la vitre du spot, le but étant de protéger l'intérieur du soleil tout en laissant un espace de visibilité pour la webcam
Refermez le tout et colmatez avec du silicone les éventuels trou de forage
Enjoy!
# Webcam utilisée
Posté par EauFroide . Évalué à 6.
J'ai oublié de mentionner quelle webcam est utilisée.
Donc son petit nom : 360 Degree Rotation Wide Angle 12 MP HD USB Camera w/ Microphone (testé sur ubuntu et raspbian avec succès)
Les logiciels utilisés dans le tuto sont motion, openssh-server, autossh, Tor, screen, zoneminder
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
[^] # Re: Webcam utilisée
Posté par EauFroide . Évalué à 3. Dernière modification le 17 janvier 2017 à 16:43.
Petite astuce en Bonus
Ne vous tracassez pas du sens de la webcam ou de si elle est bien parallèle au sol. En effet motion (le logiciel) vous permet de tourner l'image de la vidéos grâce à l'argument rotate X ou X est le nombre de degré. Ce paramètre est a insérer dans le fichier de configuration de motion (ici /opt/script/motion/motion.conf).
Veillez juste a ce qu'elle soit bien placée comparé à la vitre afin d'éviter les reflets (ici j'ai rajouté un cône de papier autour de la webcam pour diminuer les reflets (si vous collez la camera à la vitre vous risquez d'avoir un léger effet miroir).
Cordialement.
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
# Merci !
Posté par Naabster . Évalué à 5.
Et ce pour diverses raisons :
Donc, merci !
[^] # Re: Merci !
Posté par EauFroide . Évalué à 1.
Je suis content que ça fasse (au moins) un heureux :)
PS: en taggant le tuto je suis tombé sur ton thread traitant de la camera intelligente avec du software libre. Si tu as traité le sujet et que tu as des astuces et idées pour améliorer la camera IP fait maison n'hésite pas à partager*1 :)
*1 une amélioration qui serait intéressante serait : en utilisation avec deux webcams détecter la nuit sur camera 1 (jour) afin de couper la camera 1 et de lancer la camera 2 (nuit).
:)
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
# Correction
Posté par EauFroide . Évalué à 1. Dernière modification le 18 janvier 2017 à 13:36.
Désolé aux modos de ne pas avoir été assez efficace lors de ma relecture avant de poster. (j'ai galéré sur certains passages pour la mise en forme, j'en fus distrait)
Pour le prochain tuto je vais tenter de passer par la section wiki.
Donc listes des erreurs :
supprimer la ligne suivante (doublon) dans Introduction - Côté hardware
un peu plus loin
remplacer par
Juste après "Lancez la suite de commandes suivantes qui va créer un hidden service ssh" la première ligne des commandes pour installer tor : "bash" est censé être là pour la coloration syntaxique, là on dirait une commande ^ ^
Juste après
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
[^] # Re: Correction
Posté par Benoît Sibaud (site web personnel) . Évalué à 4.
Corrigé, merci.
[^] # Re: Correction
Posté par EauFroide . Évalué à 0. Dernière modification le 28 janvier 2017 à 18:45.
petite erreur :
section Software => System
remplacer "apt-get install motion tor screen autossh" par "apt-get install motion tor screen"
et Section Mise en place sur le serveur ZoneMinder => Liaison SSH
Ajouter au début de cette section
Merci :)
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
[^] # Re: Correction
Posté par Benoît Sibaud (site web personnel) . Évalué à 4.
Corrigé, merci.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.