Основная задача Collector – принять и сохранить flow с сетевых устройств.
Поддерживаемые протоколы:
Настройки Collector указываются через переменные окружения, которые задаются
в .env-файле. Подробнее.
Для получения данных по каждому протоколу нужно указать порт, на который будут приходить его пакеты, через переменные окружения:
COLLECTOR_NETFLOW_V5_PORT – порт, используемый
для принятия пакетов протокола NetFlow v5. По умолчанию 9555.COLLECTOR_NETFLOW_V9_PORT – порт, используемый
для принятия пакетов протокола NetFlow v9. По умолчанию 9995.COLLECTOR_SFLOW_PORT – порт, используемый
для принятия пакетов протокола sFlow v5. По умолчанию 6343.Collector сохраняет метрики из пришедших пакетов в ClickHouse, координаты которого задаются через переменные:
COLLECTOR_CLICKHOUSE – aдрес хоста с БД ClickHouse. По умолчанию
clickhouse.COLLECTOR_CLICKHOUSE_PORT – порт, на который будут пересылаться метрики. По
умолчанию 9000.При размещении Mitigator´а и Collector´а на разных площадках рекомендуется организовать защищенное соединение, чтобы защитить следующие данные от перехвата и подделки:
Чтобы убедиться в подлинности другой стороны при соединении, Collector и подсистемы Mitigator´а (бэкенд и автодетектирование) предъявляют друг другу сертификаты TLS, подписанные общим корневым сертификатом, то есть используют PKI (public key infrastructure).
Для облегчения первоначальной настройки по умолчанию соединение не защищается. В целях тестирования в образах поставляется встроенная PKI. При эксплуатации необходимо создать PKI из корневого сертификата и подписанных им сертификатов подсистем.
Ниже создание PKI описано кратко и для целей конкретной системы. Рекомендуется изучить подробнее понятия PKI, инструменты и лучшие практики самостоятельно.
Необходимая PKI включает следующие файлы:
ca.key — секретный ключ корня PKI (удостоверяющего цента, root CA).
Не покидает компьютера, на котором подписываются сертификаты.
ca.pem — корневой сертификат.
Распространяется свободно, используется всеми подсистемами.
Секретные ключи подсистем: collector.key, backend.key, fwstats.key.
Каждый ключ копируется на сервер, где работает соответствующая
подсистема и доступен только ей.
Цепочки сертификатов подсистем: collector.chain.pem, backend.chain.pem,
fwstats.chain.pem. Распространяются так же, как ключи подсистем,
но не являются секретными.
Удобно зафиксировать параметры генерации сертификата в файле ca.cnf:
[req]
ts = 4096
default_md = sha256
prompt = no
encrypt_key = no
distinguished_name = dn
[dn]
C = RU
O = Customer
OU = IT
CN = Root CA
Необходимо заполнить секцию [dn]: страну (C — country), организацию
(O — organization) и подразделение в ней (OU — organizational unit).
Имя условного удостоверяющего центра может быть любым (CN — common name).
Команда для генерации ключа ca.key и корневого сертификата ca.pem,
срок действия — 365 дней:
openssl req -x509 -config ca.cnf -keyout ca.key -outform PEM -out ca.pem -days 365
Ключ ca.key необходимо надежно хранить в секрете. Если он будет утерян
или скомпрометирован, придется генерировать PKI заново.
Файл конфигурации collector.cnf аналогичен корневому сертификату, кроме
Common Name. Это должен быть адрес, по которому Mitigator подключается
к Collector´у. Рекомендуется использовать доменное имя, чтобы при смене
IP-адреса не генерировать сертификат заново, но обычный IP-адрес также
подходит. Домен не обязательно регистрировать в DNS, запись можно указать
при настройке контейнеров, как будет показано ниже.
[req]
ts = 4096
default_md = sha256
prompt = no
encrypt_key = no
distinguished_name = dn
[dn]
C = RU
O = Customer
OU = IT
CN = collector.mitigator
Команда генерации секретного ключа collector.key:
openssl genrsa -out collector.key 4096
На основе collector.key и collector.cnf создается запрос на подпись
сертификата collector.csr (CSR — certificate singing request):
openssl req -new -config collector.cnf -key collector.key -outform PEM -out collector.csr
Команда для для подписи сертификата collector.pem удостоверяющим центром,
срок действия — 365 дней:
openssl x509 -req -in collector.csr -CA ca.pem -CAkey ca.key -CAserial ca.srl -CAcreateserial -outform PEM -out collector.pem -days 365
Распространять требуется не просто сертификат, а цепочку collector.chain.pem
из сертификата Collector´а и корневого сертификата:
cat collector.pem ca.pem > collector.chain.pem
Файл ca.srl не является секретным, но его нужно хранить вместе с ca.key
для генерации новых сертификатов в будущем. Этот файл один на всю PKI.
Процедура аналогична генерации сертификата Collector´а с тем же соображениями
по поводу Common Name. Требуется создать наборы файлов для backend
и fwstats (подсистема сбора метрик).
Файлы PKI нужно скопировать к соответствующим подсистемам:
/srv/mitigator: ca.pem, backend.key,
backend.chain.pem, fwstats.key, fwstats.chain.pem;/srv/collector
ca.pem, collector.key, collector.chain.pem.Файлы ca.pem, collector.key и collector.chain.pem нужно монтировать
в контейнер через docker-compose.override.yml:
version: "2.2"
services:
collector:
volumes:
- ./ca.pem:/collector/certs/rootCA.pem:ro
- ./collector.key:/collector/certs/collector.key:ro
- ./collector.chain.pem:/collector/certs/chain.pem:ro
После внесения изменений нужно перезапустить Collector:
docker-compose up -d collector
Файлы монтируются через docker-compose.override.yml аналогично тому,
как это делается для Collector´а:
version: "2.2"
services:
backend:
volumes:
- ./ca.pem:/backend/certs/ca.pem:ro
- ./backend.key:/backend/certs/backend.key:ro
- ./backend.chain.pem:/backend/certs/backend.chain.pem:ro
fwstats:
volumes:
- ./ca.pem:/fwstats/certs/ca.pem:ro
- ./fwstats.key:/fwstats/certs/fwstats.key:ro
- ./fwstats.chain.pem:/fwstats/certs/fwstats.chain.pem:ro
В отличие от Collector´а, подсистемы Mitigator´а по умолчанию не используют
защищенное соединение, поэтому необходимо указать им использовать файлы PKI
через .env:
BACKEND_ROOT_CERT_PATH="/backend/certs/ca.pem"
BACKEND_PRIVATE_KEY_PATH="/backend/certs/backend.key"
BACKEND_CLIENT_CERT_CHAIN_PATH="/backend/certs/backend.chain.pem"
FWSTATS_ROOT_CERT_PATH="/fwstats/certs/ca.pem"
FWSTATS_PRIVATE_KEY_PATH="/fwstats/certs/fwstats.key"
FWSTATS_CLIENT_CERT_CHAIN_PATH="/fwstats/certs/fwstats.chain.pem"
После внесения изменений нужно перезапустить Mitigator:
systemctl reload mitigator
В сертификатах удобно использовать доменные имена, например,
collector.mitigator. При этом DNS может не быть настроено, в этом случае
для тех контейнеров, которые пользуются доменным именем, можно прописать его
через docker-compose.override.yml:
version: "2.1"
services:
backend:
extra_hosts:
- "collector.mitigator:192.0.2.10"
fwstats:
extra_hosts:
- "collector.mitigator:192.0.2.10"
После внесения изменений необходимо перезапустить затронутые службы.
Ошибки, связанные с PKI, отражаются в логах подсистем, например:
docker-compose logs -f collector