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


Nous commencerons par installer « iptables-persistent » afin de mieux sauvegarder les règles que nous allons créer :
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.

 

 

Categories:

Comments are closed