NAT Instance 환경에서 Suricata 설치 및 NFQUEUE 기반 인라인 탐지 설정
이번 편에서는 NAT Instance 위에 Suricata를 설치하고,
NFQUEUE 기반 인라인 처리 구조를 구성한다.
중요한 점은 이 단계에서는 차단(drop)을 하지 않는다는 것이다.
목표는 단 하나다.
패킷이 Suricata를 반드시 통과하면서 정상적으로 분석되고,
eve.json 로그가 생성되는 상태를 만드는 것
1. Suricata 설치 (Ubuntu 기준)
1.1 Suricata 설치
# apt -y install suricata suricata-update
설치 후 버전 확인으로 정상 설치 여부를 확인한다.
# suricata -V
버전 정보가 출력되면 정상이다.
1.2 룰 다운로드 / 갱신
# suricata-update
- Emerging Threats Open 룰 기준
- 이 시점에서는 alert 룰만 사용
- drop 룰은 아직 적용하지 않는다
2. Suricata 기본 설정
설정 파일 경로:
/etc/suricata/suricata.yaml
2.1 HOME_NET 지정
Suricata에서 HOME_NET은 보호 대상 네트워크다.
NAT Instance 구조에서는 Private Subnet CIDR을 지정해야 한다.
# grep -n "HOME_NET" /etc/suricata/suricata.yaml | head
직접 편집하여 다음과 같이 수정한다.
vars:
address-groups:
HOME_NET: "[10.0.1.0/24]"
EXTERNAL_NET: "!$HOME_NET"
주의사항:
- NAT Instance의 퍼블릭 대역을 넣으면 안 된다
- 실제 보호 대상은 Private Subnet 내부 서버다
- HOME_NET을 잘못 잡으면 룰은 동작해도 의미 없는 탐지가 된다
2.2 eve.json 활성화 확인
Suricata 이벤트 로그는 eve.json으로 기록된다.
기본으로 활성화돼 있는 경우가 많지만 반드시 확인한다.
# grep -n "eve-log" /etc/suricata/suricata.yaml | head -n 40
실제 예시는 다음과 같다.

이 설정이 있어야 다음 파일이 생성된다.
/var/log/suricata/eve.json
이 로그는 이후 OpenSearch / Kibana 연동의 핵심 데이터가 된다.
3. Suricata 실행
3.1 systemd 실행 전 테스트 런
설정 적용 전에 반드시 테스트한다.
# suricata -T -c /etc/suricata/suricata.yaml
이 단계에서 다음을 검증한다.
- YAML 문법 오류
- 룰 파싱 오류
- 설정 충돌
아래와 같이 나오면 정상이다.

여기서 에러가 나면 데몬 실행 시 바로 장애로 이어진다.
3.2 기존 데몬 종료 (충돌 방지)
패키지 설치 시 systemd 서비스가 떠 있을 수 있다.
NFQUEUE 인라인 실행과 충돌을 막기 위해 먼저 종료한다.
# systemctl stop suricata
# systemctl disable suricata
4. NFQUEUE 기반 인라인 실행
4.1 Suricata 실행
# suricata -c /etc/suricata/suricata.yaml -q 0 -D
여기서 -q 0은 매우 중요하다.
4.2 -q 0 : NFQUEUE 0번 사용 의미
-q 0 (또는 iptables의 --queue-num 0)은
리눅스 커널과 Suricata가 패킷을 주고받기 위해 약속한 큐 번호다.
1) 비유: 은행 창구
- iptables (청원경찰)
→ “이 패킷은 0번 창구로 가서 검사받으세요” - Queue 0 (대기열)
→ 검사 대기 중인 패킷 공간 - Suricata (은행원)
→ “나는 0번 창구만 맡는다” (-q 0)
핵심은 이것이다.
iptables는 0번으로 보내는데
Suricata가 1번 창구(-q 1)를 보고 있으면
패킷은 처리되지 않고 트래픽이 멈춘다
큐 번호는 반드시 일치해야 한다
2) 기술적 의미 (User Space Packet Queuing)
- 원래 패킷 처리는 커널 영역에서 이뤄진다
- NFQUEUE는 패킷을 **유저 공간(Suricata)**으로 전달한다
동작 흐름:
- 커널 → NFQUEUE 0번으로 패킷 전달
- Suricata가 Queue 0을 감시
- 패킷 검사 수행
- 결과를 커널에 반환
- ACCEPT
- DROP
3) 왜 0번을 쓰는가
특별한 의미는 없다.
관습적인 기본값이다.
고성능 환경에서는 다음과 같이 확장한다.
# iptables --queue-balance 0:3
# suricata -q 0 -q 1 -q 2 -q 3
멀티 큐 + 멀티 코어 처리용이다.
이번 실습에서는 사용하지 않는다.
(3) 현재 큐 구성 상태
- iptables → NFQUEUE 0번
- Suricata →
-q 0리스닝 - 큐 번호 일치
- 인라인 처리 정상
5. 로그 확인
Suricata 동작 여부를 로그로 확인한다.
# tail -f /var/log/suricata/suricata.log
# tail -f /var/log/suricata/eve.json
- 트래픽이 흐르면 eve.json에 이벤트가 기록된다
- alert 룰 매칭 시 로그가 누적된다
6. 결론
현재 상태는 다음과 같다.
- NFQUEUE 기반 인라인 처리 중
- 모든 패킷이 Suricata를 통과
- 룰 액션은 alert 위주
- 실제 차단(drop)은 발생하지 않음
즉,
인라인 IDS 상태
차단은 룰 액션이 drop일 때만 발생한다.
운영 환경에서는 이 상태로 충분히 관찰한 뒤
오탐을 제거하고 필요한 룰만 drop으로 전환한다.
🛠 마지막 수정일: 2025.12.23
ⓒ 2025 엉뚱한 녀석의 블로그 [quirky guy's Blog]. All rights reserved. Unauthorized copying or redistribution of the text and images is prohibited. When sharing, please include the original source link.
💡 도움이 필요하신가요?
Zabbix, Kubernetes, 그리고 다양한 오픈소스 인프라 환경에 대한 구축, 운영, 최적화, 장애 분석,
광고 및 협업 제안이 필요하다면 언제든 편하게 연락 주세요.
📧 Contact: jikimy75@gmail.com
💼 Service: 구축 대행 | 성능 튜닝 | 장애 분석 컨설팅
📖 E-BooK [PDF] 전자책 (Gumroad):
Zabbix 엔터프라이즈 최적화 핸드북
블로그에서 다룬 Zabbix 관련 글들을 기반으로 실무 중심의 지침서로 재구성했습니다.
운영 환경에서 바로 적용할 수 있는 최적화·트러블슈팅 노하우까지 모두 포함되어 있습니다.
💡 Need Professional Support?
If you need deployment, optimization, or troubleshooting support for Zabbix, Kubernetes,
or any other open-source infrastructure in your production environment, or if you are interested in
sponsorships, ads, or technical collaboration, feel free to contact me anytime.
📧 Email: jikimy75@gmail.com
💼 Services: Deployment Support | Performance Tuning | Incident Analysis Consulting
📖 PDF eBook (Gumroad):
Zabbix Enterprise Optimization Handbook
A single, production-ready PDF that compiles my in-depth Zabbix and Kubernetes monitoring guides.
답글 남기기
댓글을 달기 위해서는 로그인해야합니다.