Table des matières

Installation d'un serveur Zabbix sur CentOS

Cette page est une prise de notes pour l'installation d'un serveur Zabbix (avec base MySQL) sur une CentOS 6 x6_64. Avant d'attaquer cette partie, il faut préparer le système de base en suivant ces instructions.

Installation de Zabbix

yum --enablerepo=fws install zabbix-server-mysql zabbix-agent \
    zabbix-web-mysql mysql-server httpd php-gd php-mysql php-bcmath \
    mod_ssl --exclude=*i386

Configuration mysql

Sauvegarde de la configuration par défaut

cp -a /etc/my.cnf /etc/my.cnf.default
echo '' > /etc/my.cnf
vim /etc/my.cnf

Configuration my.cnf

Et y placer les lignes suivantes (à ajuster en fonction des performances du serveur)

[mysqld]
pid-file=/var/run/mysqld/mysqld.pid
basedir=/usr
datadir=/var/lib/mysql
innodb_data_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql/
innodb_buffer_pool_size = 1G
innodb_additional_mem_pool_size = 128M
innodb_log_file_size = 300M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 120
innodb_file_per_table
innodb_flush_method=O_DIRECT

max_allowed_packet=128M

socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
user=mysql
skip-name-resolve
skip-networking

default-storage-engine = MyISAM

max_connections = 300
table_cache = 2048
sort_buffer_size = 256k
join_buffer_size = 256k
read_buffer_size = 256k
read_rnd_buffer_size=256k
myisam_sort_buffer_size = 64M
skip-external-locking
key_buffer_size = 128M
thread_stack = 256K
thread_cache_size = 4
tmp_table_size=256M
max_heap_table_size=256M
query_cache_limit = 1M
query_cache_size = 128M
query_cache_type = 1
#skip-bdb

[mysqldump]
quick
quote-names
max_allowed_packet = 16M

[mysql]

[isamchk]
key_buffer = 16M

Définition d'un mot de passe root

/etc/init.d/mysqld start
/usr/bin/openssl rand -base64 60 | tr -c -d '[:alnum:]'> ~/.my.pw
chmod 600 ~/.my.pw
/usr/bin/mysqladmin -u root password $(cat ~/.my.pw)
echo '[client]'> ~/.my.cnf
echo "password="$(cat ~/.my.pw)>> ~/.my.cnf

Création d'une base de donnée

/usr/bin/openssl rand -base64 40 | tr -c -d '[:alnum:]'> /etc/zabbix/db.pw
chmod 600 /etc/zabbix/db.pw
mysql -e 'create database zabbixdb'
mysql -e "grant all privileges on zabbixdb.* to 'zabbixuser'@'localhost' identified by '$(cat /etc/zabbix/db.pw)'"
mysql -e 'flush privileges'
mysql zabbixdb </usr/share/doc/zabbix-server-*/database/mysql/schema.sql
mysql zabbixdb </usr/share/doc/zabbix-server-*/database/mysql/images.sql
mysql zabbixdb </usr/share/doc/zabbix-server-*/database/mysql/data.sql

Démarrage auto

chkconfig mysqld on
chkconfig zabbix-server on
chkconfig zabbix-agent on

Configuration de Zabbix

Serveur

Sauvegarde de la configuration par défaut

cp -a /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.default
echo '' > /etc/zabbix/zabbix_server.conf
vim /etc/zabbix/zabbix_server.conf

Configuration

Placer dans le fichier les lignes suivantes:

NodeID=0
StartPollers=30
StartTrappers=5
StartPingers=20
StartDiscoverers=1
Timeout=20
ListenPort=10051
SenderFrequency=30
DebugLevel=3
PidFile=/var/run/zabbix/zabbix.pid
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=10
AlertScriptsPath=/var/lib/zabbix/bin
ExternalScripts=/var/lib/zabbix/bin
FpingLocation=/var/lib/zabbix/bin/fping
Fping6Location=/var/lib/zabbix/bin/fping6
TmpDir=/var/lib/zabbix/tmp
DBHost=localhost
DBName=zabbixdb
DBUser=zabbixuser
DBPassword=__DB_PASSWD__
DBSocket=/var/lib/mysql/mysql.sock
StartDBSyncers=1

Puis mettre le mot de passe à jour:

export PASSWD=$(cat /etc/zabbix/db.pw)
sed -i -e "s/__DB_PASSWD__/$PASSWD/" /etc/zabbix/zabbix_server.conf
unset PASSWD

Mise en place des scripts

fping (utilisé par zabbix pour les vérifications ICMP) nécessite des droit élevés. Plutôt que de mettre les binaires fping en SUID, on crée des “wrapper” qui utilisent sudo

mkdir -p /var/lib/zabbix/{tmp,bin,db}
chown zabbix:zabbix /var/lib/zabbix/db
chown zabbix:zabbix /var/lib/zabbix/tmp
chmod 750 /var/lib/zabbix/tmp
chmod 750 /var/lib/zabbix/db
cat <<EOF >> /var/lib/zabbix/bin/fping
#!/bin/sh
exec /usr/bin/sudo /usr/sbin/fping "\$@"

EOF
cat <<EOF >> /var/lib/zabbix/bin/fping6
#!/bin/sh
exec /usr/bin/sudo /usr/sbin/fping6 "\$@"

EOF
chown zabbix:zabbix /var/lib/zabbix/bin/fping*
chmod 750 /var/lib/zabbix/bin/fping*

Droits sudoers

visudo

Puis ajouter les lignes suivantes:

Cmnd_Alias  ZABBIX_SERVER = /usr/sbin/fping, /usr/sbin/fping6
Defaults:zabbix !requiretty
Defaults:zabbix secure_path = /var/lib/zabbix/bin:/sbin:/bin:/usr/sbin:/usr/bin
zabbix   ALL=(root) NOPASSWD: ZABBIX_SERVER

Alertes XMPP

Zabbix intègre une fonction de notification via XMPP, mais cette fonction ne supporte pas d'auth sécurisée TLS. Nous alons donc créer un nouveau media:

yum --enablerepo=fws install sendxmpp perl-IO-Socket-SSL
vim /var/lib/zabbix/bin/sendxmpp

Puis placer ce code dans ce fichier:

#!/bin/sh

echo "$3" | \
    sendxmpp -r zabbix -f /var/lib/zabbix/.sendxmpprc \
        -t \
        -s "$2" "$1"

et ajuster les droits:

chmod 755 /var/lib/zabbix/bin/sendxmpp

Maintenant il ne reste plus qu'à créer le fichier /var/lib/zabbix/.sendxmpprc qui contiendra les informations (JID/pass) pour se connecter au serveur jabber:

vim /var/lib/zabbix/.sendxmpprc

La syntaxe est la suivante:

zabbix@domain.tld password

Il faut maintenant réduire les permissions sur ce fichier qui ne doit être accessible que pour l'utilisateur zabbix:

chown zabbix:zabbix /var/lib/zabbix/.sendxmpprc
chmod 600 /var/lib/zabbix/.sendxmpprc

On peut maintenant rajouter le nouveau media, soit via l'interface web, soit avec cette requête SQL:

mysql zabbixdb -e "INSERT IGNORE INTO media_type (
		mediatypeid,
		type, description,
		smtp_server,
		smtp_helo,
		smtp_email,
		exec_path,
		gsm_modem,
		username,
		passwd) 
	VALUES(
		4,
		1,
		'xmpp',
		'',
		'',
		'',
		'sendxmpp',
		'',
		'',
		'');"

SELinux

Il faut activer deux booléens SELinux pour que le serveur fonctionne correctement

setsebool -P domain_kernel_load_modules=on
setsebool -P zabbix_can_network=on

Agent

Sauvegarde de la config par défaut:

cp -a /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf.default
echo '' > /etc/zabbix/zabbix_agentd.conf
vim /etc/zabbix/zabbix_agentd.conf

Puis y placer ces lignes:

Server=127.0.0.1
ListenIP=127.0.0.1
Hostname=monitor.firewall-services.com
DisableActive=1
DisablePassive=0
EnableRemoteCommands=0
DebugLevel=3
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Timeout=6

Interface Web

Configuration apache

Il faut d'abord modifier la configuration de mod_ssl pour autoriser les NamedBased VirtualHost en SSL

cp -a /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.default

Les modifications à faire sont les suivantes:

Il faut aussi éditer le fichier /etc/httpd/conf/httpd.conf pour y ajouter: “NameVirtualHost 0.0.0.0:80”

Il faut maintenant mettre en place la configuration pour Zabbix:

cp -a /etc/httpd/conf.d/zabbix.conf /etc/httpd/conf.d/zabbix.conf.default
echo '' > /etc/httpd/conf.d/zabbix.conf
vim /etc/httpd/conf.d/zabbix.conf

Puis y coller ces lignes:

#
# Zabbix monitoring system php web frontend
#

Alias /zabbix /usr/share/zabbix

<Directory "/usr/share/zabbix">
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/x-js text/css
    AddType application/x-httpd-php .php
    php_admin_value max_execution_time 350
    php_admin_value memory_limit 128M
    php_admin_value post_max_size 16M
    php_admin_value date.timezone Europe/Paris
    php_admin_value mbstring.func_overload 2
    SSLRequireSSL on
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<Directory "/usr/share/zabbix/include">
    Order deny,allow
    Deny from all
    <files *.php>
        Order deny,allow
        Deny from all
    </files>
</Directory>

<Directory "/usr/share/zabbix/include/classes">
    Order deny,allow
    Deny from all
    <files *.php>
        Order deny,allow
        Deny from all
    </files>
</Directory>

# Hote virtuel ZABBIX
<VirtualHost 0.0.0.0:80>
       ServerName      monitor.firewall-services.com
       ServerAlias     zabbix.firewall-services.com
       DocumentRoot    /usr/share/zabbix
       RewriteEngine on
       RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
       RewriteRule .* - [F]
       RewriteRule ^/(.*|$)    https://%{HTTP_HOST}/$1 [L,R]
</VirtualHost>

<VirtualHost 0.0.0.0:443>
        ServerName      monitor.firewall-services.com
        ServerAlias     zabbix.firewall-services.com
        DocumentRoot    /usr/share/zabbix
        SSLEngine on
        RewriteEngine on
        RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
        RewriteRule .* - [F]
</VirtualHost>

Configuration Zabbix

echo '' > /etc/zabbix/zabbix.conf.php
vim /etc/zabbix/zabbix.conf.php

Puis y placer les lignes suivantes:

<?php
/* 
** ZABBIX
** Copyright (C) 2000-2005 SIA Zabbix
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
**/

global $DB;

$DB["TYPE"]             = "MYSQL";
$DB["SERVER"]           = "localhost";
$DB["PORT"]             = "0";
$DB["DATABASE"]         = "zabbixdb";
$DB["USER"]             = "zabbixuser";
$DB["PASSWORD"]         = "__DB_PASSWD__";
$ZBX_SERVER             = "localhost";
$ZBX_SERVER_PORT        = "10051";


$IMAGE_FORMAT_DEFAULT   = IMAGE_FORMAT_PNG;
?>
ne surtout pas mettre de retour chariot après le ?>, sous peine de perdre plusieurs heures à vous demander pourquoi aucune images (maps, screens, graphs) ne s'affiche ;)

Et mettre le mot de passe mysql à jour:

export PASSWD=$(cat /etc/zabbix/db.pw)
sed -i -e "s/__DB_PASSWD__/$PASSWD/" /etc/zabbix/zabbix.conf.php
unset PASSWD