Suricata : installation

Mise à jour juillet 2016 pour la version 3 (3.0.1 pour être précis). 
Il faut maintenant installer des choses sérieuses : "make", "wget" et "git" si ce n'est déjà fait ainsi que la triplette "mysql-client","mysql-server" ainsi que "libmysqld-dev" , je fonctionne actuellement avec MariaDB. 
J'ai créé un utilisateur "suricata" avec un mot de passe du même métal pour faire tourner le tout sans droits "root". 
Ensuite télécharger le tar.gz (1.4.1 lors des premiers tests 3.0.1 à ce jour) dans un répertoire tranquille : 
wget http://www.openinfosecfoundation.org/download/suricata-3.0.1.tar.gz ou plus récent visible sur https://oisf.net/ 
suivi d'un : tar -xvf suricata-3.0.1.tar.gz 
Il faut charger quelques dépendances spécifiques :

  • pkg-config
  • libpcap-dev
  • libpcre3-dev
  • libyaml-dev
  • libnet1-dev
  • libcap-ng-dev
  • libmagic-dev
  • libhtp-dev
  • zlib1g-dev
  • libjansson4  libjansson-dev
  • libnfnetlink0 libnfnetlink-dev
  • libnetfilter-queue-1 libnetfilter-queue-dev

Un apt-get install de toute la liste suffit. 
Ensuite le "./configure" magique permet de commencer le travail et le récap en fin d'exécution permet de vérifier si toutes les options nous conviennent :

Suricata Configuration: 
  AF_PACKET support:                       yes 
  PF_RING support:                         no 
  NFQueue support:                         no 
  IPFW support:                            no 
  DAG enabled:                             no 
  Napatech enabled:                        no 
  Unix socket enabled:                     no 
  libnss support:                          no 
  libnspr support:                         no 
  libjansson support:                      no 
  Prelude support:                         no 
  PCRE jit:                                no 
  libluajit:                               no 
  libgeoip:                                no 
  Non-bundled htp:                         no 
  Old barnyard2 support:                   no 
  CUDA enabled:                            no 
  Suricatasc install:                      yes 
  Unit tests enabled:                      no 
  Debug output enabled:                    no 
  Debug validation enabled:                no 
  Profiling enabled:                       no 
  Profiling locks enabled:                 no 
Generic build parameters: 
  Installation prefix (--prefix):          /usr/local 
  Configuration directory (--sysconfdir):  /usr/local/etc/suricata/ 
  Log directory (--localstatedir) :        /usr/local/var/log/suricata/ 
  Host:                                    i686-pc-linux-gnu 
  GCC binary:                              gcc 
  GCC Protect enabled:                     no 
  GCC march native enabled:                yes 
  GCC Profile enabled:                     no 
To build and install run 'make' and 'make install'. 
You can run 'make install-conf' if you want to install initial configuration 
files to /usr/local/etc/suricata/. Running 'make install-full' will install configuration 
and rules and provide you a ready-to-run suricata. 
To install Suricata into /usr/bin/suricata, have the config in 
/etc/suricata and use /var/log/suricata as log dir, use: 
./configure --prefix=/usr/ --sysconfdir=/etc/ --localstatedir=/var/

Pour plus de sécurité (isolation dans un répertoire spécifique) je vais lancer la configuration avec les options suivantes : 
./configure --prefix=/opt/suricata \ 
            --sysconfdir=/opt/suricata/ \ 
            --localstatedir=/opt/suricata/ 
Le log final contient :

Generic build parameters: 
  Installation prefix (--prefix):          /opt/suricata 
  Configuration directory (--sysconfdir):  /opt/suricata/suricata/ 
  Log directory (--localstatedir) :        /opt/suricata/log/suricata/

Ce n'est pas tout à fait ce que je voulais et je corrige "un peu" le Makefile (aux environs de la ligne 245) pour obtenir un "arbre" de répertoires sous /opt/suricata :

e_localstatedir = /opt/suricata/run 
e_logdir = /opt/suricata/log 
e_logfilesdir = /opt/suricata/log/files 
e_magic_file = /usr/share/file/magic 
e_rundir = /opt/suricata/run/ 
e_sysconfdir = /opt/suricata/etc 
e_sysconfrulesdir = /opt/suricata/etc/rules

Je lance enfin le "make" qui se déroule sans ennuis ... de même pour le "make install" ... qui m'installe un arbre de répertoires "convenable", enfin qui me convient, "make install-conf" installe la config de base puis "make install-full"  télécharge et installe un jeu de règles standard. 
Image de mon arbre de répertoires :

drwxrwsr-x  9 root suricata 4096 2013-05-06 14:39 . 
drwxrwsr-x 18 root staff    4096 2013-05-06 13:40 .. 
drwxr-xr-x  2 root suricata 4096 2013-05-07 16:29 bin 
drwxr-xr-x  3 root suricata 4096 2013-05-07 17:09 etc 
drwxr-xr-x  3 root suricata 4096 2013-05-06 14:37 include 
drwxr-xr-x  4 root suricata 4096 2013-05-06 15:10 lib 
drwxrwxr-x  3 root suricata 4096 2013-05-07 17:14 log 
drwxrwxr-x  2 root suricata 4096 2013-05-07 16:07 run 
drwxr-sr-x  3 root suricata 4096 2013-05-06 14:37 share

J'ai donné au user "suricata" les droits "group" sur l'ensemble des répertoires de /opt/suricata et les droits d'écriture sur les répertoires "log" et "run". 
Il faut ensuite réaliser un script de démarrage car je n'en ai pas trouvé de disponible (mon exemplaire est disponible par le lien en bas de page). 
Il faut ensuite légèrement modifier le fichier "etc/suricata.yaml" pour l'adapter à la structure de mes répertoires. J'ai désactivé l'option "fast log" qui consomme trop d'espace pour mes besoins de test sur un portable. J'ai aussi réduit la fréquence de stockage des statistiques à 30 minutes. 
Après le lancement du produit on peut constater l'arrivée de quelques alertes ... mais elles sont au format "Unified2" et donc illisibles il faut utiliser un interface pour les rendre compréhensibles. Le projet conseille "Barnyard2" qui les enregistre dans une base de données (ici Mysql) et que je vais essayer au prochain épisode. 
Le paramétrage du fichier de configuration est très bien expliqué (au moins pour les options "courantes") dans le fichier suricata.yaml. 
Vous trouverez ces fichiers en attachement, mes quelques modifications du fichier YAML sont précédées d'un commentaire #JPP.