Skip to main content
Glama
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 필터로 불필요한 패킷 제외
- 패킷 수 제한
- 페이로드 크기 제한