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 facilityLocal0을 선택합니다.
  6. Syslog 수준을 Alert로 설정합니다.

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

UDM 매핑 테이블

로그 필드 UDM 매핑 논리
column1 security_result.rule_id column1에서 직접 매핑됩니다.
column10 additional.fields[].key: 'tos'
additional.fields[].value.string_value: column10
column10에서 직접 매핑되며 키가 'tos'인 additional.fields 아래에 중첩됩니다.
column12 additional.fields[].key: 'ttl'
additional.fields[].value.string_value: column12의 값
column12에서 직접 매핑되며 키가 'ttl'인 additional.fields 아래에 중첩됩니다.
column13 additional.fields[].key: 'ID'
additional.fields[].value.string_value: column13의 값
column13에서 직접 매핑되며 키가 'Id'인 additional.fields 아래에 중첩됩니다.
column14 additional.fields[].key: 'offset'
additional.fields[].value.string_value: column14
column14에서 직접 매핑되며 키가 'offset'인 additional.fields 아래에 중첩됩니다.
column15 additional.fields[].key: 'flags'
additional.fields[].value.string_value: column15
column15에서 직접 매핑되며 키가 'flags'인 additional.fields 아래에 중첩됩니다.
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에서 직접 매핑되고 정수로 변환됩니다. 그렇지 않으면 grok을 사용하여 'datalength' 값이 추출되고 키 'data_length'와 함께 additional.fields에 배치됩니다.
column22 target.port column17이 TCP 또는 UDP인 경우 column22에서 직접 매핑되고 정수로 변환됩니다.
column24 additional.fields[].key: 'tcp_flags'
additional.fields[].value.string_value: column24
column17이 TCP인 경우 column24에서 직접 매핑되며, 키가 'tcp_flags'인 additional.fields 아래에 중첩됩니다.
column29 additional.fields[].key: 'tcp_options'
additional.fields[].value.string_value: column29
column17이 TCP인 경우 column29에서 직접 매핑되며, 키가 'tcp_options'인 additional.fields 아래에 중첩됩니다.
column4 additional.fields[].key: 'tracker'
additional.fields[].value.string_value: column4의 값
column4에서 직접 매핑되며, 키가 'tracker'인 additional.fields 아래에 중첩됩니다.
column5 additional.fields[].key: 'interface'
additional.fields[].value.string_value: column5
column5에서 직접 매핑되며 키가 'interface'인 additional.fields 아래에 중첩됩니다.
column6 security_result.rule_type column6에서 직접 매핑됩니다.
column7 security_result.action column7에서 매핑됨 'block'인 경우 대문자 'BLOCK'으로 변환됩니다. '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에서 직접 매핑됩니다.

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.