ETC/ELK

Docker를 활용한 Filebeat, ELK stack 설치 및 Suricata 연동

daeunnniii 2021. 10. 8. 00:22
728x90
반응형

Docker를 활용한 Elasticsearch 설치 

#elasticsearch image 다운
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.15.0

#다운된 이미지 확인
docker images

#elasticsearch container구동
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.15.0

#프로세스 확인
docker ps -a

#포트확인
netstat -anp | grep LIST | grep docker

#설치테스트 확인
curl -X GET "http://127.0.0.1:9200/"

 

기존 elasticsearch 컨테이너 중지 및 삭제

$ docker stop elasticsearch

$ docker rm elasticsearch

 

 

나머지 이미지도 다운 및 네트워크 추가

#kibana 이미지 다운로드
$ docker pull docker.elastic.co/kibana/kibana:7.15.0

#logstash 이미지 다운
$ docker pull docker.elastic.co/logstash/logstash:7.15.0

#이미지 확인
$ docker images

#docker 네트워크 추가 및 확인
$ docker network create elastic
$ docker network ls

#elasticsearch 컨테이너 추가 및 구동
$ docker run -d --network=elastic --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.15.0
$ docker ps

 

logstash config 설정

$ mkdir -p /root/apps/logstash 
$ vi /root/apps/logstash/logstash.conf

 

input {
     beats {
          port => 5044		# 지정된 포트로 filebeat의 데이터를 전송받음
     }
}

output {
     elasticsearch {
          hosts => ["elasticsearch:9200"]
          user => elastic
          password => password		#패스워드 설정 입력
          index => "suricata-log" 	# DB의 데이터베이스 명
          document_type => "log" 	# DB의 테이블 명
     }
}

 

Logstash, Kibana 컨테이너 구동

$ mkdir /usr/share/logstash/pipeline/logstash.conf

#logstash 컨테이너 구동
$ docker run -d --name logstash --network elastic -p 5044:5044 docker.elastic.co/logstash/logstash:7.15.0

#kibana 컨테이너 추가 및 구동
$ docker run -d --network=elastic --name kibana -p 5601:5601 docker.elastic.co/kibana/kibana:7.15.0
$ docker ps

 

방법1) Filebeat 이미지 다운 및 Suricata 연동

# filebeat 이미지다운
$ docker pull docker.elastic.co/beats/filebeat:7.15.0

$ mkdir -p /root/apps/filebeat 
$ vi /root/apps/filebeat/filebeat.yml
filebeat.prospectors:
        - input_type: log
        paths:
                - /var/log/suricata/eve.json
output:
        logstash:
                hosts: ["logstash:5044"]

 

# Filebeat 컨테이너 실행
$ docker run -d --name filebeat --network elastic -v /var/log/suricata/eve.json:/usr/share/filebeat/logs/suricata_log docker.elastic.co/beats/filebeat:7.15.0

 

방법2) Filebeat 설치와 Suricata 연동

1. filebeat 설치

$ wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.15.0-linux-x86_64.tar.gz
$ tar -xvzf filebeat-7.15.0-linux-x86_64.tar.gz
$ mv filebeat-7.15.0-linux-x86_64 filebeat
$ cd filebeat

 

2. filebeat.yml에서 다음 내용을 수정

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/suricata/*.log


setup.kibana:
  host: "localhost:5601"		#VPC인 경우 localhost 대신 private ip 주소 입력

output.elasticsearch:
  hosts: ["localhost:9200"]		#VPC인 경우 localhost 대신 private ip 주소 입력
  username: "elastic"
  password: "<password>"

 

3. suricata의 모듈 활성화

$ ./filebeat modules enable suricata
$ ./filebeat setup -e

setup 명령은 Suricata 로그를 Elasticsearch에 인덱싱하기 위한 setting / mapping 정보를 가진 index template를 자동으로 설정하고 ingest pipeline을 세팅하고 그 다음에 dashboard를 생성하는 세 가지 작업을 모두 수행한다.

 

여기까지 수행 후 Kibana>Dashboard 에서 Suricata 검색 시 Events/Alerts 대시보드가 잘 생성된 것을 확인할 수 있다.

 

 

4. 서비스 등록

$ vi /lib/systemd/system/filebeat.service
 
[Unit]
Description=Filebeat sends log files to Logstash or directly to Elasticsearch.
Documentation=https://www.elastic.co/products/beats/filebeat
Wants=network-online.target
After=network-online.target
 
[Service]
ExecStart=/home/ubuntu/filebeat/filebeat -c /home/ubuntu/filebeat/filebeat.yml -path.data /home/ubuntu/filebeat/data
Restart=always
 
[Install]
WantedBy=multi-user.target

 

5. filebeat 실행

$ systemctl daemon-reload
$ systemctl enable filebeat
$ systemctl start filebeat
728x90
반응형