У меня есть сервер zabbix, установленный в ubuntu 18.04 в облаке AWS, и я настроил домен и SSL .
На сервере AWS есть веб-сервер nginx , работающий в портах 80 и 443 , а apache2 настроен в 7526 . Из соображений безопасности в группе безопасности AWS включены только порты 80 и 443. Таким образом, apache2 также недоступен из внешнего мира.
Я настроил сервер zabbix в apache2 и имел прокси-сервер nginx для подключения к серверу zabbix из внешнего мира. Интерфейс Zabbix отлично работает после этого прокси в nginx.
У меня есть система, расположенная в разных местах, поэтому я решил подключить ее к серверу zabbix через Активную проверку. В активной отметке агент zabbix по умолчанию подключается к серверу zabbix через порт 10051 . Я не могу открыть новый порт в брандмауэре AWS по соображениям безопасности.
Как я могу соединить сервер zabbix и агент zabbix для активных проверок ?.
Примечание: Для тестирования я включил порт 10051 в брандмауэре AWS, и агент zabbix может подключиться к серверу
ИЗМЕНИТЬ
См. Мой файл zabbix_agentd.conf с конфигурация параметра ServerActive .
Как видите, app.myoffice.com теперь включен, и zabbix пытается подключиться к порту по умолчанию 10051 , поэтому он не может подключиться к серверу, так как в брандмауэре активны только порты 80 и 443
Могу я дать serverActive = https: //example.mydomain.com/zabbixserver/app как это? Если да, то как это?
Ни сервер zabbix, ни агент zabbix не поддерживают прослушивание портов ниже 1024.
Официальная документация для сервера и агента четко указывает поддерживаемый диапазон портов.
Сервер:
Параметр | Обязательный | Диапазон | По умолчанию | Описание |
---|---|---|---|---|
ListenPort | нет | 1024-32767 | 10051 | Порт прослушивания для траппера . |
Агент:
Параметр | Обязательный | Диапазон | По умолчанию | Описание |
---|---|---|---|---|
ListenPort | нет | 1024-32767 | 10050 | Агент будет слушать этот порт для подключений с сервера. |
Кроме того, порты ниже 1024 являются привилегированными , поэтому обычным пользователям не разрешается запускать на них серверы.
Кроме того, порты 80 и 443 зарезервированы для HTTP и HTTPS соответственно. Агент Zabbix использует собственный протокол на основе JSON [ источник ] . Хотя это технически возможно, прослушивание двух разных протоколов на одном и том же порту вызывает множество проблем.
Лучшее и, возможно, единственное решение - открыть трафик на портах 10050 и 10051.
Я использую haproxyдля предоставления своих сервисов вместе с генерацией сертификатов TLS для конкретных сервисов (с SNI), и мне это нравится, так как я тогда просто подключаюсь к https://someservice.example.com/и больше не забочусь о том, какие порты на самом деле используют какие-либо из моих сервисов.
Для zabbix, я думаю, должно быть следующее, что вам нужно настроить:
frontend hafrontend
bind *:443 ssl crt /etc/haproxy/certs_and_keys
mode http
default_backend zabbix_backend
use_backend zabbix_backend if { ssl_fc_sni zabbix.example.com }
backend zabbix_backend
mode http
server zabbix_server 127.0.0.1:10051
, хотя, возможно, с некоторой магией, если вам нужно использовать URL-адрес, такой как https://example.mydomain.com/zabbixserver/app
, а не просто https://example.mydomain.com/
(вышесказанное - это все, что я узнал о настройке haproxy и было все, что мне когда-либо нужно).
Сертификаты, сгенерированные через Makefile (расположение файлов, возможно, специфично для Centos):
# Root CA
example.com.key:
openssl genrsa -out $@ 4096
openssl rsa -in $@ -noout -text
example.com.crt: example.com.key
openssl req -new -x509 -days 7500 -key $^ -out $@ -subj '/C=XX/L=Example/CN=example.com'
/etc/pki/ca-trust/source/anchors/example.com.pem: example.com.crt example.com.key
cat $^ > $@
update-ca-trust
/etc/haproxy/certs_and_keys/example.com.pem: example.com.crt example.com.key
cat $^ > $@
# Host cert
zabbix.example.com.key:
openssl genrsa -out $@ 4096
openssl rsa -in $@ -noout -text
zabbix.example.com.csr: zabbix.example.com.key
bash -c "openssl req -new -key $^ -out $@ -extensions san -config <(echo '[req]'; echo 'distinguished_name=req'; echo '[san]'; echo 'subjectAltName=DNS:zabbix.example.com') -subj '/C=XX/L=Example/CN=zabbix.example.com'"
openssl req -in $@ -noout -text
zabbix.example.com.crt: zabbix.example.com.csr
openssl x509 -days 365 -req -in $^ -out $@ -CA example.com.crt -CAkey example.com.key -CAcreateserial
/etc/haproxy/certs_and_keys/zabbix.example.com.pem: zabbix.example.com.crt zabbix.example.com.key
cat $^ > $@