Иногда приходит сценарий, где вам нужно получить трафик системного журнала по умолчанию Порт 514
на вашем сервере logstash. Но, как мы знаем, порты в диапазоне от 1 до 1024 — привилегированные порты, и только корневой пользователь может слушать их. По умолчанию демон logstash начинается с собственного пользователя, поэтому решить нашу проблему, нам нужно следовать любую вариант ниже. Мой сервер Logstash Logstash находится на Centos 7.
Чтобы связать logstash ниже 1024 портов у нас есть 3 варианта.
- Запустите Logstash как root.
- Используйте iptables для пересылающего порту 514 до безвивализованного порта.
- использовать
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»