NGINX App Protect WAF v5 Compiler란?
이 가이드는 NGINX App Protect WAF v5 컴파일러를 빌드, 사용, 업데이트하는 단계를 설명합니다.
목차
1. 개요
2. 사용 사례
3. NGINX App Protect WAF v5 Compiler Image 빌드
4. 사용법
4-1. NGINX App Protect WAF 정책 편집
4-2. Logging Profile 편집
4-3. Bundle Information
5. NGINX App Protect WAF Global 설정
5-1. WAF 설정
5-1-1. cookie-protection
5-1-2. user-defined-signatures
6. 수평적 Scaling
7. NGINX APP Protect WAF Compiler CI/CD
1. 개요
NGINX App Protect WAF v5 컴파일러는 JSON 형식의 보안 정책 및 로그 프로필을 번들 파일로 컴파일하는 도구입니다.
이 번들 파일은 Enforcer가 사용하고 적용할 수 있도록 nginx 구성 파일에서 참조됩니다. 컴파일러는 Docker 이미지로 패키징되어 있으며 Docker CLI를 사용하여 실행하거나 CI/CD 프로세스 중에 호출할 수 있습니다.
2. 사용 사례
- 최신 보안 업데이트 받기 – Attack Signatures, Threat Campaigns, Bot Signautures
- nginx.conf 내에서 여러 정책 번들 파일 적용
- Cookie 시드 및 사용자 정의 Signatures와 같은 Global 설정 구성
3. NGINX App Protect WAF v5 Compiler Image 빌드
중요!
최신 보안 업데이트를 사용하기 위해 정기적으로 컴파일러 이미지를 재빌드하고 보안 정책을 다시 컴파일하세요.
1. 인증서 다운로드
유료로 활성화 된 NGINX App Protect 구독에서 다음 두 파일을 다운로드합니다.
nginx-repo.key
nginx-repo.crt
2. Docker가 private-registry.nginx.com의 F5 컨테이너 레지스트리와 상호작용하도록 구성합니다.
sudo mkdir -p /etc/docker/certs.d/private-registry.nginx.com
sudo cp <path-to-your-nginx-repo.crt> /etc/docker/certs.d/private-registry.nginx.com/client.cert
sudo cp <path-to-your-nginx-repo.key> /etc/docker/certs.d/private-registry.nginx.com/client.key
참고
인증서 파일의 확장자는.crt에서.cert로 변경되었습니다.
3. Dockerfile을 생성합니다.
# syntax=docker/dockerfile:1
ARG BASE_IMAGE=private-registry.nginx.com/nap/waf-compiler:<version-tag>
FROM ${BASE_IMAGE}
# 루트로 패키지 설치
USER root
ENV DEBIAN_FRONTEND="noninteractive"
RUN --mount=type=secret,id=nginx-crt,dst=/etc/ssl/nginx/nginx-repo.crt,mode=0644 \
--mount=type=secret,id=nginx-key,dst=/etc/ssl/nginx/nginx-repo.key,mode=0644 \
apt-get update \
&& apt-get install -y \
apt-transport-https \
lsb-release \
ca-certificates \
wget \
gnupg2 \
ubuntu-keyring \
&& wget -qO - https://cs.nginx.com/static/keys/app-protect-security-updates.key | gpg --dearmor | \
tee /usr/share/keyrings/app-protect-security-updates.gpg >/dev/null \
&& printf "deb [signed-by=/usr/share/keyrings/app-protect-security-updates.gpg] \
https://pkgs.nginx.com/app-protect-security-updates/ubuntu `lsb_release -cs` nginx-plus\n" | \
tee /etc/apt/sources.list.d/nginx-app-protect.list \
&& wget -P /etc/apt/apt.conf.d https://cs.nginx.com/static/files/90pkgs-nginx \
&& apt-get update \
&& apt-get install -y \
app-protect-attack-signatures \
app-protect-bot-signatures \
app-protect-threat-campaigns \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# non-root 기본 사용자 (UID 101)
USER nginx
Docker 레지스트리 API를 사용하여 사용 가능한 이미지 태그를 나열할 수 있습니다.<path-to-your-nginx-repo.key>를 클라이언트 키의 위치로, <path-to-your-nginx-repo.crt>를 클라이언트 인증서의 위치로 교체하세요.
선택적으로 jq 명령어를 사용하여 JSON 출력을 더 쉽게 읽을 수 있도록 형식화할 수 있으며, 이를 위해 jq JSON 프로세서가 설치되어 있어야 합니다.
$ curl -s https://private-registry.nginx.com/v2/nap/waf-compiler/tags/list --key <path-to-your-nginx-repo.key> --cert <path-to-your-nginx-repo.crt> | jq
{
"name": "nap/waf-compiler",
"tags": [
"1.0.0",
"5.1.0",
"5.2.0"
]
}
4. 이미지를 빌드합니다.
아래 명령어를 실행하여 이미지를 빌드하세요. 여기서 waf-compiler-<version-tag>은 이미지 태그의 예입니다.
sudo docker build --no-cache \
--secret id=nginx-crt,src=nginx-repo.crt \
--secret id=nginx-key,src=nginx-repo.key \
-t waf-compiler-<version-tag>:custom .
참고:
NGINX App Protect WAF 이미지를 Docker Hub와 같은 공개 컨테이너 레지스트리에 업로드하지 마십시오. 이는 라이센스 계약을 위반하는 행위입니다.
4. 사용법
이 목차는 사용자 정의 컴파일러 이미지 waf-compiler-<version-tag>을 빌드했다고 가정합니다.
UID 101이 입력 파일에 접근할 수 있는지 확인합니다.
4-1. NGINX App Protect WAF 정책 편집
JSON 파일에서 보안 정책을 컴파일하여 정책 번들을 생성하려면 다음 명령을 실행하세요.
docker run --rm \
-v $(pwd):$(pwd) \
waf-compiler-:custom \
-p $(pwd)/policy.json -o $(pwd)/compiled_policy.tgz
하나의 NGINX 구성 내에서 여러 정책 번들을 사용하려면 글로벌 설정 JSON 파일을 제공해야 합니다. 이를 통해 모든 번들이 공통 기반을 가지며, Cookie 시드, 사용자 정의 서명 등이 포함됩니다.
예를 들면 다음과 같습니다.
global_settings.json:
{
"waf-settings": {
"cookie-protection": {
"seed": "80miIOiSeXfvNBiDJV4t"
}
}
}
글로벌 설정을 포함한 Compile:
docker run --rm \
-v $(pwd):$(pwd) \
waf-compiler-<version-tag>:custom \
-g $(pwd)/global_settings.json -p $(pwd)/policy.json -o $(pwd)/compiled_policy.tgz
-include-source를 사용하면 정책(policy.json) 또는 로그 프로필(logging_profile.json)의 소스를 최종 번들에 포함할 수 있습니다. 이 프로세스는 외부 참조에 의존하는 구성을 번들 소스 내의 인라인 구성으로 변환합니다. 또한, -include-source와 -full-export를 결합하면 번들 내의 policy.json에 기본 템플릿의 기본 설정을 포함한 전체 소스 정책이 포함됩니다.
docker run --rm \
-v $(pwd):$(pwd) \
waf-compiler-<version-tag>:custom \
-include-source -full-export -g $(pwd)/global_settings.json -p $(pwd)/policy.json -o $(pwd)/compiled_policy.tgz
4-2. Logging Profile 편집
Logging Profile 을 컴파일하려면 다음 명령을 실행하세요.
docker run \
-v $(pwd):$(pwd) \
waf-compiler-<version-tag>:custom \
-l $(pwd)/log_01.json -o $(pwd)/log01.tgz
4-3. Bundle information
Bundle information에 대한 정보(예: Attack Signature 버전)를 보려면 다음 명령을 사용하세요.
docker run \
-v $(pwd):$(pwd) \
waf-compiler-<version-tag>:custom \
-dump -bundle $(pwd)/compiled_policy.tgz
5. NGINX App Protect WAF Global 설정
글로벌 설정은 다음 항목들을 구성할 수 있습니다.
5-1. WAF 설정
| Field Name | Type | Description |
| cookie-protection | object | 쿠키 보호 설정을 정의합니다. |
| user-defined-signatures | array of objects | 사용자 정의 서명(Signature)을 정의합니다. |
5-1-1. cookie-protection
| Field Name | Type | Description |
seed | string | NGINX App Protect WAF가 쿠키를 생성할 때 사용하는 암호화 키를 생성하는 데 사용됩니다. 이 쿠키는 애플리케이션이 생성하는 쿠키의 무결성을 검증하는 데 사용됩니다. 최소 20자 이상의 임의의 영숫자 문자열을 사용하세요(최대 1000자). |
5-1-2. user-defined-signatures
| Field Name | Reference | Type | Description |
| $ref | Yes | string | 사용자 정의 서명을 포함하는 파일의 경로를 정의합니다. |
예제는 다음과 같습니다.
{
"waf-settings": {
"cookie-protection": {
"seed": "80miIOiSeXfvNBiDJV4t"
},
"user-defined-signatures": [
{
"$ref": "file:///policies/uds.json"
}
]
}
}
6. 수평적 Scaling
여러 확장 인스턴스(예: Kubernetes 배포 복제본)를 배포할 때 모든 정책 번들이 동일한 글로벌 설정 및 보안 업데이트로 컴파일되었는지 확인해야 합니다.
7. NGINX App Protect WAF Compiler CI/CD
특히 CI/CD 프로세스의 일부로 컴파일러 컨테이너 내부에서 명령을 실행하고 기본 엔트리 포인트를 재정의하는 경우, 컴파일러 바이너리로 /opt/app_protect/bin/apcompile을 사용해야 합니다.
예를 들면 다음과 같습니다.
/opt/app_protect/bin/apcompile -g /path/to/global_settings.json -p /path/to/policy.json -o /path/to/compiled_policy.tgz
이 가이드가 NGINX App Protect WAF의 컴파일러를 효과적으로 사용하는 데 도움이 되길 바랍니다. 추가 질문이 있으시면 언제든지 NGINX STORE를 통해 문의하세요!