티스토리 뷰
Logstash 에서 네트워크 장비 로그를 syslog(UDP 514)로 수집을 하려고 구성을 하였는데 logstash 실행을 하니 아래와 같은 에러 메시지가 나오면서 서비스가 실행이 되지 않는 경우가 발생을 하였습니다.
메시지를 보면
Permission denied - bind(2) for "0.0.0.0" port 514
라고 되어 있네요... 한눈에 봐도 권한 문제인 것을 알 수 있습니다.
[2020-02-13T17:39:08,169][ERROR][logstash.inputs.udp] UDP listener died {:exception=>#<Err
no::EACCES: Permission denied - bind(2) for "0.0.0.0" port 514>, :backtrace=>["org/jruby/ext/soc
ket/RubyUDPSocket.java:213:in `bind'", "/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logst
ash-input-udp-3.3.4/lib/logstash/inputs/udp.rb:116:in `udp_listener'", "/usr/share/logstash/vend
or/bundle/jruby/2.5.0/gems/logstash-input-udp-3.3.4/lib/logstash/inputs/udp.rb:68:in `run'", "/u
sr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:309:in `inputworker'", "/usr/share
/logstash/logstash-core/lib/logstash/java_pipeline.rb:302:in `block in start_input'"]}
Linux 에서는 보안상 이유로 1 ~ 1024 ( Known 포트) 에 대해서는 root 권한이 있는 사용자 이외에는 해당 포트를 사용할 수 없도록 제한을 하고 있어서 발행하는 에러 입니다.
이를 해결할 수 있는 방법은 여려가지가 있는데요.
1. root 권한으로 logstash를 실행
2. logstash실행시 java 프로세스에 해당 포트 사용할 수 있는 권한을 할당
3. Known Port 가 아닌 다른 포트를 사용(1025~65535)
첫번째 logstash를 root로 실행하는 경우입니다.
일단 프로세스를 root 권한으로 실행하는 것은 일반적으로 보안상 권장은 하지 않습니다. logstash 등 ELK Stack 이 오픈소스 환경이고 여러 보안상 취약점이 발생할 가능성이 있습니다. 또한 외부에서 해당 애플리케이션 취약점을 이용해 시스템 Root 권한을 획득할 경우 시스템에 악 영향을 미치기 때문에 가급적 root 권한 을 사용하지 않으시는게 좋습니다.
그리고 3번째 Known Port 가 아닌 다른 포트를 사용(1025~65535)하는 경우입니다.
logstash 에서 input 플러그인을 통해 임의의 포트를 지정해 주시면 되고, 가장 빠르고 간편한 방법일 수 있습니다. 하지만 로그를 전송하는 모든 장비에서 전송포트를 변경을 해 주어야 하고, 장비 수량이 수백대 이상일 경우 상당한 시간이 필요하게 됩니다. 그리고 방화벽이나 ACL등 정책이 걸려 있다면, Policy 까지 수정을 해 주어야 합니다.
또한 일부장비들은 Default Port 변경이 불가능한 경우가 있기 때문에 장비 특성 및 구성 환경도 고려하여 사용을 해야 합니다.
저 같은 경우 네트워크 장비 로그를 수집하고 있는데 일부 네트워크 장비에서 버전상의 이유로 로그 전송 포트 수정이 불가능하여 어쩔 수 없이 Syslog (udp 514)를 사용할 수 밖에 없었습니다.
여기서는 2번째 항목 sepcap 명령어를 통한 java 프로세스 권한 부여하는 부분에 대해서 이야기해 보려고 합니다.
< logstash실행시 java 프로세스에 해당 포트 사용할 수 있는 권한을 할당 >
sepcap 이라는 명령어를 통해서 java 프로세스에 Known 포트 사용할 수 있는 권한을 부여할 수 있습니다.
1) find 명령어를 통해서 java 프로세스가 실행되는 위치를 확인합니다.
- find / -name java
java 관련 파일이 여러개 뜨는데 찾아보니 제 장비의 경우 아래의 경로에 설치되어 있네요..
[root@elastic ~]# find / -name java
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre/bin/java
[root@elastic ~]#
2) sepcap 명령어를 사용해서 java 프로세스 파일에 bind 권한을 부여해 줍니다.
[root@elastic ~]#setcap cap_net_bind_service=+epi /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre/bin/java
위와 같이 실행후 logstash를 다시 시작하면 권한 오류 없이 잘 실행이 되는 것을 확인하실 수 있습니다.
그리고 sepcap 실행 후 아래와 같이 java 에서 libjli.so 파일이 없다는 오류 메시지가 나오는 경우 가 있습니다.
logstash: /bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
이럴 경우 libjli.so 파일을 찾아서 /etc/ld.so.conf.d/ 경로에 추가를 해 주시면 됩니다.
- find / -name libjli.so
찾아보니 java 파일이 있던 경로 하위 아래의 경로에 libjli.so 파일이 존재하네요..
[root@elastic ~]#find / -name libjli.so
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre/lib/amd64/jli/libjli.so
[root@elastic ~]#
이제 vi 편집기로 /etc/ld.so.conf.d/ 하위에 libjli.conf 라는 파일을 생성하신 후에 위에 서 찾은 경로를 넣어 주시면 됩니다. 참고로 파일명은 빼고 파일이 있는 상위 경로까지만 입력을 해 주셔야 합니다.
vi /etc/ld.so.conf.d/libjli.conf
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre/lib/amd64/jli/
위와 같이 수정하신후 ldconfig Reload를 해 줍니다.
[root@elastic ~]# ldconfig
이제 Logstash를 다시 시작해 주시면 정상적으로 실행이 됩니다.
'ELK' 카테고리의 다른 글
Elasticsearch max shards per node 설정 - maximum shards open error (0) | 2024.02.14 |
---|---|
[ELK] Curator - Elasticsearch 로그 관리 (0) | 2020.07.14 |
[ELK] Kibana 웹 인증 구성 ( Auth with Httpd , Active Directory ) (0) | 2020.02.04 |
[ELK] Fortigate Firewall 로그 수집 및 분석 - Logstash filter (0) | 2020.01.23 |
Elasticsearch Heap Size (0) | 2020.01.21 |
- Total
- Today
- Yesterday
- 개발
- Python
- ldap
- routing
- ccie
- Security
- EVE
- ELASTIC
- CISCO
- ccna
- Kibana
- switch
- CentOS
- Fortigate
- Elk
- EVE-ng
- Ntopng
- Network
- Logstash
- 파이선
- GUI
- NTOP
- ccnp
- Elasticsearch
- nms
- 코딩
- maximum shards open error
- pyqt
- Linux
- ubuntu
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |