Centraliser vos logs avec Graylog2 sous Debian 9

9 juin 2017 | Posted in Réseau, Supervision | By

Présentation de Graylog2

Aujourd’hui on va installer le génialisime Graylog !!! Tout bon administrateur système comprend la nécessité d’avoir des logs faciles à lire et à stocker.
Le log a plusieurs inconvénient :

  • Le Log peux prendre beaucoup de place sur un serveur de production et remplir une partition.
  • Le Log peut être perdu suite à un crash d’une machine, on est alors aveugle sur le pourquoi du crash
  • Le Log peut aussi bien être corrompu par un attaquant pour masquer son attaque.

Graylog va donc centraliser les logs de vos serveurs et application et grâce à son interface très intuitive de pouvoir facilement comparer les logs et les analyser. Un gain de temps phénoménal. Mais ce n’est pas tout.
Graylog peut aussi faire des analyses automatiques qui vous alerteront en automatique via email. Tout bonnement génial. Avant j’utilisais octopussy , maintenant sans hésitez graylog !!!

Objectif de ce tutorial sur Graylog2

Comme toujours nous allons partir sur une Debian vierge, mais pour la première fois une Debian 9 stretch. Après tout elle sort officiellement dans 10 jours.
Quelques conseils pour votre infrastructure :

  • Que vous soyez dans un vswitch ou sur un LAN je vous invite fortement à avoir un VLAN réservé à votre administration (sonde de monitoring et log) et cela bien sur dans la mesure du possible sur une autre carte Réseaux.
    Pourquoi me direz vous? Tout simplement pour séparer les Flux applicatifs des flux administrations.
  • N’oubliez pas que les Logs sont soumis à la réglementation et qu’ils doivent être conservé, l’espace disque peut donc devenir conséquent et suivant le parc machine les accès en écriture et lecture tout autant, dimensionnez bien votre infrastructure. Personnellement je monte une partition sur un nas pour les données.
  • Les logs ne doivent jamais circulé en clair, il y a bien souvent trop d’informations importantes.

Graylog s’appuie sur deux dépendances :

  • Elasticsearch
  • MongoDb

Nous verrons donc comment installer ses dépendances mais aussi un peu les sécuriser. Puis nous installerons Graylog et le configurerons.

Pour tout ce qui sera certificat SSL je me baserai sur le tutorial Letsencrypt que j’ai écrit précédemment.

Installation de Graylog

Infrastructure

On commence par monter une infrastructure de test. Pour des raisons pratiques je ferai tout cela dans mon esxi.
Cette infrastructure  comprendra :

  1. Un vm de test sous debian jessie avec un apache et un mysql
  2. Une vm de test sous windows 2012 Server R2
  3. Une Vm equivalent à un nas
  4. La Vm pour Graylog en mode standalone

Toutes les Vms à part bien sur le nas auront une interface public. ( Traduction chez ovh une ipfailover )
Toutes les Vms auront une interface privé en Lan réservé au log sur un viswitch dédié.
La vm faisant office de nas servira a stocker les logs et les données. Le point de montage sera /mnt/data

Attention à bien faire ce point de montage car je le met en dur dans la configuration.

Génération des certificats

Installation

Comme je le disais précédemment nous allons encrypter les flux de données. Grace à Letsencrypt rien de bien compliquer. Il vous faut juste un nom de domaine pointant vers votre serveur et le package certbot

apt-get install certbot

Configuration

Imaginons que vous decidiez d avoir comme nom de domaine pour votre graylog : log.mon-domaine.com
Pour générez le certificat il vous faut faire :

certbot certonly --standalone -d log.mon-domaine.com

Le certificat ainsi généré sera disponible dans le dossier : /etc/letsencrypt/live/log.mon-domaine.com

Elasticsearch

Installation

Nous allons maintenant installé elasticsearch en passant par le dépôt officiel mais attention !!! la plupart des tutoriaaux remonte l’information que Graylog2 requière au minimum elasticsearch 2.x, mais ne stipule pas que Graylog2 n’est pas compatible avec les versions supérieurs à 5.x !!!!! On va donc prendre la version 2.4 et non la 6 ou 5. Oui elasticsearch est passé de la version 2.4 à 5 sans passer par le 3 ou 4

Perso pour information, j ai essayé avec la 6 ou cas ou, je confirme que graylog ne fonctionne pas du tout.


apt-get install apt-transport-https openjdk-8-jdk
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
apt-get update && apt-get install elasticsearch

On crée nos répertoires sur le nas pour les logs et les data d elasticsearch

mkdir /mnt/nas/elasticsearch && chown -R elasticsearch:elasticsearch /mnt/nas/elasticsearch

Configuration

Nous allons configurer elasticsearch, le sécuriser et aussi s occuper de systemd pour automatiser son démarrage.

sed -i -r 's/^# cluster.name:.*/cluster.name: graylog/' /etc/elasticsearch/elasticsearch.yml
sed -i -r 's/^# node.name:.*/node.name: graylog-server/' /etc/elasticsearch/elasticsearch.yml
sed -i 's/# node.max_local_storage_nodes: 1/node.max_local_storage_nodes: 1/' /etc/elasticsearch/elasticsearch.yml
sed -i -r 's/^# network.host:.*/network.host: 127.0.0.1/' /etc/elasticsearch/elasticsearch.yml
sed -i -r 's/^# path.data:.*/path.data: \/mnt\/nas\/elasticsearch\/data /' /etc/elasticsearch/elasticsearch.yml
sed -i -r 's/^# path.logs:.*/path.logs: \/mnt\/nas\/elasticsearch\/logs /' /etc/elasticsearch/elasticsearch.yml

Pour comprendre, je demande en premier de changer le nom du cluster et celui du node. Je force à ce qu’il y ait qu’un seul node.
Puis pour sécuriser je bloque l’écoute de l elasticsearch qu’en local.
Enfin je déplace les données et les logs directement sur le nas.

Enfin j active le redemarrage automatique et je lance elasticsearch
systemctl start elasticsearch
systemctl enable elasticsearch

Pour verifier que tout fonctionne :
journalctl | tail

et

netstat -anp | grep 9200

Mongodb

Maintenant nous passons à Mongodb qui malheureusement ne possède pas à ce jour de dépôt propre sur le site de mongodb.
On va donc installer la version de base qui par chance est la version 3.2 parfaitement compatible avec graylog

Installation

apt-get install mongodb-server

Configuration

Nous allons donc sécuriser votre serveur.

sed -i -r 's/^#nohttpinterface/nohttpinterface/' /etc/mongodb.conf
Enfin vérifiez bien que votre bind_ip est bien sur 127.0.0.1

Installation de Graylog 2.2

Installation

apt-get install uuid-runtime pwgen
wget https://packages.graylog2.org/repo/packages/graylog-2.2-repository_latest.deb
dpkg -i graylog-2.2-repository_latest.deb
apt-get update
apt-get install -y graylog-server

Comme indiquer, à la fin de l’installation, il vous reste à automatiser le démarrage de Graylog


systemctl enable graylog-server.service
systemctl daemon-reload
systemctl start graylog-server.service

Configuration


# generation d un salt unique pour hash mot de passe
mdprand=$(openssl rand -base64 32)
sed -i 's#password_secret =.*#password_secret = '"$mdprand"'#' /etc/graylog/server/server.conf
# Mot de passe de l administrateur , changez MOT_DE_PASSE_ROOT par votre mot de passe
mdp_root=$(echo -n "MOT_DE_PASSE_ROOT" | shasum -a 256 | awk '{print $1}')
sed -i 's#root_password_sha2 =.*#root_password_sha2 = '"$mdp_root"'#' /etc/graylog/server/server.conf
# email contact
sed -i 's/#root_email = ""/root_email = "ROOT_EMAIL"/' /etc/graylog/server/server.conf
#Timezone Paris
sed -i 's/#root_timezone = UTC/root_timezone = CET/' /etc/graylog/server/server.conf
#config elasticsearch
sed -i 's/elasticsearch_shards = 4/elasticsearch_shards = 1/' /etc/graylog/server/server.conf
sed -i 's/#elasticsearch_discovery_zen_ping_multicast_enabled = false/elasticsearch_discovery_zen_ping_multicast_enabled = false/' /etc/graylog/server/server.conf
sed -i 's/#elasticsearch_discovery_zen_ping_unicast_hosts = 127.0.0.1:9300/elasticsearch_discovery_zen_ping_unicast_hosts = 127.0.0.1:9300/' /etc/graylog/server/server.conf
# On ouvre l interface web en 127.0.0.1 et on fera apres un proxy avec apache pour avoir du https
sed -i 's/#web_listen_uri = .*/web_listen_uri = http:\/\/127.0.0.1:9000/' /etc/graylog/server/server.conf

On redemarre graylog


systemctl restart graylog-server.service

Accès à l’interface web

On installe apache :

apt-get install apache2 cronolog

On active les mods apache dont on a besoin :

a2enmod ssl
a2enmod rewrite
a2enmod headers
a2enmod proxy
a2enmod proxy_http

Il ne reste plus qu’à mettre ne place un vhost qui force le https avec le certificat que l on a créé précédemment.

Je rappelle qu il faut remplacer dans ce qui suit log.mon-domaine.com par votre nom de domaine

On crée le virtualhost dans le fichier :

touch /etc/apache2/sites-available/log.mon-domaine.com.conf

Vous y coller la configuration suivante :

<VirtualHost *:80>
ServerName log.mon-domaine.com
Redirect permanent / https://log.mon-domaine.com/
</VirtualHost>

<VirtualHost *:443>
ServerName log.mon-domaine.com

ErrorLog « |/usr/bin/cronolog /var/log/apache2/log.mon-domaine.com/%Y/%m/error_log »
CustomLog « |/usr/bin/cronolog /var/log/apache2/log.mon-domaine.com/%Y/%m/access_log » combined
TransferLog « |/usr/bin/cronolog /var/log/apache2/log.mon-domaine.com/%Y/%m/transfer_log »

 

SSLEngine On
SSLCertificateKeyFile /etc/letsencrypt/live/log.mon-domaine.com/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/log.mon-domaine.com/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/log.mon-domaine.com/chain.pem

SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite « EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4 »
SSLHonorCipherOrder on
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire

# HSTS (mod_headers est requis, 15 768 000 secondes = 6 mois)
Header always set Strict-Transport-Security « max-age=15768000 »

RequestHeader set X-Graylog-Server-URL « https://log.mon-domaine.com/api/ »
ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / http://127.0.0.1:9000/

</VirtualHost>

Astuce pour bien ne rien oubliez passer par sed pour tout modifier :

sed -i 's#log.mon-domaine.com#www.mon-domaine.com#' /etc/apache2/sites-available/log.mon-domaine.com.conf

On active le site

a2ensite log.mon-domaine.com
apache2ctl graceful

On peut maintenant apprécié le résultat :

Conclusion

Nous venons donc d’installer notre centralisateur de log Graylog2 en version 2.2.3 sur une debian 9 Stretch tout en y apportant une petite couche de sécurité. Je vous invite à bien lire le fichier server.conf qui regorgent d informations sur les possibles configurations de Graylog2.

Il ne vous reste plus qu à configurer vos inputs, il existe de nombreux tutoriaux la dessus.
Note importante : Votre graylog bien évidemment ne tourne pas avec l utilisateur root, donc lorsque vous créez vos input il faut mettre un port supérieur à 1024 !!!

Liens annexes

D’excellents tutoriaux proposent de la documentation sur Graylog :

En francais :

En anglais :

Read More...

Centraliser et analyser vos logs grâce à octopussy sous debian 7

11 septembre 2014 | Posted in Supervision | By

L’importance des logs n’est plus à démontrer, néanmoins leur gestion , leur stockage ainsi que leur exploitation  peuvent se révéler plus ardu que prévu. Aujourd’hui je voudrais partager avec vous mon expérience sur ce sujet et la réponse que j’ai trouvé  à plusieurs problématiques.

Exemple de problématiques :

  • Votre serveur web subit une attaque DDOS, le rendant inaccessible ou bien vous en avez perdu le contrôle. Vous ne pouvez plus accéder à vos logs et donc trouver la raison de votre perte de contrôle. Dès que vous remettrez from scratch le service en place il y a de fortes chances que vous reperdiez le contrôle…
  • Vous disposez de plusieurs serveurs mails, comment retrouver la trace rapidement d’un mail traité par un de vos SMTP ?
  • Votre serveur a une panne matérielle, comment pouvoir analyser le syslog si la machine ne démarre plus?
  • Vos développeurs, afin de garantir leur travail, doivent vérifier rapidement et facilement les logs d’erreur de leurs applications sans avoir d accès à la machine de production
  • Meme chose pour un prestataire externe d’un de vos clients.
  • La trop grande écriture des logs et vos obligations contractuelles font que sur le serveur de production et les logs consomment trop d’espace disque.

Voila un exemple des problématiques que nous allons résoudre.

Matériel

Pour du stockage pur de données nous n’aurions pas besoin d’une grosse machine en terme de puissance de calcul. Néanmoins octopussy pour le traitement, l’indexation et la recherche,  lui en demande. Evitez donc les processeurs atom et les faibles quantités de ram. Ayant la plupart de mes serveurs chez ovh (même si je viens de découvrir un belle arnaque de leur part dont je ferai un article dessus) voila ce que je vous recommanderai comme type de serveur :

http://www.soyoustart.com/fr/offres/sys-ip-2.xml

Processeur plus qu’intéressant, capacité de ram plus que nécessaire et un raid 1 de 2To protégeant un peu plus vos données. Avec çà vous avez de quoi faire et stocker.

Installation de octopussy

Présentation

Octopussy est un interface web centralisant vos logs, il permet en autres :

  • D’envoyer des alertes via Mail, jabber, irc …
  • De créer des rapports à intervalle régulier et de les exporter
  • Création de graph pour l’activité de vos logs
  • Supporte : ind, Cisco Router, Cisco Switch, DenyAll Reverse Proxy, Drbd, F5 BigIP, Fortinet FW, Ironport MailServer, Linux Kernel/System, Linux IPTables, Monit, MySQL, Nagios, NetApp NetCache, Juniper Netscreen FW, Juniper Netscreen NSM, Postfix, PostgreSQL, Samhain, Snmpd, Squid, Sshd, Syslog-ng, Windows Snare Agent, Xen…
  • Multilingue
  • Un système permettant d’apprendre à votre octopussy de nouveaux messages logs inconnus

Pré-requis

Il faut avant d’installer octopussy installer quelques paquets.

modifiez votre /etc/apt/source.list pour rajouter les depots non free

ce qui devrait ressembler à cela :

deb http://ftp.fr.debian.org/debian/ wheezy main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ wheezy main contrib non-free

deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free

# wheezy-updates, previously known as 'volatile'
deb http://ftp.fr.debian.org/debian/ wheezy-updates main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ wheezy-updates main contrib non-free

Nous mettons à jour nos dépôts

apt-get update

et on installe les paquets nécessaires


apt-get install apache2 nscd sudo mysql-server libapache2-mod-perl2 libapache-asp-perl libapp-info-perl libunix-syslog-perl libcrypt-passwdmd5-perl libdbi-perl libdbd-mysql-perl libsys-cpu-perl libmail-sender-perl librrd4 rrdtool htmldoc liblinux-inotify2-perl  libdate-manip-perl libnet-scp-perl libnet-telnet-perl libnet-xmpp-perl libcache-cache-perl libproc-processtable-perl libproc-pid-file-perl libjson-perl libreadonly-perl libregexp-assemble-perl libterm-progressbar-perl liblocale-maketext-lexicon-perl libdatetime-format-strptime-perl libfile-slurp-perl libxml-simple-perl libnet-ldap-perl libconvert-asn1-perl libxml-namespacesupport-perl libxml-sax-perl libxml-libxml-perl

on active certains modules d apache

a2enmod dir
a2enmod ssl

et on applique

apache2ctl graceful

Mise en place

Maintenant nous pouvons télécharger la dernière version du soft

à cette adresse : http://sourceforge.net/projects/syslog-analyzer/files/

wget http://sourceforge.net/projects/syslog-analyzer/files/octopussy_1.0.14_all.deb
dpkg -i octopussy_1.0.14_all.deb

Par défaut l’interface est accessible en https sur le port 8888, je préfére vu que le serveur ne sert qu’à cela le mettre sur le port 80

vim /etc/octopussy/apache2.conf
modifier Listen 8888 en Listen 80

il faut maintenant stopper apache, c’est octopussy qui va lancer apache avec sa propre configuration

/etc/init.d/apache2 stop

on applique le changement et on demarre le apache via octopussy :

/etc/init.d/octopussy web-stop
/etc/init.d/octopussy web-start

Paramétrage de rsyslog coté serveur

Les logs vont arriver via le réseau sur le port 514 en udp ou en tcp. On sécurise un peu la connexion en autorisant que certaines ips ou noms de domaine.

Cela vous permet de choisir le protocole de transfert de l information.
Udp, peu gourmand en ressource réseau car il ne vérifie pas les paquets, on peut donc en perdre, Tcp plus secure mais plus gourmand aussi. Personnellement ca sera du TCP.
vérifier que dans le fichier /etc/rsyslog.conf vous ayez bien cela :

# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
$AllowedSender UDP, 127.0.0.1, 192.168.4.0/16, *.admin-systeme.com

# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
$AllowedSender TCP, 127.0.0.1, 192.168.4.0/16, *.admin-systeme.com

 

Maintenant que cela est fait il faut aussi, bien rangé les logs dans votre serveur qui va tout centralisé. En effet, tous les mail.err de vos serveurs s enregistreront dans un seul fichier avec au devant de chaque ligne juste le nom de l hote. Nous allons faire en sorte de tout ranger dans un dossier par hote.

A la fin de votre fichier /etc/rsyslog.conf vous rajouterez


 $template centralislog,”/var/log/%HOSTNAME%/%programname%.log”

Après le template on dit ce que l on veut que ce dernier check, dans mon cas tous les logs qui lui arrive, on rajoute :

 *.*                                                     ?centralislog;RSYSLOG_TraditionalFileFormat

RSYSLOG_TraditionalFileFormat étant le format d écriture dans le fichier de log.

si vous effectuez un changement pensez à bien redémarrer le service

/etc/init.d/rsyslog restart

Paramétrage rsyslog coté client

On va dire que dans mon cas le serveur de log a pour ip 192.168.4.100 Il suffit d éditez aussi le fichier /etc/rsyslog.conf et de rajouter

*.* @@192.168.4.100:514

@ pour passer par le protocole UDP

@@ pour le protocole TCP

/etc/init.d/rsyslog restart

Accéder à Octopussy

il vous reste plus qu’à vous rendre sur votre nom de domaine ou votre ip en https
https://tonip/

le login de base est admin et le mot de passe admin

 

Conclusion

Vous avez maintenant un système de gestion, de tri et de consultation de logs bien plus user friendly. Grâce à lui vous gagnerez en temps.

Si vous n’êtes toujours pas convaincu, voila un autre exemple de l’intérêt d’un tel système. Pour un projet nécessitant des accès disques ultra rapide en lecture seule,
vous investissez dans un serveur avec des disques SSD. Comme vous le savez le point faible des disques SSD. Les cellules de mémoire flash s’usent au fur et à mesure de leur utilisation. Il existe plusieurs types de cellules, on parle par exemple de 100000 cycles lecture/écriture pour les mémoires SLC, alors que les puces MLC supporteraient uniquement 10000 cycles.
Et dans un serveur, ce qui consomme le plus en écriture, ce sont les logs. En allant écrire les logs sur un autre serveur via le réseau, vous augmentez la durée de vie de votre investissement…

lien vers le projet : http://www.8pussy.org

 

Read More...

Faire un schéma de son réseau grace lanmap sous débian

19 juillet 2012 | Posted in Supervision | By

En tant qu administrateur réseau, il faut connaître son réseau sur le bout des doigts. Malheureusement suivant la taille de l entreprise ca peut devenir assez difficile.
Personnellement j utilise nagios pour faire ma map, bien configuré on peut avoir une bonne visualisation de son mappage avec tout l attrait

Installation

on commence par régler les dépendances :

sudo apt-get install libpcap-dev libsqlite3-dev gcc graphviz php5-cli php5-sqlite sqlite3

Maintenant on recupere la version de lanmap sur le github.

git clone git@github.com:rflynn/lanmap2.git

on rentre dans le dossier et on lance le make

cd lanmap2
make

Utilisation

cd db && sudo ../src/cap && cd -

Cette commande va lancer la capture de votre réseau. Quand c est fini on passe à la génération du graphique

cd graph && ./graph.sh && cd -

Vous aurez alors une image au format png dans le repertoire graph nommée net.png

Remarque :

Cette outil est loin de fournir un mappage des plus complets en terme d informations mais il est très utils pour faire un petit état des lieux rapide qui vous servira pour faire un plan plus complet.

 

Read More...