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 템플릿을 사용하여 낮은 수준의 취약점을 가진 가짜 웹 애플리케이션을 생성합니다.

55845104일 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

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

Krawl

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

License Release
GitHub Container Registry Kubernetes Helm Chart

목차

  • 데모
  • Krawl이란 무엇인가?
  • Krawl 대시보드
  • 배포 모드
  • Krawl 차단 목록
  • 빠른 시작
    • Docker Run
    • 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은 악성 공격자, 웹 크롤러 및 자동화된 스캐너를 탐지, 지연 및 분석하도록 설계된 클라우드 네이티브 기만 서버입니다.

관리자 패널, 구성 파일, 노출된 가짜 자격 증명과 같은 쉬운 표적이 가득한 현실적인 가짜 웹 애플리케이션을 만들어 의심스러운 활동을 유인하고 식별합니다.

dashboard

공격자의 리소스를 낭비함으로써 Krawl은 악성 행위를 합법적인 크롤러와 명확하게 구분하는 데 도움을 줍니다.

주요 기능:

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

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

use case

Krawl 대시보드

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

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

  • 개요: 공격 활동의 높은 수준 보기: IP 출처의 대화형 지도, 최근 의심스러운 요청, 상위 IP, User-Agent 및 경로.

geoip

  • 공격: 캡처된 자격 증명, 허니팟 트리거, 탐지된 공격 유형(SQLi, XSS, 경로 탐색 등)의 상세 분석을 차트와 테이블로 제공.

attack_types

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

ipinsight

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

  • 추적 IP: 시간에 따라 모니터링하려는 IP 주소의 감시 목록을 유지 관리합니다.
  • IP 차단 목록: IP 차단을 관리하고, 탐지된 공격자를 확인하며, 차단 목록을 원시 또는 IPTables 형식으로 내보냅니다.
  • 기만: 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

Access the server at http://localhost:5000

Docker Compose

Create a docker-compose.yaml with one of the two deployment modes.

Standalone: just Krawl server with Sqlite storage:```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/main/docker) 디렉토리에서도 확인할 수 있습니다. **개발용**(소스에서 빌드하고 핫-리로드 적용)으로는 [`docker/dev/`](https://github.com/blessedrebus/krawl/blob/main/docker/dev)의 compose 파일을 사용하세요.

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

### Kubernetes
**Krawl은 Kubernetes에서도 기본적으로 사용할 수 있습니다**. 설치는 [매니페스트를 통한 방법](https://github.com/blessedrebus/krawl/blob/main/kubernetes/README.md) 또는 [Helm 차트를 사용하는 방법](https://github.com/blessedrebus/krawl/blob/main/helm/README.md) 중 하나로 진행할 수 있습니다.

Helm 차트는 **기본적으로 확장 가능한 모드**로 설정되며, PostgreSQL과 Redis가 함께 번들로 제공됩니다:```bash
helm install krawl oci://ghcr.io/blessedrebus/krawl-chart --version 2.3.1 \
  -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 ---> 확장 가능(기본값)
  • values-standalone.yaml ---> 독립 실행형

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

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 차트 배포와 같은 고급 구성에는 [config.yaml](https://github.com/blessedrebus/krawl/blob/main/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 | 없음 |
| `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/main/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/main/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 비밀번호 | 없음 |
| `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"

Example of a Docker run with env variables (standalone mode):```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"

이를 통해 다양한 플랫폼에서 악성 트래픽을 자동으로 차단할 수 있습니다:

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

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

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

IP 평판

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

ip reputation

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

  • 위험한 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/main/docs/ai_generation.md)를 참조하세요.

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

## 리버스 프록시 또는 CDN 뒤에서 실행

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

## 메트릭 및 모니터링

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

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

## 추가 문서

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