Рубрики
Uncategorized

Привязка привилегированного порта 514 для logstash 7.10.0

Иногда приходит сценарий, где вам нужно получить трафик системного журнала в порту 514 по умолчанию в … Теги с DevOps, начинающими, WebDev, Linux.

Иногда приходит сценарий, где вам нужно получить трафик системного журнала по умолчанию Порт 514 на вашем сервере logstash. Но, как мы знаем, порты в диапазоне от 1 до 1024 — привилегированные порты, и только корневой пользователь может слушать их. По умолчанию демон logstash начинается с собственного пользователя, поэтому решить нашу проблему, нам нужно следовать любую вариант ниже. Мой сервер Logstash Logstash находится на Centos 7.

Чтобы связать logstash ниже 1024 портов у нас есть 3 варианта.

  1. Запустите Logstash как root.
  2. Используйте iptables для пересылающего порту 514 до безвивализованного порта.
  3. использовать setcap Чтобы предоставить разрешение Java на использование привилегированных портов.

Мы могли бы запустить демон logstash через пользователь root, но этот процесс не рекомендуется, и процесс также более сложный в более новой версии logstash Итак, мы сбежим этот вариант. Вы можете предпочесть 2-й вариант, который находится через iPtables, но их ограничение. Если наш сервер logstash получает миллионы пакетов, то каждый пакет, проходящий через правило iPTables, определенно увеличит наш сервер CPU, и мы можем столкнуться с узким пространством производительности. Поэтому, следовательно, мы выберем 3-й вариант в нашем случае.

Я установлю logstash-7.10.0 Через Yum Reppo, который в комплекте с JDK 11. Это означает, что мне не нужно устанавливать Java вручную для моих CentOS 7, прежде чем logstash установка. Logstash предлагает специфичные архитектуры загрузки, которые включают в себя усыновление 11, новейшие длительную поддержку (LTS) выпуск JDK.

Установить logstash 7.10.0.

Загрузите и установите ключ от общественного подписания:

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Добавьте следующее в вашем /etc/yum.repos.d/ каталог В файле с .repo Суффикс, например logstash.repo.repo.

Vim/etc./yum.repos.d/logstash.repo.repo.

[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

И ваш репозиторий готов к использованию. Вы можете установить его с:

yum install logstash

Теперь проверьте подключенную версию Java.

/usr/share/logstash/jdk/bin/java -version
openjdk version "11.0.8" 2020-07-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.8+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.8+10, mixed mode)

Добавить возможности к двоичному двоину Java

Что такое возможности? (Согласно это Man страница) В целях выполнения проверок разрешений традиционные реализации UNIX различают две категории процессов: привилегированные процессы (эффективный идентификатор пользователя которого составляет 0, называемый суперпользователем или корнем), а также ненужные процессы (эффективный UID которого является ненулевой). Привилегированные процессы обходят все проверки разрешений ядра, в то время как безвискивые процессы подлежат полной проверке разрешений на основе учетных данных процесса (обычно: эффективный UID, эффективный GID и дополнительный список групп).

Начиная с ядра 2.2, Linux разделяет привилегии, традиционно связанные с суперпользователем в отдельные единицы, известные как возможности, которые могут быть независимо включены и отключены. Возможности являются атрибутом на один нить.

Cap_net_bind_service: Связать розетку до привилегированных портов в Интернете (номера портов менее 1024).

Возможности добавляются за файл. Вот почему нам нужно изменить сам джайна Java. Возможность нам нужно добавить, это Cap_net_bind_service. , который явно определяется как емкость для исполняемого для привязки к порту менее 1024. Сначала найдите путь Java в Logstash. Это на /usr/share/logstash/jdk/bin/java

setcap CAP_NET_BIND_SERVICE=+eip /usr/share/logstash/jdk/bin/java

Теперь убедитесь, что способность добавлена возможность:

getcap /usr/share/logstash/jdk/bin/java

java = cap_net_bind_service+eip

ЛДД Покажет общие библиотечные зависимости исполняемого двоина Джава

ldd /usr/share/logstash/jdk/bin/java
linux-vdso.so.1 =>  (0x00007ffd85fcf000)
libz.so.1 => /lib64/libz.so.1 (0x00007faa3d2c5000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007faa3d0a9000)
libjli.so => /usr/share/logstash/jdk/bin/../lib/jli/libjli.so (0x00007faa3ce98000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007faa3cc94000)
libc.so.6 => /lib64/libc.so.6 (0x00007faa3c8c6000)
/lib64/ld-linux-x86-64.so.2 (0x00007faa3d6de000)
systemctl start logstash

Теперь вы увидите сообщение об ошибке в /var/log/сообщение говоря …| libjli.so Пропасная библиотека. Java не сможет найти эту библиотеку.

logstash: /usr/share/logstash/jdk/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory.

Выше setcap Команда ломает, как Java ищет свою библиотеку для запуска. Чтобы исправить это, нам нужно SymLink в библиотеке ищет /usr/lib а потом беги ldconfig.

ln -s /usr/share/logstash/jdk/lib/jli/libjli.so /usr/lib/

Выполнить команду ldconfig Отказ

ldconfig

Теперь создайте тестовый файл конфигурации /etc/logstash/Conf.d/test.conf Прослушивание порта 514 Отказ

input {
    syslog {
        port => "514"
    }
}

output {
    stdout { codec => rubydebug }
}
systemctl restart logstash
netstat -plnu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
udp        0      0 127.0.0.1:323           0.0.0.0:*                           676/chronyd
udp        0      0 0.0.0.0:514             0.0.0.0:*                           26999/java
udp6       0      0 ::1:323                 :::*                                676/chronyd

Это все. Теперь мы успешно связываем привилегированный порт 514 для логиста.

В случае, если вам нужно удалить возможности, то используйте setcap команда снова с вариантом -ЕП

setcap cap_net_bind_service=-ep /usr/share/logstash/jdk/bin/java

Оригинал: «https://dev.to/bidhanahdib/binding-privileged-port-514-to-logstash-7-10-0-4og2»