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:
- Au début du fichier, juste sous le
LoadModule ssl_module modules/mod_ssl.so
, il faut rajouter un<IfModule mod_ssl.c>
- On remplace la ligne
Listen 443
parListen 0.0.0.0:443
- On remplace
SSLEngine On
parSSLEngine Off
(sinon impossible d'activer SSL sur les vhosts) - On commente les lignes
<VirtualHost _default_:443>
et</VirtualHost>
- On rajoute
</IfModule>
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 <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; ?>
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