Packet Analyzer MCP
Enables network packet capture, analysis, and threat detection via distributed client-server architecture with RabbitMQ, PostgreSQL, and external security APIs (NVD CVE, MITRE ATT&CK, AbuseIPDB).
README
Packet Analyzer MCP
네트워크 패킷을 캡처하고 분석하는 MCP (Model Context Protocol) 서버 시스템입니다. 클라이언트-서버 아키텍처로 구성되어 있으며, 여러 호스트에서 패킷을 수집하여 중앙에서 분석할 수 있습니다.
개요
이 프로젝트는 네트워크 보안 모니터링 및 분석을 위한 분산 시스템입니다:
- 클라이언트: 각 호스트에서 tcpdump로 패킷을 캡처하고 Kafka로 전송
- 서버: Kafka에서 패킷을 수집하고 PostgreSQL에 저장한 후 외부 보안 API로 분석
- RAG 시스템: 취약 IP 정보를 벡터 데이터베이스에 저장하고 시맨틱 검색으로 매칭
시스템 아키텍처
┌─────────────────┐
│ Client 1 │──┐
│ (Host A) │ │
└─────────────────┘ │
│
┌─────────────────┐ │ ┌─────────────────┐ ┌──────────────────┐
│ Client 2 │──┼────▶│ Kafka │────▶│ Server │
│ (Host B) │ │ │ Message Queue │ │ - Packet Store │
└─────────────────┘ │ └─────────────────┘ │ - Analyzer │
│ │ - RAG System │
┌─────────────────┐ │ └──────────────────┘
│ Client N │──┘ │
│ (Host N) │ ▼
└─────────────────┘ ┌──────────────────┐
│ PostgreSQL │
│ + pgvector │
│ Database │
└──────────────────┘
│
▼
┌──────────────────┐
│ External APIs │
│ - NVD CVE │
│ - MITRE ATT&CK │
│ - AbuseIPDB │
└──────────────────┘
주요 기능
클라이언트 (Packet Capture)
- tcpdump를 사용한 실시간 패킷 캡처
- Scapy를 사용한 패킷 파싱 (TCP, UDP, ICMP)
- BPF 필터 지원
- pcap 파일 파싱 및 전송
- Kafka를 통한 배치 전송
- 여러 네트워크 인터페이스 지원
서버 (Packet Analysis)
- Kafka 컨슈머로 패킷 수집
- PostgreSQL + pgvector에 패킷 저장 및 인덱싱
- 외부 보안 API 통합
- NVD CVE 데이터베이스 검색
- MITRE ATT&CK 프레임워크 매핑
- AbuseIPDB 위협 인텔리전스
- 자동 패킷 분석
- 악의적 IP 탐지
- 포트 스캔 탐지
- 안전하지 않은 프로토콜 탐지
- 비정상 트래픽 탐지
- RAG 기반 취약 IP 관리
- 벡터 임베딩을 통한 시맨틱 검색
- 취약 IP 데이터베이스 구축
- 실시간 패킷-위협 매칭
- 통계 및 리포팅
- 프로토콜 분포
- Top Talkers
- 위협 요약
설치
1. 프로젝트 클론
git clone <repository-url>
cd packet-analyzer-mcp
2. Python 패키지 설치
uv를 사용하는 경우:
uv sync
또는 pip를 사용하는 경우:
pip install -e .
3. 인프라 설정
PostgreSQL 설치 및 설정
# Ubuntu/Debian
sudo apt-get install postgresql postgresql-contrib
# macOS
brew install postgresql
brew services start postgresql
# 데이터베이스 생성
sudo -u postgres psql
CREATE DATABASE packet_analyzer;
CREATE USER packet_user WITH PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE packet_analyzer TO packet_user;
\q
RabbitMQ 설치 및 설정
# Ubuntu/Debian
sudo apt-get install rabbitmq-server
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
# macOS
brew install rabbitmq
brew services start rabbitmq
# 웹 관리 콘솔 활성화 (선택사항)
sudo rabbitmq-plugins enable rabbitmq_management
# http://localhost:15672 (guest/guest)
4. 환경 변수 설정
서버 설정 (server/.env)
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DB=packet_analyzer
POSTGRES_USER=packet_user
POSTGRES_PASSWORD=your_password
RABBITMQ_HOST=localhost
RABBITMQ_PORT=5672
RABBITMQ_USER=guest
RABBITMQ_PASSWORD=guest
RABBITMQ_QUEUE=packet_queue
# 선택사항: 외부 API 키
NVD_API_KEY=your_nvd_api_key
ABUSEIPDB_API_KEY=your_abuseipdb_api_key
클라이언트 설정 (client/.env)
RABBITMQ_HOST=your_server_ip
RABBITMQ_PORT=5672
RABBITMQ_USER=guest
RABBITMQ_PASSWORD=guest
RABBITMQ_QUEUE=packet_queue
CLIENT_ID=laptop-01
사용법
서버 실행
python -m server.server
클라이언트 실행
python -m client.client
Claude Desktop과 통합
Claude Desktop 설정 파일 (claude_desktop_config.json)에 추가:
{
"mcpServers": {
"packet-analyzer-server": {
"command": "python",
"args": ["-m", "server.server"],
"cwd": "/path/to/packet-analyzer-mcp",
"env": {
"POSTGRES_HOST": "localhost",
"POSTGRES_DB": "packet_analyzer",
"POSTGRES_USER": "packet_user",
"POSTGRES_PASSWORD": "your_password",
"RABBITMQ_HOST": "localhost"
}
},
"packet-analyzer-client": {
"command": "python",
"args": ["-m", "client.client"],
"cwd": "/path/to/packet-analyzer-mcp",
"env": {
"RABBITMQ_HOST": "localhost",
"CLIENT_ID": "my-laptop"
}
}
}
}
사용 예시
클라이언트 사용 예
사용 가능한 네트워크 인터페이스를 보여줘
→ list_interfaces 도구 실행
eth0 인터페이스에서 HTTP 트래픽 100개를 캡처해서 서버로 전송해줘
→ capture_and_send 도구 실행 (interface: eth0, filter: "tcp port 80", packet_count: 100)
/home/user/capture.pcap 파일을 분석을 위해 서버로 전송해줘
→ send_pcap_file 도구 실행
서버 사용 예
최근 1시간 동안의 패킷을 분석해줘
→ analyze_packets 도구 실행
192.168.1.100 IP의 위협 정보를 알려줘
→ query_threats 도구 실행
오늘 패킷 통계를 보여줘 (프로토콜 분포, Top Talkers)
→ get_statistics 도구 실행
SMB 취약점을 검색해줘
→ search_cve 도구 실행 (keyword: "SMB")
포트 스캔 관련 MITRE ATT&CK 기법을 알려줘
→ check_mitre_technique 도구 실행 (keyword: "port scanning")
최근 HIGH 심각도 위협 목록을 보여줘
→ get_recent_threats 도구 실행 (severity: "HIGH")
보안 고려사항
권한 관리
- 패킷 캡처는 관리자 권한이 필요합니다
- 최소 권한 원칙을 따르세요
- 프로덕션 환경에서는 전용 사용자 계정을 사용하세요
데이터 보안
- 캡처된 패킷에는 민감한 정보가 포함될 수 있습니다
- 저장된 데이터에 대한 접근 제어를 구현하세요
- 불필요한 데이터는 정기적으로 삭제하세요
- 데이터베이스 암호화를 고려하세요
네트워크 보안
- RabbitMQ와 PostgreSQL에 대한 접근을 제한하세요
- TLS/SSL을 사용하여 통신을 암호화하세요
- 방화벽 규칙을 적절히 구성하세요
준수 사항
- 조직의 보안 정책을 준수하세요
- 법적 요구사항을 확인하세요 (예: GDPR, HIPAA)
- 패킷 캡처 전에 적절한 승인을 받으세요
기술 스택
| 구성 요소 | 기술 |
|---|---|
| 언어 | Python 3.11+ |
| MCP SDK | mcp |
| 데이터베이스 | PostgreSQL 12+ |
| 메시지 큐 | RabbitMQ 3.8+ |
| 패킷 캡처 | tcpdump, Scapy |
| 외부 API | NVD CVE, MITRE ATT&CK, AbuseIPDB |
| 패키지 관리 | uv |
프로젝트 구조
packet-analyzer-mcp/
├── server/ # 서버 패키지
│ ├── __init__.py
│ ├── server.py # MCP 서버
│ ├── database.py # PostgreSQL 연결
│ ├── message_queue.py # RabbitMQ 컨슈머
│ ├── analyzers.py # 패킷 분석 로직
│ ├── external_apis.py # 외부 API 클라이언트
│ └── README.md # 서버 문서
├── client/ # 클라이언트 패키지
│ ├── __init__.py
│ ├── client.py # MCP 클라이언트
│ ├── packet_capture.py # tcpdump 래퍼
│ ├── message_queue.py # RabbitMQ 프로듀서
│ └── README.md # 클라이언트 문서
├── pyproject.toml # 프로젝트 설정
├── main.py # 기존 엔트리 포인트
└── README.md # 이 파일
문제 해결
일반적인 문제
-
Permission Denied (tcpdump)
- sudo 권한 확인
- setcap로 권한 부여:
sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
-
RabbitMQ 연결 실패
- 서비스 상태 확인:
sudo systemctl status rabbitmq-server - 포트 확인:
sudo netstat -tlnp | grep 5672 - 방화벽 규칙 확인
- 서비스 상태 확인:
-
PostgreSQL 연결 실패
- 서비스 상태 확인:
sudo systemctl status postgresql - 인증 설정 확인:
/etc/postgresql/.../pg_hba.conf - 데이터베이스 및 사용자 확인
- 서비스 상태 확인:
-
패킷이 캡처되지 않음
- 네트워크 트래픽 존재 확인
- BPF 필터 구문 확인
- 인터페이스 이름 확인:
ip link show
디버깅
# RabbitMQ 큐 상태 확인
sudo rabbitmqctl list_queues
# PostgreSQL 연결 테스트
psql -h localhost -U packet_user -d packet_analyzer
# 패킷 캡처 테스트
sudo tcpdump -i any -c 10
# Python 모듈 테스트
python -c "import mcp, asyncpg, pika, scapy.all"
성능 최적화
데이터베이스
- 인덱스가 적절히 생성되었는지 확인
- 정기적으로 VACUUM 실행
- 오래된 데이터는 아카이브 또는 삭제
RabbitMQ
- 메시지 크기 최적화
- 배치 전송 사용
- 적절한 QoS 설정
패킷 캡처
- BPF 필터로 불필요한 패킷 제외
- 패킷 수 제한
- 페이로드 크기 제한
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.