====== 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