Connaitre son système d’information est un acte essentiel qui nous permet de répondre aux mieux aux diverses exigences et aléas de la vie d’un SI. Que cela soit en terme de processus, de biens, d’actifs logiciels, de flux de données, en interne ou en externe, établir une cartographie précise est indispensable au management du risque qu’exerce tout DSI ou RSSI au quotidien.
Que cela soit en cas de transformation ou d’incident majeur sur le SI, une bonne cartographie nous permet avant tout de savoir ou nous sommes et nous pouvons aller.
C’est dans ce cadre que nous allons installer Mercator, outil Open Source à l’initiative de Didier Barzin, pour nous aider à formaliser et à créer notre propre cartographie des systèmes d’informations.
Généralités
L’ANSSI fournit un guide d’élaboration de cartographie disponible ICI. Très en lien avec la méthode EBIOS il se compose de 5 étapes:
- 1 – la définition des enjeux d’établissement d’une cartographie que cela soit en terme d’objectifs visés, de périmètres, de parties prenantes et des leurs responsabilités et de niveau de détails à atteindre
- 2 – La collecte d’éléments existant pouvant servir à la création de notre cartographie ainsi que la définition des valeurs métiers, des biens support et des représentations graphiques attendues
- 3 – La définition des outils de cartographie que nous allons utiliser, en l’occurrence pour cet article Mercator
- 4 – La réalisation des inventaires et des vues cartographiques
- 5 – Le maintient en condition opérationnel de cette cartographie
Mercator nous assiste dans la réalisation de ces taches en proposant un outils multi-utilisateur, permettant la création de vue graphiques de l’écosystème de notre SI que ce soit d’un point de vue logique ou physique. Il permet également la génération de rapport, d’extraction au format CSV, PDF etc.
Installation et configuration de Mercator
Prérequis
Nous installerons Mercator sur une Ubuntu 24.04 fraichement mise à jour.
La machine mise en place possédera 2go de RAM et 2 vCPU.
Vous retrouverez les prérequis complets ICI.
Nous sécuriserons le serveur avec HTTPS.
Le domaine local est domaintest.loc et le FQDN du serveur web mercator.domaintest.loc.
Installation des prérequis
Nous commencerons par nous assurer que notre distribution Ubuntu 24.04 est bien à jour:
sudo apt update && sudo apt upgrade
Puis nous commencerons par installer PHP et les librairies nécessaires:
sudo apt install php-zip php-curl php-mbstring php-dom php-ldap php-soap php-xdebug php-mysql php-gd libapache2-mod-php
Nous installerons Apache, Graphiz, Composer, NPM et Git:
sudo apt install vim apache2 git graphviz npm composer
Clonage du projet
Nous récupérerons les sources de l’outil et les placerons dans le bon répertoire avec les commandes suivantes:
cd /var/www sudo git clone https://www.github.com/dbarzin/mercator sudo mv mercator/ mercator.domaintest.loc sudo chown -R $USER:$GROUP mercator.domaintest.loc/
Composer
Nous installerons les packages avec Composer :
cd /var/www/mercator.domaintest.loc composer install
NPM
Nous installerons les packages avec NPM:
cd /var/www/mercator.domaintest.loc npm install npm run build
MySQL
Nous installerons MySQL Server:
sudo apt install mysql-server -y
Nous nous connecterons au serveur MySQL:
sudo mysql
Nous créerons la base de données mercator et l’utilisateur mercator_user:
CREATE DATABASE mercator CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER 'mercator_user'@'localhost' IDENTIFIED BY 'votre_mot_de_passe'; GRANT ALL PRIVILEGES ON mercator.* TO 'mercator_user'@'localhost'; GRANT PROCESS ON *.* TO 'mercator_user'@'localhost'; FLUSH PRIVILEGES; EXIT;
Création du fichier de configuration et paramétrage de l’application
Nous commencerons par créer un fichier de configuration à partir du fichier exemple:
cd /var/www/mercator.domaintest.loc cp .env.example .env
Puis nous éditerons le fichier .env :
sudo nano .env
Nous spécifierons qu’il s’agit d’un serveur de production avec le paramètre:
APP_ENV=production
Nous donnerons l’adresse de notre futur portail web:
APP_URL=https://mercator.domaintest.loc
Nous modifierons les paramètres de connexions à la base de données avec les informations précédemment créées :
## .env file DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=mercator DB_USERNAME=mercator_user DB_PASSWORD=votre_mot_de_passe
Nous pourrons configurer le connecteur mail afin de recevoir les notifications ou messages provenant du portail:
MAIL_MAILER=smtp MAIL_HOST=mail.domaintest.loc MAIL_PORT=25 MAIL_USERNAME=mail1@domaintest.loc MAIL_PASSWORD=votre_mot_de_passe MAIL_ENCRYPTION=ssl MAIL_FROM_ADDRESS=mail1@domaintest.loc MAIL_FROM_NAME="${APP_NAME}"
Création de la base de données
Nous commencerons par exécuter les migrations:
php artisan migrate --seed
Nous génèrerons la clé de l’application:
php artisan key:generate
Nous viderons le cache:
php artisan config:clear
Importation de la base de données des CPE
Les CPE (Official Common Platform Enumeration) forment un système de nommage des ressources informatiques créées par le NIST. Il est possible de les télécharger et de les importer dans Mercator. Pour cela nous taperons:
cd /var/www/mercator wget https://nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-dictionary_v2.3.xml.gz gzip -d official-cpe-dictionary_v2.3.xml.gz php artisan mercator:cpe-import ./official-cpe-dictionary_v2.3.xml
Sécurisation du serveur web via HTTPS
Afin de sécuriser au mieux le service web Mercator, nous aurons besoin de mettre en place un certificat HTTPS.
Ici, par soucis de sécurité nous ne connecterons pas ce serveur vers l’extérieur. Nous générerons donc notre propre autorité de certification et le certificat associé au nom de domaine (mercator.domaintest.loc).
Il sera nécessaire de diffuser le certificat racine via une GPO.
Nous commencerons par créer le dossier de travail nécessaire à ce domaine spécifique et nous nous y placerons:
sudo mkdir /etc/ssl/mercator.domaintest.loc/ cd /etc/ssl/mercator.domaintest.loc/
Nous commencerons par générer la clé privée pour l’autorité de certification en rentrant un mot de passe.
Ce dernier sera absolument nécessaire pour la signature de certificat, conservez le précieusement:
sudo openssl genrsa -des3 -out domaintestCA.key 2048 Enter PEM pass phrase: Verifying - Enter PEM pass phrase:
Puis nous générerons le certificat root de l’autorité de certification à destination des clients au format .pem:
sudo openssl req -x509 -new -nodes -key domaintestCA.key -sha256 -days 3650 -out domaintestCA.pem Enter pass phrase for domaintestCA.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:DS Locality Name (eg, city) []:City Organization Name (eg, company) [Internet Widgits Pty Ltd]:LAB Remiflandrois.fr Organizational Unit Name (eg, section) []:IT Common Name (e.g. server FQDN or YOUR name) []:Wildcard domaintest.loc Email Address []:admin@domaintest.loc
Pour des raisons pratiques nous génèrerons également un certificat au format .crt:
sudo openssl x509 -in domaintestCA.pem -inform PEM -out domaintestCA.crt
Nous créerons la clé privée utilisée pour tous les serveurs de domaintest.loc de telle manière que le certificat final soit un certificat wildcard (*.domaintest.loc).
Puis nous génèrerons le CSR (Certificate Signing Request) :
sudo openssl genrsa -out wildcard.domaintest.loc.key 2048 sudo openssl req -new -key wildcard.domaintest.loc.key -out wildcard.domaintest.loc.csr You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:DS Locality Name (eg, city) []:City Organization Name (eg, company) [Internet Widgits Pty Ltd]:LAB Remiflandrois.fr Organizational Unit Name (eg, section) []:IT Common Name (e.g. server FQDN or YOUR name) []:Wildcard Domaintest.loc Email Address []:admin@domaintest.loc Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Nous créerons un fichier contenant les paramètres pour notre certificat HTTPS:
sudo nano wildcard.domaintest.loc.ext authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = *.domaintest.loc
Enfin nous signerons notre certificat avec notre autorité de certification et obtiendrons le certificat public pour Apache.
Lors de ce processus le mot de passe de notre autorité de certification nous sera demandé :
sudo openssl x509 -req -in wildcard.domaintest.loc.csr -CA domaintestCA.pem -CAkey domaintestCA.key -CAcreateserial -out wildcard.domaintest.loc.crt -days 3650 -sha256 -extfile wildcard.domaintest.loc.ext Certificate request self-signature ok subject=C = FR, ST = DS, L = City, O = LAB Remiflandrois.fr, OU = IT, CN = Wildcard Domaintest.loc, emailAddress = admin@domaintest.loc Enter pass phrase for domaintestCA.key:
Configuration du VHost Apache
Nous devrons ensuite configurer le vHost nécessaire à la publication du site. Nous exécuterons donc la commande :
sudo nano /etc/apache2/sites-available/mercator.domaintest.loc.conf
Et nous compléterons ce fichier comme ci dessous:
<VirtualHost *:443> ServerName mercator.domaintest.loc ServerAdmin admin@domaintest.loc DocumentRoot /var/www/mercator.domaintest.loc/public SSLEngine on SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA SSLCertificateFile /etc/ssl/mercator.domaintest.loc/wildcard.domaintest.loc.crt SSLCertificateKeyFile /etc/ssl/mercator.domaintest.loc/wildcard.domaintest.loc.key SSLCertificateChainFile /etc/ssl/mercator.domaintest.loc/domaintestCA.crt <Directory /var/www/mercator.domaintest.loc/> AllowOverride All </Directory> ErrorLog ${APACHE_LOG_DIR}/mercator_error.log CustomLog ${APACHE_LOG_DIR}/mercator_access.log combined </VirtualHost>
Puis nous activerons les modules Apache nécessaires:
sudo a2enmod ssl sudo a2enmod rewrite sudo a2dissite 000-default.conf sudo a2ensite mercator.domaintest.loc.conf
Nous donnerons les droits adéquats:
sudo chown -R www-data:www-data /var/www/mercator.domaintest.loc sudo chmod -R 775 /var/www/mercator.domaintest.loc/storage
Nous créerons le lien symbolique et redémarrerons Apache :
sudo ln -s /etc/apache2/sites-available/mercator.domaintest.loc.conf /etc/apache2/sites-enabled/mercator.domaintest.loc.conf sudo systemctl restart apache2
Configuration du pare-feux IPTABLES
sudo apt-get install iptables-persistent
Puis nous rentrerons les règles autorisant uniquement le SSH le HTTP et le HTTPS :
sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -P INPUT DROP
Puis nous sauvegarderons les règles :
sudo sh -c "iptables-save > /etc/iptables/rules.v4"
Scheduler
Il sera nécessaire de paramétrer un tache CRON pour le bon fonctionnement du logiciel:
sudo crontab -e * * * * * cd /var/www/mercator.domaintest.loc && php artisan schedule:run >> /dev/null 2>&1
Première connexion à Mercator
Pour notre première connexion à Mercator nous utiliserons l’adresse https://mercator.domaintest.loc.
Nous utiliserons le login par défaut admin@admin.com et le mot de passe par défaut: password.
Comments are closed