OPNsense 방화벽 로그 수집
다음에서 지원:
Google SecOps
SIEM
이 파서는 OPNsense 방화벽 로그 (syslog 및 CSV 형식)에서 필드를 추출하여 UDM에 매핑합니다. 'filterlog' 애플리케이션 로그에 grok 및 CSV 파싱을 사용하여 다양한 로그 형식과 네트워크 프로토콜 (TCP, UDP, ICMP 등)을 처리하여 principal, target, network, security_result와 같은 UDM 필드를 채웁니다. 또한 공급업체 및 제품 이름과 같은 메타데이터를 추가하고, 주 구성원 및 대상 정보의 존재 여부에 따라 이벤트 유형을 결정합니다.
시작하기 전에
- Google Security Operations 인스턴스가 있는지 확인합니다.
- OPNsense 웹 인터페이스에 대한 권한이 있는지 확인합니다.
Google SecOps 처리 인증 파일 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 수집 에이전트로 이동합니다.
- 처리 인증 파일을 다운로드합니다.
Google SecOps 고객 ID 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 프로필로 이동합니다.
- 조직 세부정보 섹션에서 고객 ID를 복사하여 저장합니다.
BindPlane 에이전트 설치
- Windows 설치의 경우 다음 스크립트를 실행합니다.
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
- Linux 설치의 경우 다음 스크립트를 실행합니다.
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
- 추가 설치 옵션은 이 설치 가이드에서 확인할 수 있습니다.
Syslog를 수집하고 Google SecOps로 전송하도록 BindPlane 에이전트 구성
- BindPlane이 설치된 머신에 액세스합니다.
다음과 같이
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
다음 명령어를 사용하여 BindPlane 에이전트를 다시 시작하여 변경사항을 적용합니다.
sudo systemctl bindplane restart
OPNsense에 Syslog 서버 구성 추가
- OPNsense 웹 인터페이스에 로그인합니다.
- 시스템 > 설정 > 로깅으로 이동합니다.
- 원격 로깅 섹션에서 체크박스를 선택하여 원격 syslog 서버로 로그 전송을 사용 설정합니다.
- 원격 Syslog 서버 필드에 포트를 포함하여 syslog 서버의 IP 주소를 입력합니다 (예: 10.10.10.10:54525).
- syslog 시설로 Local0을 선택합니다.
Syslog 수준을 Alert로 설정합니다.
저장을 클릭하여 변경사항을 적용합니다.
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.seconds 및 timestamp.seconds 를 모두 채우는 데 사용됩니다. |
application |
principal.application |
grok 추출 application 에서 직접 매핑됩니다. |
변경사항
2023-11-22
- 파서를 새로 만들었습니다.