pfSense 로그 수집

다음에서 지원:

이 문서에서는 Bindplane을 사용하여 pfSense 로그를 Google Security Operations로 수집하는 방법을 설명합니다.

pfSense는 FreeBSD를 기반으로 하는 오픈소스 방화벽 및 라우터 소프트웨어 배포입니다. 웹 기반 인터페이스를 통해 관리되는 상태 저장 패킷 필터링, VPN, 트래픽 셰이핑, NAT, DHCP 서버, DNS 전달자, 침입 감지 기능을 제공합니다. 파서는 pfSense syslog 형식 로그에서 필드를 추출합니다. grok을 사용하여 로그 메시지를 파싱한 다음 이러한 값을 통합 데이터 모델 (UDM)에 매핑합니다. 또한 이벤트 소스 및 유형의 기본 메타데이터 값을 설정합니다.

시작하기 전에

다음 기본 요건이 충족되었는지 확인합니다.

  • Google SecOps 인스턴스
  • Windows Server 2016 이상 또는 systemd가 설치된 Linux 호스트
  • 프록시 뒤에서 실행하는 경우 Bindplane 에이전트 요구사항에 따라 방화벽 포트가 열려 있는지 확인합니다.
  • pfSense 웹 인터페이스에 대한 액세스 권한

Google SecOps 수집 인증 파일 가져오기

  1. Google SecOps 콘솔에 로그인합니다.
  2. SIEM 설정 > 수집 에이전트로 이동합니다.
  3. 수집 인증 파일을 다운로드합니다. Bindplane이 설치될 시스템에 파일을 안전하게 저장합니다.

Google SecOps 고객 ID 가져오기

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

Bindplane 에이전트 설치

다음 안내에 따라 Windows 또는 Linux 운영체제에 Bindplane 에이전트를 설치합니다.

Windows 설치

  1. 명령 프롬프트 또는 PowerShell을 관리자로 엽니다.
  2. 다음 명령어를 실행합니다.

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. 설치가 완료될 때까지 기다립니다.

  4. 다음을 실행하여 설치를 확인합니다.

    sc query observiq-otel-collector
    

서비스가 실행 중으로 표시되어야 합니다.

Linux 설치

  1. 루트 또는 sudo 권한으로 터미널을 엽니다.
  2. 다음 명령어를 실행합니다.

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. 설치가 완료될 때까지 기다립니다.

  4. 다음을 실행하여 설치를 확인합니다.

    sudo systemctl status observiq-otel-collector
    

서비스가 active (running)으로 표시되어야 합니다.

추가 설치 리소스

추가 설치 옵션 및 문제 해결은 Bindplane 에이전트 설치 가이드를 참고하세요.

syslog를 수집하여 Google SecOps로 전송하도록 Bindplane 에이전트 구성

구성 파일 찾기

  • Linux:

    sudo nano /etc/bindplane-agent/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

구성 파일 설정

  • config.yaml의 전체 내용을 다음 구성으로 바꿉니다.

    receivers:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            creds_file_path: '/path/to/ingestion-authentication-file.json'
            customer_id: 'YOUR_CUSTOMER_ID'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: 'PFSENSE'
            raw_log_field: body
            ingestion_labels:
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    

구성 매개변수

  • 다음 자리표시자를 바꿉니다.

    • 수신기 구성:

      • udplog: UDP syslog의 경우 udplog, TCP syslog의 경우 tcplog 사용
      • 0.0.0.0: 리슨할 IP 주소 (모든 인터페이스에서 리슨하려면 0.0.0.0)
      • 514: 리슨할 포트 번호 (표준 syslog 포트)
    • 내보내기 도구 구성:

      • creds_file_path: 수집 인증 파일의 전체 경로입니다.
        • Linux: /etc/bindplane-agent/ingestion-auth.json
        • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • YOUR_CUSTOMER_ID: 고객 ID 가져오기 섹션의 고객 ID
      • endpoint: 리전 엔드포인트 URL:
        • 미국: malachiteingestion-pa.googleapis.com
        • 유럽: europe-malachiteingestion-pa.googleapis.com
        • 아시아: asia-southeast1-malachiteingestion-pa.googleapis.com
        • 전체 목록은 리전 엔드포인트를 참고하세요.
      • log_type: Chronicle에 표시되는 로그 유형 (PFSENSE)

구성 파일 저장

  • 수정 후 파일을 저장합니다.
    • Linux: Ctrl+O, Enter, Ctrl+X 순서로 누릅니다.
    • Windows: 파일 > 저장을 클릭합니다.

Bindplane 에이전트를 다시 시작하여 변경사항 적용

  • Linux에서 Bindplane 에이전트를 다시 시작하려면 다음 명령어를 실행합니다.

    sudo systemctl restart observiq-otel-collector
    
    1. 서비스가 실행 중인지 확인합니다.

        sudo systemctl status observiq-otel-collector
      
    2. 로그에서 오류를 확인합니다.

        sudo journalctl -u observiq-otel-collector -f
      
  • Windows에서 Bindplane 에이전트를 다시 시작하려면 다음 옵션 중 하나를 선택합니다.

    • 명령 프롬프트 또는 PowerShell(관리자 권한)

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • 서비스 콘솔:

      1. Win+R를 누르고 services.msc를 입력한 다음 Enter 키를 누릅니다.
      2. observIQ OpenTelemetry Collector를 찾습니다.
      3. 마우스 오른쪽 버튼을 클릭하고 다시 시작을 선택합니다.

      4. 서비스가 실행 중인지 확인합니다.

        sc query observiq-otel-collector
        
      5. 로그에서 오류를 확인합니다.

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

pfSense에서 Syslog 전달 구성

pfSense는 FreeBSD에서 실행되며 원격 syslog 전달을 비롯한 모든 구성 작업을 위한 웹 기반 인터페이스를 제공합니다.

  1. pfSense 웹 인터페이스에 로그인합니다.
  2. 상태 > 시스템 로그 > 설정으로 이동합니다.
  3. 원격 로깅 옵션 섹션으로 이동합니다.
  4. 원격 로깅 사용 설정을 선택합니다.
  5. 다음 구성 세부정보를 제공합니다.
    • 소스 주소: 모두 (또는 특정 인터페이스)를 선택합니다.
    • IP Protocol(IP 프로토콜): IPv4를 선택합니다.
    • 원격 로그 서버: 사용 가능한 첫 번째 필드에 BINDPLANE_IP:514를 입력합니다. BINDPLANE_IP를 Bindplane 에이전트 호스트의 IP 주소로 바꿉니다.
  6. 원격 Syslog 콘텐츠 섹션에서 전달할 로그 카테고리를 선택합니다.
    • 시스템 이벤트
    • 방화벽 이벤트
    • DNS 이벤트 (리졸버/unbound, 포워더/dnsmasq)
    • DHCP 이벤트 (DHCP 서비스)
    • PPP 이벤트
    • 인증 이벤트 (포털 인증, RADIUS)
    • VPN 이벤트 (IPsec, OpenVPN, L2TP)
    • 게이트웨이 이벤트 (게이트웨이 모니터)
    • 라우팅 이벤트 (라우팅 데몬)
    • NTP 이벤트
    • 패키지 (설치된 패키지)
  7. 저장을 클릭합니다.
  8. Bindplane 에이전트 로그를 확인하여 syslog 메시지가 전송되고 있는지 확인합니다.

UDM 매핑 테이블

로그 필드 UDM 매핑 논리
애플리케이션 principal.application 이 값은 grok 패턴을 사용하여 로그 메시지에서 추출됩니다. syslog 메시지의 경우 애플리케이션 이름은 일반적으로 호스트 이름과 타임스탬프 뒤에 있습니다.
명령어 principal.process.command_line 로그가 명령어 실행을 나타낼 때 설명 필드에서 추출됩니다.
설명 metadata.description 설명 필드는 syslog-ng 애플리케이션 로그를 제외하고 UDM 메타데이터 설명에 매핑됩니다. syslog-ng 애플리케이션 로그의 경우 metadata.description에 매핑됩니다. DHCP 이벤트의 경우 dhcp_type이 설명 앞에 추가됩니다.
dhcp_type metadata.product_event_type DHCP 메시지 유형입니다 (예: DHCPDISCOVER, DHCPOFFER)가 추출되고 매핑됩니다.
호스트 intermediary.hostname 또는 intermediary.ip 호스트 값이 유효한 IP 주소인 경우 intermediary.ip에 매핑됩니다. 그렇지 않으면 intermediary.hostname에 매핑됩니다.
호스트 principal.hostname, principal.asset.hostname 주 구성원 IP가 없으면 호스트가 주 구성원 호스트 이름으로 처리됩니다.
mac principal.mac, network.dhcp.chaddr DHCP 요청과 연결된 MAC 주소가 추출되어 매핑됩니다.
src_ip principal.ip, principal.asset.ip grok 패턴을 사용하여 특정 로그 형식에서 추출됩니다.
src_mac principal.mac grok 패턴을 사용하여 특정 로그 형식에서 추출됩니다.
dst_mac target.mac grok 패턴을 사용하여 특정 로그 형식에서 추출됩니다.
타임스탬프 metadata.event_timestamp 타임스탬프는 로그 메시지에서 추출되어 UDM 타임스탬프 형식으로 변환됩니다. 시간대 정보 (tz)는 사용 가능한 경우 전환 전 타임스탬프에 추가됩니다.
timestamp_no_year metadata.event_timestamp 연도가 없는 타임스탬프가 있으면 파싱되고 파싱 프로세스 중에 현재 연도가 추가됩니다.
사용자 principal.user.userid 이벤트와 연결된 사용자 이름이 추출되어 매핑됩니다.
1 열 security_result.rule_id 설명이 CSV 형식인 경우 첫 번째 CSV 열에서 매핑됩니다.
column6 security_result.rule_type 설명이 CSV 형식인 경우 여섯 번째 CSV 열에서 매핑됩니다.
column7 security_result.action 설명이 CSV 형식인 경우 일곱 번째 CSV 열에서 매핑됩니다. 'BLOCK' 또는 'ALLOW'로 변환됩니다.
column8 network.direction 설명이 CSV 형식인 경우 여덟 번째 CSV 열에서 매핑됩니다. 'INBOUND' 또는 'OUTBOUND'로 변환됩니다.
column13 network.ip_protocol (UDP 또는 ICMP인 경우) 설명이 CSV 형식이고 프로토콜이 UDP 또는 ICMP인 경우 13번째 CSV 열에서 매핑됩니다. TCP/UDP 이벤트의 경우 키가 'Id'인 추가 필드를 만드는 데 사용됩니다.
column16 principal.ip, principal.asset.ip (IPv6이고 column9가 6인 경우) 설명이 CSV 형식이고 column9가 6인 경우 16번째 CSV 열에서 매핑됩니다. TCP/UDP 이벤트의 경우 column9가 4이면 프로토콜 식별에 사용됩니다.
column17 target.ip, target.asset.ip (IPv6이고 ip_failure가 아닌 경우) 설명이 CSV 형식이고 column9가 6이며 값이 유효한 IP인 경우 17번째 CSV 열에서 매핑됩니다. TCP/UDP 이벤트의 경우 프로토콜 식별에 사용됩니다.
column18 principal.port (UDP인 경우) 설명이 CSV 형식이고 프로토콜이 UDP인 경우 18번째 CSV 열에서 매핑됩니다. TCP/UDP 이벤트의 경우 network.received_bytes에 매핑됩니다.
column19 target.port (UDP인 경우) 설명이 CSV 형식이고 프로토콜이 UDP인 경우 19번째 CSV 열에서 매핑됩니다. DHCP 이벤트의 경우 network.dhcp.yiaddr에 매핑됩니다. 다른 이벤트의 경우 principal.ip, principal.asset.ip에 매핑됩니다.
column20 additional.fields (키: 'data_length') (UDP인 경우) 설명이 CSV 형식이고 프로토콜이 UDP인 경우 20번째 CSV 열에서 매핑됩니다. 다른 이벤트의 경우 target.ip, target.asset.ip에 매핑됩니다.
column21 principal.port (TCP/UDP인 경우) 설명이 CSV 형식이고 프로토콜이 TCP 또는 UDP인 경우 21번째 CSV 열에서 매핑됩니다.
column22 target.port (TCP/UDP인 경우) 설명이 CSV 형식이고 프로토콜이 TCP 또는 UDP인 경우 22번째 CSV 열에서 매핑됩니다.
column23 additional.fields (키: 'data_length') (TCP/UDP인 경우) 설명이 CSV 형식이고 프로토콜이 TCP 또는 UDP인 경우 23번째 CSV 열에서 매핑됩니다.
column24 additional.fields (키: 'tcp_flags') (TCP인 경우) 설명이 CSV 형식이고 프로토콜이 TCP인 경우 24번째 CSV 열에서 매핑됩니다.
column25 additional.fields (키: 'sequence_number') (TCP/UDP인 경우) 설명이 CSV 형식이고 프로토콜이 TCP 또는 UDP인 경우 25번째 CSV 열에서 매핑됩니다.
column29 additional.fields (키: 'tcp_options') (TCP인 경우) 설명이 CSV 형식이고 프로토콜이 TCP인 경우 29번째 CSV 열에서 매핑됩니다.
compression_algo additional.fields (키: '압축 알고리즘') 설명 필드에서 추출하여 추가 필드로 추가되었습니다.
내림차순 metadata.description 메시지 필드에서 추출되어 설명으로 사용됩니다.
principal_ip principal.ip, principal.asset.ip 설명 필드에서 추출되며 주 구성원 IP 주소를 나타냅니다.
principal_username principal.user.userid 설명 필드에서 추출되며 주 구성원의 사용자 이름을 나타냅니다.
상태 security_result.detection_fields (키: 'status') 설명 필드에서 추출되어 보안 결과 내에 감지 필드로 추가됩니다.
target_host target.hostname, target.asset.hostname 설명 필드에서 추출되며 타겟 호스트 이름을 나타냅니다.
src_port principal.port 설명 필드에서 추출되며 소스 포트를 나타냅니다. 다양한 로그 필드와 파서 로직을 기반으로 결정됩니다. NETWORK_CONNECTION, NETWORK_DHCP, STATUS_UPDATE 또는 GENERIC_EVENT일 수 있습니다. 'PFSENSE'로 하드코딩됩니다. 'PFSENSE'로 하드코딩됩니다. 'PFSENSE'로 하드코딩됩니다. DHCP 이벤트의 경우 'DHCP'로 설정합니다. DHCPDISCOVER 및 DHCPREQUEST의 경우 'BOOTREQUEST'로 설정하고 DHCPOFFER 및 DHCPACK의 경우 'BOOTREPLY'로 설정합니다. dhcp_type 필드에 따라 'DISCOVER', 'REQUEST', 'OFFER' 또는 'ACK'로 설정됩니다.

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