Установка Zabbix 3.0 на CentOS 7

В данной статье мы подробно расскажем как установить систему мониторинга Zabbix 3.0 на CentOS 7 и о тех проблемах с которыми вы можете столкнуться.
Подразумеваем, что у вас установлена операционная система CentOS 7 и настроено сетевое подключение.

Установку производим из официальных репозиториев Zabbix.
rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
yum install iptables-services mariadb-server mariadb policycoreutils-python zabbix-server-mysql zabbix-web-mysql zabbix-agent nmap traceroute -y

Подготавливаем к запуску и запускаем сервисы:
systemctl enable iptables
systemctl enable ip6tables
systemctl enable mariadb.service
systemctl enable httpd
systemctl enable zabbix-server
systemctl enable zabbix-agent
systemctl start iptables
systemctl start ip6tables
systemctl start mariadb.service

Подготавливаем базу:
/usr/bin/mysql_secure_installation
И везде отвечам «Y»

Создаём базу данных:
mysql -u root -p
mysql> create database zabbix character set utf8;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by ‘PASSWORD’;
mysql> exit

Если мы переносим Zabbix сервер с другого сервера то сначала делаем дамп базы со старого сервера:

mysqldump zabbix -p > zabbix-`date +%F`.sql

Далее загружаем дамп базы в новый сервер Zabbix

mysql zabbix -p < zabbix-`date +%F`.sql

Если мы разворачиваем новый сервер то импортируем начальную схему базы:
cd /usr/share/doc/zabbix-server-mysql-3.0.0
zcat create.sql.gz | mysql -uroot zabbix

Редактируем настройки доступа к базе в файле /etc/zabbix/zabbix_server.conf
vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix

Запускаем остальные сервисы:
systemctl start httpd
systemctl start zabbix-server
systemctl start zabbix-agent

В броузере заходим по адресу: http://zabbix-frontend-hostname/zabbix и пользуемся.

Теперь расскажем о некоторых проблемах и методах их решения:

Если в web интерфейсе сервера появляется надпись «сервер Zabbix не запущен» то следует выполнить следующую комманду:
setsebool -P httpd_can_connect_zabbix on

Если Zabbix не отправляет E-Mail то выполните следующую комманду:
setsebool -P httpd_can_sendmail on

На форумах часто пишут, что штатно, Zabbix не отправляет сообщения на Jabber сервер и рекомендуют использовать различные скрипты, которые далеко не всегда работают под CentOS 7.
На самом деле Zabbix отлично умеет отправлять сообщения штатными средствами. После многочисленных исследований выяснилось следующее:
Для отправки сообщений на Jabber, Zabbix может использовать всего три устаревших протокола шифрования:
TLS_RSA_WITH_RC4_128_SHA — (RC4-SHA)
TLS_RSA_WITH_RC4_128_MD5 — (RC4-MD5)
TLS_RSA_WITH_3DES_EDE_CBC_SHA — (DES-CBC3-SHA)
И если XMPP сервер не поддерживает эти протоколы, то отправки не происходит без каких либо внятных сообщений в логах на этот счёт.
Выходом является разрешение любого их этих протоколов на Jabber сервере, в порядке указанном выше по степени безопасности.

Для работы утилит traceroute и nmap и возможности отправки Jabber уведомлений необходимо создание следующих политик SELinux:

zabbix_jabber.te

module zabbix_jabber 1.0;

require {
type zabbix_t;
type jabber_client_port_t;
class tcp_socket name_connect;
}

#============= zabbix_t ==============

#!!!! This avc can be allowed using the boolean ‘zabbix_can_network’
allow zabbix_t jabber_client_port_t:tcp_socket name_connect;

zabbix_nmap.te

module zabbix_nmap 1.0;

require {
type zabbix_t;
class capability net_raw;
class packet_socket { bind ioctl create setopt getopt };
class rawip_socket { bind ioctl create setopt getopt };
class capability2 block_suspend;
}

#============= zabbix_t ==============

#!!!! This avc is allowed in the current policy
allow zabbix_t self:capability net_raw;

#!!!! This avc is allowed in the current policy
allow zabbix_t self:capability2 block_suspend;

#!!!! This avc is allowed in the current policy
allow zabbix_t self:packet_socket { bind ioctl create getopt setopt };

#!!!! This avc is allowed in the current policy
allow zabbix_t self:rawip_socket { bind ioctl create setopt getopt };

zabbix_sudo.te

module zabbix_sudo 1.0;

require {
type sudo_exec_t;
type zabbix_t;
class capability sys_resource;
class capability audit_write;
class file { read getattr open execute execute_no_trans };
class netlink_audit_socket { write nlmsg_relay create read };
}

#============= zabbix_t ==============

#!!!! This avc is allowed in the current policy
allow zabbix_t self:capability sys_resource;

#!!!! This avc is allowed in the current policy
allow zabbix_t self:netlink_audit_socket { write nlmsg_relay create read };

#!!!! This avc is allowed in the current policy
allow zabbix_t sudo_exec_t:file { read getattr open execute execute_no_trans };

#!!!! This avc is allowed in the current policy
allow zabbix_t self:capability audit_write;

#!!!! This avc is allowed in the current policy
allow zabbix_t self:netlink_audit_socket nlmsg_relay;

zabbix_traceroute.te

module zabbix_traceroute 1.0;

require {
type traceroute_exec_t;
type zabbix_t;
class file { read execute open getattr execute_no_trans };
}

#============= zabbix_t ==============
allow zabbix_t traceroute_exec_t:file execute_no_trans;

#!!!! This avc is allowed in the current policy
allow zabbix_t traceroute_exec_t:file { read execute open getattr };

Компилируем и устанавливаем эти политики:
checkmodule -M -m -o zabbix_nmap.mod zabbix_nmap.te
semodule_package -o zabbix_nmap.pp -m zabbix_nmap.mod
semodule -i zabbix_nmap.pp
checkmodule -M -m -o zabbix_jabber.mod zabbix_jabber.te
semodule_package -o zabbix_jabber.pp -m zabbix_jabber.mod
semodule -i zabbix_jabber.pp
checkmodule -M -m -o zabbix_sudo.mod zabbix_sudo.te
semodule_package -o zabbix_sudo.pp -m zabbix_sudo.mod
semodule -i zabbix_sudo.pp
checkmodule -M -m -o zabbix_traceroute.mod zabbix_traceroute.te
semodule_package -o zabbix_traceroute.pp -m zabbix_traceroute.mod
semodule -i zabbix_traceroute.pp

Самым тяжёлым оказалось выяснить почему не работает утилита nmap при включенном SELinux, при этом в файле audit.log не появлялось ни одного сообщения о блокировании операций.
Решение оказалоь очень простым:
chcon system_u:object_r:zabbix_script_exec_t:s0 /usr/bin/nmap