Snort / Suricata 실무 스터디 가이드

데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약

📅 2026.03 #ids-ips #network-security #rule-based

1. Snort / Suricata란?

Snort와 Suricata는 오픈소스 네트워크 침입 탐지 및 방지 시스템(IDS/IPS)입니다. Snort는 1998년 Martin Roesch에 의해 개발되었으며, Suricata는 2010년 OISF(Open Information Security Foundation)에서 더 현대적인 아키텍처로 탄생했습니다. 두 도구 모두 실시간 트래픽 분석, 패킷 로깅, 시그니처 기반 탐지를 제공하며, AI 보안 파이프라인에서 전처리기 및 이상 탐지 피드 소스로 활용됩니다.

3대 핵심 능력

🔍 실시간 패킷 분석

네트워크 인터페이스에서 트래픽을 캡처하여 프로토콜 디코딩, 상태 추적, 패턴 매칭을 수행. 멀티스레드(Suricata)로 고속 처리 가능.

📜 시그니처 기반 탐지

사용자 정의 규칙(Rule)을 통해 악성 트래픽 식별. Snort 규칙과 Suricata 규칙은 대부분 호환되며, Lua 스크립트로 확장 가능.

🤖 AI/ML 파이프라인 연동

JSON/EVE 로그 출력을 통해 이상 탐지 모델의 피처로 활용. Python 라이브러리(pysuricata, snorkel)로 자동화된 규칙 관리 가능.

2. 왜 써야 하는가?

기존 상용 IDS/IPS 대비 Snort/Suricata는 비용 효율성, 투명성, 커스터마이징 자유도를 제공합니다. 아래 비교표를 참고하세요.

항목 Snort Suricata 상용 솔루션 (예: Cisco Firepower)
라이선스 GPLv2 GPLv2 상업용 (고비용)
멀티스레딩 제한적 (단일 스레드) ✅ 기본 지원 (고성능) ✅ 지원
프로토콜 디코딩 HTTP/SSL 등 기본 HTTP2, TLS 1.3, QUIC 등 확장 벤더 종속
로그 형식 syslog, unified2 JSON (EVE), YAML 독자 형식
AI/ML 연동 Python 파싱 필요 ✅ EVE JSON 직접 활용 API 제한적
커뮤니티 성숙, 방대한 규칙 빠른 성장, Emerging Threats 폐쇄적
💡 AI 보안 엔지니어 관점
Suricata의 EVE JSON 출력은 Pandas/Spark로 직접 로드 가능하며, 실시간 스트리밍( Kafka, Pulsar )과 결합해 ML 파이프라인을 구축하기에 이상적입니다.

3. 핵심 개념

Snort와 Suricata는 공통적으로 패킷 캡처 → 디코더 → 탐지 엔진 → 출력 파이프라인을 따릅니다. 아래는 Suricata 기준 아키텍처입니다.

┌─────────────────────────────────────────────────────────┐ │ Suricata Architecture │ ├─────────────────────────────────────────────────────────┤ │ [Network Interface] │ │ │ │ │ ▼ │ │ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │ │ │ Capture │──▶│ Decoder │──▶│ Detection Engine │ │ │ │ (AF_PACKET│ │ (IP/TCP/ │ │ (Rule matching, │ │ │ │ /PF_RING)│ │ HTTP) │ │ anomaly detect) │ │ │ └──────────┘ └──────────┘ └────────┬─────────┘ │ │ │ │ │ ▼ │ │ ┌──────────────────────────────────────────────────┐ │ │ │ Output Modules │ │ │ │ ┌─────────┐ ┌─────────┐ ┌────────────────┐ │ │ │ │ │ EVE │ │ Syslog │ │ Unified2 │ │ │ │ │ │ (JSON) │ │ │ │ (Snort compat)│ │ │ │ │ └─────────┘ └─────────┘ └────────────────┘ │ │ │ └──────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────┘

핵심 구성 요소

⚠️ 주의
Snort 3.x는 멀티스레딩을 지원하지만, Suricata가 기본적으로 더 높은 처리량과 현대 프로토콜 지원에서 유리합니다. AI 파이프라인 구축 시 Suricata + EVE JSON 조합을 권장합니다.

4. 퀵스타트

Ubuntu 22.04 기준 Suricata 설치부터 첫 탐지 규칙 실행까지 단계별로 안내합니다.

4.1 설치

# Suricata 설치 (PPA)
sudo add-apt-repository ppa:oisf/suricata-stable -y
sudo apt update
sudo apt install suricata -y

# 버전 확인
suricata --version

4.2 기본 설정

# 설정 파일 편집 (/etc/suricata/suricata.yaml)
# HOME_NET, EXTERNAL_NET 정의
# af-packet 인터페이스 설정 (예: eth0)
sudo sed -i 's/HOME_NET: "\[192.168.0.0\/16\]"/HOME_NET: "[10.0.0.0\/8]"/' /etc/suricata/suricata.yaml
sudo sed -i 's/interface: eth0/interface: ens160/' /etc/suricata/suricata.yaml

# 규칙 업데이트 (Emerging Threats)
sudo suricata-update
sudo systemctl restart suricata

4.3 첫 탐지 예제 (Python + EVE 로그)

Python으로 EVE JSON 로그를 실시간 모니터링하는 코드입니다.

#!/usr/bin/env python3
"""Suricata EVE 로그 실시간 모니터링 예제"""
import json
import time
from pathlib import Path

EVE_LOG = "/var/log/suricata/eve.json"

def follow_log(filepath):
    with open(filepath, 'r') as f:
        f.seek(0, 2)  # 끝으로 이동
        while True:
            line = f.readline()
            if not line:
                time.sleep(0.1)
                continue
            try:
                event = json.loads(line)
                if event.get('event_type') == 'alert':
                    alert = event['alert']
                    print(f"[!] 탐지: {alert['signature']} "
                          f"(src: {event['src_ip']}:{event['src_port']} "
                          f"→ dst: {event['dest_ip']}:{event['dest_port']})")
            except json.JSONDecodeError:
                continue

if __name__ == "__main__":
    print("Suricata EVE 모니터링 시작...")
    follow_log(EVE_LOG)

4.4 CLI로 규칙 테스트

# 특정 규칙만 로드하여 pcap 파일 분석
suricata -r sample.pcap -S /path/to/custom.rules -l /tmp/suricata_test

# 실시간 인터페이스 모니터링 (IPS 모드)
suricata -c /etc/suricata/suricata.yaml -i ens160 --af-packet
🔧 팁
Suricata는 suricata-stats 명령어로 처리량, 드롭률 등 성능 메트릭을 확인할 수 있습니다. AI 파이프라인에 통합하려면 eve.json을 Kafka 프로듀서로 전송하세요.

5. 핵심 설정 레퍼런스

Suricata 설정 파일(suricata.yaml)에서 자주 수정하는 항목을 표로 정리했습니다.

설정 키 설명 예시 값
vars.address-groups.HOME_NET 내부 네트워크 대역 정의 "[10.0.0.0/8, 172.16.0.0/12]"
af-packet[0].interface 패킷 캡처 인터페이스 ens160
eve-log.enabled EVE JSON 로그 활성화 yes
eve-log.types.alert alert 이벤트 로깅 yes
default-rule-path 규칙 파일 디렉토리 /etc/suricata/rules
rule-files 로드할 규칙 파일 목록 [suricata.rules, emerging-*.rules]
runmode 실행 모드 (autofp, workers 등) workers (고성능)
⚠️ 보안 주의
HOME_NET을 정확히 설정하지 않으면 내부 트래픽이 외부로 오탐될 수 있습니다. 클라우드 환경에서는 VPC CIDR을 정확히 입력하세요.

6. 실무 팁 & 트러블슈팅

자주 겪는 문제와 해결책

문제 원인 해결책
Suricata가 패킷을 드롭함 버퍼 부족, CPU 병목 af-packet.buffer-size 증가, runmode: workers 사용, RSS 큐 조정
EVE 로그에 alert가 없음 규칙 미적용, HOME_NET 오설정 suricata-update 실행, suricata -T로 설정 테스트
Snort 규칙 호환 문제 Suricata 전용 키워드 누락 suricata-update로 변환, noalert 규칙 확인
Python 파싱 속도 저하 JSON 라인 단위 처리 비효율 ijson 스트리밍 파서 사용, 또는 Cython 확장 고려

실무 팁

7. 참고 자료

공식 문서 및 유용한 링크입니다.