Logstash Port 514 Permission denied

Al intentar iniciar el servicio de logstash con el puerto 514 en escucha podemos apreciar el siguiente problema.

[2022-11-29T10:30:18,202][ERROR][logstash.inputs.udp      ][main][dec7ab89e06b39e0468c97b39e3a559eccb915944cc44830732c52de29f9852a] UDP listener died {:exception=>#<Errno::EACCES: Permission denied - bind(2) for "0.0.0.0" port 514>, :backtrace=>["org/jruby/ext/socket/RubyUDPSocket.java:200:in `bind'", "/usr/share/logstash/vendor/bundle/jruby/2.6.0/gems/logstash-input-udp-3.5.0/lib/logstash/inputs/udp.rb:129:in `udp_listener'", "/usr/share/logstash/vendor/bundle/jruby/2.6.0/gems/logstash-input-udp-3.5.0/lib/logstash/inputs/udp.rb:81:in `run'", "/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:411:in `inputworker'", "/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:402:in `block in start_input'"]}

Para poder solventar este problema tenemos varias opciones: Iniciar logstrash como root, dar permisos al proceso mediante setcap para que este proceso pueda escuchar por este puerto o cambiar de puerto.

En este post vamos a ver la segunda opción, agregaremos el servicio java de logstrash para que pueda escuchar por el puerto 514

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

Intentamos iniciar el servicio

systemctl start logstrash

Al intentar levantar el servicio vemos que no inicia y apreciamos el sisuigente error en el fichero /var/log/syslog

Nov 29 10:42:38 localhost logstash[76782]: /usr/share/logstash/jdk/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory

mapeamos la librería

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

Iniciamos el puerto

systemctl start logstrash

Comprobamos que iniciaron correctamente los puertos

 lsof -i -n | egrep 'syslog'
rsyslogd  15918                           syslog   10u  IPv4  168710      0t0  UDP *:56584
java      98717                         logstash  116u  IPv4  860435      0t0  UDP *:syslog

En caso de querer quitar estos permisos, simplemente ejecutamos el siguiente comando:

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

:wq!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *