티스토리 뷰
[Wazuh] API error - 3099 - ERROR3099 Wazuh net ready yet
또야 2024. 2. 20. 21:53에러 배경
이미 구축된 Wazuh 서버에 worker 서버 한 대를 더 추가하기 위해,
filebeat / SSL 인증서 배포 / wazuh-manager 패키지 설치를 수행했다.
이후 대시보드에서 추가한 worker의 API를 보려고 하면 이 오류가 발생했다.
저는 한을 풀터이니 결론부터 보고 싶으시다면 조금 더 아래로 가주십시오...
확인 과정
🧚♀️ 다른 API들은?
정상적으로 대시보드에서 접근할 수 있었다.
🧚♀️ 인증서 배포나 패키지 설치
5번 정도 다시 수행하고, 서비스를 재기동했다. 아무 문제 없다.
🧚♀️ filebeat test output 수행 결과
모든 분산 indexer와 정상 TLS 통신한다.
🧚♀️ /var/ossec/etc/ossec.conf
worker 서버의 <cluster> 설정 재확인
🧚♀️ /var/ossec/logs/api.log
worker 서버의 api.log를 보았는데 rbac.db만 있었고 public-key.pem, public.pem 파일은 없었다.
-> 이 파일은 최초로 아래 코드를 수행하면서 생겼음.
https://documentation.wazuh.com/4.6/user-manual/api/getting-started.html#logging-into-the-wazuh-api
TOKEN=$(curl -u <user>:<password> -k -X POST "https://<manager-server IP>:55000/security/user/authenticate?raw=true")
curl -k -X GET "https://<manager-server IP>" -H "Authorization: Bearer $TOKEN"
근데 문제와 관련은 없었다. 왜냐하면 위 명령어를 수행하면 정상적인 API 호출 결과가 나왔다.
`systemctl status wazuh-manager` 수행 시 active 및 에러 로그도 없으므로 완전히 정상이 맞다.
{
"data": {
"title": "Wazuh API",
"api_version": "4.6.0",
"revision": 4000,
"license_name": "GPL 2.0",
"license_url": "https://github.com/wazuh/wazuh/blob/master/LICENSE",
"hostname": "wazuh-master",
"timestamp": "2024-02-20T05:11:00+0000"
},
"error": 0
}
🧙♂️ netstat -antp | grep "55000"
다른 정상적인 API 서버는 netstat을 수행하면 wazuh api 서버:55000 -> 대시보드 서버:임의 포트와 통신하는 내역이 있었다.
하지만 이 문제의 서버는 특정 대역의 55000 포트로 LISTEN만 하지 통신이 수행되지 않았다.
이것을 보고 대시보드 서버가 worker 서버의 API를 인식하는데 문제가 있다고 생각이 들긴 했다..만 나는 찾지 못했다.
vm 서버들을 여러개 켜놓고 추론을 하면서 정신이 나가버려 있었기 때문이다..@_@
문제점
🧞♂️ /usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml
이 파일은 대시보드에게 통신할 API에 대한 정보를 명시해주는 파일이다.
api의 url은 무엇이고(manager 서버의 IP), 통신할 포트는 무엇이며, API 접근 계정은 무엇인지를 알려준다.
indent도 딱딱 맞고. 뭐가 문제지?
예 그렇습니다.
CORS를 공부하느라 GET과 POST를 홈런칠 때까지 날려본 나머지...
port가 아닌 post를 습관적으로 적어버렸습니다.
바쁘실텐데 이걸 발견해주신 파트쨩님께 죄송하고 감사하고 죄송하고 감사하고...어쩔 줄을 모르겠으다..
결론
그래서 결론은, 문제는 /usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml 파일에 있다는 것이다.
매니저 서버 IP나 port 등을 잘못 적었는지 확인해야 한다. (물론 port를 post로 적는 말이 되는(?) 상황도..)
👉 vi로 바로 접근하다보면 경로를 잘못 적어서, wazuh.yml 파일이 빈 파일이라고 오해 및 단정짓는 상황이 생기니
cd로 먼저 최종 디렉터리까지 이동 후, wazuh.yml 파일이 있는지부터 확인하는 게 좋다.
https://documentation.wazuh.com/4.6/user-manual/wazuh-dashboard/settings.html
Settings - Wazuh dashboard · Wazuh documentation
User manual, installation and configuration guides. Learn how to get the most out of the Wazuh platform.
documentation.wazuh.com
👉 만약 user와 password를 잘못 적은 경우는 이 오류 문구와는 일치하지 않고
wrong credentials 에러가 나오며 curl을 통한 API 호출에서부터 실패하는 것으로 확인했다.
오늘의 나에 대한 참회..ㅠ
오늘 나는 업무 중 "dashboard에 대한 log는 없는 것 같다!"고 말했다.
정확한 근거가 있기 때문이었는데..
By default, the Wazuh dashboard doesn't store logs on a file. You can change this by configuring logging.dest setting in the opensearch_dashboard.yml configuration file.
🤜 기본적으로 wazuh dashboard는 파일에 로그를 저장하지 않지만 opensearch_dashboard.yml 파일의 logging.dest 값 지정을 통해 저장하도록 할 수 있다는 내용이다.
아래 문구를 보자.
The Wazuh dashboard stores log information on the /usr/share/wazuh-dashboard/data/wazuh/logs/wazuhapp.log file. These logs can be helpful for troubleshooting purposes.
🤜 /usr/share/wazuh-dashboard/data/wazuh/logs/wazuhapp.log 파일을 보면, dashboard나 api 요청에 대한 트러블슈팅에 용이할 것이라는 내용이다.
어쨌든 현재의 환경에서는 볼 수 있는 대시보드 log는 없는 게 맞지만(wazuhapp.log 파일이 없었음),
각 매니저 서버의 api.log가 아닌 대시보드 자체에서 로그 확인이 가능한 메커니즘이 존재하지 않는다는 오해가 될 수 있다.
트러블슈팅을 하면서 불확실한 내용을 토대로 추론, 검색, 검증을 하면서 답을 찾는 것이기는 하지만
한 자료의 부분만 읽고 다른 방향으로 틀어버리는 것이 아쉬웠던 하루다.
다음부터는 문제를 찾을 때 가장 가까운 곳부터 확실하게 검증하도록 해야겠다.
시간은 낭비되었지만 잘못 알고 있었던 부분을 짚었으니 얻은 게 있겠지요..
- Thanks for comming.
- 오늘은
- 명이 방문했어요
- 어제는
- 명이 방문했어요