Coletar registros do pfSense
Este documento explica como ingerir registros do pfSense no Google Security Operations usando o Bindplane.
O pfSense é uma distribuição de software de firewall e roteador de código aberto baseada no FreeBSD. Ele oferece filtragem de pacotes com estado, VPN, modelagem de tráfego, NAT, servidor DHCP, encaminhador de DNS e recursos de detecção de intrusões, tudo gerenciado por uma interface baseada na Web. O analisador extrai campos de registros formatados do syslog do pfSense. Ele usa o grok para analisar a mensagem de registro e mapeia esses valores para o Modelo de Dados Unificado (UDM). Ele também define valores de metadados padrão para a origem e o tipo do evento.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Uma instância do Google SecOps
- Windows Server 2016 ou mais recente ou host Linux com
systemd - Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente Bindplane.
- Acesso privilegiado à interface da Web do pfSense
Receber o arquivo de autenticação de ingestão do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- Baixe o arquivo de autenticação de ingestão. Salve o arquivo de forma segura no sistema em que o Bindplane será instalado.
Receber o ID de cliente do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
- Copie e salve o ID do cliente na seção Detalhes da organização.
Instalar o agente do Bindplane
Instale o agente do Bindplane no sistema operacional Windows ou Linux de acordo com as instruções a seguir.
Instalação do Windows
- Abra o prompt de comando ou o PowerShell como administrador.
Execute este comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietAguarde a conclusão da instalação.
Execute o seguinte comando para confirmar a instalação:
sc query observiq-otel-collector
O serviço vai aparecer como EM EXECUÇÃO.
Instalação do Linux
- Abra um terminal com privilégios de root ou sudo.
Execute este comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shAguarde a conclusão da instalação.
Execute o seguinte comando para confirmar a instalação:
sudo systemctl status observiq-otel-collector
O serviço vai aparecer como ativo (em execução).
Outros recursos de instalação
Para mais opções de instalação e solução de problemas, consulte o guia de instalação do agente do Bindplane.
Configurar o agente do Bindplane para ingerir syslog e enviar ao Google SecOps
Localizar o arquivo de configuração
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Editar o arquivo de configuração
Substitua todo o conteúdo de
config.yamlpela seguinte configuração: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
Parâmetros de configuração
Substitua os seguintes marcadores de posição:
Configuração do receptor:
udplog: useudplogpara syslog UDP outcplogpara syslog TCP.0.0.0.0: endereço IP para escutar (0.0.0.0para escutar em todas as interfaces)514: número da porta a ser detectada (porta syslog padrão).
Configuração do exportador:
creds_file_path: caminho completo para o arquivo de autenticação de ingestão:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
YOUR_CUSTOMER_ID: ID do cliente da seção "Receber ID do cliente"endpoint: URL do endpoint regional:- EUA:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Ásia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Consulte a lista completa em Endpoints regionais.
- EUA:
log_type: tipo de registro exatamente como aparece no Chronicle (PFSENSE)
Salve o arquivo de configuração.
- Depois de editar, salve o arquivo:
- Linux: pressione
Ctrl+O,EntereCtrl+X. - Windows: clique em Arquivo > Salvar.
- Linux: pressione
Reinicie o agente do Bindplane para aplicar as mudanças
Para reiniciar o agente do Bindplane no Linux, execute o seguinte comando:
sudo systemctl restart observiq-otel-collectorVerifique se o serviço está em execução:
sudo systemctl status observiq-otel-collectorVerifique se há erros nos registros:
sudo journalctl -u observiq-otel-collector -f
Para reiniciar o agente do Bindplane em Windows, escolha uma das seguintes opções:
Prompt de comando ou PowerShell como administrador:
net stop observiq-otel-collector && net start observiq-otel-collectorConsole de serviços:
- Pressione
Win+R, digiteservices.msce pressione Enter. - Localize o Coletor do OpenTelemetry da observIQ.
Clique com o botão direito do mouse e selecione Reiniciar.
Verifique se o serviço está em execução:
sc query observiq-otel-collectorVerifique se há erros nos registros:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Pressione
Configurar o encaminhamento de syslog no pfSense
O pfSense é executado no FreeBSD e oferece uma interface baseada na Web para todas as tarefas de configuração, incluindo o encaminhamento remoto de syslog.
- Faça login na interface da Web do pfSense.
- Acesse Status > Registros do sistema > Configurações.
- Acesse a seção Opções de geração de registros remota.
- Selecione Ativar o registro remoto.
- Informe os seguintes detalhes de configuração:
- Endereço de origem: selecione Qualquer (ou uma interface específica).
- Protocolo IP: selecione IPv4.
- Servidores de registros remotos: digite
BINDPLANE_IP:514no primeiro campo disponível. SubstituaBINDPLANE_IPpelo endereço IP do host do agente do Bindplane.
- Na seção Conteúdo do Syslog remoto, selecione as categorias de registro a serem encaminhadas:
- Eventos do sistema
- Eventos de firewall
- Eventos de DNS (Resolver/unbound, Forwarder/dnsmasq)
- Eventos de DHCP (serviço de DHCP)
- Eventos de PPP
- Eventos de autenticação (autenticação do portal, RADIUS)
- Eventos de VPN (IPsec, OpenVPN, L2TP)
- Eventos do gateway (monitor do gateway)
- Eventos de roteamento (daemon de roteamento)
- Eventos do NTP
- Pacotes (pacotes instalados)
- Clique em Salvar.
- Verifique se as mensagens syslog estão sendo enviadas conferindo os registros do agente Bindplane.
Tabela de mapeamento do UDM
| Campo de registro | Mapeamento do UDM | Lógica |
|---|---|---|
| aplicativo | principal.application | O valor é extraído da mensagem de registro usando padrões grok. Para mensagens do syslog, o nome do aplicativo geralmente é encontrado após o nome do host e o carimbo de data/hora. |
| comando | principal.process.command_line | Extraído do campo de descrição quando o registro indica uma execução de comando. |
| descrição | metadata.description | O campo de descrição é mapeado para a descrição de metadados da UDM, exceto nos registros de aplicativos syslog-ng, em que ele é mapeado para metadata.description. Para eventos de DHCP, o dhcp_type é adicionado antes da descrição. |
| dhcp_type | metadata.product_event_type | O tipo de mensagem DHCP (por exemplo, DHCPDISCOVER, DHCPOFFER) é extraído e mapeado. |
| host | intermediary.hostname OR intermediary.ip | Se o valor do host for um endereço IP válido, ele será mapeado para intermediary.ip. Caso contrário, ele será mapeado para intermediary.hostname. |
| host | principal.hostname, principal.asset.hostname | Quando nenhum IP principal está presente, o host é tratado como o nome de host principal. |
| mac | principal.mac, network.dhcp.chaddr | O endereço MAC associado a uma solicitação DHCP é extraído e mapeado. |
| src_ip | principal.ip, principal.asset.ip | Extraídos de formatos de registro específicos usando um padrão grok. |
| src_mac | principal.mac | Extraídos de formatos de registro específicos usando um padrão grok. |
| dst_mac | target.mac | Extraídos de formatos de registro específicos usando um padrão grok. |
| timestamp | metadata.event_timestamp | O carimbo de data/hora é extraído da mensagem de registro e convertido para um formato de carimbo de data/hora da UDM. As informações de fuso horário (tz) são adicionadas ao carimbo de data/hora antes da conversão, se disponíveis. |
| timestamp_no_year | metadata.event_timestamp | Se um carimbo de data/hora sem ano estiver presente, ele será analisado, e o ano atual será adicionado durante o processo de análise. |
| usuário | principal.user.userid | O nome de usuário associado a um evento é extraído e mapeado. |
| column1 | security_result.rule_id | Mapeado da primeira coluna CSV se a descrição estiver nesse formato. |
| column6 | security_result.rule_type | Mapeado da sexta coluna CSV se a descrição estiver nesse formato. |
| column7 | security_result.action | Mapeado da sétima coluna CSV se a descrição estiver nesse formato. Convertido para "BLOCK" ou "ALLOW". |
| column8 | network.direction | Mapeado da oitava coluna do CSV se a descrição estiver nesse formato. Convertido para "INBOUND" ou "OUTBOUND". |
| column13 | network.ip_protocol (se UDP ou ICMP) | Mapeado da décima terceira coluna CSV se a descrição estiver no formato CSV e o protocolo for UDP ou ICMP. Para eventos TCP/UDP, ele é usado para criar um campo adicional com a chave "Id". |
| column16 | principal.ip, principal.asset.ip (se IPv6 e column9 for 6) | Mapeado da 16ª coluna CSV se a descrição estiver no formato CSV e column9 for 6. Para eventos TCP/UDP, é usado para identificação de protocolo se column9 for 4. |
| column17 | target.ip, target.asset.ip (se IPv6 e não ip_failure) | Mapeado da 17ª coluna CSV se a descrição estiver no formato CSV, column9 for 6 e o valor for um IP válido. Para eventos TCP/UDP, ele é usado na identificação de protocolo. |
| column18 | principal.port (se UDP) | Mapeado da décima oitava coluna CSV se a descrição estiver no formato CSV e o protocolo for UDP. Para eventos TCP/UDP, ele é mapeado para "network.received_bytes". |
| column19 | target.port (se UDP) | Mapeado da 19ª coluna CSV se a descrição estiver no formato CSV e o protocolo for UDP. Para eventos de DHCP, ele é mapeado para network.dhcp.yiaddr. Para outros eventos, ele é mapeado para principal.ip, principal.asset.ip. |
| column20 | additional.fields (chave: "data_length") (se UDP) | Mapeado da vigésima coluna CSV se a descrição estiver no formato CSV e o protocolo for UDP. Para outros eventos, ele é mapeado para target.ip, target.asset.ip. |
| column21 | principal.port (se TCP/UDP) | Mapeado da 21ª coluna do CSV se a descrição estiver nesse formato e o protocolo for TCP ou UDP. |
| column22 | target.port (se TCP/UDP) | Mapeado da 22ª coluna CSV se a descrição estiver no formato CSV e o protocolo for TCP ou UDP. |
| column23 | additional.fields (chave: "data_length") (se TCP/UDP) | Mapeado da 23ª coluna do CSV se a descrição estiver nesse formato e o protocolo for TCP ou UDP. |
| column24 | additional.fields (chave: "tcp_flags") (se TCP) | Mapeado da 24ª coluna CSV se a descrição estiver no formato CSV e o protocolo for TCP. |
| column25 | additional.fields (chave: "sequence_number") (se TCP/UDP) | Mapeado da 25ª coluna CSV se a descrição estiver nesse formato e o protocolo for TCP ou UDP. |
| column29 | additional.fields (chave: "tcp_options") (se TCP) | Mapeado da 29ª coluna CSV se a descrição estiver no formato CSV e o protocolo for TCP. |
| compression_algo | additional.fields (key: "Compression Algorithm") | Extraído do campo de descrição e adicionado como um campo extra. |
| desc | metadata.description | Extraído do campo de mensagem e usado como descrição. |
| principal_ip | principal.ip, principal.asset.ip | Extraído do campo de descrição e representa o endereço IP principal. |
| principal_username | principal.user.userid | Extraído do campo de descrição e representa o nome de usuário principal. |
| status | security_result.detection_fields (chave: "status") | Extraído do campo de descrição e adicionado como um campo de detecção no resultado de segurança. |
| target_host | target.hostname, target.asset.hostname | Extraído do campo de descrição e representa o nome de host de destino. |
| src_port | principal.port | Extraído do campo de descrição e representa a porta de origem. Determinado com base em vários campos de registro e na lógica do analisador. Pode ser NETWORK_CONNECTION, NETWORK_DHCP, STATUS_UPDATE ou GENERIC_EVENT. Fixado no código como "PFSENSE". Fixado no código como "PFSENSE". Fixado no código como "PFSENSE". Definido como "DHCP" para eventos de DHCP. Definido como "BOOTREQUEST" para DHCPDISCOVER e DHCPREQUEST, e "BOOTREPLY" para DHCPOFFER e DHCPACK. Definido como "DISCOVER", "REQUEST", "OFFER" ou "ACK" com base no campo "dhcp_type". |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.