
Krawl은 사용자 정의 가능하고 경량화된 클라우드 네이티브 웹 디셉션 서버이자 안티 크롤러로, 실제와 같은 무작위 생성 디코이 데이터와 AI 생성 HTML 템플릿을 사용하여 낮은 수준의 취약점을 가진 가짜 웹 애플리케이션을 생성합니다.
공격자와 웹 크롤러의 악성 활동을 감지하고 추적하기 위해 설계된 현대적이고 커스터마이징 가능한 웹 허니팟 서버입니다. 기만적인 웹 페이지, 가짜 자격 증명, 카나리 토큰을 통해 동작합니다.
팁: robots.txt 경로를 크롤링하면 더 재미있습니다.
Krawl은 악성 공격자, 웹 크롤러, 자동화 스캐너를 탐지, 지연, 분석하도록 설계된 클라우드 네이티브 기만 서버입니다.
관리자 패널, 설정 파일, 노출된 가짜 자격 증명과 같은 쉽게 잡힐 수 있는 위협 요소로 가득한 사실적인 가짜 웹 애플리케이션을 생성하여 의심스러운 활동을 유인하고 식별합니다.

공격자의 자원을 낭비함으로써 Krawl은 악성 행동을 합법적인 크롤러와 명확히 구분할 수 있도록 도와줍니다.
다음 기능을 제공합니다:
리버스 프록시를 사용하여 Krawl을 다른 서비스와 함께 쉽게 노출하여 웹 크롤러와 악성 사용자로부터 보호할 수 있습니다. 자세한 내용은 리버스 프록시 문서를 참조하세요.

Krawl은 시작 시 생성된 랜덤 비밀 경로 또는 KRAWL_DASHBOARD_SECRET_PATH를 통해 설정된 커스텀 경로에서 접근 가능한 종합적인 대시보드를 제공합니다. 이를 통해 대시보드가 허니팟을 스캔하는 공격자로부터 숨겨집니다.
대시보드는 6개의 탭으로 구성됩니다:



또한 대시보드 비밀번호로 인증한 후에는 두 개의 보호된 탭이 추가로 활성화됩니다:
자세한 내용은 대시보드 문서를 참조하세요.
Krawl은 config.yaml의 mode 설정 또는 KRAWL_MODE 환경 변수를 통해 제어되는 두 가지 배포 모드를 지원합니다.
독립 실행형: 요청 수가 적은 개발 환경이나 홈랩에 적합합니다. 추가 설정이 필요 없으며, Krawl을 실행하기만 하면 작동합니다.
확장 가능형: 프로덕션 환경이나 트래픽이 많은 허니팟을 위해 설계되었습니다. Helm 차트는 기본적으로 이 모드를 사용합니다.
자세한 설정, Docker Compose 예제, Kubernetes/Helm 설정, 단계별 마이그레이션 지침은 배포 모드 문서를 참조하세요.
Krawl은 허니팟 트랩을 트리거한 공격자의 IP 주소로 정기적으로 업데이트되는 banlist.txt를 유지 관리합니다. 차단 목록은 매주 게시되며 다운로드 가능하여, 커뮤니티가 Krawl을 사용하지 않더라도 알려진 악성 행위자를 선제적으로 차단할 수 있도록 돕습니다.
차단 목록은 다음에서 직접 가져올 수도 있습니다: https://demo.krawlme.com/das_dashboard/api/export-ips?categories=attacker&fwtype=raw.
최신 이미지로 독립 실행형 모드에서 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:
확장 가능: 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
프로덕션 준비 완료 컴포즈 파일은 docker/ 디렉터리에서도 사용할 수 있습니다. 개발용 (소스에서 빌드 및 핫-리로드 포함)은 프로젝트 루트에 있는 컴포즈 파일을 사용하세요.
두 모드에 대한 자세한 내용은 배포 모드를 참조하세요.
Krawl은 네이티브로 Kubernetes에서도 사용할 수 있습니다. 설치는 매니페스트를 통해 하거나 Helm 차트를 사용하여 할 수 있습니다.
Helm 차트는 기본적으로 번들 PostgreSQL 및 Redis를 포함한 확장 가능 모드로 설정됩니다:```bash
helm install krawl oci://ghcr.io/blessedrebus/krawl-chart --version 2.2.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`](https://github.com/blessedrebus/krawl/blob/HEAD/helm/values-minimal.yaml) ---> 확장 가능 (기본값)
- [`values-standalone.yaml`](https://github.com/blessedrebus/krawl/blob/HEAD/helm/values-standalone.yaml) ---> 독립 실행형
전체 구성 및 마이그레이션 지침은 [배포 모드](https://github.com/blessedrebus/krawl/blob/HEAD/docs/deployment-modes.md)와 [차트 문서](https://github.com/blessedrebus/krawl/blob/HEAD/helm/README.md)를 참조하세요.
### 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
서버에 접속: http://localhost:5000
Krawl은 설정 계층 구조를 사용하며, 환경 변수가 설정 파일보다 우선합니다. 이 방법은 Docker 배포 및 즉시 사용자 정의에 권장됩니다.
고급 설정(예: Docker Compose 또는 Helm 차트 배포)은 config.yaml 파일을 사용할 수 있습니다.
예를 들어```bash
export CONFIG_LOCATION="config.yaml" export KRAWL_CANARY_TOKEN_URL="http://your-canary-token-url"
export KRAWL_LINKS_PER_PAGE_RANGE="5,25"
export KRAWL_HTTP_RISKY_METHODS_THRESHOLD="0.2" export KRAWL_VIOLATED_ROBOTS_THRESHOLD="0.15"
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
Krawl은 평판 기반 시스템을 사용하여 공격자 IP 주소를 분류하고, 방화벽 통합을 위해 IP 목록을 내보내는 두 가지 방법을 제공합니다.
/api/export-ips 엔드포인트는 데이터베이스를 직접 쿼리하며 IP 카테고리(attacker, bad_crawler, regular_user, good_crawler)와 출력 형식(raw, iptables, nftables)별 필터링을 지원합니다:```bash
curl "https://your-krawl-instance//api/export-ips?categories=attacker&fwtype=raw"
이를 통해 다양한 플랫폼에서 악성 트래픽을 자동으로 차단할 수 있습니다:
* [OPNsense 및 pfSense](https://ipv64.net/v64_blocklist_integration_guide)
* [RouterOS](https://rentry.co/krawl-routeros)
* [IPtables](https://github.com/blessedrebus/krawl/blob/HEAD/plugins/iptables/README.md) 및 [Nftables](https://github.com/blessedrebus/krawl/blob/HEAD/plugins/nftables/README.md)
* [Fail2Ban](https://github.com/blessedrebus/krawl/blob/HEAD/plugins/fail2ban/README.md)
전체 API 매개변수, 예제, 사용자 정의 방화벽 형식 추가에 대한 자세한 내용은 [Firewall Exporters 문서](https://github.com/blessedrebus/krawl/blob/HEAD/docs/firewall-exporters.md)를 참조하세요.
## IP Reputation
Krawl은 [최근 트래픽을 분석하여 IP 평판 점수를 구축하고 지속적으로 업데이트하는 작업](https://github.com/blessedrebus/krawl/blob/HEAD/src/tasks/analyze_ips.py)을 사용합니다. 주기적으로 실행되며 여러 행동 지표를 기반으로 각 활성 IP 주소를 평가하여 공격자, 크롤러 또는 일반 사용자로 분류합니다. 임계값은 완전히 사용자 정의할 수 있습니다.

분석에는 다음이 포함됩니다:
- **위험한 HTTP 메서드 사용** (예: POST, PUT, DELETE 비율)
- **Robots.txt 위반**
- **요청 시간 이상 징후** (폭발적이거나 불규칙한 패턴)
- **User-Agent 일관성**
- **공격 URL 탐지** (예: SQL injection, XSS patterns)
각 신호는 가중치 기반 점수 모델에 기여하여 평판 범주를 할당합니다:
- `attacker`
- `bad_crawler`
- `good_crawler`
- `regular_user`
- `unknown` (데이터 부족)
결과 점수와 메트릭은 데이터베이스에 저장되며, Krawl이 대시보드, 평판 추적, IP 차단 또는 방화벽 통합과 같은 자동 완화 작업을 구동하는 데 사용됩니다.
## AI-Generated Deception Pages
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
자세한 구성과 사용법은 AI 생성 문서를 참조하세요.
또한 PR을 통해 기만 템플릿을 기여할 수 있습니다. 자세한 내용은 기만 템플릿 기여를 참조하세요.
Krawl이 NGINX와 같은 프록시 뒤에 배포된 경우, 프록시에서 다음 구성을 사용하여 서버 헤더를 전달해야 합니다:```bash location / { proxy_pass https://your-krawl-instance; proxy_pass_header Server; }
## Metrics & Monitoring
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) 대 확장형(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/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) | 코드베이스, 요청 파이프라인, 데이터베이스 스키마, 백그라운드 작업의 기술적 개요 |
| [방화벽 내보내기](https://github.com/blessedrebus/krawl/blob/HEAD/docs/firewall-exporters.md) | REST API를 통해 IP 차단 목록을 raw, iptables 또는 nftables 형식으로 내보내기 |
| [메트릭 및 모니터링](https://github.com/blessedrebus/krawl/blob/HEAD/docs/monitoring.md) | Prometheus 메트릭 엔드포인트, 노출된 메트릭 참조, Grafana 대시보드, ServiceMonitor 스크래핑 |
## 기여
기여를 환영합니다! 다음을 따르세요:
1. 저장소를 포크하세요
2. 기능 브랜치를 만드세요
3. 변경 사항을 적용하세요
4. 풀 리퀘스트를 제출하세요 (변경 사항 설명!)
## 면책 조항
> [!CAUTION]
> 이는 사기/허니팟 시스템입니다. 격리된 환경에 배포하고 보안 이벤트를 주의 깊게 모니터링하세요. 관련 법률 및 규정을 준수하여 책임감 있게 사용하세요.
## 별 기록
<img src="https://assets.kitploit.com/production/public/readmes/placeholders/f0fc86cfe65f76d40e15aaec61704ec8220a56dc89d4be03c46f67cb31b9fa8c.svg" width="600" alt="별 기록 차트" />
| 독립 실행형 | 확장 가능형 |
|---|
| 데이터베이스 | SQLite (WAL 모드) | PostgreSQL |
| 캐시 | 메모리 내 Python dict | Redis (다중 계층 TTL) |
| 복제본 | 1 (단일 인스턴스) | 1+ (수평 확장) |
| 외부 종속성 | 없음 | PostgreSQL + Redis |
| 적합한 환경 | 개발, 홈랩, 50만 미만 요청 | 프로덕션, 고가용성, 50만 이상 요청 |
| 환경 변수 | 설명 | 기본값 |
|---|
CONFIG_LOCATION | YAML 설정 파일 경로 | config.yaml |
KRAWL_PORT | 서버 수신 포트 | 5000 |
KRAWL_DELAY | 응답 지연 시간(밀리초) | 100 |
KRAWL_SERVER_HEADER | 허니팟용 HTTP 서버 헤더 | "" |
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_CANARY_TOKEN_URL | 외부 카나리 토큰 URL | 없음 |
KRAWL_CANARY_TOKEN_TRIES | 카나리 토큰을 표시하기 전 요청 수 | 10 |
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_PROBABILITY_ERROR_CODES | 오류 응답 확률 (0-100%) | 0 |
KRAWL_DATABASE_PATH | 데이터베이스 파일 위치 | data/krawl.db |
KRAWL_DATABASE_PERSIST_SUSPICIOUS_ONLY | 의심스러운 요청만 접근 로그에 저장 | false |
KRAWL_BACKUPS_PATH | 데이터베이스 덤프 저장 경로 | backups |
KRAWL_BACKUPS_CRON | 백업 작업 일정을 제어하는 cron 표현식 | */30 * * * * |
KRAWL_BACKUPS_ENABLED | DB 덤프 작업 활성화 여부 | true |
KRAWL_DATABASE_RETENTION_DAYS | 데이터 보관 기간(일) | 30 |
KRAWL_TARPIT_ENABLED | 느린 응답과 무작위 텍스트로 AI 에이전트 함정 | false |
KRAWL_TARPIT_DELAY_SECONDS | 함정 활성화 시 응답당 추가 지연 시간(초) | 5 |
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 |
KRAWL_INFINITE_PAGES_FOR_MALICIOUS | 악성 IP에 무한 페이지 제공 | true |
KRAWL_MAX_PAGES_LIMIT | 크롤러 최대 페이지 제한 | 250 |
KRAWL_BAN_DURATION_SECONDS | 요율 제한 IP 차단 기간(초) | 600 |
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_CUSTOM_TEMPLATE_PATH | 사용자 정의 HTML 템플릿의 컨테이너 내 경로. 템플릿에는 {counter} 및 {content} 자리 표시자가 포함되어야 함. | /templates/custom_page.html |
| 확장 모드 | ||
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 |