NGINX App Protect WAF v5 구성
웹 애플리케이션 방화벽(WAF)은 현대의 사이버 보안 환경에서 필수적인 요소로 자리 잡고 있습니다. 특히, NGINX App Protect WAF v5는 강력한 보호 기능과 유연한 구성 옵션을 제공하여 웹 애플리케이션을 다양한 공격으로부터 안전하게 지킬 수 있도록 돕습니다.
이 포스트에서는 NGINX App Protect의 기본 개념과 기능을 소개하고, 실제로 어떻게 구성할 수 있는지 단계별로 안내하겠습니다. 또한, WAF를 통해 얻을 수 있는 보안 이점과 최적화를 위한 몇 가지 팁도 공유할 예정입니다.
목차
1. 개요
2. NGINX App Protect Global 구성
3. NGINX App Protect WAF 번들
4. VirtualServer 리소스를 사용한 NGINX Plus Ingress Controller 구성
4-1. 전제 조건
4-2. 웹 애플리케이션 배포
4-3. Syslog 서비스 생성
4-4. NGINX App Protect WAF 정책 배포
4-5. 로드 밸런싱 구성
4-6. 애플리케이션 테스트
5. VirtualServer 리소스 구성 예시
1. 개요
참고:
GitHub에 예제 리소스가 포함된 완전한 NGINX Ingress Controller가 있습니다.
F5는 NGINX Ingress Controller의 각 릴리스와 함께 NGINX AppProtect WAF 정책 번들을 다시 컴파일할 것을 권장합니다. 이렇게 하면 정책이 호환되고 최신 공격 격 시그니처, 봇 시그니처 및 Ttreat 캠페인으로 컴파일됩니다.
2. NGINX App Protect Global 구성
NGINX App Protect는 사용자 지정 리소스(VirtualServer, VirtualServerRoute)에 대해서만 활성화 및 구성할 수 있습니다. 정책 번들을 참조하는 정책 사용자 지정 리소스를 만든 다음 VirtualServer/VirtualServerRoute 정의에 추가해야 합니다. 추가 세부 정보는 정책 리소스 설명서에서 찾을 수 있습니다.
3. NGINX App Protect WAF 번들
VirtualServer 사용자 지정 리소스에 대한 WAF 번들은 정책 번들을 생성하고 NGINX Ingress Controller에서 액세스할 수 있는 마운트된 볼륨에 배치하여 정의됩니다.
정책을 적용하기 전에 WAF 정책 번들을 생성한 다음 /etc/app_protect/bundles에 마운트된 볼륨에 복사해야 합니다.
참고:
NGINX Ingress Controller는 정책 번들에 대한 securityLogs를 지원합니다. 로그 번들도 /etc/app_protect/bundels에 마운트된 볼륨에 복사해야 합니다.
이 예에서는 생성된 WAF 정책 번들을 참조하여 정책을 구성하는 방법을 보여줍니다.
apiVersion: k8s.nginx.org/v1
kind: Policy
metadata:
name: <policy_name>
spec:
waf:
enable: true
apBundle: "<policy_bundle_name>.tgz"
이 예에서는 위와 동일한 정책을 보여주지만 보안 로그 구성에 로그 번들이 사용됩니다.
apiVersion: k8s.nginx.org/v1
kind: Policy
metadata:
name: <policy_name>
spec:
waf:
enable: true
apBundle: "<policy_bundle_name>.tgz"
securityLogs:
- enable: true
apLogBundle: "<log_bundle_name>.tgz"
logDest: "syslog:server=syslog-svc.default:514"
4. VirtualServer 리소스를 사용한 NGINX Plus Ingress Controller 구성
이 예제에서는 NGINX Plus 및 NGINX App Protect로 NGINX Ingress Controller를 배포하고, 간단한 웹 애플리케이션을 배포한 다음, VirtualServer 리소스를 사용하여 해당 애플리케이션에 대한 부하 분산 및 WAF 보호를 구성하는 방법을 보여줍니다.
참고:
이 예제의 파일은 GitHub에서 찾을 수 있습니다.4-1. 전제 조건
1. 설치 지침에 따라 NGINX Plus 및 NGINX App Protect WAF v5로 NGINX Ingress Controller를 배포합니다.
2. NGINX Ingress Controller의 공개 IP adress를 shell 변수에 저장합니다.
IC_IP=XXX.YYY.ZZZ.III
3. NGINX Ingress Controller의 HTTP 포트를 shell 변수에 저장합니다.
IC_HTTP_PORT=<port number>
4-2. 웹 애플리케이션 배포
애플리케이션의 deployment 및 service를 만듭니다.
kubectl apply -f https://raw.githubusercontent.com/nginxinc/kubernetes-ingress/v3.6.2/examples/custom-resources/app-protect-waf-v5/webapp.yaml
4-3. 로깅을 위한 Syslog 서비스 생성
security log에 대한 syslog 서비스와 pod를 만듭니다.
kubectl apply -f https://raw.githubusercontent.com/nginxinc/kubernetes-ingress/v3.6.2/examples/custom-resources/app-protect-waf-v5/syslog.yaml
4-4. NGINX App Protect WAF 정책 배포
참고:
정책 리소스의 구성 설정은 이전 단계에서 만든 로그 구성으로 NGINX App Protect WAF를 구성하여 WAF 보호를 활성화합니다. your_policy_bundle_name.tgz로 참조되는 정책 번들은 먼저 /etc/app_protect/bundles 볼륨에 만들어서 배치해야 합니다.WAF 정책을 만들고 배포합니다.
kubectl apply -f https://raw.githubusercontent.com/nginxinc/kubernetes-ingress/v3.6.2/examples/custom-resources/app-protect-waf-v5/waf.yaml
4-5. 로드 밸런싱 구성
참고:
VirtualServer는 3단계에서 만든 waf-policy 정책을 참조합니다.1. VirtualServer 리소스 만들기:
kubectl apply -f https://raw.githubusercontent.com/nginxinc/kubernetes-ingress/v3.6.2/examples/custom-resources/app-protect-waf-v5/virtual-server.yaml
4-6. 애플리케이션 테스트
애플리케이션에 액세스하려면 커피와 차 서비스를 curl 합니다. –resolve 옵션을 사용하여 webapp.example.com으로 요청의 Host 헤더를 설정합니다.
1. 애플리케이션에 요청을 보냅니다.
curl --resolve webapp.example.com:$IC_HTTP_PORT:$IC_IP http://webapp.example.com:$IC_HTTP_PORT/
Server address: 10.12.0.18:80
Server name: webapp-7586895968-r26zn
2. 의심스러운 URL로 요청을 보냅니다.
curl --resolve webapp.example.com:$IC_HTTP_PORT:$IC_IP "http://webapp.example.com:$IC_HTTP_PORT/<script>"
<html><head><title>Request Rejected</title></head><body>
3. Syslog 파드에서 보안 로그를 확인합니다.
kubectl exec -it <SYSLOG_POD> -- cat /var/log/messages
5. VirtualServer 리소스 구성 예시
GitHub 저장소에는 전체 VirtualServer 예제가 있습니다.
apiVersion: k8s.nginx.org/v1
kind: VirtualServer
metadata:
name: webapp
spec:
host: webapp.example.com
policies:
- name: waf-policy
upstreams:
- name: webapp
service: webapp-svc
port: 80
routes:
- path: /
action:
pass: webapp
NGINX App Protect를 직접 사용해보시려면 NGINX STORE에 연락하여 논의하십시오.