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 Press y|Y for Yes, any other key for No: N Using existing password for root. … skipping. Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y 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
– Removing privileges on test database… Reloading the privilege tables will ensure that all changes Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y 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