Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Krawl — Krawl은 사용자 정의 가능하고 경량화된 클라우드 네이티브 웹 디셉션 서버이자 안티 크롤러로, 실제와 같은 무작위 생성 디코이 데이터와 AI 생성 HTML 템플릿을 사용하여 낮은 수준의 취약점을 가진 가짜 웹 애플리케이션을 생성합니다. | Kitploit
도구/GitHubGitHub/blessedrebus/krawl
Container SecurityInformation GatheringWeb SecurityNetwork SecurityCloud SecurityThreat IntelligenceIncident ResponseAnti-BotAI Security
GitHubblessedrebus/krawl

Krawl

Krawl은 사용자 정의 가능하고 경량화된 클라우드 네이티브 웹 디셉션 서버이자 안티 크롤러로, 실제와 같은 무작위 생성 디코이 데이터와 AI 생성 HTML 템플릿을 사용하여 낮은 수준의 취약점을 가진 가짜 웹 애플리케이션을 생성합니다.

558455시간 37분 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기웹사이트

Krawl

공격자와 웹 크롤러의 악의적인 활동을 기만적인 웹 페이지, 가짜 자격 증명, 카나리아 토큰을 통해 탐지하고 추적하도록 설계된 현대적이고 사용자 지정 가능한 웹 허니팟 서버입니다.

라이선스 릴리스
GitHub 컨테이너 레지스트리 쿠버네티스 Helm 차트

목차

  • 데모
  • Krawl이란 무엇인가?
  • Krawl 대시보드
  • 배포 모드
  • Krawl 차단 목록
  • 빠른 시작
    • Docker 실행
    • Docker Compose
    • Kubernetes
    • Uvicorn (Python)
  • 구성
    • config.yaml
    • 환경 변수
  • 악성 IP 차단
  • IP 평판
  • 리버스 프록시 또는 CDN 뒤에서 실행
  • 메트릭 및 모니터링
  • 추가 문서
  • AI를 이용한 기만
  • 기여

데모

팁: robots.txt 경로를 크롤링하면 추가 재미를 볼 수 있습니다.

Krawl URL: http://demo.krawlme.com

대시보드 보기 http://demo.krawlme.com/das_dashboard

Krawl이란 무엇인가?

Krawl은 악의적인 공격자, 웹 크롤러, 자동화된 스캐너를 탐지·지연·분석하도록 설계된 클라우드 네이티브 기만 서버입니다.

실제처럼 보이는 가짜 웹 애플리케이션을 생성하여 관리자 패널, 구성 파일, 노출된 가짜 자격 증명과 같은 손쉬운 표적들로 가득 채워 의심스러운 활동을 유인하고 식별합니다.

대시보드

Krawl은 공격자의 리소스를 낭비하게 만들어 악의적인 행위와 정상적인 크롤러를 명확하게 구분하도록 돕습니다.

주요 기능:

  • AI 생성 기만 페이지: 공격자가 직접 가짜 취약 공격 표면을 생성하도록 하세요
  • 스파이더 트랩 페이지: spidertrap 프로젝트를 기반으로 크롤러 리소스를 낭비하는 무한 랜덤 링크
  • 가짜 로그인 페이지: WordPress, phpMyAdmin, 관리자 패널
  • 허니팟 경로: 스캐너를 잡기 위해 robots.txt에 광고됨
  • 가짜 자격 증명: 실제처럼 보이는 사용자 이름, 비밀번호, API 키
  • 카나리아 토큰 통합: 외부 경고 트리거
  • 랜덤 서버 헤더: 서버 헤더와 버전을 기반으로 공격을 혼란시킴
  • 실시간 대시보드: 의심스러운 활동 모니터링
  • 사용자 지정 가능한 워드리스트: 쉬운 JSON 기반 구성
  • 랜덤 오류 주입: 실제 서버 동작 모방

Krawl을 다른 서비스와 함께 리버스 프록시 뒤에 쉽게 노출하여 웹 크롤러와 악의적인 사용자로부터 해당 서비스를 보호할 수 있습니다. 자세한 내용은 리버스 프록시 문서를 참조하세요.

사용 사례

Krawl 대시보드

Krawl은 시작 시 생성되는 임의의 비밀 경로 또는 KRAWL_DASHBOARD_SECRET_PATH를 통해 구성된 사용자 지정 경로에서 접근할 수 있는 종합적인 대시보드를 제공합니다. 이를 통해 허니팟을 스캔하는 공격자로부터 대시보드를 숨길 수 있습니다.

대시보드는 6개의 탭으로 구성됩니다:

  • 개요(Overview): 공격 활동의 개괄 보기: IP 출처의 인터랙티브 지도, 최근 의심스러운 요청, 주요 IP, User-Agent 및 경로.

geoip

  • 공격(Attacks): 캡처된 자격 증명, 허니팟 트리거, 탐지된 공격 유형(SQLi, XSS, 경로 탐색 등)에 대한 상세 분석과 차트 및 테이블.

공격 유형

  • IP 인사이트(IP Insight): 선택한 IP의 심층 포렌식 뷰: 지리적 위치, ISP/ASN 정보, 평판 플래그, 행동 타임라인, 공격 유형 분포, 전체 접근 기록.

ipinsight

또한 대시보드 비밀번호로 인증한 후에는 보호된 탭 두 개가 제공됩니다:

  • 추적 IP(Tracked IPs): 시간 경과에 따라 모니터링하려는 IP 주소의 관심 목록을 유지합니다.
  • IP 차단 목록(IP Banlist): IP 차단을 관리하고, 탐지된 공격자를 확인하며, 차단 목록을 raw 또는 IPTables 형식으로 내보냅니다.
  • 기만(Deception): AI 생성 페이지를 관리하고, 내보내거나 새 페이지를 가져옵니다.

자세한 내용은 대시보드 문서를 참조하세요.

배포 모드

Krawl은 config.yaml의 mode 설정 또는 KRAWL_MODE 환경 변수로 제어되는 두 가지 배포 모드를 지원합니다.

Standalone: 개발 환경이나 요청 수가 적은 홈랩에 적합합니다. 추가 구성이 전혀 필요 없으며 Krawl을 실행하기만 하면 작동합니다.

  • 외부 종속성 없는 단일 컨테이너 배포
  • 더 낮은 RAM 및 리소스 사용량

Scalable: 프로덕션 환경이나 트래픽이 많은 허니팟을 위해 설계되었습니다. Helm 차트는 기본적으로 이 모드를 사용합니다.

  • Redis 다중 계층 캐싱으로 더 빠르고 응답성 높은 대시보드
  • PostgreSQL 앞에서 Redis가 핫패스 캐시로 작동하여 디스크 I/O 절감
  • 로드 밸런서 뒤에서 Krawl 복제본 수를 늘리는 수평 확장

자세한 구성, Docker Compose 예제, Kubernetes/Helm 설정, 단계별 마이그레이션 지침은 배포 모드 문서를 참조하세요.

Krawl 차단 목록

Krawl은 허니팟 함정을 유발한 공격자의 IP 주소로 구성된 정기적으로 업데이트되는 banlist.txt를 유지 관리합니다. 차단 목록은 매주 게시되며 다운로드할 수 있어, 커뮤니티가 Krawl을 사용하지 않더라도 알려진 악의적 행위자를 사전에 차단하는 데 도움이 됩니다.

차단 목록은 다음에서 직접 가져올 수도 있습니다: https://demo.krawlme.com/das_dashboard/api/export-ips?categories=attacker&fwtype=raw

인스턴스 간 차단 목록 공유

Krawl 인스턴스는 차단 목록을 연합할 수 있습니다. 각 인스턴스는 자체 목록을 인증되지 않은 경로에 게시하고 다른 인스턴스(또는 일반 텍스트 IP 목록)의 목록을 가져올 수 있습니다. 가져온 IP는 로컬 차단 결정에 병합되어 대시보드에 표시됩니다.```yaml banlist:

Public, unauthenticated download path for this instance's banlist.

Supports the same ?categories= and ?fwtype= parameters as the main API.

Empty = disabled.

export_path: "/public_banlist.txt"

Upstream banlists to fetch and merge. Plain ".txt" lists work too.

sources: - "https://demo.krawlme.com/das_dashboard/api/export-ips?categories=attacker&fwtype=raw" - "https://krawl.example.com/public_banlist.txt"

refresh_interval: 3600 # seconds between fetches

root@kitploit:~
## 빠른 시작

### Docker 실행

최신 이미지로 Krawl을 독립 실행 모드로 실행합니다:```bash
docker run -d \
  -p 5000:5000 \
  -e KRAWL_DASHBOARD_SECRET_PATH="/my-secret-dashboard" \
  -e KRAWL_DASHBOARD_PASSWORD="my-secret-password" \
  -v krawl-data:/app/data \
  --name krawl \
  ghcr.io/blessedrebus/krawl:latest

http://localhost:5000에서 서버에 접속하세요

Docker Compose

두 가지 배포 모드 중 하나로 docker-compose.yaml을 생성하세요.

Standalone: Sqlite 스토리지를 사용하는 Krawl 서버만:```yaml services: krawl: image: ghcr.io/blessedrebus/krawl:latest container_name: krawl-server ports: - "5000:5000" environment: - CONFIG_LOCATION=config.yaml # - KRAWL_DASHBOARD_PASSWORD=my-secret-password volumes: - ./config.yaml:/app/config.yaml:ro - krawl-data:/app/data restart: unless-stopped

volumes: krawl-data:

root@kitploit:~
**확장 가능**: PostgreSQL 및 Redis 사용:

> [!CAUTION]
> 아래 예시는 **기본 비밀번호**(`krawl`/`krawl`)를 사용합니다. 프로덕션에 배포하기 전에 **반드시 변경하세요.**```yaml
services:
  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: krawl
      POSTGRES_USER: krawl
      POSTGRES_PASSWORD: krawl
    volumes:
      - postgres_data:/var/lib/postgresql/data
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U krawl -d krawl"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    volumes:
      - redis_data:/data
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

  krawl:
    image: ghcr.io/blessedrebus/krawl:latest
    container_name: krawl-server
    ports:
      - "5000:5000"
    environment:
      - CONFIG_LOCATION=config.yaml
      - KRAWL_MODE=scalable
      - KRAWL_POSTGRES_HOST=postgres
      - KRAWL_POSTGRES_PORT=5432
      - KRAWL_POSTGRES_USER=krawl
      - KRAWL_POSTGRES_PASSWORD=krawl
      - KRAWL_POSTGRES_DATABASE=krawl
      - KRAWL_REDIS_HOST=redis
      - KRAWL_REDIS_PORT=6379
      # - KRAWL_DASHBOARD_PASSWORD=my-secret-password
    volumes:
      - ./config.yaml:/app/config.yaml:ro
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy

volumes:
  postgres_data:
  redis_data:

배포하려면 다음을 실행하세요.```bash docker compose up -d

root@kitploit:~
프로덕션에 바로 사용할 수 있는 compose 파일은 [`docker/`](https://github.com/blessedrebus/krawl/blob/HEAD/docker/) 디렉토리에서도 사용할 수 있습니다. **개발**용(소스에서 빌드하고 핫 리로드를 지원하는)으로는 [`docker/dev/`](https://github.com/blessedrebus/krawl/blob/HEAD/docker/dev/) 디렉토리의 compose 파일을 사용하세요.

두 모드에 대한 자세한 내용은 [배포 모드](https://github.com/blessedrebus/krawl/blob/HEAD/docs/deployment-modes.md)를 참조하세요.

### Kubernetes
**Krawl은 Kubernetes에서도 네이티브로 사용할 수 있습니다**. 설치는 [manifest를 통해](https://github.com/blessedrebus/krawl/blob/HEAD/kubernetes/README.md) 또는 [Helm 차트를 사용하여](https://github.com/blessedrebus/krawl/blob/HEAD/helm/README.md) 수행할 수 있습니다.

Helm 차트는 PostgreSQL 및 Redis가 번들로 제공되며 **기본적으로 확장 가능한 모드**를 사용합니다:```bash
helm install krawl oci://ghcr.io/blessedrebus/krawl-chart --version 2.3.0 \
  -n krawl-system --create-namespace \
  --set postgres.password=your-password \
  --set redis.password=your-redis-password \
  --set dashboardPassword=your-dashboard-password \
  --set config.dashboard.secret_path=/my-secret-dashboard

두 모드 모두를 위한 최소 예시 values 파일이 제공됩니다:

  • values-minimal.yaml ---> Scalable (기본값)
  • values-standalone.yaml ---> Standalone

전체 구성 및 마이그레이션 지침은 배포 모드 및 차트 문서를 참조하세요.

Uvicorn (Python)

로컬 개발 또는 테스트를 위해 Python 3.13+ 및 uvicorn으로 Krawl을 직접 실행하세요:```bash pip install -r requirements.txt uvicorn app:app --host 0.0.0.0 --port 5000 --app-dir src --no-server-header

root@kitploit:~
`http://localhost:5000` 서버에 접속하세요


## 구성
Krawl은 **구성 계층 구조**를 사용하며, **환경 변수가 구성 파일보다 우선합니다**. 이 방식은 Docker 배포 및 빠른 즉시 사용자 지정에 권장됩니다.

### config.yaml을 통한 구성
Docker Compose 또는 Helm chart 배포와 같은 고급 구성에는 [config.yaml](https://github.com/blessedrebus/krawl/blob/HEAD/config.yaml) 파일을 사용할 수 있습니다.

### 환경 변수를 통한 구성

모든 설정은 환경 변수로 제공할 수 있으며, 이는 `config.yaml`을 재정의합니다.
변수 이름은 `KRAWL_`에 설정 경로를 대문자로 붙인 형태입니다. 예를 들어 `dashboard.password`는
`KRAWL_DASHBOARD_PASSWORD`가 됩니다.

<details>
<summary><b>서버 및 링크 생성</b> (12개 변수)</summary>

Krawl이 자신을 표현하고 생성된 페이지 미로를 구성하는 방식입니다.

| 환경 변수 | 설명 | 기본값 |
|----------------------|-------------|---------|
| `CONFIG_LOCATION` | yaml 구성 파일 경로 | `config.yaml` |
| `KRAWL_PORT` | 서버 수신 포트 | `5000` |
| `KRAWL_DELAY` | 응답 지연 시간(밀리초) | `100` |
| `KRAWL_SERVER_HEADER` | 기만용 HTTP Server 헤더 | `""` |
| `KRAWL_LINKS_LENGTH_RANGE` | 링크 길이 범위 `min,max` | `5,15` |
| `KRAWL_LINKS_PER_PAGE_RANGE` | 페이지당 링크 수 `min,max` | `10,15` |
| `KRAWL_CHAR_SPACE` | 링크 생성에 사용되는 문자 | `abcdefgh...` |
| `KRAWL_MAX_COUNTER` | 초기 카운터 값 | `10` |
| `KRAWL_PROBABILITY_ERROR_CODES` | 오류 응답 확률 (0-100%) | `0` |
| `KRAWL_INFINITE_PAGES_FOR_MALICIOUS` | 악성 IP에 무한 페이지 제공 | `true` |
| `KRAWL_MAX_PAGES_LIMIT` | 크롤러의 최대 페이지 제한 | `250` |
| `KRAWL_BAN_DURATION_SECONDS` | 요청 제한 IP의 차단 시간(초) | `600` |

</details>

<details>
<summary><b>대시보드, 메트릭 및 로깅</b> (8개 변수)</summary>

대시보드 접근, 캐시 워밍업, Prometheus 및 로그 수준.

| 환경 변수 | 설명 | 기본값 |
|----------------------|-------------|---------|
| `KRAWL_DASHBOARD_SECRET_PATH` | 사용자 지정 대시보드 경로 | 자동 생성 |
| `KRAWL_DASHBOARD_PASSWORD` | 보호된 대시보드 패널용 비밀번호 | 자동 생성 |
| `KRAWL_DASHBOARD_CACHE_WARMUP` | 즉각적인 페이지 로드를 위해 5분마다 대시보드 데이터 사전 계산 | `true` |
| `KRAWL_DASHBOARD_WARMUP_PAGES` | 테이블 패널당 사전 워밍업할 페이지 수 | `10` |
| `KRAWL_DASHBOARD_WARMUP_AGGREGATION` | 제로 쿼리 제공을 위한 전체 top_paths/top_ua 집계 사전 계산 | `false` |
| `KRAWL_DASHBOARD_TOP_N_MIN_COUNT` | 상위 경로/사용자 에이전트 패널의 최소 접근 횟수 (비활성화하려면 1로 설정) | `5` |
| `KRAWL_METRICS_ENABLED` | `/<dashboard_path>/metrics`에서 Prometheus 메트릭 노출 | `true` |
| `KRAWL_LOG_LEVEL` | 애플리케이션 로그 수준 (`DEBUG`, `INFO`, `WARNING`, `ERROR`) | `INFO` |

</details>

<details>
<summary><b>데이터베이스, 보존 및 백업</b> (6개 변수)</summary>

저장 위치, 데이터 보존 기간 및 덤프 작업.

| 환경 변수 | 설명 | 기본값 |
|----------------------|-------------|---------|
| `KRAWL_DATABASE_PATH` | 데이터베이스 파일 위치 | `data/krawl.db` |
| `KRAWL_DATABASE_PERSIST_SUSPICIOUS_ONLY` | 의심스러운 요청만 액세스 로그에 영구 저장 | `false` |
| `KRAWL_DATABASE_RETENTION_DAYS` | 데이터베이스에 데이터를 보존할 일수 | `30` |
| `KRAWL_BACKUPS_PATH` | 데이터베이스 덤프가 저장되는 경로 | `backups` |
| `KRAWL_BACKUPS_CRON` | 백업 작업 일정을 제어하는 cron 표현식 | `*/30 * * * *` |
| `KRAWL_BACKUPS_ENABLED` | DB 덤프 작업 활성화 여부 | `true` |

</details>

<details>
<summary><b>트랩: 타르핏, 기만 페이지 및 카나리</b> (6개 변수)</summary>

옵트인 트랩 및 공격자에게 제공되는 페이지.

| 환경 변수 | 설명 | 기본값 |
|----------------------|-------------|---------|
| `KRAWL_TARPIT_ENABLED` | 느린 응답과 무작위 텍스트로 AI 에이전트 트랩 | `false` |
| `KRAWL_TARPIT_DELAY_SECONDS` | 타르핏 활성화 시 응답당 추가 지연 시간(초) | `5` |
| `KRAWL_DECEPTION_IMPORT_PAGES` | 시작 시 `src/templates/deception/`에서 기만 페이지 자동 가져오기 | `true` |
| `KRAWL_CUSTOM_TEMPLATE_PATH` | 컨테이너 내 사용자 지정 HTML 템플릿 경로. 템플릿에는 `{counter}` 및 `{content}` 자리 표시자가 포함되어야 합니다. | `/templates/custom_page.html` |
| `KRAWL_CANARY_TOKEN_URL` | 외부 카나리 토큰 URL | None |
| `KRAWL_CANARY_TOKEN_TRIES` | 카나리 토큰을 표시하기 전 요청 수 | `10` |

</details>

<details>
<summary><b>IP 평판 분석기</b> (6개 변수)</summary>

IP가 어떻게 분류되는지를 결정하는 임계값.

| 환경 변수 | 설명 | 기본값 |
|----------------------|-------------|---------|
| `KRAWL_HTTP_RISKY_METHODS_THRESHOLD` | 위험한 HTTP 메서드 탐지 임계값 | `0.1` |
| `KRAWL_VIOLATED_ROBOTS_THRESHOLD` | robots.txt 위반 임계값 | `0.1` |
| `KRAWL_UNEVEN_REQUEST_TIMING_THRESHOLD` | 타이밍에 대한 변동 계수 임계값 | `0.5` |
| `KRAWL_UNEVEN_REQUEST_TIMING_TIME_WINDOW_SECONDS` | 요청 타이밍 분석 시간 창(초) | `300` |
| `KRAWL_USER_AGENTS_USED_THRESHOLD` | 다중 사용자 에이전트 탐지 임계값 | `2` |
| `KRAWL_ATTACK_URLS_THRESHOLD` | 공격 URL 탐지 임계값 | `1` |

</details>

<details>
<summary><b>차단 목록 및 무시 IP</b> (4개 변수)</summary>

다른 인스턴스와 차단 목록 공유 및 추적하지 않을 트래픽.

| 환경 변수 | 설명 | 기본값 |
|----------------------|-------------|---------|
| `KRAWL_IGNORED_IPS` | 쉼표로 구분된 IP/CIDR 목록으로, 추적, 차단 또는 내보내기되지 않음 | 루프백, RFC1918, 링크-로컬, CGNAT |
| `KRAWL_BANLIST_EXPORT_PATH` | 공개 차단 목록 다운로드 경로, 예: `/public_banlist.txt` (비어 있음 = 비활성화) | `""` |
| `KRAWL_BANLIST_SOURCES` | 가져와 병합할 쉼표로 구분된 업스트림 차단 목록 URL | Krawl 커뮤니티 차단 목록 |
| `KRAWL_BANLIST_REFRESH_INTERVAL` | 업스트림 차단 목록 가져오기 사이의 시간(초) | `3600` |

</details>

<details>
<summary><b>AI 생성 기만 페이지</b> (10개 변수)</summary>

[AI 생성 문서](https://github.com/blessedrebus/krawl/blob/HEAD/docs/ai_generation.md)를 참조하세요.

| 환경 변수 | 설명 | 기본값 |
|----------------------|-------------|---------|
| `KRAWL_AI_ENABLED` | AI 생성 기만 페이지 활성화 | `false` |
| `KRAWL_AI_PROVIDER` | AI 공급자 (`"openrouter"` 또는 `"openai"`) | `"openrouter"` |
| `KRAWL_AI_OPENAI_BASE_URL` | 사용자 지정 API 엔드포인트용 선택적 OpenAI Base URL | `"https://api.openai.com/v1"` |
| `KRAWL_AI_API_KEY` | AI 공급자용 API 키 | `None` |
| `KRAWL_AI_MODEL` | 페이지 생성에 사용할 AI 모델 | `"nvidia/nemotron-3-super-120b-a12b:free"` |
| `KRAWL_AI_TIMEOUT` | AI API 호출의 요청 시간 제한(초) | `60` |
| `KRAWL_AI_MAX_DAILY_REQUESTS` | 하루 최대 AI 생성 페이지 수 (0 = 무제한) | `0` |
| `KRAWL_AI_PROMPT` | AI 페이지 생성용 사용자 지정 프롬프트 템플릿 | 기본 프롬프트 |
| `KRAWL_AI_REASONING_ENABLED` | 추론 토큰 활성화 (OpenRouter 추론 모델 전용) | `false` |
| `KRAWL_AI_REASONING_EFFORT` | 추론 강도 (`none`, `minimal`, `low`, `medium`, `high`, `xhigh`) | `"medium"` |

</details>

<details>
<summary><b>확장 모드: PostgreSQL 및 Redis</b> (13개 변수)</summary>

`KRAWL_MODE=scalable`일 때만 사용됩니다. [배포 모드](https://github.com/blessedrebus/krawl/blob/HEAD/docs/deployment-modes.md)를 참조하세요.

| 환경 변수 | 설명 | 기본값 |
|----------------------|-------------|---------|
| `KRAWL_MODE` | 배포 모드 (`standalone` 또는 `scalable`) | `standalone` |
| `KRAWL_POSTGRES_HOST` | PostgreSQL 호스트 이름 | `localhost` |
| `KRAWL_POSTGRES_PORT` | PostgreSQL 포트 | `5432` |
| `KRAWL_POSTGRES_USER` | PostgreSQL 사용자 이름 | `krawl` |
| `KRAWL_POSTGRES_PASSWORD` | PostgreSQL 비밀번호 | `krawl` |
| `KRAWL_POSTGRES_DATABASE` | PostgreSQL 데이터베이스 이름 | `krawl` |
| `KRAWL_REDIS_HOST` | Redis 호스트 이름 | `localhost` |
| `KRAWL_REDIS_PORT` | Redis 포트 | `6379` |
| `KRAWL_REDIS_DB` | Redis 데이터베이스 번호 | `0` |
| `KRAWL_REDIS_PASSWORD` | Redis 비밀번호 | None |
| `KRAWL_REDIS_CACHE_TTL` | 대시보드 워밍업 데이터의 TTL(초) | `600` |
| `KRAWL_REDIS_HOT_TTL` | 핫 경로 데이터(차단 정보, IP 카테고리)의 TTL(초) | `30` |
| `KRAWL_REDIS_TABLE_TTL` | 페이지네이션된 대시보드 테이블의 TTL(초) | `120` |

</details>


예를 들어```bash
# Set canary token
export CONFIG_LOCATION="config.yaml"
export KRAWL_CANARY_TOKEN_URL="http://your-canary-token-url"

# Set number of pages range (min,max format)
export KRAWL_LINKS_PER_PAGE_RANGE="5,25"

# Set analyzer thresholds
export KRAWL_HTTP_RISKY_METHODS_THRESHOLD="0.2"
export KRAWL_VIOLATED_ROBOTS_THRESHOLD="0.15"

# Set custom dashboard path and password
export KRAWL_DASHBOARD_SECRET_PATH="/my-secret-dashboard"
export KRAWL_DASHBOARD_PASSWORD="my-secret-password"

환경 변수를 사용한 Docker 실행 예시 (독립 실행 모드):```bash docker run -d
-p 5000:5000
-e KRAWL_MODE=standalone
-e KRAWL_PORT=5000
-e KRAWL_DELAY=100
-e KRAWL_DASHBOARD_PASSWORD="my-secret-password"
-e KRAWL_CUSTOM_TEMPLATE_PATH="/templates/custom_page.html"
-e KRAWL_CANARY_TOKEN_URL="http://your-canary-token-url"
--name krawl
ghcr.io/blessedrebus/krawl:latest

root@kitploit:~
## Krawl을 사용하여 악성 IP 차단하기
Krawl은 평판 기반 시스템을 사용하여 공격자 IP 주소를 분류하며, 방화벽 통합을 위한 IP 목록을 내보내는 두 가지 방법을 제공합니다.

`/api/export-ips` 엔드포인트는 데이터베이스를 직접 쿼리하며 IP 카테고리(`attacker`, `bad_crawler`, `regular_user`, `good_crawler`)와 출력 형식(`raw`, `iptables`, `nftables`)별 필터링을 지원합니다.```bash
curl "https://your-krawl-instance/<DASHBOARD-PATH>/api/export-ips?categories=attacker&fwtype=raw"

This enables automatic blocking of malicious traffic across various platforms:

  • OPNsense 및 pfSense
  • RouterOS
  • IPtables 및 Nftables
  • Fail2Ban

전체 API 매개변수, 예제 및 사용자 정의 방화벽 형식 추가에 대해서는 Firewall Exporters 문서를 참조하세요.

Krawl은 차단된 IP를 WAF 규칙에 사용하기 위해 Cloudflare 계정 IP 목록으로 직접 푸시할 수도 있습니다. 동기화는 백그라운드 작업으로 실행되며 구성 가능한 간격으로 전체 교체를 통해 목록을 업데이트합니다. Cloudflare Banlist Sync 문서를 참조하세요.

IP 평판

Krawl은 최근 트래픽을 분석하여 IP 평판 점수를 구축하고 지속적으로 업데이트하는 작업을 사용합니다. 주기적으로 실행되며 여러 동작 지표를 기반으로 각 활성 IP 주소를 평가하여 공격자, 크롤러 또는 일반 사용자로 분류합니다. 임계값은 완전히 사용자 정의할 수 있습니다.

IP 평판

분석에는 다음이 포함됩니다:

  • 위험한 HTTP 메서드 사용 (예: POST, PUT, DELETE 비율)
  • Robots.txt 위반
  • 요청 타이밍 이상 징후 (버스트 또는 불규칙한 패턴)
  • User-Agent 일관성
  • 공격 URL 탐지 (예: SQL 인젝션, XSS 패턴)

각 신호는 가중 점수 모델에 기여하여 평판 범주를 할당합니다:

  • attacker
  • bad_crawler
  • good_crawler
  • regular_user
  • unknown (데이터 부족의 경우)

결과 점수와 메트릭은 데이터베이스에 저장되며 Krawl이 대시보드, 평판 추적, IP 차단 또는 방화벽 통합과 같은 자동 완화 조치를 구동하는 데 사용됩니다.

AI 생성 디셉션 페이지

Krawl은 OpenRouter 또는 OpenAI API의 AI 모델을 사용하여 실제와 같은 디셉션 페이지를 자동으로 생성할 수 있습니다. 이 기능은 수동 페이지 생성 없이 공격자를 속이기 위해 고유하고 그럴듯한 허니팟 페이지를 즉석에서 생성합니다.

주요 기능:

  • 동적 생성: 모든 요청 경로에 대해 고유한 HTML 페이지를 생성합니다
  • 스마트 캐싱: 중복 API 호출을 피하기 위해 생성된 페이지를 캐시합니다
  • 일일 속도 제한: 구성 가능한 요청 한도로 API 비용을 제어합니다
  • 다중 제공자: OpenRouter(무료 옵션) 및 OpenAI 지원
  • 우아한 폴백: 비활성화되거나 한도에 도달하면 표준 허니팟으로 폴백합니다
  • 캐시 제공: AI가 비활성화된 경우에도 이전에 생성된 페이지를 제공합니다

빠른 설정:```yaml ai: enabled: true provider: "openrouter" openai_base_url: "your-custom-base-url" api_key: "your-api-key" model: "nvidia/nemotron-3-super-120b-a12b:free" timeout: 60 max_daily_requests: 10

root@kitploit:~
자세한 구성 및 사용 방법은 [AI 생성 문서](https://github.com/blessedrebus/krawl/blob/HEAD/docs/ai_generation.md)를 참조하세요.

또한 PR을 열어 **디셉션 템플릿을 기여**할 수 있습니다. [디셉션 템플릿 기여](https://github.com/blessedrebus/krawl/blob/HEAD/docs/deception_pages.md#contributing-deception-templates-via-pr)를 참조하세요.

## 역방향 프록시 또는 CDN 뒤에서 실행

**NGINX, Traefik 및 CloudFlare와 같은 기타 프록시**는 Krawl이 실제 IP를 볼 수 있도록 헤더 전달이 필요합니다. 구성 예시와 전체 헤더 목록은 [역방향 프록시 문서](https://github.com/blessedrebus/krawl/blob/HEAD/docs/reverse-proxy.md)를 참조하세요.

## 메트릭 및 모니터링

Krawl은 `/<dashboard_secret_path>/metrics`에서 [Prometheus](https://prometheus.io/) 메트릭을 노출하며(기본적으로 활성화됨), [`grafana-dashboard.json`](https://github.com/blessedrebus/krawl/blob/HEAD/grafana-dashboard.json)에 바로 가져올 수 있는 [Grafana](https://grafana.com/) 대시보드를 제공합니다.

전체 메트릭 목록, Grafana 가져오기 단계 및 Prometheus / Kubernetes(`ServiceMonitor`) 스크래핑 설정은 [모니터링 문서](https://github.com/blessedrebus/krawl/blob/HEAD/docs/monitoring.md)를 참조하세요.

## 추가 문서

| 주제 | 설명 |
|-------|-------------|
| [AI 생성](https://github.com/blessedrebus/krawl/blob/HEAD/docs/ai_generation.md) | OpenRouter 또는 OpenAI를 사용하여 AI 생성 디셉션 페이지 구성 |
| [디셉션 페이지](https://github.com/blessedrebus/krawl/blob/HEAD/docs/deception_pages.md) | 디셉션 페이지 관리, 가져오기 및 내보내기; 대량 작업 및 날짜 기반 필터링 |
| [배포 모드](https://github.com/blessedrebus/krawl/blob/HEAD/docs/deployment-modes.md) | 독립 실행형(SQLite) vs 확장형(PostgreSQL + Redis) 모드, 구성 및 데이터 마이그레이션 |
| [허니팟](https://github.com/blessedrebus/krawl/blob/HEAD/docs/honeypot.md) | 허니팟 페이지 전체 개요: 가짜 로그인, 디렉터리 목록, 자격 증명 파일, SQLi/XSS/XXE/명령 주입 트랩 등 |
| [대시보드](https://github.com/blessedrebus/krawl/blob/HEAD/docs/dashboard.md) | 실시간 모니터링 대시보드 접근 및 탐색 |
| [대시보드 API](https://github.com/blessedrebus/krawl/blob/HEAD/docs/dashboard-api.md) | Krawl 자체 JSON API: 엔드포인트 참조, 인증, 대화형 OpenAPI 문서 및 첨부 파일 다운로드 |
| [외부 API](https://github.com/blessedrebus/krawl/blob/HEAD/docs/api.md) | Krawl이 IP 데이터, 평판 및 지리적 위치 정보를 위해 호출하는 타사 API |
| [역방향 프록시](https://github.com/blessedrebus/krawl/blob/HEAD/docs/reverse-proxy.md) | NGINX 뒤에 Krawl을 배포하거나 유인 하위 도메인을 사용하는 방법 |
| [데이터베이스 백업](https://github.com/blessedrebus/krawl/blob/HEAD/docs/backups.md) | 자동 데이터베이스 덤프 작업 활성화 및 구성 |
| [카나리아 토큰](https://github.com/blessedrebus/krawl/blob/HEAD/docs/canary-token.md) | canarytokens.org를 통한 외부 알림 트리거 설정 |
| [워드리스트](https://github.com/blessedrebus/krawl/blob/HEAD/docs/wordlist.md) | 가짜 사용자 이름, 비밀번호 및 디렉터리 목록 사용자 지정 |
| [아키텍처](https://github.com/blessedrebus/krawl/blob/HEAD/docs/architecture.md) | 코드베이스, 요청 파이프라인, 데이터베이스 스키마 및 백그라운드 작업에 대한 기술 개요 |
| [Cloudflare 차단 목록 동기화](https://github.com/blessedrebus/krawl/blob/HEAD/docs/cloudflare_banlist.md) | Krawl의 차단된 IP를 WAF 규칙에 사용할 Cloudflare 계정 IP 목록으로 푸시합니다. 동기화는 백그라운드 작업으로 실행되며 전체 교체 방식으로 목록을 업데이트합니다. |
| [방화벽 내보내기](https://github.com/blessedrebus/krawl/blob/HEAD/docs/firewall-exporters.md) | REST API를 통해 IP 차단 목록을 raw, iptables 또는 nftables 형식으로 내보내기 |
| [Tarpit](https://github.com/blessedrebus/krawl/blob/HEAD/docs/tarpit.md) | 지연되고 노이즈가 추가된 응답으로 AI 크롤러를 느리게 만들고 오염시키기 |
| [메트릭 및 모니터링](https://github.com/blessedrebus/krawl/blob/HEAD/docs/monitoring.md) | Prometheus 메트릭 엔드포인트, 노출된 메트릭 참조, Grafana 대시보드 및 ServiceMonitor 스크래핑 |

## 기여

기여를 환영합니다! 다음을 따라주세요:
1. 저장소를 포크하세요
2. 기능 브랜치를 만드세요
3. 변경 사항을 적용하세요
4. 풀 리퀘스트를 제출하세요(변경 사항을 설명하세요!)

## 면책 조항
> [!CAUTION]
> 이것은 디셉션/허니팟 시스템입니다. 격리된 환경에 배포하고 보안 이벤트를 주의 깊게 모니터링하세요. 관련 법률 및 규정을 준수하여 책임감 있게 사용하세요.

## 스타 기록
<img src="https://star-history.dera.page/svg?repos=BlessedRebuS/Krawl&amp;type=Date" width="600" alt="Star History Chart" />
도구 다운로드
StandaloneScalable
데이터베이스SQLite (WAL mode)PostgreSQL
캐시인메모리 Python dictRedis (다중 계층 TTL)
복제본1 (단일 인스턴스)1+ (수평 확장)
외부 종속성없음PostgreSQL + Redis
적합한 환경개발, 홈랩, <50만 요청프로덕션, 고가용성(HA), >50만 요청