Netbox | IPAM, DCIM and more


Présentation


Netbox est un projet lancé par Jeremy Stretch (@jstretch85) en Mars 2016. Créateur du site packetlife.net, connu pour ses anti-sèches Cisco.

Ce nouveau programme va faciliter la vie de beaucoup d’administrateur système et réseau, comme vous peut-être. Netbox est ce qu’on appelle dans le jargon un IPAM, DCIM, + :

  • IPAM (IP Address Management) : Permet de gérer les adresses IP (publiques ou privées) de votre réseau
  • DCIM (Data Center Infrastucture Management) : Permet de reproduire vos baies de serveurs pour maintenir votre inventaire à jour
  • …et bien plus encore

Netbox est codé en python et utilise PostgreSQL comme gestionnaire de base de données, il s’appuie également sur supervisor et gunicorn pour la partie Web.


Mise en place


Démarrons sur une VM Ubuntu 16.04 fraîchement installée et à jour.

Étape 1 : Installation et configuration de la base de données PostgreSQL

Installation de PostgreSQL :

1
apt-get install postgresql libpq-dev python-psycopg2

Démarrage du service PostgreSQL :

1
/etc/init.d/postgresql start

Une fois installé, connectez-vous à avec l’utilisateur PostgreSQL :

1
su postgres

Lancement le gestionnaire de base :

1
psql

Création de la base de données « netbox » :

1
CREATE DATABASE netbox;

(on n’oublie pas le petit « ; » à la fin des requêtes SQL 😉 )

Création d’un utilisateur « netbox » :

1
CREATE USER netbox WITH PASSWORD 'MotDePasseFort';

Élévation des privilèges pour cet utilisateur :

1
GRANT ALL PRIVILEGES ON DATABASE netbox TO netbox;

Quittez le gestionnaire de base :

1
\q

On n’oublie pas de se déconnecter de l’utilisateur postgres

1
exit

Étape 2 : Installation et configuration de Netbox

Installation des pré-requis :

1
apt-get install python2.7 python-dev python-pip libxml2-dev libxslt1-dev libffi-dev graphviz libpq-dev libssl-dev

Téléchargement de Netbox :
Pour cela, deux choix s’offre à vous :

1) Vous pouvez télécharger directement la dernière version via http
2) Ou vous pouvez passer par un clone du dépot Git.

Ici nous choisirons la première option. Rendez-vous sur cette page pour télécharger la dernière version et laissez-vous guider :

1
2
3
4
5
6
cd /opt
wget https://github.com/digitalocean/netbox/archive/v1.7.3.tar.gz
tar -xzvf v1.7.3.tar.gz
rm v1.7.3.tar.gz
ln -s netbox-1.7.3/ netbox
cd /opt/netbox

Installation des paquets Python necéssaires :

1
pip install -r requirements.txt

Configuration de Netbox :
Les fichiers de configurations se trouvent dans

1
/opt/netbox/netbox/netbox
1
2
cd /opt/netbox/netbox/netbox
cp configuration.example.py configuration.py

Nous allons maintenant éditer le fichier

1
configuration.py

. Nous allons configurer les trois paramètres suivants :

ALLOWED_HOSTS correspond à l’adresse d’écoute du serveur :

1
ALLOWED_HOSTS = ['netbox.example.com', '10.1.2.3']

DATABASE correspond aux paramètres nécessaires pour se connecter à la base données :

1
2
3
4
5
6
7
DATABASE = {
'NAME': 'netbox',
'USER': 'netbox',
'PASSWORD': 'UnMotDePasseFort',
'HOST': 'localhost',
'PORT': '',
}

SECRET_KEY correspond à la clef unique pour votre serveur Netbox. Elle doit à tout prix rester confidentiel.

NB: Dans une infrastructure hautement disponible, avec plusieurs serveurs web donc, la clef sera et devra être identique sur tous les serveurs.

Génération de la clef : rendez-vous dans

1
/opt/netbox/netbox

et lancez le script

1
generate_secret_key.py

. Vous obtiendrez alors un résultat de ce genre

1
sw)f34UaTvK8ZRy5hR6zq7YZf&8DHH0+a(_0noCa(M^FiZo%X7

Migration de la base :
Avant de lancer netbox, il faut initialiser la base de données et y insérer son schéma, rendons-nous alors dans

1
/opt/netbox/netbox

et lançons la commande suivante :

1
./manage.py migrate

En cas d’erreur, vérifiez votre fichier

1
configuration.py

.

Création d’un super utilisateur :
Toujours depuis

1
/opt/netbox/netbox

, lancez :

1
2
3
4
5
./manage.py createsuperuser
Username: admin
Email address: admin@example.com
Password:
Password (again):

Récupération des fichiers statiques :
Toujours depuis

1
/opt/netbox/netbox

, lancez :

1
./manage.py collectstatic

Répondez « yes » pour valider.

Effectuer un rapide test :
Pour avoir un premier aperçu, nous pouvons lancer un test :

1
./manage.py runserver 10.1.2.3:8080

Le serveur se lance alors, rendez-vous sur l’url renseignée juste avant, et vérifiez que vous avez une réponse. (Il est possible que le CSS ne charge pas, ne vous en faites pas, c’est normal).
^C

Étape 3 : Installation et configuration du serveur Web

Ici nous utiliserons Supervisor, Gunicorn et Nginx :

1
apt-get install nginx gunicorn supervisor

Configuration Nginx

Une fois l’installation terminée, rendez-vous dans le dossier de configuration des sites de Nginx.

1
cd /etc/nginx/sites-available/

Éditez le fichier

1
netbox

et ajoutez-y la configuration suivante. Remplacez

1
netbox.example.com

par le nom de domaine du serveur et/ou l’adresse IP.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 80;
server_name netbox.example.com;
access_log off;
location /static/ {
alias /opt/netbox/netbox/static/;
}
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
}
}

Puis supprimez le fichier

1
default

et créez un lien symbolique de votre fichier

1
netbox

vers les sites activés :

1
2
3
cd /etc/nginx/sites-enabled/
rm default
ln -s /etc/nginx/sites-available/netbox

Vérifiez que la configuration de Nginx est bonne :

1
nginx -t

puis redémarrez-le :

1
/etc/init.d/nginx restart

Pour plus de sécurité, je vous conseille de mettre en place https et vous renvoi à mon article à ce sujet.

Configuration gunicorn

Rendez-vous dans le répertoire

1
/opt/netbox

, créez le fichier

1
gunicorn_config.py

. Vérifiez que gunicorn se trouve bien dans

1
/usr/bin/gunicorn

et que les fichiers python de Netbox soient bien localisés dans

1
/opt/netbox/netbox/netbox
1
2
3
4
5
command = '/usr/bin/gunicorn'
pythonpath = '/opt/netbox/netbox/netbox'
bind = '127.0.0.1:8001'
workers = 3
user = 'www-data'

Configuration supervisord

Rendez-vous dans le répertoire

1
/etc/supervisor/conf.d/

, créez le fichier

1
netbox.conf

et ajoutez-y :

1
2
3
4
[program:netbox]
command = gunicorn -c /opt/netbox/gunicorn_config.py netbox.wsgi
directory = /opt/netbox/netbox/
user = www-data

Redémarrons supervisor

1
/etc/init.d/supervisor restart

.

Vous pouvez maintenant vous connecter à votre interface web. Si vous recevez une erreur « 502 », cela signifie que gunicorn est mal configuré ou qu’il est arrêté.

NB : Si vous redémarrez votre serveur, netbox ne redémarrera pas automatiquement. Pour palier à ce problème, nous allons modifier

1
/etc/rc.local

et y ajouter

1
/etc/init.d/supervisor restart

au dessus de

1
exit 0

Source

And you are done.

Enjoy 🙂