Sophos XG Firewall 로그 수집
이 문서에서는 Bindplane을 사용하여 Sophos Next Gen (XG) 방화벽 로그를 수집하는 방법을 설명합니다. 파서는 로그를 추출하고 키-값 쌍을 정규화하여 UDM에 매핑합니다. 다양한 로그 형식을 처리하고, 타임스탬프를 변환하고, 네트워크 데이터를 보강하고, 로그 ID 및 네트워크 활동을 기반으로 이벤트를 분류합니다.
시작하기 전에
- Google Security Operations 인스턴스가 있는지 확인합니다.
- Windows 2016 이상 또는
systemd
가 설치된 Linux 호스트를 사용하고 있는지 확인합니다. - 프록시 뒤에서 실행하는 경우 방화벽 포트가 열려 있는지 확인합니다.
- Sophos XG Firewall에 대한 권한 액세스 권한이 있는지 확인합니다.
Google SecOps 수집 인증 파일 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 수집 에이전트로 이동합니다.
- 수집 인증 파일을 다운로드합니다. Bindplane이 설치될 시스템에 파일을 안전하게 저장합니다.
Google SecOps 고객 ID 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 프로필로 이동합니다.
- 조직 세부정보 섹션에서 고객 ID를 복사하여 저장합니다.
Bindplane 에이전트 설치
Windows 설치
- 명령 프롬프트 또는 PowerShell을 관리자로 엽니다.
다음 명령어를 실행합니다.
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux 설치
- 루트 또는 sudo 권한으로 터미널을 엽니다.
다음 명령어를 실행합니다.
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
추가 설치 리소스
- 추가 설치 옵션은 이 설치 가이드를 참고하세요.
Syslog를 수집하여 Google SecOps로 전송하도록 Bindplane 에이전트 구성
구성 파일에 액세스합니다.
config.yaml
파일을 찾습니다. 일반적으로 Linux에서는/etc/bindplane-agent/
디렉터리에 있고 Windows에서는 설치 디렉터리에 있습니다.- 텍스트 편집기 (예:
nano
,vi
, 메모장)를 사용하여 파일을 엽니다.
다음과 같이
config.yaml
파일을 수정합니다.receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization ingestion_labels: log_type: SYSLOG namespace: sophos_firewall raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
인프라에 필요한 대로 포트와 IP 주소를 바꿉니다.
<customer_id>
를 실제 고객 ID로 바꿉니다.Google SecOps 수집 인증 파일 가져오기 섹션에서 인증 파일이 저장된 경로로
/path/to/ingestion-authentication-file.json
를 업데이트합니다.
Bindplane 에이전트를 다시 시작하여 변경사항 적용
Linux에서 Bindplane 에이전트를 다시 시작하려면 다음 명령어를 실행합니다.
sudo systemctl restart bindplane-agent
Windows에서 Bindplane 에이전트를 다시 시작하려면 서비스 콘솔을 사용하거나 다음 명령어를 입력하면 됩니다.
net stop BindPlaneAgent && net start BindPlaneAgent
Sophos Firewall syslog 서버 구성
- Sophos XG Firewall에 로그인합니다.
- 구성 > 시스템 서비스 > 로그 설정으로 이동합니다.
- Syslog 서버 섹션에서 추가를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 이름: Google SecOps 수집기의 고유한 이름을 입력합니다.
- IP 주소/도메인: Bindplane IP 주소를 입력합니다.
- 포트: Bindplane 포트 번호를 입력합니다.
- 기능: DAEMON을 선택합니다.
- 심각도 수준: 정보를 선택합니다.
- 형식: 기기 표준 형식을 선택합니다.
- 저장을 클릭합니다.
- 로그 설정 페이지로 돌아가 syslog 서버로 전달할 특정 로그 유형을 선택합니다.
Sophos XG Firewall 로그 설정 구성
- 다음 기본 방화벽 (보안 정책 로그) 로그를 선택합니다.
- 정책 규칙
- 무효 트래픽
- 로컬 ACL
- DoS 공격
- 삭제된 ICMP 리디렉션 패킷
- 삭제된 소스 라우팅 패킷
- 조각화된 트래픽이 삭제됨
- MAC 필터링
- IP-MAC 쌍 필터링
- IP 스푸핑 방지
- SSL VPN 터널
- 보호된 애플리케이션 서버
- 하트비트
- 다음 웹 보호 (웹 필터링 로그 및 애플리케이션 필터링 로그) 로그를 선택합니다.
- 웹 필터
- 애플리케이션 필터
- 다음 네트워크 보호 (IPS 로그) 로그를 선택합니다.
- 이상치
- 서명
- 다음 시스템 로그 로그를 선택합니다.
- 시스템 이벤트
UDM 매핑 테이블
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
activityname |
security_result.detection_fields.activityname |
activityname 필드의 값입니다. |
app_category |
security_result.detection_fields.Application Category , application_category |
app_category 필드의 값입니다. |
app_filter_policy_id |
security_result.detection_fields.app_filter_policy_id |
app_filter_policy_id 필드의 값입니다. |
app_is_cloud |
security_result.detection_fields.app_is_cloud |
app_is_cloud 필드의 값입니다. |
app_name |
principal.application |
app_name 필드의 값입니다. |
app_resolved_by |
security_result.detection_fields.app_resolved_by |
app_resolved_by 필드의 값입니다. |
app_risk |
security_result.detection_fields.Application Risk , application_risk |
app_risk 필드의 값입니다. |
app_technology |
application_technology |
app_technology 필드의 값입니다. |
application |
principal.application |
application 필드의 값입니다. |
application_category |
security_result.detection_fields.Application Category |
application_category 필드의 값입니다. |
application_risk |
security_result.detection_fields.Application Risk |
application_risk 필드의 값입니다. |
application_technology |
security_result.detection_fields.Application Technology |
application_technology 필드의 값입니다. |
bytes_received |
network.received_bytes |
bytes_received 필드의 값입니다. |
bytes_sent |
network.sent_bytes |
bytes_sent 필드의 값입니다. |
category |
application_category |
category 필드의 값입니다. |
category_type |
security_result.detection_fields.category_type |
category_type 필드의 값입니다. |
client_host_name |
network.dhcp.client_hostname |
client_host_name 필드의 값입니다. |
client_physical_address |
network.dhcp.chaddr |
client_physical_address 필드의 값입니다. |
con_event |
security_result.detection_fields.con_event |
con_event 필드의 값입니다. |
con_id |
security_result.detection_fields.con_id |
con_id 필드의 값입니다. |
connevent |
security_result.detection_fields.connevent |
connevent 필드의 값입니다. |
connid |
security_result.detection_fields.connid |
connid 필드의 값입니다. |
date |
event.timestamp |
date 및 time 필드에서 파싱되며 시간대에 맞게 조정됩니다. |
device_id |
intermediary.asset.asset_id |
ID: 이 접두사로 붙은 device_id 필드의 값입니다. |
device_model |
intermediary.hostname |
device_model 필드의 값입니다. |
device_name |
intermediary.hostname |
device_name 필드의 값입니다. |
device_serial_id |
intermediary.asset.asset_id |
ID: 이 접두사로 붙은 device_serial_id 필드의 값입니다. |
domain |
principal.administrative_domain , target.hostname |
domain 필드의 값입니다. |
dst_country |
target.location.country_or_region |
dst_country 필드의 값입니다. |
dst_country_code |
target.location.country_or_region |
dst_country_code 필드의 값입니다. |
dst_ip |
target.ip |
dst_ip 필드의 값입니다. |
dst_mac |
target.mac |
dst_mac 필드의 값입니다. |
dst_port |
target.port |
dst_port 필드의 값입니다. |
dst_trans_ip |
target.nat_ip |
dst_trans_ip 필드의 값입니다. |
dst_trans_port |
target.nat_port |
dst_trans_port 필드의 값입니다. |
dst_zone |
security_result.detection_fields.dst_zone |
dst_zone 필드의 값입니다. |
dstzone |
security_result.detection_fields.dstzone |
dstzone 필드의 값입니다. |
dstzonetype |
security_result.detection_fields.dstzonetype |
dstzonetype 필드의 값입니다. |
duration |
network.session_duration.seconds |
duration 필드의 값입니다. |
ether_type |
security_result.detection_fields.ether_type |
ether_type 필드의 값입니다. |
exceptions |
security_result.detection_fields.exceptions |
exceptions 필드의 값입니다. |
fw_rule_id |
security_result.rule_id |
fw_rule_id 필드의 값입니다. |
fw_rule_name |
security_result.rule_name |
fw_rule_name 필드의 값입니다. |
fw_rule_section |
security_result.rule_set |
fw_rule_section 필드의 값입니다. |
fw_rule_type |
security_result.rule_type |
fw_rule_type 필드의 값입니다. |
gw_id_request |
security_result.detection_fields.gw_id_request |
gw_id_request 필드의 값입니다. |
gw_name_request |
security_result.detection_fields.gw_name_request |
gw_name_request 필드의 값입니다. |
hb_health |
security_result.detection_fields.hb_health |
hb_health 필드의 값입니다. |
hb_status |
security_result.detection_fields.hb_status |
hb_status 필드의 값입니다. |
http_category |
security_result.detection_fields.http_category |
http_category 필드의 값입니다. |
http_category_type |
security_result.detection_fields.http_category_type |
http_category_type 필드의 값입니다. |
http_status |
network.http.response_code |
http_status 필드의 값입니다. |
in_display_interface |
security_result.detection_fields.in_display_interface |
in_display_interface 필드의 값입니다. |
in_interface |
security_result.detection_fields.in_interface |
in_interface 필드의 값입니다. |
ipaddress |
principal.ip , network.dhcp.ciaddr |
ipaddress 필드의 값입니다. |
log_component |
metadata.product_event_type , security_result.detection_fields.log_component |
log_component 필드의 값입니다. |
log_id |
metadata.product_log_id |
log_id 필드의 값입니다. |
log_msg |
metadata.description |
message= 를 삭제한 후 message 필드의 값입니다. |
log_occurrence |
security_result.detection_fields.log_occurrence |
log_occurrence 필드의 값입니다. |
log_subtype |
security_result.detection_fields.log_subtype , security_result.action |
log_subtype 필드의 값입니다. |
log_type |
security_result.detection_fields.log_type |
log_type 필드의 값입니다. |
log_version |
security_result.detection_fields.log_version |
log_version 필드의 값입니다. |
message |
metadata.description |
message 필드의 값입니다. |
nat_rule_id |
security_result.detection_fields.nat_rule_id |
nat_rule_id 필드의 값입니다. |
nat_rule_name |
security_result.detection_fields.nat_rule_name |
nat_rule_name 필드의 값입니다. |
out_display_interface |
security_result.detection_fields.out_display_interface |
out_display_interface 필드의 값입니다. |
out_interface |
security_result.detection_fields.out_interface |
out_interface 필드의 값입니다. |
packets_received |
network.received_packets |
packets_received 필드의 값입니다. |
packets_sent |
network.sent_packets |
packets_sent 필드의 값입니다. |
priority |
security_result.severity |
참고표를 기반으로 priority 또는 severity 필드에서 매핑됩니다. |
protocol |
network.ip_protocol |
참고표를 사용하여 protocol 필드에서 파싱됩니다. |
reason |
security_result.detection_fields.reason , security_result.summary |
reason 필드의 값입니다. |
recv_bytes |
network.received_bytes |
recv_bytes 필드의 값입니다. |
recv_pkts |
network.received_packets |
recv_pkts 필드의 값입니다. |
referer |
network.http.referral_url |
referer 필드의 값입니다. |
rule_id |
security_result.rule_id |
rule_id 필드의 값입니다. |
rule_name |
security_result.rule_name |
rule_name 필드의 값입니다. |
sent_bytes |
network.sent_bytes |
sent_bytes 필드의 값입니다. |
sent_pkts |
network.sent_packets |
sent_pkts 필드의 값입니다. |
severity |
priority |
severity 필드의 값입니다. |
src_country |
principal.location.country_or_region |
src_country 필드의 값입니다. |
src_country_code |
principal.location.country_or_region |
src_country_code 필드의 값입니다. |
src_ip |
principal.ip |
src_ip 필드의 값입니다. |
src_mac |
principal.mac |
src_mac 필드의 값입니다. |
src_port |
principal.port |
src_port 필드의 값입니다. |
src_trans_ip |
principal.nat_ip |
src_trans_ip 필드의 값입니다. |
src_trans_port |
principal.nat_port |
src_trans_port 필드의 값입니다. |
src_zone |
security_result.detection_fields.src_zone |
src_zone 필드의 값입니다. |
srczone |
security_result.detection_fields.srczone |
srczone 필드의 값입니다. |
srczonetype |
security_result.detection_fields.srczonetype |
srczonetype 필드의 값입니다. |
status |
security_result.action_details , security_result.action |
status 필드의 값입니다. |
status_code |
network.http.response_code |
status_code 필드의 값입니다. |
target.url |
target.url |
url 필드의 값입니다. |
time |
event.timestamp |
date 및 time 필드에서 파싱되며 시간대에 맞게 조정됩니다. |
timestamp |
event.timestamp |
timestamp 필드에서 파싱됩니다. |
tran_dst_ip |
target.nat_ip |
tran_dst_ip 필드의 값입니다. |
tran_dst_port |
target.nat_port |
tran_dst_port 필드의 값입니다. |
tran_src_ip |
principal.nat_ip |
tran_src_ip 필드의 값입니다. |
tran_src_port |
principal.nat_port |
tran_src_port 필드의 값입니다. |
url |
target.url |
url 필드의 값입니다. |
used_quota |
security_result.detection_fields.used_quota |
used_quota 필드의 값입니다. |
user_agent |
network.http.user_agent , network.http.parsed_user_agent |
user_agent 필드의 값입니다. 파싱된 버전도 생성됩니다. |
user_gp |
extensions.auth.type |
user_gp 이 vpn 이면 extensions.auth.type 을 VPN 로 설정합니다. |
user_name |
principal.user.userid , principal.user.email_addresses |
user_name 필드의 값입니다. @ 가 포함된 경우 email_addresses 에도 추가됩니다. |
web_policy_id |
security_result.detection_fields.web_policy_id |
web_policy_id 필드의 값입니다. |
해당 사항 없음 | event.idm.read_only_udm.metadata.event_timestamp |
event.timestamp 에서 복사됨 |
해당 사항 없음 | event.idm.read_only_udm.metadata.log_type |
Chronicle 수집 스키마는 로그 유형을 SOPHOS_FIREWALL 로 지정합니다. |
해당 사항 없음 | event.idm.read_only_udm.metadata.vendor_name |
상수 값 SOPHOS 입니다. |
해당 사항 없음 | event.idm.read_only_udm.metadata.product_name |
상수 값 SOPHOS Firewall 입니다. |
해당 사항 없음 | event.idm.read_only_udm.network.application_protocol |
ipaddress 필드가 있으면 DHCP 로 설정합니다. 그렇지 않으면 protocol 필드에서 파생됩니다. |
해당 사항 없음 | event.idm.read_only_udm.metadata.event_type |
다른 필드의 존재 여부에 따라 로직으로 결정됩니다 (예: NETWORK_HTTP , NETWORK_CONNECTION , NETWORK_DHCP , STATUS_UPDATE , GENERIC_EVENT )를 사용하려고 할 때 Tegra2 기반 기기 및 기타 기기가 비정상 종료되었습니다. |
해당 사항 없음 | event.idm.read_only_udm.security_result.action |
status 또는 log_subtype 필드에서 파생됩니다. |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.