Madis Cyber est un logiciel Open Source de pilotage et d’analyse des risques cyber à destination des collectivités ou des structures de mutualisation.
Soutenu par l’ADULLACT cette solution vous aidera dans votre rôle de RSSI à évaluer la maturité cyber de votre structure ou des collectivités dont vous avez la charge.

Nous verrons  dans cet article comment installer Madis Cyber et comment effectuer les premiers paramétrages.

Prérequis

Nous installerons Madis Cyber sur un serveur Ubuntu 22.04 fraichement mis à jour.

La machine mise en place possédera 2go de RAM et 2 vCPU.

Le domaine local est domaintest.loc et le FQDN du serveur web madiscyber.domaintest.loc.

Comme nous le verrons ci dessous les extensions PHP suivantes seront nécessaires:

  • BCMath
  • Ctype
  • cURL
  • DOM
  • Fileinfo
  • JSON
  • Mbstring
  • OpenSSL
  • PCRE
  • PDO
  • Tokenizer
  • XML
  • PDOMySQL
  • Zip
  • Intl

Certaines s’installent directement avec PHP 8.1, d’autres seront contenues dans PHP-FPM et les dernières seront à installer manuellement.

Installation des prérequis

Nous commencerons par installer PHP, le serveur web NGINX, l’interpreteur Ghostscript et MYSQL Server.

sudo apt-get install php8.1 nginx git ghostscript mysql-server

Puis nous installerons le paquet wkhtmltox permettant la conversion de données HTML en PDF (https://github.com/wkhtmltopdf/packaging/releases/tag/0.12.6-1).
Il nous faudra bien évidement choisir le paquet correspondant à notre distribution. Nous taperons donc la commande :

wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb

Avant d’installer wkhtmltox nous déploierons les paquets nécessaires:

sudo apt-get install fontconfig libxrender1 xfonts-75dpi xfonts-base

Puis nous installerons le paquet wkhtmltox:

sudo dpkg -i wkhtmltox_0.12.6.1-2.jammy_amd64.deb

Enfin nous installerons les paquets PHP additionnels nécessaires:

sudo apt-get install php8.1-bcmath php8.1-curl php8.1-mbstring php8.1-xml php8.1-zip php8.1-intl php8.1-fpm php-mysql

Paramétrage de NGINX

A ce stade nous pourrons commencer à paramétrer le serveur web NGINX comme préconisé dans la documentation de Laravel.
Nous commencerons par supprimer le site par défaut:

sudo rm /etc/nginx/sites-available/default && sudo rm /etc/nginx/sites-enabled/default

Puis nous créerons une configuration pour le site madiscyber.domaintest.loc:

sudo nano /etc/nginx/sites-available/madiscyber.domaintest.loc

Nous collerons alors la configuration suivante:

server {
    listen 80;
    server_name madiscyber.domaintest.loc;
    root /var/www/madiscyber.domaintest.loc/public/;
 
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
 
    index index.php;
 
    charset utf-8;
 
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
 
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
 
    error_page 404 /index.php;
 
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
 
    location ~ /\.(?!well-known).* {
        deny all;
    }
}

 

ATTENTION: Par rapport à la configuration de base de Laravel et dû au contexte Ubuntu 22.04 nous avons modifié le chemin du paramètre fastcgi_pass pour le faire pointer vers le bon sock de php-fpm, à savoir : /var/run/php/php8.1-fpm.sock

Pour terminer nous créerons le liens symbolique nécessaire au bon fonctionnement du site dans NGINX:

sudo ln -s /etc/nginx/sites-available/madiscyber.domaintest.loc /etc/nginx/sites-enabled/madiscyber.domaintest.loc

Configuration de MYSQL

MYSQL sous Ubuntu 22.04 fait face a un bug de déploiement dans son script « mysql_secure_installation ».
La configuration se fait de la manière suivante:

  • Modification du compte root
  • Lancement du script

Nous allons donc commencer par modifier la méthode d’authentification de notre compte root.
Nous rentrerons dans MYSQL:

sudo mysql

Puis nous modifierons le compte:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '@@MotDePasse';
mysql> exit

Nous lancerons le script de déploiement:

sudo mysql_secure_installation

Et nous répondrons aux questions suivantes (surlignées en GRAS ci dessous):

Securing the MySQL server deployment.

Enter password for user root:

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: N

Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : N

… skipping.
By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from ‘localhost’. This ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named ‘test’ that anyone can access. This is also intended only for testing, and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
– Dropping test database…
Success.

– Removing privileges on test database…
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

Nous nous reconnecterons à MYSQL avec notre compte root:

mysql -u root -p

Enfin nous créerons la base de données « madiscyber« , un utilisateur pour s’y connecter « madisu » et les droits qui vont avec:

mysql> CREATE DATABASE madiscyber;
mysql> CREATE USER 'madisu'@'localhost';
mysql> ALTER USER 'madisu'@'localhost' IDENTIFIED WITH mysql_native_password BY '@@MotDePasseDuCompte';
mysql> GRANT ALL PRIVILEGES ON madiscyber.* TO 'madisu'@'localhost';
mysql> exit

Installation de Composer

La méthode d’installation de Composer pourra varier en fonction de la date à laquelle vous lirez cet article. Je me suis basé sur la documentation officielle disponible ici: https://getcomposer.org/download/.

Nous installerons donc Composer avec les commandes suivantes:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
sudo mv composer.phar /usr/local/bin/composer

Installation de NPM et Nodejs

L’installation de NPM et de Nodejs se fait en une seule ligne de commande:

curl -fsSL https://deb.nodesource.com/setup_19.x | sudo -E bash - && sudo apt-get install -y nodejs

Installation de Madis Cyber

Pour installer Madis Cyber nous commencerons par nous placer dans le répertoire /var/www/

cd /var/www/

Nous clonerons le projet depuis le gitlab de l’ADULLACT:

sudo git clone https://gitlab.adullact.net/soluris/madis-cyber.git

Nous renommerons le dossier du projet Madis, nous nous y placerons et nous génèrerons le fichier .env nécessaire au déploiement à partir du fichier exemple .env.example:

sudo mv madis-cyber/ madiscyber.domaintest.loc
cd madiscyber.domaintest.loc/
sudo cp .env.example .env

Afin de configurer le portail nous éditerons le fichier .env.

sudo nano .env

Les principaux paramètres à modifier seront les suivants:

  • APP_NAME : Le nom de votre portail Madis Cyber
  • APP_URL : l’URL de l’application, dans notre cas: « https://madiscyber.domaintest.loc« 
  • DB_DATABASE : nom de la base de données, dans notre cas « madiscyber« 
  • DB_USERNAME : utilisateur de la base de données, dans notre cas « madisu« 
  • DB_PASSWORD : mot de passe de la base de données, dans notre cas « @@MotDePasseDuCompte« 
  • MAIL_MAILER : Type de protocole de votre serveur de mail, dans notre cas smtp
  • MAIL_HOST : L’adresse de notre serveur de mail, dans notre cas smtp.domaintest.loc
  • MAIL_PORT : le port de notre serveur de mail, dans notre cas 587
  • MAIL_USERNAME : le compte mail servant à expédier les mails, dans notre cas admin@domaintest.loc
  • MAIL_PASSWORD : le mot de passe correspondant au compte mail
  • MAIL_ENCRYPTION : le chiffrement utilisé par notre serveur de mail, par exemple tls
  • MAIL_FROM_ADDRESS : l’adresse expéditrice des mails, ici madiscyber@domaintest.loc
  • SANCTUM_STATEFUL_DOMAINS : ajoutez une virgule à la fin de la ligne, puis le nom de domaine, dans notre cas : SANCTUM_STATEFUL_DOMAINS=localhost,127.0.0.1,127.0.0.1:8000,::1,madiscyber.domaintest.loc
  • ADMIN_EMAIL : cela sera l’adresse email de l’utilisateur administrateur que nous allons créer par la suite, dans notre cas : admin@domaintest.loc
  • ADMIN_PASSWORD : cela sera le mot de passe de l’utilisateur administrateur que nous allons créer par la suite, ici @@MotDePasseAdmin
  • ADMIN_FIRSTNAME : cela sera le prénom de l’utilisateur administrateur que nous allons créer par la suite
  • ADMIN_LASTNAME : cela sera le nom de l’utilisateur administrateur que nous allons créer par la suite
  • APP_FAVICON_PATH : le chemin vers l’image à utiliser comme icone d’onglet (image à placer dans le dossier public/images)
  • REFERENTIEL_VERSION : La version du référentiel à utiliser pour les évaluations, à ce jour 1.3
  • MIX_FOOTER_NAME: nom du pied de page en bas à gauche
  • MIX_FOOTER_LINK: lien du nom de pied de page en bas à gauche
  • MIX_FOOTER_YEAR: année du copyright en bas à gauche

Notre fichier de configuration ressemblera donc à cela:

APP_NAME="Madis Cyber"
APP_ENV=prod
APP_KEY=
APP_DEBUG=false
APP_URL=http://madiscyber.domaintest.loc

LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=madiscyber
DB_USERNAME=madisu
DB_PASSWORD=@@MotDePasseDuCompte

BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

MEMCACHED_HOST=127.0.0.1

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_MAILER=smtp
MAIL_HOST=smtp.domaintest.loc
MAIL_PORT=587
MAIL_USERNAME=madiscyber@domaintest.loc
MAIL_PASSWORD=MotdePasse
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="madiscyber@domaintest.loc"
MAIL_FROM_NAME="${APP_NAME}"

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

SANCTUM_STATEFUL_DOMAINS=localhost,127.0.0.1,127.0.0.1:8000,::1,madiscyber.domaintest.loc

ADMIN_EMAIL=admin@domaintest.loc
ADMIN_FIRSTNAME=Admin
ADMIN_LASTNAME=Domaintest
ADMIN_PASSWORD=@@MotDePasseAdmin

APP_FAVICON_PATH="logo_madis_2020_favicon_white.png"
REFERENTIEL_VERSION="1.3"
SEUIL_ALERTE=1
LOGO_SIDEBAR="logo-soluris.png"
FOOTER_LINK=https://www.soluris.fr/

 

Une fois la configuration effectuée, nous installerons les dépendances PHP avec composer et accepterons de le lancer en tant que root:

sudo composer install --optimize-autoloader --no-dev
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]?yes

 

Les dépendances seront alors téléchargées et installées:

Nous créerons une clé d’application:

sudo php artisan key:generate

Et nous lancerons les migrations:

sudo php artisan migrate

 

Nous ferons en sorte que les documents envoyés soient téléchargeables:

sudo php artisan storage:link

 

 

Nous installerons les données et créerons un premier utilisateur en lançant la commande:

sudo php artisan db:seed --class=InstanceSeeder

Enfin nous Installerons les dépendances javascript en lançant la commande:

sudo npm install && sudo npm run prod

Pour terminer nous donnerons les bons droits au répertoire contenant le portail et nous redémarrerons NGINX:

sudo chown www-data:www-data -R /var/www/madiscyber.domaintest.loc/
sudo chmod -R 755 /var/www/madiscyber.domaintest.loc/
sudo systemctl restart nginx.service

 

Premières configuration de Madis Cyber

Nous pourrons nous rendre sur http://madiscyber.domaintest.loc pour nous connecter avec le compte administrateur défini dans le fichier .env:

Comment fonctionne fonctionne Madis Cyber ?
Madis Cyber vous permettra de créer plusieurs « Territoires » sur lesquels vous associerez des « Structures » et auxquelles vous connecterez des « Utilisateurs ».

Pour notre test nous commencerons par créer une structure en cliquant sur « Territoires » dans le bandeau de gauche :

Puis nous cliquerons sur le bouton « Créer un territoire »:

Nous donnerons un nom à notre territoire et nous validerons en cliquant sur « Enregistrer les modifications »:

Nous créerons ensuite une structure (par exemple une Mairie, un EPCI de notre nouveau territoire). Pour cela nous cliquerons sur « Structures » dans le bandeau de navigation puis sur le bouton .

Nous donnerons les éléments suivants :

  • Le nom de la structure
  • Un nom court pour cette structure
  • Le type (Commune, CCAS, EPCI, CIAS, Syndicat Départemental, Autre)
  • Le SIREN de la structure
  • Le territoire sur lequel nous créons la structure
  • L’activation de la structure
  • Le site internet
  • Les données de localisation (adresses, code postal, nom de ville, code INSEE ..)

Nous rentrerons ensuite les renseignements concernant le responsable de la structure et le responsable cybersécurité.

Enfin nous donnerons les informations nécessaires concernant l’élu responsable de la cybersécurité.

Enfin nous validerons toutes ces saisies grâce au bouton « Enregistrer les modifications ».

Enfin nous créerons des utilisateurs via le menu « Utilisateurs » puis le bouton

Nous rentrerons les informations pour notre nouvel utilisateur, ici nous créerons le compte du RSSI et le rattacherons à notre structure en tant que « Gestionnaire ».
Nous n’oublierons pas d’activer l’utilisateur en cochant « Activer l’utilisateur ».

Puis nous validerons en cliquant sur le bouton « Créer l’utilisateur ».

Une fois ces étapes faites nous pourrons nous connecter avec notre RSSI de la « structuretest » du « Territoire Test ».

Première connexion et création d’un évaluation

A notre première connexion nous irons dans le menu « Evaluations » :

Nous créerons alors une évaluation grâce au bouton « Créer une évaluation » :

Il nous suffira alors de nous laisser guider par les différents questionnaires pour procéder à la première évaluation de maturité de cybersécurité de notre structure:

Conclusion

Madis Cyber est un très bon outil d’évaluation. Sa mise en place n’est pas des plus aisée mais son utilité pourra vous permettre une vue d’ensemble rapide de vos forces et faiblesses Cyber. Son coté multi structure vous permettra de manager plusieurs plans de sécurisation (génération de plan d’action, de PSSI).

Je suis convaincu de cet outil qui a le mérite d’être gratuit et OpenSource !

 

 

 

Comments are closed