AZURE/보안

[Microsoft Sentinel]비용 최적화: Fortinet 로그 시간 기반 필터링

Mara7 2024. 11. 19.
LIST

Azure Sentinel에서 비용 절감을 위해 Fortinet 로그를 특정 시간대에만 전송하는 필터링을 구현했습니다. 이를 통해 불필요한 로그 데이터를 제한하고 운영 비용을 줄이는 것이 목표였습니다. 다른 솔루션에서 발생하는 로그는 시간에 상관없이 항상 전송되도록 설정했습니다.


문제점

Fortinet 로그가 모든 시간대에 Azure Sentinel로 전송되어 과도한 비용이 발생했습니다. 비용을 줄이기 위해 필요한 시간대에만 Fortinet 로그를 전송할 수 있는 해결책이 필요했습니다.


해결 방법

1. 설정 파일 수정:

  • /etc/rsyslog.d/50-default.conf 파일을 00-default.conf로 우선순위를 변경했습니다. 이는 필터링 규칙이 다른 설정보다 먼저 적용되도록 하기 위함입니다.
  • RainerScript를 사용하여 Fortinet 로그를 시간대별로 필터링했습니다.

2. 시간 기반 필터링 논리:

  • 타임스탬프에서 시간과 분을 추출하고, 조건에 따라 로그를 전송하거나 차단하도록 설정했습니다:
    • 11시 0분 ~ 10분: Fortinet 로그를 syslog.log에 저장하고 Azure로 전달.
    • 11시 10분 ~ 20분: Fortinet 로그 전송 중지. 즉, syslog.log에 저장되지 않고 Azure로도 전달되지 않음.
    • 11시 20분 ~ 30분: 다시 Fortinet 로그를 syslog.log에 저장하고 Azure로 전달.
  • 사용한 코드:
    if $msg contains 'Fortinet|Fortigate|' then { set $.hour = re_extract($timestamp, "([0-9]{2}):", 0, 1, ""); set $.minute = re_extract($timestamp, ":([0-9]{2}):", 0, 1, ""); # 11시 0분부터 10분까지 Fortinet 로그를 syslog로 전송 if ($.hour == "11" and $.minute >= "00" and $.minute < "10") then { *.* /var/log/syslog } # 11시 10분부터 20분까지 Fortinet 로그 전송 중지 else if ($.hour == "11" and $.minute >= "10" and $.minute < "20") then { stop } # 11시 20분부터 30분까지 Fortinet 로그를 syslog로 전송 else if ($.hour == "11" and $.minute >= "20" and $.minute < "30") then { *.* /var/log/syslog } # 나머지 시간대에는 Fortinet 로그 전송 중지 else { stop } } else { *.* /var/log/syslog # Fortinet 로그가 아닌 경우 시간 필터링 없이 모두 syslog로 전송 }

테스트 및 확인

샘플 로그 테스트

먼저, logger 명령어를 사용해 Fortinet과 다른 벤더의 샘플 로그를 생성하고 필터링이 예상대로 작동하는지 확인했습니다.

  • 필터링 조건에 따라 전송되지 않아야 하는 샘플 로그:
    • 이 샘플 로그는 필터링 조건에 의해 전송되지 않아야 했습니다.
      logger -p local4.info "CEF:0|Fortinet|Fortigate|1.0|100|Event Before Time|5|msg=This log should NOT be sent
  • 필터링 조건에 따라 전송되어야 하는 샘플 로그:
    • 이 샘플 로그는 필터링 조건에 의해 전송되어야 했습니다.
       
      logger -p local4.info "CEF:0|Fortinet|Fortigate|1.0|100|Event Within Time|5|msg=This log SHOULD be sent"
  • 항상 전송되어야 하는 샘플 로그 (다른 벤더 로그):
    • 이 로그는 Fortinet 로그가 아니므로 시간 조건에 관계없이 항상 전송됩니다.
    • logger -p local4.info "CEF:0|OtherVendor|OtherProduct|1.0|100|General Event|5|msg=This log should ALWAYS be sent"

샘플 테스트 결과, Fortinet 로그와 다른 벤더 로그가 각각 올바르게 필터링되거나 전송되었음을 확인했습니다.

Fortinet 실 로그 테스트

그 후, Fortinet 장비에서 직접 실 로그를 전송하여 필터링 설정이 실제 환경에서도 제대로 동작하는지 검증했습니다.

  • Fortinet 실 로그 예제:
     
    Nov 19 11:09:59 CLCFTD CEF:0|Fortinet|Fortigate|v6.0.18|... (생략) ... Nov 19 11:20:33 CLCFTD CEF:0|Fortinet|Fortigate|v6.0.18|... (생략) ...
  • 필터링 결과:
    • 11:00~11:10: Fortinet 로그가 정상적으로 syslog.log에 저장되고 Azure로 전달됨.
    • 11:10~11:20: Fortinet 로그가 필터링되어 저장되지 않고 Azure로도 전달되지 않음.
    • 11:20~11:30: Fortinet 로그가 다시 syslog.log에 저장되고 Azure로 전달됨.

테스트 결과

Azure Sentinel의 Log Analytics에서 KQL 쿼리를 사용해 실 로그가 올바르게 수집되었는지 확인했습니다. 아래 이미지는 Fortinet 실 로그가 예상대로 처리된 결과를 보여줍니다.

 

반응형
LIST

댓글