elastalert의 rule 설정하는 방법입니다.

 

UTM 로그

 

elastalert 룰

root@syslogserver:/opt/elastalert/rules# cat ./firewall_login_success.yaml
name: firewall_console_login

type: any

index: logstash-fg-*

filter:
- query:
    query_string:
      query: logdesc:"Admin login successful" AND action:"login"

doc_type: _doc

alert:
- "slack"

slack:
# 슬랙 웹훅 주소
slack_webhook_url: "https://hooks.slack.com/services/################/#############/###########"
# 슬랙 채널에 메시지 전달할 이름
slack_username_override: "ElastAlert-Bot"
# 슬랙 메시지를 보낼 채널
slack_channel_override: "#security_alert"
# 슬랙 메시지에 타이틀 지정
# 지정하지 않을 경우 rule의 절대 경로 명이 찍힘: /opt/elastalert/ruls/ap_login_fail.yaml
slack_title: FIREWALL_LOGIN_SUCCESS
# 슬랙 메시지 색
slack_msg_color: "good"


alert_text: "FIREWALL_CONSOLE_LOGIN: 접속시간: {0} / 접속계정: {1} / 접속자IP: {2}"
alert_text_type: "alert_text_only"
alert_text_args: ["syslog_timestamp", "user", "srcip"]
root@syslogserver:/opt/elastalert/rules#

 

슬랙 메시지

'기술 노트 > ubuntu' 카테고리의 다른 글

sudo 권한 부여하기  (0) 2024.03.11
snmp-exporter에 MIB 등록하기  (1) 2024.02.07
elastalert2 설치하기  (0) 2024.01.15
grafana 알람 설정  (0) 2024.01.08
apt로 grafana 설치하기  (1) 2024.01.08

elastalert은 이제 지원하지 않습니다.

CentOS에서는 키바나 UI에서 설치하는 방법을 작성했었습니다.

 

이번에는 elastalert2로 설치하는 방법을 안내합니다.

kibana UI에서 설정 하지 않고, 터미널에서 직접 설정하는 방법으로 진행했습니다.

elastalert2로 설치하니까 금방이네요~

root@syslogserver:~# pip install elastalert2
root@syslogserver:~# cd /opt
root@syslogserver:~# git clone https://github.com/jertel/elastalert2.git
root@syslogserver:~# cd elastalert2
root@syslogserver:~/elastalert2# pip install "setuptools>=11.3"
root@syslogserver:~/elastalert2# python3 setup.py install
root@syslogserver:~/elastalert2# cd /opt
# elastalert 설치하신 후 "elastalert " 이라고 명령어를 치면 에러 메시지가 보입니다.
# 이때 경로 확인이 가능해요.
root@syslogserver:/opt# ln -s /usr/local/lib/python3.10/dist-packages/elastalert/ ./elastalert
root@syslogserver:/opt# ls -al
root@syslogserver:/opt# ls -al
total 8476
drwxr-xr-x  5 root    root       4096  1월 15 12:26 .
drwxr-xr-x 20 root    root       4096 12월 22 15:41 ..
lrwxrwxrwx  1 root    root         51  1월 15 12:26 elastalert -> /usr/local/lib/python3.10/dist-packages/elastalert/
drwxr-xr-x  3 grafana grafana    4096 12월 26 17:27 grafana-plugin
drwxr-xr-x  2 root    root       4096 12월 22 15:45 node_modules
drwxr-xr-x  2    1001    1002    4096 12월 21 12:55 snmp_exporter
root@syslogserver:/opt# cd elastalert
root@syslogserver:/opt/elastalert# cat ./config.yaml
# 폴더 명
# 폴더 경로를 설정할 경우, elastalert을 실행할 때 rule 옵션을 별도로 주지 않아도 됨
# 예: elastalert --config /opt/elastalert/config.yaml
rules_folder: /opt/elastalert/rules

# elasticsearch를 쿼리하는 빈도
run_every:
  minutes: 1

# 쿼리가 실행되는 시간부터 뒤로 늘어나는 쿼리 창의 크기
buffer_time:
  minutes: 15

# elasticsearch host
es_host: 192.168.000.000

# elasticsearch 사용 port
es_port: 9200

# elastalert2가 데이터를 저장할 index
# 굉장히 중요 합니다!!!!
writeback_index: elastalert_status

# 실패한 경고에 대한 재시도 기간
alert_time_limit:
  days: 2
root@syslogserver:/opt/elastalert#
# elasticsearch index를 생성하지 않으면 아래처럼 오류 발생
root@syslogserver:/opt/elastalert# elastalert


WARNING:elasticsearch:POST http://192.168.000.000:9200/elastalert_status/_search?size=1000 [status:404 request:0.027s]
ERROR:elastalert:Error finding recent pending alerts: NotFoundError(404, 'index_not_found_exception', 'no such index [elastalert_status]', elastalert_status, index_or_alias) {'query': {'bool': {'must': {'query_string': {'query': '!_exists_:aggregate_id AND alert_sent:false'}}, 'filter': {'range': {'alert_time': {'from': '2024-01-13T03:27:38.609562Z', 'to': '2024-01-15T03:27:38.609590Z'}}}}}, 'sort': {'alert_time': {'order': 'asc'}}}
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/dist-packages/elastalert/elastalert.py", line 1503, in find_recent_pending_alerts
    res = self.writeback_es.search(index=self.writeback_index, body=query, size=1000)
  File "/usr/local/lib/python3.10/dist-packages/elasticsearch/client/utils.py", line 152, in _wrapped
    return func(*args, params=params, headers=headers, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/elastalert/__init__.py", line 147, in search
    results = self.transport.perform_request(
  File "/usr/local/lib/python3.10/dist-packages/elasticsearch/transport.py", line 392, in perform_request
    raise e
  File "/usr/local/lib/python3.10/dist-packages/elasticsearch/transport.py", line 358, in perform_request
    status, headers_response, data = connection.perform_request(
  File "/usr/local/lib/python3.10/dist-packages/elasticsearch/connection/http_requests.py", line 199, in perform_request
    self._raise_error(response.status_code, raw_data)
  File "/usr/local/lib/python3.10/dist-packages/elasticsearch/connection/base.py", line 315, in _raise_error
    raise HTTP_EXCEPTIONS.get(status_code, TransportError)(
elasticsearch.exceptions.NotFoundError: NotFoundError(404, 'index_not_found_exception', 'no such index [elastalert_status]', elastalert_status, index_or_alias)
^C
root@syslogserver:/opt/elastalert#
# elasticsearch index 생성
root@syslogserver:/opt/elastalert# elastalert-create-index
Enter Elasticsearch host: 192.168.000.000
Enter Elasticsearch port: 9200
Use SSL? t/f: f
Enter optional basic-auth username (or leave blank):
Enter optional basic-auth password (or leave blank):
Enter optional Elasticsearch URL prefix (prepends a string to the URL of every request):
New index name? (Default elastalert_status)
Name of existing index to copy? (Default None)
Reading Elastic 8 index mappings:
Reading index mapping 'es_mappings/8/silence.json'
Reading index mapping 'es_mappings/8/elastalert_status.json'
Reading index mapping 'es_mappings/8/elastalert.json'
Reading index mapping 'es_mappings/8/past_elastalert.json'
Reading index mapping 'es_mappings/8/elastalert_error.json'
Deleting index elastalert_status_status.
Deleting index elastalert_status_error.
New index elastalert_status created
Done!
root@syslogserver:~#
# elastalert 명령어를 실행할 경우 기본적으로 현재의 경로에서 config.yaml을 찾게 됩니다.
# 그래서 아래와 같은 오류 메시지를 볼 수 있습니다.
root@syslogserver:~# elastalert
Traceback (most recent call last):
  File "/usr/local/bin/elastalert", line 33, in <module>
    sys.exit(load_entry_point('elastalert2==2.15.0', 'console_scripts', 'elastalert')())
  File "/usr/local/lib/python3.10/dist-packages/elastalert/elastalert.py", line 1900, in main
    client = ElastAlerter(args)
  File "/usr/local/lib/python3.10/dist-packages/elastalert/elastalert.py", line 127, in __init__
    self.conf = load_conf(self.args)
  File "/usr/local/lib/python3.10/dist-packages/elastalert/config.py", line 49, in load_conf
    conf = read_yaml(filename)
  File "/usr/local/lib/python3.10/dist-packages/elastalert/yaml.py", line 6, in read_yaml
    with open(path) as f:
FileNotFoundError: [Errno 2] No such file or directory: 'config.yaml'
root@syslogserver:~#
# 단발성으로 실행할 경우 아래의 명령어를 통해서 실행
root@syslogserver:~# python3 -m elastalert.elastalert --verbose --config /opt/elastalert/configy.yaml
# systemctl에 등록하여 실행할 경우
root@syslogserver:~# cd /etc/systemd/system
root@syslogserver:/etc/systemd/system# cat elastalert.service
[Unit]
Description=Severe_logalerts
After=elasticsearch.service

[Service]
Type=simple
WorkingDirectory=/opt/elastalert
ExecStart=/usr/local/bin/elastalert --verbose --config /opt/elastalert/config.yaml

[Install]
WantedBy=multi-user.target
root@syslogserver:/etc/systemd/system# systemctl daemon-reload
root@syslogserver:/etc/systemd/system# systemctl restart elastalert.service

 

아래 사이트 참고하세요.

https://elastalert2.readthedocs.io/en/latest/running_elastalert.html#downloading-and-configuring

 

Getting Started — ElastAlert 2 0.0.1 documentation

ElastAlert 2 can easily be run as a Docker container or directly on your machine as a Python package. If you are not interested in modifying the internals of ElastAlert 2, the Docker container is recommended for ease of use. As a Kubernetes deployment The

elastalert2.readthedocs.io

 

'기술 노트 > ubuntu' 카테고리의 다른 글

snmp-exporter에 MIB 등록하기  (1) 2024.02.07
elastalert2 rules 설정  (0) 2024.01.15
grafana 알람 설정  (0) 2024.01.08
apt로 grafana 설치하기  (1) 2024.01.08
grafana user admin 권한 부여하기  (0) 2023.12.21

elastalert 웹 방식으로 설치 하신 후에는 반드시 아래 명령어를 실행 해 주셔야 합니다.

RAW 데이터의 에러로그를 수집 못했는데, 에러 로그는 아래와 같이 출력됩니다.

No mapping found for [alert_time] in order to sort on

 

그래서 아래와 같은 방식으로 alert_time은 type이 date 로 선언을 해주어야 elasticsearch에서 수집되는 @timestamp를 인식하게 됩니다.

put elastalert_status/_mapping
{
  "properties": {
    "alert_time": {
      "type": "date"
    }
  }
}

'기술 노트 > elastalert' 카테고리의 다른 글

root 로그인 알람 설정  (0) 2023.04.10
OS 로그인 알람  (0) 2023.04.10
kibana에서 elastalert 룰 설정하기  (0) 2023.03.17
kibana에서 elastalert 사용하기  (0) 2023.03.17
elastalert 실행하기  (0) 2023.03.17

 

룰 샘플입니다.

반드시 아래의 항목들을 지켜주시는게 좋습니다.

name, type, index, filter, doc_type

기본 항목들이 없으면 에러가 발생하네요.

cli 방식으로 할때는 name과 doc_type이 없어도 작동이 되었는데....

#name
name: ap_login_success

# 로그는 탐지하는 타입
type: any

# logstash에서 설정한 log의 index 값
index: "logstash-ap*"

# 필터 grok 패턴 지정한 필드의 값에 같은 값이 들어올 경우
filter:
- query_string:
    query: access_result:"successfully"

# document type
doc_type: _doc

# 알람 전송 매체 지정
alert:
- "slack"

# 알람 전송 옵션
slack:
# 슬랙 웹훅 주소
slack_webhook_url: "https://hooks.slack.com/services/---------------------------------------"
# 슬랙 채널에 메시지 전달할 이름
slack_username_override: "ElastAlert-Bot"
# 슬랙 메시지를 보낼 채널
slack_channel_override: "#security_alert"
# 슬랙 메시지에 타이틀 지정
# 지정하지 않을 경우 rule의 절대 경로 명이 찍힘: /opt/elastalert/ruls/ap_login_fail.yaml
slack_title: AP_LOGIN_SUCCESS
# 슬랙 메시지 색
slack_msg_color: "good"

# 슬랙에 전송할 메시지
# 슬랙에 전송할 메시지 중 배열 입력시 맨 아랫줄의 순서에 따라 숫자 입력
# 숫자 위치는 바뀌어도 됨
alert_text: "AP_LOGIN_SUCESS: {0} / 접속자:{1} / 접속자IP: {2}"
# 슬랙에 전송할 메시지 타입
alert_text_type: "alert_text_only"
# 슬랙에 전송할 메시지 중 탐지된 메시지에 대한 배열 입력
alert_text_args: ["ip_or_host", "user", "source_ip"]

 

룰 입력 후 저장을 누르면 아래와 같은 화면을 볼 수 있습니다.

웹페이지 상에서 룰을 생성할 경우, 서버에서도 마찬가지로 자동으로 생성됩니다.

[root@tmplogsvr rules]# pwd
/opt/elastalert/rules
[root@tmplogsvr rules]# ls -al
합계 16
drwxr-xr-x.  2 root root 4096  3월 16 18:08 .
drwxr-xr-x. 13 root root 4096  3월 16 18:09 ..
-rw-r--r--.  1 root root  574  3월 16 18:17 ap_login_fail.yaml
-rw-r--r--.  1 root root 1383  3월 16 18:17 ap_login_success.yaml
[root@tmplogsvr rules]#
[root@tmplogsvr rules]# cat ./ap_login_success.yaml
#name
name: ap_login_success

# 로그는 탐지하는 타입
type: any

# logstash에서 설정한 log의 index 값
index: "logstash-ap*"


# 필터 grok 패턴 지정한 필드의 값에 같은 값이 들어올 경우
filter:
- query_string:
    query: access_result:"successfully"

doc_type: _doc

# 알람 전송 매체 지정
alert:
- "slack"

# 알람 전송 옵션
slack:
# 슬랙 웹훅 주소
slack_webhook_url: "https://hooks.slack.com/services/---------------------------------"
# 슬랙 채널에 메시지 전달할 이름
slack_username_override: "ElastAlert-Bot"
# 슬랙 메시지를 보낼 채널
slack_channel_override: "#security_alert"
# 슬랙 메시지에 타이틀 지정
# 지정하지 않을 경우 rule의 절대 경로 명이 찍힘: /opt/elastalert/ruls/ap_login_fail.yaml
slack_title: AP_LOGIN_SUCCESS
# 슬랙 메시지 색
slack_msg_color: "good"

# 슬랙에 전송할 메시지
# 슬랙에 전송할 메시지 중 배열 입력시 맨 아랫줄의 순서에 따라 숫자 입력
# 숫자 위치는 바뀌어도 됨
alert_text: "AP_LOGIN_SUCESS: {0} / 접속자:{1} / 접속자IP: {2}"
# 슬랙에 전송할 메시지 타입
alert_text_type: "alert_text_only"
# 슬랙에 전송할 메시지 중 탐지된 메시지에 대한 배열 입력
alert_text_args: ["ip_or_host", "user", "source_ip"]
[root@tmplogsvr rules]#

 

'기술 노트 > elastalert' 카테고리의 다른 글

OS 로그인 알람  (0) 2023.04.10
elastalert 웹 관리 방식 사용 시  (1) 2023.03.17
kibana에서 elastalert 사용하기  (0) 2023.03.17
elastalert 실행하기  (0) 2023.03.17
elastalert 설치하기 (간단히)  (0) 2023.03.16

아래의 게시글을 확인하여 kibana에 plugin을 설치하시면 됩니다.

단, 설치하실때에는 elastalert-plugin이 지원하는 kibana 버전을 확인하시고, 지원하는 버전으로 맞춰서 설치해야 합니다.

예) elastalertKibanaPlugin-1.6.1-8.6.2.zip 이라면 kibana 버전 8.6.2을 설치하셔야 합니다.

 

elastalert plugin 설치하기: https://dirt-spoon.tistory.com/57

 

설치는 아주아주 간단합니다.

이제 웹페이지에서 보도록 하겠습니다.

kibana에 접속을 해보시면 아래와 같이 새로운 매뉴가 있을 것입니다.

혹시나 매뉴가 보이지 않는다면, kibana를 재시작 해 주세요.

 

드디어~~ 저도 처음 웹으로 확인하게 되었습니다.

 

'기술 노트 > elastalert' 카테고리의 다른 글

elastalert 웹 관리 방식 사용 시  (1) 2023.03.17
kibana에서 elastalert 룰 설정하기  (0) 2023.03.17
elastalert 실행하기  (0) 2023.03.17
elastalert 설치하기 (간단히)  (0) 2023.03.16
elastalert plugin 설치하기  (0) 2023.03.16

kibana 웹페이지에서 elastalert을 사용하기 위해서는 실행방법이 기존과는 다릅니다.

 

bitsensor 버전의 elastalert은 기본 경로가 /opt/elastalert 입니다.

해당 위치에서 npm의 설정들을 진행하였기에 아래 화면을 따르면 됩니다.

[root@tmplogsvr elastalert]# pwd
/opt/elastalert

 

방법 1. 프로세스가 끊기지 않고 지속적으로 로그를 확인하고 싶을 때

[root@tmplogsvr elastalert]# npm start <- 이렇게 실행할 경우 프로세스가 끊기지 않고 계속적으로 로그가 보일 것입니다.

> @bitsensor/elastalert@3.0.0-beta.0 start /opt/elastalert
> sh ./scripts/start.sh

02:12:53.493Z  INFO elastalert-server: Config:  No config.dev.json file was found in /opt/elastalert/config/config.dev.json.
02:12:53.494Z  INFO elastalert-server: Config:  Proceeding to look for normal config file.
02:12:53.494Z  INFO elastalert-server: Config:  A config file was found in /opt/elastalert/config/config.json. Using that config.
02:12:53.500Z  INFO elastalert-server: Router:  Listening for GET request on /.
02:12:53.500Z  INFO elastalert-server: Router:  Listening for GET request on /status.
02:12:53.500Z  INFO elastalert-server: Router:  Listening for GET request on /status/control/:action.
02:12:53.500Z  INFO elastalert-server: Router:  Listening for GET request on /status/errors.
02:12:53.500Z  INFO elastalert-server: Router:  Listening for GET request on /rules.
02:12:53.501Z  INFO elastalert-server: Router:  Listening for GET request on /rules/:id.
02:12:53.501Z  INFO elastalert-server: Router:  Listening for POST request on /rules/:id.
02:12:53.501Z  INFO elastalert-server: Router:  Listening for DELETE request on /rules/:id.
02:12:53.501Z  INFO elastalert-server: Router:  Listening for GET request on /templates.
02:12:53.501Z  INFO elastalert-server: Router:  Listening for GET request on /templates/:id.
02:12:53.501Z  INFO elastalert-server: Router:  Listening for POST request on /templates/:id.
02:12:53.501Z  INFO elastalert-server: Router:  Listening for DELETE request on /templates/:id.
02:12:53.501Z  INFO elastalert-server: Router:  Listening for POST request on /test.
02:12:53.501Z  INFO elastalert-server: Router:  Listening for GET request on /config.
02:12:53.501Z  INFO elastalert-server: Router:  Listening for POST request on /config.
02:12:53.501Z  INFO elastalert-server: Router:  Listening for POST request on /download.
02:12:53.502Z  INFO elastalert-server: Router:  Listening for GET request on /metadata/:type.
02:12:53.502Z  INFO elastalert-server: Router:  Listening for GET request on /mapping/:index.
02:12:53.502Z  INFO elastalert-server: Router:  Listening for POST request on /search/:index.
02:12:53.504Z  INFO elastalert-server: ProcessController:  Starting ElastAlert
02:12:53.504Z  INFO elastalert-server: ProcessController:  Creating index
02:12:53.697Z  INFO elastalert-server:
    ProcessController:  Elastic Version: 8.6.2
    Reading Elastic 6 index mappings:
    Reading index mapping 'es_mappings/6/silence.json'
    Reading index mapping 'es_mappings/6/elastalert_status.json'
    Reading index mapping 'es_mappings/6/elastalert.json'
    Reading index mapping 'es_mappings/6/past_elastalert.json'
    Reading index mapping 'es_mappings/6/elastalert_error.json'
    Index elastalert_status already exists. Skipping index creation.

02:12:53.697Z  INFO elastalert-server: ProcessController:  Index create exited with code 0
02:12:53.698Z  INFO elastalert-server: ProcessController:  Starting elastalert with arguments [none]
02:12:53.701Z  INFO elastalert-server: ProcessController:  Started Elastalert (PID: 107223)
02:12:53.702Z  INFO elastalert-server: Server:  Server listening on port 3030
02:12:53.702Z  INFO elastalert-server: Server:  Websocket listening on port 3333
02:12:53.703Z  INFO elastalert-server: Server:  Server started

 

방법2: 실행 후 백그라운드로 실행하기 (터미널을 끊어도 프로세스가 살아 있습니다.)

[root@tmplogsvr elastalert]# npm start &
[1] 107293
[root@tmplogsvr elastalert]#
> @bitsensor/elastalert@3.0.0-beta.0 start /opt/elastalert
> sh ./scripts/start.sh

02:17:42.163Z  INFO elastalert-server: Config:  No config.dev.json file was found in /opt/elastalert/config/config.dev.json.
02:17:42.164Z  INFO elastalert-server: Config:  Proceeding to look for normal config file.
02:17:42.164Z  INFO elastalert-server: Config:  A config file was found in /opt/elastalert/config/config.json. Using that config.
02:17:42.170Z  INFO elastalert-server: Router:  Listening for GET request on /.
02:17:42.170Z  INFO elastalert-server: Router:  Listening for GET request on /status.
02:17:42.170Z  INFO elastalert-server: Router:  Listening for GET request on /status/control/:action.
02:17:42.170Z  INFO elastalert-server: Router:  Listening for GET request on /status/errors.
02:17:42.170Z  INFO elastalert-server: Router:  Listening for GET request on /rules.
02:17:42.171Z  INFO elastalert-server: Router:  Listening for GET request on /rules/:id.
02:17:42.171Z  INFO elastalert-server: Router:  Listening for POST request on /rules/:id.
02:17:42.172Z  INFO elastalert-server: Router:  Listening for DELETE request on /rules/:id.
02:17:42.172Z  INFO elastalert-server: Router:  Listening for GET request on /templates.
02:17:42.172Z  INFO elastalert-server: Router:  Listening for GET request on /templates/:id.
02:17:42.172Z  INFO elastalert-server: Router:  Listening for POST request on /templates/:id.
02:17:42.172Z  INFO elastalert-server: Router:  Listening for DELETE request on /templates/:id.
02:17:42.172Z  INFO elastalert-server: Router:  Listening for POST request on /test.
02:17:42.172Z  INFO elastalert-server: Router:  Listening for GET request on /config.
02:17:42.172Z  INFO elastalert-server: Router:  Listening for POST request on /config.
02:17:42.172Z  INFO elastalert-server: Router:  Listening for POST request on /download.
02:17:42.172Z  INFO elastalert-server: Router:  Listening for GET request on /metadata/:type.
02:17:42.172Z  INFO elastalert-server: Router:  Listening for GET request on /mapping/:index.
02:17:42.172Z  INFO elastalert-server: Router:  Listening for POST request on /search/:index.
02:17:42.174Z  INFO elastalert-server: ProcessController:  Starting ElastAlert
02:17:42.174Z  INFO elastalert-server: ProcessController:  Creating index
02:17:42.366Z  INFO elastalert-server:
    ProcessController:  Elastic Version: 8.6.2
    Reading Elastic 6 index mappings:
    Reading index mapping 'es_mappings/6/silence.json'
    Reading index mapping 'es_mappings/6/elastalert_status.json'
    Reading index mapping 'es_mappings/6/elastalert.json'
    Reading index mapping 'es_mappings/6/past_elastalert.json'
    Reading index mapping 'es_mappings/6/elastalert_error.json'
    Index elastalert_status already exists. Skipping index creation.

02:17:42.366Z  INFO elastalert-server: ProcessController:  Index create exited with code 0
02:17:42.367Z  INFO elastalert-server: ProcessController:  Starting elastalert with arguments [none]
02:17:42.370Z  INFO elastalert-server: ProcessController:  Started Elastalert (PID: 107325)
02:17:42.371Z  INFO elastalert-server: Server:  Server listening on port 3030
02:17:42.371Z  INFO elastalert-server: Server:  Websocket listening on port 3333
02:17:42.371Z  INFO elastalert-server: Server:  Server started

[root@tmplogsvr elastalert]#

 

실행 시킨 터미널 창을 닫은 후 아래와 같이 프로세스를 검색하시면 작동 여부를 알 수 있습니다.

[root@tmplogsvr elasticsearch]# ps -ef | grep elastalert
root      107325  107305  0 11:17 ?        00:00:00 python -m elastalert.elastalert
root      107378   79433  0 11:19 pts/2    00:00:00 grep --color=auto elastalert
[root@tmplogsvr elasticsearch]#

'기술 노트 > elastalert' 카테고리의 다른 글

kibana에서 elastalert 룰 설정하기  (0) 2023.03.17
kibana에서 elastalert 사용하기  (0) 2023.03.17
elastalert 설치하기 (간단히)  (0) 2023.03.16
elastalert plugin 설치하기  (0) 2023.03.16
elastalert rule example 2  (0) 2023.03.06

kibana에서 elastalert 구성 시 필수사항

python 3.6 (3.7, 3.8은 해보지 않아서 모르겠지만, 3.9 이상은 절대 설치 불가)

 

centos 9에서는 해당 방법 사용이 불가능 합니다.

그래서 centos 8버전으로 downgrade를 하였고, python 3.6 버전을 확인하고 설치 진행했습니다.

 

아래 URL은 참고 URL 주소입니다.

   elastalert install_1: https://github.com/Yelp/elastalert

   elastalert install_2: https://github.com/bitsensor/elastalert

   elastalert-plugin: https://github.com/karql/elastalert-kibana-plugin/releases

 

부연 설명을 하자면, kibana에서 elastalert 사용은 docker를 기준으로 만들어진 것 같습니다. (elastalert install_2 URL 참조)

서버에 일반 설치방식으로 설치하려니, 정말 많은 시도로 간신히 설치가 되었습니다.

그래서 아래 사용했던 설치한 내역으로도 실행이 제대로 안될 수가 있습니다.

댓글로라도 로그를 남겨주시면 에러를 같이 찾아보도록 하겠습니다.

 

elastalert 설치 명령어 정리

# pip3 install --upgrade pip

# pip install setuptools-rust

# yum install gcc libffi-devel python36-devel openssl-devel

# pip install elastalert

# cd /opt

# git clone https://github.com/Yelp/elastalert.git

# cd elastalert

# pip install --ignore-installed PyYAML -r requirements.txt

# cd ..

# rm -rf ./elastalert/

# git clone https://github.com/bitsensor/elastalert.git && cd elastalert

# yum install npm

# npm install bunyan

# npm install babel-register --save-dev

# npm install babel-preset-es2015 express body-parser joi object-resolve-path mkdirp ws lodash elasticsearch tar fs-extra request-promise-native request randomstring cors util babel-cli raven eslint husky istanbul mocha urllib3 register until

# python -m pip install --upgrade 'elasticsearch>=7.16,<8'

# echo \

'rules_folder: rules # 폴더명

 

run_every: # elasticsearch를 쿼리하는 빈도

  minutes: 1

 

buffer_time: # 쿼리가 실행되는 시간부터 뒤로 늘어나는 쿼리 창의 크기

  minutes: 15

   

es_host: 192.168.0.17 # elasticsearch host

 

es_port: 9200 # elasticsearch 사용 port

 

writeback_index: elastalert_status # elastalert2가 데이터를 저장할 index

 

alert_time_limit: # 실패한 경고에 대한 재시도 기간

  days: 2' > config.yaml

'기술 노트 > elastalert' 카테고리의 다른 글

kibana에서 elastalert 사용하기  (0) 2023.03.17
elastalert 실행하기  (0) 2023.03.17
elastalert plugin 설치하기  (0) 2023.03.16
elastalert rule example 2  (0) 2023.03.06
elastalert rules example 1  (0) 2023.03.06

아래 룰은 AP의 콘솔 접속 시 발송하는 메시지 룰입니다.

name: ap_login_fail

type: any

index: "logstash-ap*"

filter:
- query_string:
    query: reason:"logon failed for invalid username"

doc_type: _doc

alert:
- "slack"

slack:
slack_webhook_url: "https://hooks.slack.com/services/------------------------"
slack_username_override: "ElastAlert-Bot"
slack_channel_override: "#security_alert"
slack_title: AP_LOGIN_FAIL
slack_msg_color: "warning"

alert_text: "AP_LOGIN_FAIL: {0} / 접속자IP: {1}"
alert_text_type: "alert_text_only"
alert_text_args: ["ip_or_host", "source_ip"]

'기술 노트 > elastalert' 카테고리의 다른 글

elastalert 설치하기 (간단히)  (0) 2023.03.16
elastalert plugin 설치하기  (0) 2023.03.16
elastalert rules example 1  (0) 2023.03.06
elastalert config.yaml  (0) 2023.03.06
elastalert 실행하기 1  (0) 2023.03.06

아래 룰은 AP의 콘솔 접속 시 발송하는 메시지 룰입니다.

#name
name: ap_login_success

# 로그는 탐지하는 타입
type: any

# logstash에서 설정한 log의 index 값
index: "logstash-ap*"


# 필터 grok 패턴 지정한 필드의 값에 같은 값이 들어올 경우
filter:
- query_string:
    query: access_result:"successfully"

# 메시지 타입
doc_type: _doc

# 알람 전송 매체 지정
alert:
- "slack"

# 알람 전송 옵션
slack:
# 슬랙 웹훅 주소
slack_webhook_url: "https://hooks.slack.com/services/--------------------------------------"
# 슬랙 채널에 메시지 전달할 이름
slack_username_override: "ElastAlert-Bot"
# 슬랙 메시지를 보낼 채널
slack_channel_override: "#security_alert"
# 슬랙 메시지에 타이틀 지정
# 지정하지 않을 경우 rule의 절대 경로 명이 찍힘: /opt/elastalert/ruls/ap_login_fail.yaml
slack_title: AP_LOGIN_SUCCESS
# 슬랙 메시지 색
slack_msg_color: "good"

# 슬랙에 전송할 메시지
# 슬랙에 전송할 메시지 중 배열 입력시 맨 아랫줄의 순서에 따라 숫자 입력
# 숫자 위치는 바뀌어도 됨
alert_text: "AP_LOGIN_SUCESS: {0} / 접속자:{1} / 접속자IP: {2}"
# 슬랙에 전송할 메시지 타입
alert_text_type: "alert_text_only"
# 슬랙에 전송할 메시지 중 탐지된 메시지에 대한 배열 입력
alert_text_args: ["ip_or_host", "user", "source_ip"]

 

'기술 노트 > elastalert' 카테고리의 다른 글

elastalert plugin 설치하기  (0) 2023.03.16
elastalert rule example 2  (0) 2023.03.06
elastalert config.yaml  (0) 2023.03.06
elastalert 실행하기 1  (0) 2023.03.06
elastalert 설치 (상세히)  (4) 2023.02.21
# 폴더 명
# 폴더 경로를 설정할 경우, elastalert을 실행할 때 rule 옵션을 별도로 주지 않아도 됨
# 예: elastalert --config /opt/elastalert/config.yaml
rules_folder: /opt/elastalert/rules

# elasticsearch를 쿼리하는 빈도
run_every:
  minutes: 1

# 쿼리가 실행되는 시간부터 뒤로 늘어나는 쿼리 창의 크기
buffer_time:
  minutes: 15

# elasticsearch host
es_host: 192.168.0.17 

# elasticsearch 사용 port
es_port: 9200 

# elastalert2가 데이터를 저장할 index
writeback_index: elastalert_status 

# 실패한 경고에 대한 재시도 기간
alert_time_limit: 
  days: 2

'기술 노트 > elastalert' 카테고리의 다른 글

elastalert plugin 설치하기  (0) 2023.03.16
elastalert rule example 2  (0) 2023.03.06
elastalert rules example 1  (0) 2023.03.06
elastalert 실행하기 1  (0) 2023.03.06
elastalert 설치 (상세히)  (4) 2023.02.21

+ Recent posts