📚 네트워크 · 패킷 분석 › 04. 네트워크 장비 실습 — 194편
이전 글: 193. Snort · 다음 글: 195. Wazuh 네트워크 이벤트
Suricata는 OISF(Open Information Security Foundation)가 개발하는 오픈소스 네트워크 IDS/IPS·보안 모니터링 엔진입니다. 처음부터 멀티 스레드로 설계되었고, Snort 규칙 문법과 대부분 호환되며, 탐지 결과뿐 아니라 프로토콜 메타데이터(HTTP, DNS, TLS, 흐름 등)를 JSON으로 기록하는 EVE 출력이 특징입니다.
Suricata의 탐지 기능과 규칙 문법은 06 영역 289. Suricata란 무엇인가·290. Suricata Rule 기초에서 다루고, 이 글은 설치·설정 파일·로그 구조·서비스 운영을 다룹니다. 내부 처리 구조는 188. IDS 동작 구조, IPS 모드는 189. IPS 동작 구조을 참고합니다.
| 파일(패키지 기본값) | 역할 |
|---|---|
/etc/suricata/suricata.yaml | 주 설정 (변수, 수집 방식, 출력, 규칙 경로) |
/var/lib/suricata/rules/suricata.rules | suricata-update가 만든 병합 규칙 파일 |
/var/log/suricata/eve.json | JSON 이벤트 로그 (Alert + 메타데이터) |
/var/log/suricata/fast.log | Alert 한 줄 요약 |
/var/log/suricata/stats.log | 엔진 통계 (수신·드롭 등) |
/var/log/suricata/suricata.log | 엔진 자체 동작·오류 로그 |
센서 VM 한 대에서 Suricata가 동작하는 전체 그림입니다.
[SPAN/미러 트래픽] → ens33 (모니터링 NIC, IP 없음)
↓ af-packet 수집 (suricata.yaml의 af-packet.interface)
[Suricata 프로세스] ← 규칙: /var/lib/suricata/rules/suricata.rules (suricata-update로 갱신)
↓ 출력
/var/log/suricata/
├─ eve.json → Filebeat / Wazuh agent 등이 읽어 SIEM으로 전송
├─ fast.log → 사람이 빠르게 확인
├─ stats.log → 수신량·드롭 점검
└─ suricata.log → 시작·규칙 적재·오류 확인
eve.json은 한 줄에 JSON 객체 하나(JSON Lines) 형식이며, event_type 값으로 이벤트 종류를 구분합니다. 어떤 이벤트를 기록할지는 suricata.yaml의 outputs › eve-log › types에서 정합니다.
주요 EVE 이벤트 유형입니다(버전·설정에 따라 추가·변경됨).
| event_type | 내용 |
|---|---|
| alert | 규칙 일치 Alert (alert 객체 포함) |
| flow | 흐름 종료 시 요약(패킷·바이트 수, 상태) |
| dns / http / tls | 해당 프로토콜 트랜잭션 메타데이터 |
| fileinfo | 추출·관찰된 파일 정보 |
| anomaly | 디코더·스트림·앱 계층 프로토콜 이상 |
| drop | IPS 모드에서 폐기된 패킷 (설정 시) |
| stats | 엔진 통계 (설정 시) |
Alert 이벤트에서 관제자가 가장 먼저 보는 필드입니다.
| 필드 | 의미 |
|---|---|
timestamp | 이벤트 시각 (타임존 포함) |
flow_id | 같은 흐름의 이벤트를 묶는 식별자 |
src_ip, src_port, dest_ip, dest_port, proto | 5-tuple |
app_proto | 식별된 애플리케이션 프로토콜 |
alert.signature_id, alert.rev, alert.signature | 규칙 sid, 버전, 메시지 |
alert.category, alert.severity | 분류, 심각도(1이 가장 높음) |
alert.action | allowed / blocked |
flow_id가 같으면 Alert와 그 흐름의 http·dns·flow 이벤트를 연결할 수 있습니다. 이 점이 Suricata 로그가 관제에서 유용한 이유입니다.
실습 예시 — 센서 VM에 Suricata를 설치하고 서비스로 운영하는 흐름입니다. 저장소 이름과 버전 번호는 시점에 따라 다르므로 OISF 공식 설치 문서를 확인합니다. 인터페이스·대역은 예시(값은 환경마다 다름)입니다.
# Ubuntu: OISF 안정판 PPA
sudo add-apt-repository ppa:oisf/suricata-stable
sudo apt update && sudo apt install suricata jq
# Rocky: EPEL + OISF COPR 저장소 (버전 번호는 시점에 따라 다름)
sudo dnf install epel-release dnf-plugins-core
sudo dnf copr enable @oisf/suricata-7.0
sudo dnf install suricata jq
suricata.yaml에서 최소한 확인할 항목입니다.
vars:
address-groups:
HOME_NET: "[192.168.10.0/24,10.10.30.0/24]"
af-packet:
- interface: ens33
default-rule-path: /var/lib/suricata/rules
rule-files:
- suricata.rules
서비스가 사용할 인터페이스는 배포판 패키지에 따라 /etc/default/suricata(Ubuntu 계열) 또는 /etc/sysconfig/suricata(Rocky 계열)에서도 지정하므로 두 곳이 일치하는지 확인합니다.
sudo suricata-update
sudo suricata -T -c /etc/suricata/suricata.yaml -v
sudo systemctl enable --now suricata
sudo systemctl status suricata
# Alert만 5-tuple과 sid로 요약
sudo jq -c 'select(.event_type=="alert") | [.timestamp, .src_ip, .dest_ip, .dest_port, .alert.signature_id, .alert.signature]' \
/var/log/suricata/eve.json | tail -5
📷 [실습 화면 삽입 위치]
systemctl status suricata실행 중 화면과,tail -f /var/log/suricata/eve.json에서event_type이 flow·dns·alert 등으로 기록되는 화면
eve.json은 빠르게 커지므로 logrotate 설정이 필요합니다. 디스크가 가득 차면 기록이 멈추고 탐지 공백이 생깁니다. 로그 회전 후에는 Suricata가 새 파일에 쓰도록 신호(HUP 등)를 보내는 구성이 필요할 수 있습니다.HOME_NET이 실제 보호 대역과 다르면 방향 조건 규칙이 제대로 동작하지 않습니다.관제자가 확인할 질문
flow_id로 같은 흐름의 http·dns·tls·flow 이벤트를 찾아봤는가?alert.action은 allowed인가 blocked인가? 센서가 IDS 모드인지 IPS 모드인지 알고 해석하는가?suricata.log에 규칙 적재 실패나 재시작 기록이 있는가? stats.log의 드롭은 증가하지 않았는가?Suricata Alert (eve.json)
↓ flow_id 로 같은 흐름 이벤트 조회 (http / dns / tls / fileinfo / flow)
↓ flow 이벤트의 bytes_toclient 로 응답 크기 확인 → 실제 데이터가 오갔는가
↓ 방화벽 로그·서버 로그와 5-tuple·시각으로 연계 (06 영역)
오탐 주의: alert.severity는 규칙 분류에 따른 값이지 해당 환경에서의 실제 위험도가 아닙니다. 대상 자산과 응답 여부를 함께 봐야 합니다. 스캔 탐지 설정은 05 영역 238. Suricata Scan 탐지에서 다룹니다.
suricata.yaml, suricata.rules, /var/log/suricata/ 아래 eve.json·fast.log·stats.log·suricata.log입니다.event_type으로 이벤트를 구분하고, flow_id로 같은 흐름의 이벤트를 연결합니다.alert.signature_id, alert.signature, alert.severity, alert.action입니다.HOME_NET, 인터페이스 설정, 로그 회전, 드롭 여부를 운영 점검 항목으로 관리합니다.