суббота, 26 августа 2023 г.

Graylog. Сбор данных syslog

Сервис Graylog собирает данные через так называемые входы (inputs).
Подключаемся к web-интерфейсу graylog под стандартным логином «admin».
http://10.10.49.166:9000/
Тут 10.10.49.166 – IP адрес сервера Graylog
Перед использованием Graylog входы необходимо описать в web-интерфейсе.
Это делается в меню System–>Inputs.
Для описания входа, принимающего сообщения syslog выбираем в выпадающим списке «Select Input» - «Syslog UDP» и нажимаем «Launch new input».


В форме описания нового входа необходимо выбрать:
1) Node (узел) обрабатывающий данные сообщения
2) Title - указать заголовок входа, например "syslog"
3) Bind Address - IP адрес, который будет прослушивать сообщения syslog
Для задействования всех интерфейсов - пишем 0.0.0.0
4) Port - указывается прослушиваемый порт.
Graylog не рекомендует использованием портов для описания входов меньше чем 1024, поэтому вместо стандартного 514 порта для syslog пробуем использовать 5140.
Остальные параметры оставляем по умолчанию.



После внесения данных в форму нажимаем "Save".
Будет создан источник, обеспечивающий прием сообщений syslog.

Для проверки работы входа syslog выполняем из консоли сервера:
# echo "Hello world" | nc -w 1 -u localhost 5140
# echo "Hello SAKURA2.1" | nc -w 1 -u 10.10.49.166 5140

На странице описания входов нажимаем по кнопке "Show received messages".
Мы должны увидеть принятое сообщение "Hello world"

Для приема сообщений с других серверов, мы должны открыть порт 5140 на нашем сервере:
# firewall-cmd --permanent --add-port=5140/udp
# firewall-cmd --reload


На сервере, с которого будем отправлять информацию syslog (с демоном rsyslog), создаем конфигурацию, обеспечивающую передачу syslog сообщений на сервер:
# nano /etc/rsyslog.d/90-graylog.conf
Содержимое файла:
*.* @10.10.49.166:5140;RSYSLOG_SyslogProtocol23Format
После внесения изменений перезагружаем демон rsyslog
# systemctl restart rsyslog
Теперь сервер будет старательно отправлять данные syslog на сервер graylog.
Что бы посмотреть на сообщения, полученные в сервере Graylog. Необходимо перейти по ссылке «Search»:





вторник, 15 августа 2023 г.

Обновление триггеров ZABBIX через импорт шаблонов

В Zabbix есть удобный инструмент обновления шаблонов через "Импорт", когда сначала подготавливается XML файл, а потом XML файл с данными загружается на сервер.

Импорт выполняется через меню «Настройки» —> «Шаблоны», кнопка «Импорт».

При загрузке XML файла, если изменились данные триггера, то будет создан новый триггер рядом со старым. Что бы этого этого избежать, после выбора загружаемого файла выставить галочку «Удалить отсутствующие - триггер»:


После нажатия кнопки «Импорт» будет предупреждение, где нужно нажать «Да»


После этого в Zabbix произойдет добавление новых триггеров и удаление старых.

Элементы данных узлов при этом обновятся нормально, без выставления дополнительных настроек.

понедельник, 8 мая 2023 г.

Graylog4 + Elasticsearsh7 + MongoDB. Установка в RockyLinux 9.

Graylog - программное обеспечение для сбора, агрегации и последующего анализа логов с оборудования и серверов.
Graylog работает, опираясь на Elasticsearch и MongoDB
Обобщенная схема взаимодействия компонентов представлена на рисунке:



Различные версии Graylog опираются на разные версии Elasticsearch.
Установим graylog4, который работает с версией elasticsearch 7.x

Для начала обновляемся и устанавливаем JAVA
# yum update
# dnf upgrade --refresh
# yum install java-17-openjdk java-17-openjdk-devel
# yum install pwgen


Создаем пользователя, под которым будет работать демон elasticsearch:
# useradd -M -r -s /bin/false elasticsearch

Для корректной работы Elasticsearch в Linux необходимо снять ограничения при открытии файлов для пользователя elasticsearch. Для этого вносим настройки в файл /etc/security/limits.conf.
# nano /etc/security/limits.conf
В конце файла прописываем:
* soft nofile 65536
* hard nofile 131072
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
elasticsearch soft nproc 4096
elasticsearch hard nproc 4096

Так как Elasticsearch очень требователен к ресурсам рекомендуется отключить использование файла подкачки:
# swapoff -a
Для увеличения быстродействия Elasticsearch так же рекомендуется увеличить количество адресов виртуальной памяти:
# nano /etc/sysctl.conf
vm.max_map_count = 262144
Проверка изменений:
# sysctl -p

Установим 7ую версию elasticsearch в директорию /usr/local/elasticsearch7.
# mkdir /usr/local/elasticsearch7
Установить через репозитарий сервис elasticsearch в России не получиться, так ка российские IP адреса заблокированы. См https://www.elastic.co/blog/elastic-stands-with-ukraine.
Легче всего через VPN скачать архив tar.gz исходных кодов стабильного релиза 7.17 и поместить архив в директорию /usr/local/elasticsearch7
# cd /usr/local/elasticsearch7
Распаковываем и назначаем права доступа:
# tar -xvf elasticsearch-7.17.9-linux-x86_64.tar.gz
# cd elasticsearch-7.17.9/
# chown -R elasticsearch:elasticsearch /usr/local/elasticsearch7

Создаем директории, которые Elasticsearch будет использовать в работе. Опция -p нужна что бы создать сразу несколько вложенных каталогов, а не создавать отдельно каталог /data, потом вложенный в него каталог /data/elasticsearch и т.д.
# mkdir -p /data/elasticsearch7/data
# mkdir -p /data/elasticsearch7/logs
# mkdir -p /data/elasticsearch7/pid
# chown -R elasticsearch:elasticsearch /data/elasticsearch7

Теперь следует внести правки в файл конфигурации Elasticsearch
# nano /usr/local/elasticsearch7/elasticsearch-7.17.9/config/elasticsearch.yml
cluster.name: graylog (в секции Cluster)
node.name: node-1 (в секции Node)
path.data: /data/elasticsearch7/data (в секции Paths)
path.logs: /data/elasticsearch7/logs (в секции Paths)
bootstrap.memory_lock: true (в секции Memory)
network.host: 0.0.0.0 (в секции Network)
discovery.seed_hosts: ["127.0.0.1"] (в секции Discovery)
cluster.initial_master_nodes: ["node-1"] (в секции Discovery)
action.auto_create_index: false (В секции Various добавить этот параметр)

Пробуем первый запуск в режиме демона:
# sudo -u elasticsearch /usr/local/elasticsearch7/elasticsearch-7.17.9/bin/elasticsearch -d -p /data/elasticsearch7/pid/elasticsearch.pid
После запуска ошибок быть не должно.
Проверка работы сервиса:
# ps ax | grep elastic
Мы должны увидеть два запущенных процесса - основной процесс и процесс координатора.
Проверяем открытые порты:
# ss -ntlp | grep java
Должны увидеть два открытых порта - 9200 и 9300
Собственно демон elasticsearch, отвечающий за поиск и индексацию работает на порту 9200. Дополнительный демон-координатор для обмена данными между несколькими экземплярами elasticsearch в кластере работает на порту 9300.
Для остановки сервиса, который запустили вручную нужно убить основной процесс.
# kill <НОМЕР_ПРОЦЕССА>

Создаем юнит systemd для запуска и остановки демона Elasticsearch:
# nano /etc/systemd/system/elasticsearch.service
Содержимое файла
[Unit]
Description=Elasticsearch
Wants=network-online.target
After=network-online.target
[Service]
Type=forking
PIDFile=/data/elasticsearch7/pid/elasticsearch.pid
PrivateTmp=true
User=elasticsearch
Group=elasticsearch
ExecStart=/usr/local/elasticsearch7/elasticsearch-7.17.9/bin/elasticsearch -d -p /data/elasticsearch7/pid/elasticsearch.pid
StandardOutput=journal
StandardError=inherit
LimitNOFILE=65535
LimitNPROC=4096
LimitAS=infinity
LimitFSIZE=infinity
TimeoutStopSec=0
KillSignal=SIGTERM
KillMode=process
SendSIGKILL=no
SuccessExitStatus=143
TimeoutStartSec=900
LimitMEMLOCK=infinity
[Install]
WantedBy=multi-user.target

Затем стартуем сервис:
# systemctl daemon-reload
# systemctl start elasticsearch.service
# systemctl enable elasticsearch.service

Проверка работы:
# systemctl status elasticsearch.service
Теперь проверяем работу интерфейса пользователя:
# curl http://localhost:9200
{
  "name" : "node-1",
  "cluster_name" : "graylog",
  "cluster_uuid" : "2GW5T0y_TFe_2FxV2rM2dA",
  "version" : {
    "number" : "7.17.9",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "ef48222227ee6b9e70e502f0f0daa52435ee634d",
    "build_date" : "2023-01-31T05:34:43.305517834Z",
    "build_snapshot" : false,
    "lucene_version" : "8.11.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}


Для работы Graylog кроме Elasticsearch необходима база данных MongoDB.
Добавляем репозитарий MongoDB
# nano /etc/yum.repos.d/mongodb-org-6.0.repo
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc

Устанавливаем:
# dnf install mongodb-org
# systemctl start mongod
# systemctl enable mongod

Файл конфигурации сервера MongoDB расположен тут:  /etc/mongod.conf

Наконец-то устанавливаем Graylog. Но тут ждет сюрприз несовместимости Graylog и Rocky Linux 9. Дело в том, что программное обеспечение Graylog подписывается с помощью ключа типа SHA-1.
Это неприемлемо в Rocky Linux 9.
Для решения проблемы временно изменяем политики безопасности для возможности принимать ключ SHA-1 в системе.
# update-crypto-policies --set LEGACY
Требуется перезагрузка:
# shutdown -r now
После перезагрузки устанавливаем Graylog4:
# rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-4.2-repository_latest.rpm
# yum install graylog-server

И если процесс прошел без ошибок, радуемся и возвращаем политики по умолчанию:
# update-crypto-policies --set DEFAULT
Снова перезагружаемся:
# shutdown -r now

Далее Graylog необходимо сгенерировать сложные пароли для прописывания их в переменные password_secret и root_password_sha2 конфигурационного файла /etc/graylog/server/server.conf.
Сгенерируем и сохраним пароль из 96 символов:
# pwgen -N 1 -s 96
G0xgdQkMmtubJTNDd6rk8Mk74sbIoFiUxqYQzgyqidVKmx62IhkrMT5vl7Sh6hr0kyZNmWQ3nuY3cixIbGOniQjyBQJQqo14

Этот пароль должен быть одинаковый для всех кластеров Graylog. С помощью этого ключа буду защищаться все зашифрованные данные пользователей системы Graylog.
Сгенерим и сохраним хеш пароля для суперпользователя системы Graylog.
Имя суперпользователя Graylog по умолчанию - admin.
Этот пароль для суперпользователя admin жестко прописывается в конфигурации, изменить его через web-интерфейс нельзя.
# echo -n <МОЙ ПАРОЛЬ> | sha256sum
103a5db5fea66183590df6fc7965d7a9dc2c141e4426d44298867a2d7feb015c  -

Прописываем пароли в конфигурационный файл и определяем интерфейсы, на которых будет работать Graylog
# nano /etc/graylog/server/server.conf
password_secret = G0xgdQkMmtubJT......niQjyBQJQqo14
root_password_sha2 = 103a5db5fea6......7feb019c
root_timezone = Europe/Moscow
http_bind_address = 0.0.0.0:9000
elasticsearch_hosts = http://localhost:9200

elasticsearch_shards=1

Запускам сервис
# systemctl daemon-reload
# systemctl start graylog-server.service
# systemctl enable graylog-server.service

Проверка работы сервиса:
# systemctl status graylog-server.service
Проверка прослушивания порта 9000, на котором работает интерфейс Graylog4:
# ss -tunelp | grep 9000

В Firewalld необходимо открыть порт 9000 для доступа к этому порту извне.
# firewall-cmd --permanent --add-port=9000/tcp
# firewall-cmd --reload


Доступ к web-интерфейсу Graylog4: http://<IPадрес>:9000/ (например, http://10.10.49.166:9000/)



Пользователь по умолчанию - admin
Пароль - <МОЙ ПАРОЛЬ>, тот что зашифровывали ранее.
Мы должны увидеть web-интерфейс сервиса graylog4. В моем случае он выглядел так:


На этом установка завершена.
Обратившись к обзорной страницы System ->Overview мы попадаем на страницу описывающую состояние сервиса Graylog. Первое уведомление сообщает нам, что в системе не настроены источники приема данных. Это действительно так. Их нужно настраивать, но это уже совсем другая история.