====== 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 [[tuto:linux_divers:base_install_cos6|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
====== 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 <> /var/lib/zabbix/bin/fping
#!/bin/sh
exec /usr/bin/sudo /usr/sbin/fping "\$@"
EOF
cat <> /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:
* Au début du fichier, juste sous le ''LoadModule ssl_module modules/mod_ssl.so'', il faut rajouter un ''''
* On remplace la ligne ''Listen 443'' par ''Listen 0.0.0.0:443''
* On remplace ''SSLEngine On'' par ''SSLEngine Off'' (sinon impossible d'activer SSL sur les vhosts)
* On commente les lignes '''' et ''''
* On rajoute '''' tout à la fin
* On rajoute la directive "NameVirtualHost 0.0.0.0:443"
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
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
Order deny,allow
Deny from all
Order deny,allow
Deny from all
Order deny,allow
Deny from all
Order deny,allow
Deny from all
# Hote virtuel ZABBIX
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]
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]
=== Configuration Zabbix ===
echo '' > /etc/zabbix/zabbix.conf.php
vim /etc/zabbix/zabbix.conf.php
Puis y placer les lignes suivantes:
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