Packet Analyzer MCP
by choihyuunmin
README.md
# 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. 프로젝트 클론
```bash
git clone <repository-url>
cd packet-analyzer-mcp
```
### 2. Python 패키지 설치
uv를 사용하는 경우:
```bash
uv sync
```
또는 pip를 사용하는 경우:
```bash
pip install -e .
```
### 3. 인프라 설정
#### PostgreSQL 설치 및 설정
```bash
# 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 설치 및 설정
```bash
# 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)
```bash
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)
```bash
RABBITMQ_HOST=your_server_ip
RABBITMQ_PORT=5672
RABBITMQ_USER=guest
RABBITMQ_PASSWORD=guest
RABBITMQ_QUEUE=packet_queue
CLIENT_ID=laptop-01
```
## 사용법
### 서버 실행
```bash
python -m server.server
```
### 클라이언트 실행
```bash
python -m client.client
```
### Claude Desktop과 통합
Claude Desktop 설정 파일 (`claude_desktop_config.json`)에 추가:
```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 # 이 파일
```
## 문제 해결
### 일반적인 문제
1. **Permission Denied (tcpdump)**
- sudo 권한 확인
- setcap로 권한 부여: `sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump`
2. **RabbitMQ 연결 실패**
- 서비스 상태 확인: `sudo systemctl status rabbitmq-server`
- 포트 확인: `sudo netstat -tlnp | grep 5672`
- 방화벽 규칙 확인
3. **PostgreSQL 연결 실패**
- 서비스 상태 확인: `sudo systemctl status postgresql`
- 인증 설정 확인: `/etc/postgresql/.../pg_hba.conf`
- 데이터베이스 및 사용자 확인
4. **패킷이 캡처되지 않음**
- 네트워크 트래픽 존재 확인
- BPF 필터 구문 확인
- 인터페이스 이름 확인: `ip link show`
### 디버깅
```bash
# 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 필터로 불필요한 패킷 제외
- 패킷 수 제한
- 페이로드 크기 제한
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues