Wiki [Ubuntu/Debian] Installation complète de Shinobi Community Edition

0
16
déc.
2018

Sommaire

Introduction

Dans ce tutoriel sera presque tout expliqué afin de transformer une machine fraîchement installée en serveur ShinobiCCTV Community Edition.

Pour une présentation du logiciel, voyez cet article : 🎦 Présentation de ShinobiCCTV Community Edition 👁️

Ndlr : ajouter anti-bruteforce (fail2ban?) et sécurisation.

Pages principales de la WEBUI de Shinobi :

Désinstallation

Supprimez la base de données.

mysql -uroot -p -e "DROP DATABASE ccio;"
mysql -uroot -p -e "DROP USER ‘shinobi’@’localhost’;"
mysql -uroot -p -e "DROP USER ‘shinobi’@’10.8.%.%’;"

Désinstallez les logiciels et supprimez les dossiers. (/!\ ndlr : je ne suis pas sur que le dev a testé sa propre procédure de désinstallation, procédure en attente de test)

pm2 kill
sudo npm uninstall pm2 -g
sudo apt remove ffmpeg mariadb-server nodejs -y && sudo apt autoremove -y && sudo apt-get autoclean
sudo rm -rf /usr/local/bin/npm /usr/local/share/man/man1/node* /usr/local/lib/dtrace/node.d ~/.npm ~/.node-gyp /opt/local/bin/node /opt/local/include/node /opt/local/lib/node_modules /usr/local/lib/node* /usr/local/include/node* -rf /usr/local/bin/node* -rf /home/Shinobi

Installation de A-Z

Logiciels

mv /tmp/
wget https://gitlab.com/Shinobi-Systems/Shinobi-Installer/raw/master/shinobi-install.sh
sudo bash shinobi-install.sh

Mémoire

Logs

Si vous le souhaitez, vous pouvez ranger les logs de votre système en mémoire RAM. C'est fortement conseillé si votre système est sur une carte SD/eMMC ou pour gagner des performance en cas d'utilisation de HDD. C'est déconseillé sur SSD.

cd /tmp/
curl -Lo log2ram.tar.gz https://github.com/azlux/log2ram/archive/master.tar.gz
tar xf log2ram.tar.gz
cd log2ram-master
chmod +x install.sh && sudo ./install.sh
cd ..
rm -r log2ram-master

Base de données

Créez votre base de données et son utilisateur multi-accès. Pensez à adapter la commande (surtout le mot de passe). NE CHANGEZ PAS LE NOM DE LA BASE DE DONNÉES.

mysql -u root -p -e "GRANT ALL PRIVILEGES ON ccio.* TO 'shinobi'@'localhost' identified by 'my_super_password'; GRANT ALL PRIVILEGES ON ccio.* TO 'shinobi'@'10.8.%.%' identified by 'my_super_password'; FLUSH PRIVILEGES;

Éditez /home/Shinobi/conf.json et ajoutez-y les informations de votre base de données.

nano /home/Shinobi/conf.json

Initialisez la base de données.

mysql -u shinobi -p shinobi < /home/Shinobi/sql/framework.sql
mysql -u shinobi -p shinobi < /home/Shinobi/sql/tables.sql
mysql -u shinobi -p shinobi < /home/Shinobi/sql/database.sql

Stockage

Agrégez vos disques afin de créer un JBOD (sorte de super-partition)

Déplacez le stockage principale de Shinobi vers votre nouvelle super-partition.

mkdir /media/raidSSD/videos
mv /home/Shinobi/videos/* /media/raidSSD/videos/
rm -R /home/Shinobi/videos
ln -s /media/raidSSD/videos  /home/Shinobi/videos

Redémarrez Shinobi.

pm2 reload
pm2 --update-env restart all

Ajouter un Frontend HaProxy avec HTTPS

Dans ce tutoriel, les pages /admin et /super seront bloquées par mesure de sécurité. Si vous voulez y accédez, connectez-vous directement sur votre noeud Shinobi sans passer par le frontend.

Toutes les commandes suivantes doivent être lancée en root (admin).

Installation des logiciels nécessaires.

apt-get update
apt-get install -y haproxy letsencrypt

Générez votre certificat TLS (https). Attention vous avez une limite mensuel.

letsencrypt certonly --register-unsafely-without-email --standalone --agree-tos --domains www.hello.world

Éditez le cron de root.

crontab -e

Copiez-collez les commandes suivantes. Elles mettront à jours la liste de blocage et les certificats https tout les mois. Pensez à remplacer www.hello.world par votre propre nom de domaine valide.

30 12 27 * *        ( sudo service haproxy stop ; letsencrypt renew --standalone ; sudo -E bash -c 'cat /etc/letsencrypt/live/www.hello.world/fullchain.pem /etc/letsencrypt/live/www.hello.world/privkey.pem > /etc/haproxy/certs/www.hello.world.pem' ; sudo service haproxy restart )
@monthly        ( wget -P /etc/haproxy/banlist/ https://gitlab.com/voxdemonix/divers-script/raw/master/Shinobi/HaProxy_Banlists/Ban_User-Agent.list ; chown root:root -R /etc/haproxy/banlist ; chmod 744 -R /etc/haproxy/banlist ; sudo service haproxy reload )

Créez le dossier où HaProxy va ranger vos certificats et vos banlistes.

mkdir -p /etc/haproxy/certs/
mkdir /etc/haproxy/banlist
chown root:root -R /etc/haproxy/certs
chmod 744 -R /etc/haproxy/certs
chown root:root -R /etc/haproxy/banlist
chmod 744 -R /etc/haproxy/banlist

Concaténez votre clés publique et privée. Recommencez pour chaque nom de domaine. Remplacez le nom de domaine en exemple par le votre.

DOMAIN='www.hello.world' sudo -E bash -c 'cat /etc/letsencrypt/live/$DOMAIN/fullchain.pem /etc/letsencrypt/live/$DOMAIN/privkey.pem > /etc/haproxy/certs/$DOMAIN.pem'

Éditez le fichier de configuration de HaProxy.

nano /etc/haproxy/haproxy.cfg

Cet exemple vous permet d'adapter votre configuration.

global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

    # Default SSL material locations
    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private

    # Default ciphers to use on SSL-enabled listening sockets.
    # For more information, see ciphers(1SSL). This list is from:
    #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
    ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
    ssl-default-bind-options no-sslv3

defaults
    log global
    mode    http
    option  httplog
    option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
    errorfile 400 /etc/haproxy/errors/400.http
    errorfile 403 /etc/haproxy/errors/403.http
    errorfile 408 /etc/haproxy/errors/408.http
    errorfile 500 /etc/haproxy/errors/500.http
    errorfile 502 /etc/haproxy/errors/502.http
    errorfile 503 /etc/haproxy/errors/503.http
    errorfile 504 /etc/haproxy/errors/504.http

frontend Frontend_HTTP
    bind *:80 v4v6
    bind *:443 v4v6 ssl crt /etc/haproxy/certs/www.hello.world.pem
#   option dontlog-normal # un-comment this line for logging only problem (recommanded if logs are on SD/eMMC card)
    option httpclose
    option forwardfor
    reqadd X-Forwarded-Proto:\ https
                # security
        tcp-request inspect-delay 5s
        acl bad_gateway hdr_sub(X-Tor2Web) -i 1 # ban tor2web bridge (tor hidden service protection)
        tcp-request content reject if bad_gateway # ban tor2web
                # ban User-Agent
        acl blockedagent hdr_sub(user-agent) -i -f /etc/haproxy/banlist/Ban_User-Agent.list # ban user agent list (https://gitlab.com/voxdemonix/divers-script/blob/master/Shinobi/HaProxy_Banlists/Ban_User-Agent.list)
        http-request deny if blockedagent # ban user agent list
        http-request deny if { hdr_cnt(user-agent) eq 0 } # ban empty user agent
                # ban pages
        acl restricted_page path_beg,url_dec -f /etc/haproxy/banlist/Ban_URL.list
        http-request deny if restricted_page
        # Define hosts
        # www.hello.world
        acl host_www.hello.world hdr(host) -i www.hello.world
        use_backend server_shinobi if host_www.hello.world


backend server_shinobi
        mode http
        log     global
        option  httplog # ici on log tout afin de détecter toute tentative d'intrusion
        balance roundrobin
    http-request add-header X-Forwarded-Proto https if { ssl_fc }
                # force https
    acl http      ssl_fc,not
    http-request redirect scheme https if http
    option forwardfor
    option httpchk GET /admin HTTP/1.0
        cookie SERVERID insert indirect nocache
        # YOUR SERVER HERE
        server ShinobiServer ShinobiServer:8080 cookie ShinobiServer check #ssl verify none

Si HaProxy et Shinobi sont situé sur deux machines différentes, il est franchement recommendé de chiffrer les communications entre les deux. Vous pouvez utiliser openssh, pivpn (openvpn) ou autre.

Téléchargez les banlists et accordez dessus les bonnes permissions.

wget -P /etc/haproxy/banlist/ https://gitlab.com/voxdemonix/divers-script/raw/master/Shinobi/HaProxy_Banlists/Ban_User-Agent.list
wget -P /etc/haproxy/banlist/ https://gitlab.com/voxdemonix/divers-script/raw/master/Shinobi/HaProxy_Banlists/Ban_URL.list
chown root:root -R /etc/haproxy/banlist
chmod 744 -R /etc/haproxy/banlist

Redémarrez HaProxy.

service haproxy reload

NB : par sécurité, vous pouvez suivre en direct les logs de votre serveurs depuis votre pc personnel via un simple conky. Pour ce faire, voyez ici.

  • # problèmes btrfs

    Posté par  . Évalué à 1 (+0/-0). Dernière modification le 16 décembre 2018 à 16:43.

    Btrfs est connu pour envoyer des informations incorrectes aux softwares qui "demandent" la taille des fichiers ou l'espace disponible.
    Peut-être serait-il bon de conseiller une alternative en lieu et place pour concevoir le JBOD. Si oui, laquelle?

    Note : je n'ai pas testé btrfs avec Shinobi. Ça n'a pas l'air d'avoir posé problème à ZoneMinder mais je n'ai vérifié (comment?) si cela empêchait l'utilisation complète de la mémoire disponible.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.