WAF로 API 접근 보호하기
본문
Secure API Access with WAF
Traefik Hub 기능
이 미들웨어는 Traefik Hub에서만 사용할 수 있어요. Traefik Hub의 고급 기능에 대해 자세히 알아보세요.
Traefik Hub API Gateway의 Coraza Web Application Firewall 미들웨어는 일반적인 웹 애플리케이션 공격에 대한 포괄적인 보호를 제공해요. 이 미들웨어는 Coraza 규칙 문법을 지원하고 OWASP Core Rule Set(CRS)과 호환되므로, 보안 커뮤니티가 유지보수하는 검증된 보안 규칙을 활용할 수 있어요.
기본 WAF 보호
맞춤 보안 규칙으로 애플리케이션을 보호하려면 다음 구성을 적용하세요:
Middleware WAF
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: waf-protection
namespace: apps
spec:
plugin:
coraza:
directives:
- SecRuleEngine On
- SecRule REQUEST_URI "@streq /admin" "id:101,phase:1,t:lowercase,log,deny"
- SecRule ARGS "@detectSQLi" "id:102,phase:2,block,msg:'SQL Injection Attack Detected',logdata:'Matched Data: %{MATCHED_VAR} found within %{MATCHED_VAR_NAME}'"
이 구성은 함께 작동해 애플리케이션을 보호하는 세 가지 보안 지시문을 구현해요:
-
SecRuleEngine On: WAF 엔진을 활성화해 들어오는 요청 처리를 시작해요. 이 지시문이 없으면 구성 여부와 관계없이 다른 모든 규칙이 비활성 상태로 남아요.
-
관리자 경로 보호: 두 번째 규칙은 요청 URI를 검사해 /admin 경로에 대한 모든 접근을 차단해요. 이는 사용자 관리, 시스템 구성, 데이터베이스 관리 도구 같은 민감한 기능을 자주 포함하는 관리 인터페이스에 대한 접근을 완전히 차단해요. 이 규칙은 phase 1(요청 헤더 처리)에서 트리거되고 소문자 변환을 적용해 /Admin이나 /ADMIN 같은 변형을 잡아내요.
-
SQL 주입 탐지: 세 번째 규칙은 Coraza 내장 탐지 엔진을 사용해 요청 파라미터(쿼리 문자열과 폼 데이터)에서 SQL 주입 패턴을 검사해요. ARGS 변수는 ?id=1 같은 쿼리 문자열 파라미터와 POST 요청의 username=admin&password=123 같은 폼 데이터를 포함하지만 쿠키는 포함하지 않아요. SQL 주입 공격은 사용자 입력을 통해 악성 SQL 코드를 주입해 데이터베이스 쿼리를 조작하려 해요. 탐지되면 규칙이 요청을 차단하고 어떤 파라미터에 악성 페이로드가 있었는지 포함해 시도된 공격에 대한 상세 정보를 기록해요.
IngressRoute
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: protected-app
namespace: apps
spec:
entryPoints:
- websecure
routes:
- match: Path(`/my-app`)
kind: Rule
services:
- name: whoami
port: 80
middlewares:
- name: waf-protection
Service & Deployment
kind: Deployment
apiVersion: apps/v1
metadata:
name: whoami
namespace: apps
spec:
replicas: 3
selector:
matchLabels:
app: whoami
template:
metadata:
labels:
app: whoami
spec:
containers:
- name: whoami
image: traefik/whoami
---
apiVersion: v1
kind: Service
metadata:
name: whoami
namespace: apps
spec:
ports:
- port: 80
name: whoami
selector:
app: whoami
OWASP Core Rule Set으로 고급 보호
일반적인 공격 패턴에 대한 전투 검증된 규칙을 제공하는 OWASP Core Rule Set을 사용해 포괄적인 보호를 구현하려면 다음 구성을 적용하세요:
Middleware WAF with CRS
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: waf-crs-protection
namespace: apps
spec:
plugin:
coraza:
crsEnabled: true
directives:
- SecRuleEngine On
- SecDefaultAction "phase:1,log,auditlog,deny,status:403"
- SecDefaultAction "phase:2,log,auditlog,deny,status:403"
- SecAction "id:900110, phase:1, pass, t:none, nolog, setvar:tx.inbound_anomaly_score_threshold=5, setvar:tx.outbound_anomaly_score_threshold=4"
- SecAction "id:900200, phase:1, pass, t:none, nolog, setvar:'tx.allowed_methods=GET POST'"
- Include @owasp_crs/REQUEST-911-METHOD-ENFORCEMENT.conf
- Include @owasp_crs/REQUEST-949-BLOCKING-EVALUATION.conf
이 고급 구성은 이상치 점수(anomaly scoring)와 함께 OWASP Core Rule Set(CRS) 보호를 구현해요:
-
Phase 1 & 2용 SecDefaultAction: 요청 처리 단계의 기본 동작을 설정해요. Phase 1은 요청 헤더를, Phase 2는 요청 본문을 처리해요. 규칙이 매칭되면 표준 로그와 감사 로그 모두에 이벤트를 기록한 다음 403 상태 코드로 요청을 거부해요.
-
이상치 점수 구성: 첫 번째 SecAction은 이상치 점수 임계값을 설정하는데, inbound_anomaly_score_threshold=5는 점수가 5 이상인 요청을 차단하고 outbound_anomaly_score_threshold=4는 응답에 같은 논리를 적용해요. 이 점수 시스템은 첫 탐지에서 바로 차단하는 대신 여러 의심스러운 패턴이 점수를 누적하게 해서 보안을 유지하면서 오탐을 줄여요.
-
허용 메서드 구성: 두 번째 SecAction은 HTTP 메서드를 GET과 POST 요청으로만 제한해요. 이는 서버 리소스를 수정하거나 시스템 정보를 노출할 수 있는 PUT, DELETE, PATCH, OPTIONS 같은 잠재적으로 위험한 메서드를 방지해요.
-
METHOD-ENFORCEMENT 규칙 집합: REQUEST-911-METHOD-ENFORCEMENT.conf 파일은 위에서 정의한 허용 HTTP 메서드 정책을 강제해요. 들어오는 요청을 허용된 메서드와 대조해 확인하고, 허용되지 않은 메서드에는 이상치 점수를 기여해요.
-
BLOCKING-EVALUATION 규칙 집합: REQUEST-949-BLOCKING-EVALUATION.conf 파일은 누적된 이상치 점수를 설정된 임계값과 비교해 평가해요. 총점이 임계값을 초과하면 차단 동작을 트리거해 요청이 애플리케이션에 도달하지 못하게 해요.
IngressRoute
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: crs-protected-app
namespace: apps
spec:
entryPoints:
- websecure
routes:
- match: Path(`/my-app`)
kind: Rule
services:
- name: whoami
port: 80
middlewares:
- name: waf-crs-protection
Service & Deployment
kind: Deployment
apiVersion: apps/v1
metadata:
name: whoami
namespace: apps
spec:
replicas: 3
selector:
matchLabels:
app: whoami
template:
metadata:
labels:
app: whoami
spec:
containers:
- name: whoami
image: traefik/whoami
---
apiVersion: v1
kind: Service
metadata:
name: whoami
namespace: apps
spec:
ports:
- port: 80
name: whoami
selector:
app: whoami
Warning
Traefik Hub v3.11.0부터 Coraza는 /tmp에 대한 읽기/쓰기 권한을 요구해요. 이 요구 사항은 Coraza 엔진의 업스트림 변경에서 비롯된 거예요.
고급 구성
고급 옵션과 자세한 규칙 구성은 reference 페이지에 설명되어 있어요.
WAF 미들웨어는 Coraza 지시문을 통해 광범위한 커스터마이즈를 지원해요. 맞춤 규칙을 만들고, 탐지 임계값을 조정하고, 로깅 수준을 구성하고, 외부 위협 인텔리전스 피드와 통합할 수 있어요. 포괄적인 규칙 작성 지침은 Coraza 문서와 OWASP CRS 문서를 참고하세요.
프로덕션에서 Traefik OSS를 사용 중인가요?
업무에서 Traefik을 사용한다면 엔터프라이즈급 API 게이트웨이 기능이나 Traefik OSS용 상용 지원을 고려해 보세요.
-
API Gateway 데모 영상 보기
-
24/7/365 OSS 지원 요청하기
Traefik OSS에 API 게이트웨이 기능을 추가하는 건 빠르고 매끄러워요. 대체(rip and replace)가 필요 없고 모든 구성이 그대로 유지돼요. 이 짧은 영상으로 직접 확인해 보세요.