해당 설정은 CentOS 8 기준으로 작성하였습니다.

각 OS 에서 보안 로그 파일을 대상으로 알람을 설정하면 OS 로그인 모니터링이 가능합니다.

 

알람 설정 환경

  • ELK 운영 환경
  • 대상 로그 파일: /var/log/secure

 

logstash.conf 파일 설정

input {
  file {
    path => "/var/log/secure"
    start_position => "beginning"
    tags => ["os_tmpsyslogsvr"]
  }
}

filter {
  if "os_tmpsyslogsvr" in [tags] {
    grok {
      patterns_dir => ["/etc/logstash/pattern.d"]
        match => {
          "message" => [
            "%{SYSLOGBASE}\s%{GREEDYDATA:auth_module}\(%{GREEDYDATA:auth_module_used}\)\:\s%{GREEDYDATA:cause} for user %{USER:user}",
            "%{SYSLOGBASE}\s%{GREEDYDATA:cause} for %{USER:user} from %{IP:ip} port %{NUMBER:port} %{GREEDYDATA:protocol}",
            "%{SYSLOGBASE}\s%{GREEDYDATA:auth_module}\(%{GREEDYDATA:auth_module_used}\)\:\s%{GREEDYDATA:cause} by %{USER:user}\(uid=%{NUMBER:uid}\)",
            "%{SYSLOGBASE}\s%{GREEDYDATA:auth_module}\(%{GREEDYDATA:auth_module_used}\)\:\s%{GREEDYDATA:cause}\:\s%{GREEDYDATA:result}",
            "%{SYSLOGBASE}\s%{USER:user}\s\:\s%{GREEDYDATA:sub_message}",
            "%{SYSLOGBASE}\s%{GREEDYDATA:sub_message}"
          ]
        }
    }
    kv {
      source => "sub_message"
      field_split => " ; "
      value_split => "="
    }
    mutate { remove_field => [ "message", "sub_message" ] }

  }
}

output {
  if "os_tmpsyslogsvr" in [tags] {
    elasticsearch {
      hosts => "http://192.168.0.17:9200"
      index => "logstash-tmpsyslogsvr-index-%{+YYYY.MM.dd}"
    }
  }
}

 

elastalert 룰

name: server_login_success

type: any

index: logstash-tmpsyslogsvr*

filter:
- query:
    query_string:
      query: protocol:"ssh2" AND cause:"Accepted password"

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: SERVER_LOGIN_SUCCESS
# 슬랙 메시지 색
slack_msg_color: "good"


alert_text: "TMPLOGSVR_SSH_LOGIN: 접속시간: {0} / 접속계정: {1} / 접속자IP: {2}"
alert_text_type: "alert_text_only"

 

알람 확인

logstash의 conf 설정 중 kv의 field_split 사용할 경우 공백 부분을 조심하셔야 합니다.

위 COMMAND 필드는 공백이 없지만, 아래의 COMMAND 필드는 공백이 있어서, 2~3시간 고생했네요.

elasticsearch에 로그는 확인이 되는데, elastealert에서는 왜 안되는지....

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

root 로그인 알람 설정  (0) 2023.04.10
elastalert 웹 관리 방식 사용 시  (0) 2023.03.17
kibana에서 elastalert 룰 설정하기  (0) 2023.03.17
kibana에서 elastalert 사용하기  (0) 2023.03.17
elastalert 실행하기  (0) 2023.03.17

+ Recent posts