OPNsense 방화벽 로그 수집

다음에서 지원:

이 파서는 OPNsense 방화벽 로그 (syslog 및 CSV 형식)에서 필드를 추출하여 UDM에 매핑합니다. 'filterlog' 애플리케이션 로그에 grok 및 CSV 파싱을 사용하여 다양한 로그 형식과 네트워크 프로토콜 (TCP, UDP, ICMP 등)을 처리하여 principal, target, network, security_result와 같은 UDM 필드를 채웁니다. 또한 공급업체 및 제품 이름과 같은 메타데이터를 추가하고, 주 구성원 및 대상 정보의 존재 여부에 따라 이벤트 유형을 결정합니다.

시작하기 전에

  • Google Security Operations 인스턴스가 있는지 확인합니다.
  • OPNsense 웹 인터페이스에 대한 권한이 있는지 확인합니다.

Google SecOps 처리 인증 파일 가져오기

  1. Google SecOps 콘솔에 로그인합니다.
  2. SIEM 설정 > 수집 에이전트로 이동합니다.
  3. 처리 인증 파일을 다운로드합니다.

Google SecOps 고객 ID 가져오기

  1. Google SecOps 콘솔에 로그인합니다.
  2. SIEM 설정 > 프로필로 이동합니다.
  3. 조직 세부정보 섹션에서 고객 ID를 복사하여 저장합니다.

BindPlane 에이전트 설치

  1. Windows 설치의 경우 다음 스크립트를 실행합니다.
    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
  2. Linux 설치의 경우 다음 스크립트를 실행합니다.
    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
  3. 추가 설치 옵션은 이 설치 가이드에서 확인할 수 있습니다.

Syslog를 수집하고 Google SecOps로 전송하도록 BindPlane 에이전트 구성

  1. BindPlane이 설치된 머신에 액세스합니다.
  2. 다음과 같이 config.yaml 파일을 수정합니다.

    receivers:
      tcplog:
        # Replace the below port <54525> and IP (0.0.0.0) with your specific values
        listen_address: "0.0.0.0:54525" 
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the creds location below according the placement of the credentials file you downloaded
            creds: '{ json file for creds }'
            # Replace <customer_id> below with your actual ID that you copied
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # You can apply ingestion labels below as preferred
            ingestion_labels:
            log_type: SYSLOG
            namespace: testNamespace
            raw_log_field: body
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - tcplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. 다음 명령어를 사용하여 BindPlane 에이전트를 다시 시작하여 변경사항을 적용합니다. sudo systemctl bindplane restart

OPNsense에 Syslog 서버 구성 추가

  1. OPNsense 웹 인터페이스에 로그인합니다.
  2. 시스템 > 설정 > 로깅으로 이동합니다.
  3. 원격 로깅 섹션에서 체크박스를 선택하여 원격 syslog 서버로 로그 전송을 사용 설정합니다.
  4. 원격 Syslog 서버 필드에 포트를 포함하여 syslog 서버의 IP 주소를 입력합니다 (예: 10.10.10.10:54525).
  5. syslog 시설Local0을 선택합니다.
  6. Syslog 수준을 Alert로 설정합니다.

  7. 저장을 클릭하여 변경사항을 적용합니다.

UDM 매핑 표

로그 필드 UDM 매핑 논리
column1 security_result.rule_id column1에서 직접 매핑됩니다.
column10 additional.fields[].key: 'tos'
additional.fields[].value.string_value: column10의 값
column10에서 직접 매핑되며 additional.fields 아래에 키 'tos'로 중첩됩니다.
column12 additional.fields[].key: 'ttl'
additional.fields[].value.string_value: column12의 값
column12에서 직접 매핑되며 additional.fields 아래에 'ttl' 키로 중첩됩니다.
column13 additional.fields[].key: 'Id'
additional.fields[].value.string_value: column13의 값
column13에서 직접 매핑되며 additional.fields 아래에 키 'Id'로 중첩됩니다.
column14 additional.fields[].key: 'offset'
additional.fields[].value.string_value: column14의 값
column14에서 직접 매핑되며 additional.fields 아래에 키 'offset'으로 중첩됩니다.
column15 additional.fields[].key: 'flags'
additional.fields[].value.string_value: column15의 값
column15에서 직접 매핑되며 additional.fields 아래에 키 'flags'로 중첩됩니다.
column17 network.ip_protocol 대문자로 변환한 후 column17에서 직접 매핑됩니다.
column18 network.received_bytes 부호 없는 정수로 변환한 후 column18에서 직접 매핑됩니다.
column19 principal.ip column19에서 직접 매핑됩니다.
column20 target.ip column20에서 직접 매핑됩니다.
column21 principal.port (column17가 TCP 또는 UDP인 경우)
additional.fields[].key: 'data_length'
additional.fields[].value.string_value: 추출된 값 (column17가 ICMP, GRE, ESP 또는 IGMP인 경우)
column17가 TCP/UDP인 경우 column21에서 직접 매핑되고 정수로 변환됩니다. 그렇지 않으면 'datalength' 값이 grok를 사용하여 추출되고 additional.fields에 'data_length' 키로 배치됩니다.
column22 target.port column17가 TCP 또는 UDP인 경우 column22에서 직접 매핑되고 정수로 변환됩니다.
column24 additional.fields[].key: 'tcp_flags'
additional.fields[].value.string_value: column24의 값
column17가 TCP인 경우 column24에서 직접 매핑되고 additional.fields 아래에 키 'tcp_flags'로 중첩됩니다.
column29 additional.fields[].key: 'tcp_options'
additional.fields[].value.string_value: column29의 값
column17이 TCP인 경우 column29에서 직접 매핑되고 additional.fields 아래에 키 'tcp_options'로 중첩됩니다.
column4 additional.fields[].key: 'tracker'
additional.fields[].value.string_value: column4의 값
column4에서 직접 매핑되며 additional.fields 아래에 키 'tracker'로 중첩됩니다.
column5 additional.fields[].key: 'interface'
additional.fields[].value.string_value: column5의 값
column5에서 직접 매핑되며 additional.fields 아래에 키 'interface'로 중첩됩니다.
column6 security_result.rule_type column6에서 직접 매핑됩니다.
column7 security_result.action column7에서 매핑됩니다. '차단'인 경우 대문자 '차단'으로 변환됩니다. 'pass'인 경우 'ALLOW'로 설정합니다.
column8 network.direction column8에서 매핑됩니다. 'in'인 경우 'INBOUND'로 설정합니다. 'out'인 경우 'OUTBOUND'로 설정합니다.
domain principal.administrative_domain grok 추출 domain에서 직접 매핑됩니다. 주 구성원 및 대상 IP 주소가 모두 있는 경우 'NETWORK_CONNECTION'으로 설정하고, 그렇지 않은 경우에는 'GENERIC_EVENT'로 설정합니다. 'OPNSENSE'로 하드코딩됩니다. 'OPNSENSE'로 하드코딩됩니다.
message 다양한 필드 grok 및 csv 필터를 사용하여 파싱하여 다양한 필드를 추출합니다. 특정 매핑은 다른 행을 참고하세요.
ts metadata.event_timestamp.seconds, timestamp.seconds grok를 사용하여 메시지 필드에서 파싱한 후 타임스탬프로 변환합니다. 초 값은 metadata.event_timestamp.secondstimestamp.seconds를 모두 채우는 데 사용됩니다.
application principal.application grok 추출 application에서 직접 매핑됩니다.

변경사항

2023-11-22

  • 파서를 새로 만들었습니다.