안녕하세요. 인프라운영본부 김현구, 이동석 입니다.
Ansible Playbook 으로 Wazuh HIDS 설치하는 방법에 대해 알아보고자 합니다.
1. Ansible 이란?
Ansible은 IT 인프라를 구성, 관리 및 운영하는 데 사용되는 오픈 소스 자동화 도구입니다.
YAML을 사용하여 구성 파일을 작성하여 SSH를 사용하여 호스트에 연결하고 명령을 실행합니다.
2. Wazuh 이란?
Wazuh는 클라우드, 컨테이너, 서버를 보호하기 위한 HIDS SEIM 오픈소스 솔루션 입니다.
유사한 솔루션으로 Zabbix(Zabbix란?) 의 경우 서버, 네트워크, 컨테이너 플랫폼, 하드웨어를 감시하여 관리자에게 장애 발생을 알려주는 오픈소스 솔루션이라고 한다면
Wazuh의 경우 로그 모니터링, 침입탐지, 파일무결성체크, 안티멀웨어/루트킷 탐지, OS 취약성 점검, 패치 관리 등을 모니터링, 알람 및 차단 해주는 오픈소스 보안 솔루션 입니다.
-
종합적인 보안 모니터링: 호스트 기반의 IDS(Intrusion Detection System)와 통합된 보안 이벤트 관리 시스템으로, 시스템 로그, 파일 무결성, 루트킷 탐지, 보안 취약점 등 다양한 보안 이벤트를 실시간으로 모니터링합니다.
-
실시간 알림 및 대응: 이벤트 발생 시 실시간으로 알림을 제공하며, 정책에 따라 자동적으로 대응 조치를 취할 수 있습니다. 예를 들어, 알림을 받은 관리자는 즉각적으로 대응 조치를 취하고 보안 위협에 대한 신속한 대응이 가능합니다
-
확장성과 유연성: Wazuh는 클러스터링 및 분산 아키텍처를 지원하여 대규모 환경에서도 확장성과 성능을 유지할 수 있습니다.
3. Ansible Playbook Wauzh Manager 설치
- Wazuh Manager는 중앙 집중식 로그 및 보안 이벤트 관리를 제공합니다.
앤서블 서버 (1대) : Rockylinux 8.x Wauzh 관리자 서버 (1대) : Ubuntu 20.04 Wauzh Agent용 서버 (2대) : Rockylinux 8.x , Ubuntu 22.04 |
서버 환경구성은 다음과 같습니다.
Ansible 패키지는 설치되어있다는 가정하에 진행하도록 하겠습니다.
[root@ansible ansible]# ssh-keygen
Ansible Server에서 ssh-keygen을 추가합니다.
[root@ansible ansible]# ssh-copy-id -i ~/.ssh/id_rsa.pub manager@xxx.xxx.xxx.xxx Are you sure you want to continue connecting (yes/no/[fingerprint])? yes manager@xxx.xxx.xxx.xxx's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'manager@xxx.xxx.xxx.xxx'" and check to make sure that only the key(s) you wanted were added. [root@ansible ansible]# ssh-copy-id -i ~/.ssh/id_rsa.pub Agent1@xxx.xxx.xxx.xxx Agent1@xxx.xxx.xxx.xxx's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'Agent1@xxx.xxx.xxx.xxx'" and check to make sure that only the key(s) you wanted were added.
Ansible Server에서 생성된 key를 Wazuh manager, Agent 서버에 복사합니다.
[root@ansible ansible]# vi /etc/ansible/hosts ## Wauzh Manager 설치할 IP [wauzh_Manager] xxx.xxx.xxx.xxx ## Wauzh Agent 설치할 IP [wauzh_Agnet] xxx.xxx.xxx.xxx
Ansible에 인벤토리를 Manager IP 정보, Agent IP 정보를 삽입 합니다.
[root@ansible ansible]# wget https://github.com/ugnoeyh/Wauzh-Ansible-Install/blob/main/wauzh-managed.yml [root@ansible ansible]# ansible-playbook wazuh-managed.yml -v PLAY [wazuh_managed] ******************* TASK [Gathering Facts] ***************** ok: [xxx.xxx.xxx.xxx] PLAY [apt 업데이트] ************************** TASK [Gathering Facts] ********************* ok: [xxx.xxx.xxx.xxx] . . . "18/11/2023 07:32:18 INFO: You can access the web interface https://<wazuh-dashboard-ip>:443", " User: admin", " Password: g34hkH5*9Ufh1*tf.zu*ct2ByinyN8d7", "18/11/2023 07:32:18 INFO: Installation finished."]} PLAY RECAP **************************************************************************************************************************** xxx.xxx.xxx.xxx[Wauzh Manager] : ok=7 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
다음 명령을 사용하여 Wauzh Manager의 경우 Rocky8.X / Ubuntu 20.08 이상에서 설치할 수 있으며 설치되는 목록으로는 Elasticsearch, Kibana, Filebeat 설치 됩니다.
하단 같이 failed 로그 없이 뜬다면 정상적으로 설치가 완료 되었습니다.
root@Wazuh-Manager:~# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 665/systemd-resolve tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 777/sshd: /usr/sbin tcp 0 0 0.0.0.0:55000 0.0.0.0:* LISTEN 67765/python3 tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 74314/node tcp 0 0 0.0.0.0:1514 0.0.0.0:* LISTEN 67896/wazuh-remoted tcp 0 0 0.0.0.0:1515 0.0.0.0:* LISTEN 67806/wazuh-authd tcp6 0 0 127.0.0.1:9200 :::* LISTEN 23943/java tcp6 0 0 127.0.0.1:9300 :::* LISTEN 23943/java tcp6 0 0 :::22 :::* LISTEN 777/sshd: /usr/sbin
Wauzh Manage에 로그인 후 443, 1514,1515, 9200, 9300, 55000 포트가 실행 중이라면 정상적으로 동작됨을 확인 할 수 있습니다.
https://xxx.xxx.xxx.xxx 로 접속하면 위 사진과 같이 웹 페이지가 열린다면 Wauzh Manager 설치가 끝나게 됩니다.
4. Ansible Playbook Wauzh Agent 설치
◦ Wazuh Agent는 각 호스트에서 수집된 로그 및 보안 이벤트를 Wazuh Manager로 전송합니다.
wauzh-agent.yml - name: Manager IP 설정에 기입 lineinfile: path: /var/ossec/etc/ossec.conf regexp: '<address>MANAGER_IP</address>' line: "<address>{{ hostvars[inventory_hostname]['wazuh_server'] }}</address>"
위 코드는 wauzh-agent.yml 중 일부이며
/etc/ansible/hosts 위에 설정한 [wauzh_Manager] IP를 참조하므로 별도의 wauzh Manager IP입력은 하지 않도록 설계하였습니다.
[root@ansible Agent]# wget https://github.com/ugnoeyh/Wauzh-Ansible-Install/blob/main/wauzh-agent.yml [root@ansible Agent]# ansible-playbook wazuh-agent.yml -v TASK [Wazuh agent 다운로드 - Debian GNU/Linux] ****************** changed: [xxx.xxx.xxx.xxx] PLAY RECAP ******************** xxx.xxx.xxx.xxx : ok=8 changed=5 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
설치가 완료되면 Manager 웹 페이지에 에이전트 목록이 확인되며 보안 모니터링이 가능하게 됩니다
위 방법으로 간단하게 Wauzh Manager와 Agent를 각각의 서버에 설치하여 모니터링 할 수 있도록 진행 하였습니다.
이상으로 Ansible로 Wazuh를 구축하고 운영하는 방법을 알아 보았습니다.
감사합니다.