ESM 구축

2025. 7. 29. 14:09·Linux

java기반이므로 jdk파일을 다운

locky linux는 방화벽으로 구축 (jdk, logstash(데이터가공), beats(데이터 실시간 수집))

cent Os 는 ESM구축(jdk,elasticsearch(저장하는 곳+검색가능), kibana(보여주는 곳))


| 순서 | 실행 대상           | 이유                                            |
| -- | --------------- | --------------------------------------------- |
| ①  | Elasticsearch   | 가장 기본 저장소이자 종착지, 제일 먼저 켜야 함                   |
| ②  | Logstash (선택사항) | Filebeat가 Elasticsearch 대신 Logstash로 보낼 경우 필요 |
| ③  | Kibana          | Elasticsearch에 연결해서 시각화 도구로 사용                |
| ④  | Filebeat        | 로그 수집 도구 → 마지막에 실행해야 연결 실패 없음                 |

 


 

 

Cent OS

 

네트워크를 바꾸는 위치

 

vim /etc/udev/rules.d/70-persistent-net.rules 

 

위에 있던 것을 지워주고 아래는 이름을 eth0으로 변경 후 저장

 

rpm -ivh jdk-8u191-linux-x64.rpm 

 

 

시간 동기화 

 

rdate -s time.bora.net

date

 

elasticsearch 프로그램 설치

 

rpm -ivh elasticsearch-6.3.2.rpm 

 

elasticsearch 설정

 

vim /etc/elasticsearch/elasticsearch.yml

 

ipv6 설정

-기본적으로 elasticsearch는 ipv6를 기반으로 하기 때문에 아래 설정 필요

 

sysctl net.ipv6.conf.all.disable_ipv6=1

sysctl net.ipv6.conf.default.disable_ipv6=1

sysctl net.ipv6.conf.lo.disable_ipv6=1

 

 

서비스 시작

 

service elasticsearch start

 

netstat -antup | grep java

 

9200은 외부통신용 주소, 9300은 내부통신용-kibana

+snort 로 구현한다면?

vim config/snort-log.conf

input {
        beats {
                port => "5044"
        }
}
filter{
        csv{
                columns => ["timestamp","msg","proto","src","srcport","dst","dstport"]
        }
}
output{
        elasticsearch{
                hosts => ["192.168.50.50:9200"]
                index => "snort"
        }
}


Locky Linux

 

파일이동

 

cd /usr/local/src

 

mv '/var/run/vmblock-fuse/blockdir/hzdhHH/jdk-8u191-linux-x64.rpm' .

mv '/var/run/vmblock-fuse/blockdir/hzdhHH/filebeat-6.3.2-linux-x86_64.tar.gz' .

mv '/var/run/vmblock-fuse/blockdir/hzdhHH/logstash-6.3.2.tar.gz' .

 

rpm -ivh jdk-8u191-linux-x64.rpm

tar -zxvf logstash-6.3.2.tar.gz 

 

rpm,tar차이

더보기

 

 

logstash시작

bin/logstash -e 'input { stdin {}} output { stdout{}}'

 

아래 이렇게 뜨면 성공한 것

 

test를 입력하여 logstash가 동작하는지 확인

시간 맞는지 확인하기

 

종료: ctrl + c

 


데이터 가공 설정

 

데이터가공을 위해서는 원본데이터가 필요하다

3가지 정보가 필요.

누구한테 받을 건지(beats), 어떻게 가공할 것인지(grok파싱(해석) 프로그램 사용), 가공된 데이터를 누구에게 넘겨줄 지 결정(elasticsearch)

/usr/local/src/logstash-6.3.2

 

vim config/iptables-log.conf

 

input{
        beats {
                port => "5044"
        }
}
filter{
        grok{
                match => { "message" => "%{IPTABLES}" }
        }
}
output{
        elasticsearch{
                hosts => ["192.168.50.50:9200"]
                index =>"iptables"
        }
}
~                                                                               
~                                                                               
~

grok도 규칙에 따라 가공을 해주는 것이기 때문에 규칙을 만들어줘야 한다.

규칙패턴을 공부해야 한다.

 

https://grokdebugger.com/

 

Grok Debugger | Autocomplete and Live Match Highlghting

 

grokdebugger.com

 

정규표현식, 구문분석(파싱parse-grok, 패턴공부)


grok 설정

 

vim vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns/iptales.grok

IPTABLES %{IPTABLES_ETHERNET} %{IPTABLES_IP}
IPTABLES_ETHERNET %{DATA:msg} IN=%{DATA:iface} OUT=(%{DATA:oface})?(MAC=%{NETFILTERMAC})?
NETFILTERMAC %{MAC:dest_mac}:%{MAC:src_mac}:%{ETHTYPE:ethtype}
ETHTYPE (?:(?:[A-Fa-f0-9]{2}):(?:[A-Fa-f0-9]{2}))

IPTABLES_IP %{IPTABLES_IP_START} %{IPTABLES_IP_PAYLOAD}
IPTABLES_IP_START SRC=%{IP:src_ip} DST=%{IP:dest_ip} LEN=%{INT:length} TOS=%{BASE16NUM:tos} PREC=%{BASE16NUM:prec} TTL=%{INT:ttl} ID=%{INT:ip_id}(?: %{IPTABLES_IP_FRAGFLAG:flags})?(?: FRAG: %{INT:fragment})?
IPTABLES_IP_FRAGFLAG ((?<= )(CE|DF|MF))*

IPTABLES_IP_PAYLOAD %{IPTABLES_PROTOCOL} (%{IPTABLES_PORT_PAIR} %{IPTABLES_TCP_DETAILS})?(%{IPTABLES_ICMP_DETAILS})?
IPTABLES_PROTOCOL PROTO=%{WORD:proto}
IPTABLES_PORT_PAIR SPT=%{INT:src_port} DPT=%{INT:dest_port}
IPTABLES_TCP_DETAILS WINDOW=%{INT:tcp_window} RES=%{BASE16NUM:res} %{IPTABLES_TCP_FLAGS:tcp_flags}

IPTABLES_TCP_FLAGS ((?<= )CWR|ECE|URG|ACK|PSH|RST|SYN|FIN)
IPTABLES_ICMP_DETAILS TYPE=%{INT:icmp_type} CODE=%{INT:icmp_code} ID=%{INT:icmp_id} SEQ=%{INT:seq}

 

filebeat 설치

cd ..

tar -zxf filebeat-6.3.2-linux-x86_64.tar.gz

 

설치 후 이동

 

권한 설정 (-R은 하위 파일 전부 권한 변경)

chmod 744 filebeat

chmod 644 filebeat.yml

chmod -R 644 modules.d

 

 

vim filebeat.yml

 

원본데이터를 그대로 보내겠다는 설정-> logstash로 보낼 거니까 전부 비활성화

 

반대로 보낼 거니까 설정

포트는 위에 input설정할 때와 동일 활성화만 해주기

 

 

나가고 

방화벽 설정

 

iptables -A INPUT -p icmp -j LOG --log-prefix "[ICMP_DETECT] "

iptables -A OUTPUT -p icmp -j LOG --log-prefix "[ICMP_DETECT] "

 

 

로그 위치 변경

vim /etc/rsyslog.conf 

 

 

systemctl restart rsyslog.service

tail -f /var/log/iptables.log

 

 

시간 설정 필수!

vim /etc/chrony.conf 

 

맨 마지막에

server time.bora.net iburst

 

systemctl restart chronyd

 

-> 시간 설정을 만약 안 하고 log파일을 만들었다면, log파일 지우고 rsyslog 재시작 후 다시 확인해보기


설정 후, logstash 활성화하기

 

cd /usr/local/src/logstash-6.3.2/

bin/logstash -f config/iptables-log.conf --config.reload.automatic

 

마지막에 성공뜨면 ok

 


filebeats 실행

 

cd /usr/local/src/filebeat-6.3.2-linux-x86_64/

./filebeat -e -c filebeat.yml -d "publish"

새로은 터미널 창에서 ping을 쳤을 때 filebeat에서 동작하는 것을 확인할 수 있다

 

 

 

cent OS에서 확인하기

curl -X GET "localhost:9200/_cat/indices?v"

 

 


kibana 실행

tar -zxf kibana-6.3.2-linux-x86_64.tar.gz 

cd kibana-6.3.2-linux-x86_64

vim config/kibana.yml 

 

 

저장 후

bin/kibana

실행

실행이 잘 되었다는 뜻

 

 

원도우로 접속을 해본다

 

 

management >Index Patterns >iptables > nextstep> 생성


+ 오류 발생.. 로그 가공이 제대로 되지 않는다

->해결: iptables 정책 설정할 때 띄어쓰기 하기

데이터를 하나로 인식함. 띄어쓰기로 나눠줘야 함

 

curl -X DELETE "localhost:9200/iptables?pretty"

저작자표시 비영리 변경금지 (새창열림)

'Linux' 카테고리의 다른 글

칼리 리눅스 초기 설정(네트워크 설정, 로그인, 한글) + GVM 설치 및 설정  (1) 2025.07.15
pam 모듈 별 역할, 설정  (0) 2025.06.16
접근 통제, SElinux 사용방법  (0) 2025.06.13
실습 /web,ftp, iptables,db  (0) 2025.05.28
crontab (예약작업 프로그램)  (0) 2025.05.26
'Linux' 카테고리의 다른 글
  • 칼리 리눅스 초기 설정(네트워크 설정, 로그인, 한글) + GVM 설치 및 설정
  • pam 모듈 별 역할, 설정
  • 접근 통제, SElinux 사용방법
  • 실습 /web,ftp, iptables,db
햅삐root
햅삐root
happyroot 님의 블로그 입니다. IT 보안 정리💛
  • 햅삐root
    햅삐한 root
    햅삐root
  • 전체
    오늘
    어제
    • 전체보기 IT (123)
      • Linux (21)
      • Network (23)
      • packet tracer& GNS3 (10)
      • Cryptology (7)
      • WEB (16)
      • DB (16)
      • Hacking (28)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    sqlinjection
    Hack
    injectionvector
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
햅삐root
ESM 구축
상단으로

티스토리툴바