본문 바로가기
정보보호 (Security)

클라우드 웹 보안 인프라 통합 오픈소스 WAF, BunkerWeb 실시간 자동화

by 날으는물고기 2025. 7. 22.

클라우드 웹 보안 인프라 통합 오픈소스 WAF, BunkerWeb 실시간 자동화

728x90

BunkerWeb는 차세대 클라우드 네이티브 웹 방화벽(Web Application Firewall, WAF) 으로, 오픈소스로 개발되어 보안성과 확장성을 모두 갖춘 점에서 매우 주목받고 있는 솔루션입니다. BunkerWeb에 대한 개념부터 아키텍처, 주요 기능, 운영 방식, 보안 관점에서의 활용 포인트를 정리합니다.

BunkerWeb 개요

  • 공식 저장소: https://github.com/bunkerity/bunkerweb
  • 라이선스: AGPLv3 (오픈소스), 기업용 Pro 버전 별도 제공
  • 기반 기술: NGINX 기반 리버스 프록시 + 보안 기능 통합

BunkerWeb은 전통적인 WAF와 달리 보안 구성의 자동화, 클라우드 네이티브 환경 지원, 직관적인 UI 및 플러그인 확장성에 초점을 둔 통합 보안 솔루션입니다.

아키텍처 구성

[ Client ] ---> [ BunkerWeb WAF (NGINX + Security) ] ---> [ Web App / API ]
  • 기본적으로 리버스 프록시 방식으로 작동하며, 내부적으로 NGINX와 ModSecurity, 다양한 보안 기능을 통합한 모듈이 함께 작동합니다.
  • Docker, Kubernetes, Linux 등 다양한 환경에서 쉽게 배포할 수 있도록 구성되어 있음
  • 설정은 환경변수, 라벨(Label), 설정 파일 또는 Web UI를 통해 수행 가능

주요 보안 기능

1. HTTPS 자동화 및 TLS 하드닝

  • Let’s Encrypt를 통한 HTTPS 자동 인증서 발급 및 갱신
  • TLS 1.3 사용 및 약한 알고리즘 제거
  • HTTP Strict Transport Security(HSTS), XSS/CSRF 보호 등 헤더 기반 보안 기본 적용

2. ModSecurity 통합

  • OWASP CRS (Core Rule Set) 자동 적용
  • 공격 패턴 탐지 및 자동 차단 가능

3. 봇 방지 및 비정상 요청 차단

  • JavaScript challenge, 쿠키 검증, hCaptcha / reCAPTCHA 연동 가능
  • HTTP 상태코드 기반 공격 판단 및 자동 대응
  • 외부 블랙리스트 연동 가능 (e.g., AbuseIPDB)

4. 자동화 및 운영 기능

  • Web UI로 실시간 상태 및 설정 관리
  • Auto Configuration(autoconf): 컨테이너 환경에서 자동 설정 지원
  • 멀티 사이트 구성, 라벨/호스트 기반 설정 자동화

5. 확장 플러그인 시스템

  • ClamAV: 업로드 파일에 대한 바이러스 검사
  • VirusTotal: 파일 해시 기반 악성 파일 확인
  • Slack/Discord 알림: 보안 이벤트 실시간 알림 전송
  • Webhook 연동: 외부 시스템과의 통합 가능
  • Coraza WAF: 대체 WAF 엔진으로 교체 가능

플러그인은 BUNKERWEB_PLUGINS 환경변수로 설정하며, 필요한 플러그인을 개별적으로 활성화할 수 있습니다.

운영 환경 및 배포 방식

1. 지원 환경

  • Linux (패키지 설치)
  • Docker (단일 또는 Compose)
  • Kubernetes (Helm chart 제공)
  • Swarm, Azure 등 클라우드 네이티브 지원

2. 설정 방식

  • docker-compose 또는 Kubernetes의 라벨 및 환경변수를 통해 설정 자동화
  • Web UI 또는 REST API를 통한 설정 및 운영 제어
  • DB: SQLite, MySQL, PostgreSQL, MariaDB 연동 가능
300x250

3. 웹 UI 기능

  • 실시간 로그 확인 및 필터링
  • 보안 이벤트 요약 및 상세 분석
  • 플러그인 설정 및 적용
  • 인스턴스 상태 및 재시작 제어

사용 예시

Docker Compose 예

services:
  bunkerweb:
    image: bunkerity/bunkerweb
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./certs:/etc/ssl/certs
    environment:
      - BUNKERWEB_HOST=example.com
      - BUNKERWEB_BACKEND=http://app:8080
      - BUNKERWEB_TLS_LE=true
      - BUNKERWEB_PLUGIN_SLACK_WEBHOOK_URL=https://hooks.slack.com/...

Kubernetes 연동 (Helm)

helm repo add bunkerweb https://bunkerity.github.io/helm-charts
helm install my-bunker bunkerweb/bunkerweb \
  --set host=example.com \
  --set backend=http://app:8080 \
  --set tls.le=true

운영 가이드 및 점검 포인트

점검 항목 설명
🔑 TLS 보안 TLS 1.2/1.3만 허용, 강한 CipherSuite 구성 여부 확인
🛡 ModSecurity OWASP CRS 최신 룰셋 적용 여부 및 예외 처리 점검
🧠 봇 탐지 기능 CAPTCHA 활성화, JS challenge 동작 여부 확인
⚙️ 설정 자동화 Label/ENV 기반 설정이 일관성 있게 적용되는지 점검
🧪 취약점 대응 ClamAV, VirusTotal 연동 통한 업로드 파일 검증 여부 확인
📈 로그 분석 Web UI 또는 로그 수집 시스템과의 연동 여부 (ELK, Grafana 등)
📣 알림 채널 Slack, Webhook 등 실시간 알림 채널 구성 여부 확인
🔄 High Availability Kubernetes, Docker Swarm 구성 시 무중단 구성 여부

엔터프라이즈(Pro) 버전 기능

항목 설명
🔍 고급 모니터링 실시간 대시보드 및 이슈 탐지
👥 사용자 관리 Web UI 내 접근 권한 세분화
🧰 기술지원 상용 기술지원 및 보안 컨설팅 포함
📊 사용자 경험 개선 강화된 UI/UX 및 추가 설정 메뉴

왜 BunkerWeb인가?

항목 기존 WAF BunkerWeb
설치 용이성 복잡한 설정 Docker/K8s 자동 설정
UI 제공 제한적 직관적인 Web UI
자동화 수준 낮음 자동 구성, 멀티사이트
보안 기능 별도 구성 필요 기본 포함 (ModSecurity, HTTPS, 봇 차단 등)
오픈소스 제한적 AGPLv3 완전 공개
커스터마이징 제한적 플러그인 기반 확장 가능

아래는 BunkerWeb보안 설정 예시, 플러그인 사용법, Kubernetes 환경 구성 튜토리얼을 각각 정리합니다.

보안 설정 예시

BunkerWeb은 대부분의 보안 설정을 환경변수 기반 또는 라벨 기반으로 구성하며, 기본적으로 안전한 보안 프리셋을 제공합니다.

필수 보안 설정 예시 (Docker 환경 기준)

services:
  bunkerweb:
    image: bunkerity/bunkerweb
    ports:
      - "80:80"
      - "443:443"
    environment:
      - BUNKERWEB_HOST=example.com
      - BUNKERWEB_BACKEND=http://webapp:8080

      # HTTPS 설정
      - BUNKERWEB_TLS_LE=true               # Let's Encrypt 활성화
      - BUNKERWEB_TLS_REDIRECT=true         # HTTP → HTTPS 강제 리디렉션

      # OWASP Core Rule Set 활성화
      - BUNKERWEB_MODSECURITY_ENABLE=true
      - BUNKERWEB_MODSECURITY_RULESET=owasp

      # 보안 헤더 강화
      - BUNKERWEB_SECURITY_HEADERS_ENABLE=true
      - BUNKERWEB_REFERRER_POLICY=no-referrer
      - BUNKERWEB_XSS_PROTECTION=1; mode=block

      # 봇 탐지 및 요청 차단
      - BUNKERWEB_BOTPROTECTION_ENABLE=true
      - BUNKERWEB_BOTPROTECTION_CAPTCHA=recaptcha
      - BUNKERWEB_BOTPROTECTION_BLOCK_STATUS=403

      # Rate Limiting
      - BUNKERWEB_LIMIT_REQUESTS_ENABLE=true
      - BUNKERWEB_LIMIT_REQUESTS_BURST=10
      - BUNKERWEB_LIMIT_REQUESTS_RATE=5r/s

💡 설정은 .env로 분리하거나 docker-compose.override.yml로 관리하면 운영이 편리합니다.

플러그인 사용법

BunkerWeb은 다양한 플러그인을 공식적으로 지원하며, 단일 환경변수로 손쉽게 설정할 수 있습니다.

기본 구조

  • 플러그인 활성화: BUNKERWEB_PLUGINS=plugin1,plugin2,...
  • 개별 플러그인 환경변수 설정 추가

사용 예시 ① ClamAV

업로드된 파일의 바이러스 검사

    environment:
      - BUNKERWEB_PLUGINS=clamav
      - BUNKERWEB_CLAMAV_ENABLE=true
      - BUNKERWEB_CLAMAV_SCAN_UPLOADS=true

사용 예시 ② VirusTotal

해시 기반 파일 위협 탐지

    environment:
      - BUNKERWEB_PLUGINS=virustotal
      - BUNKERWEB_VIRUSTOTAL_APIKEY=your_virustotal_api_key

사용 예시 ③ Slack 알림

보안 이벤트 실시간 Slack 전송

    environment:
      - BUNKERWEB_PLUGINS=slack
      - BUNKERWEB_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxx/yyy/zzz

사용 예시 ④ Webhook

Webhook으로 외부 시스템 연동 (예: n8n, SIEM 등)

    environment:
      - BUNKERWEB_PLUGINS=webhook
      - BUNKERWEB_WEBHOOK_URL=https://yourserver/api/waf-events

🔄 복수 플러그인을 사용하려면 BUNKERWEB_PLUGINS=clamav,slack,webhook 식으로 나열

Kubernetes 환경 구성 튜토리얼

공식 Helm Chart를 사용하면 Kubernetes 환경에서도 손쉽게 배포할 수 있습니다.

사전 준비

# Helm 저장소 추가
helm repo add bunkerweb https://bunkerity.github.io/helm-charts
helm repo update

기본 설치 예시

helm install my-bunker bunkerweb/bunkerweb \
  --set host=example.com \
  --set backend=http://my-backend-service.default.svc.cluster.local:8080 \
  --set tls.le=true \
  --set plugins="slack" \
  --set slack.webhookUrl="https://hooks.slack.com/services/xxx/yyy/zzz"

values.yaml 사용자 정의

host: example.com
backend: http://backend-service.default.svc.cluster.local:8080
tls:
  le: true
modsecurity:
  enable: true
  ruleset: owasp
securityHeaders:
  enable: true
  referrerPolicy: no-referrer
  xssProtection: "1; mode=block"
plugins:
  - slack
  - webhook
slack:
  webhookUrl: "https://hooks.slack.com/services/xxx/yyy/zzz"
webhook:
  url: "https://n8n.yourdomain.com/webhook/waf"
helm install my-bunker -f values.yaml bunkerweb/bunkerweb

TLS 확인 (Let's Encrypt)

설치 후, External IP 또는 Ingress로 접근 시 TLS 인증서가 자동 발급됩니다.
인증 상태 확인은 다음과 같이 가능합니다.

kubectl logs deployment/my-bunker

실시간 로그 확인 및 운영

kubectl port-forward svc/my-bunker 8443:443

접속: https://localhost:8443

운영 점검 체크리스트 (K8s 기준)

항목 점검 포인트
TLS 인증서 자동 갱신 작동 여부 및 DNS 설정 확인
ModSecurity 로그 WAF 로그 수집 및 통합 대시보드 연계 여부
Slack/Webhook 알림 실시간 이벤트 정상 전송 여부
설정 백업 values.yaml 또는 ConfigMap 백업 관리
Helm 업그레이드 helm upgrade 시 변경 사항 검토 및 rollback 준비
고가용성 구성 Replica >1, readinessProbe/livenessProbe 구성 확인
728x90
그리드형(광고전용)

댓글