NGINX Management Suite – Security Monitoring 설치 및 구성하기

NGINX Management Suite 는 조직이 NGINX 인스턴스를 쉽게 구성, 모니터링 및 문제 해결할 수 있도록 고급 기능을 단일 플랫폼에 통합합니다. 이를 통해 API를 관리하고 제어할 수 있으며, 애플리케이션의 로드 밸런싱을 최적화하고 전반적인 보안을 강화할 수 있습니다.

NGINX Management Sutie는 아래와 같은 고급 기능 네 가지를 제공합니다.

  • Instance Manager – NGINX 오픈소스 및 NGINX Plus 의 모든 인스턴스를 식별, 보안, 관리, 모니터링 기능 제공
  • API Connectivity Manager – NGINX Plus API Gateway 환경에서의 API 구성, 배포, 모니터링 그리고 보안 지원
  • App Delivery Manager – NGINX Plus LB (L4/L7) 환경에서의 구성, 모니터링, 트러블 슈팅, 가시성 제공
  • Security Monitoring – NGINX App Protect(WAF) 환경에서의 정책구성, 모니터링, 트러블 슈팅, 가시성 제공

해당 블로그 포스트에서는 Security Monitoring 솔루션을 NGINX Management Suite 인스턴스에 설치하고 구성하는 방법을 가이드 합니다.

목차

1. NGINX Management Suite – 전제조건 및 요구사항
 1-1. NGINX Plus 설치
2. NGINX Management Suite – Control Plane 구성
 2-1. ClickHouse 설치
 2-2. NGINX Management Suite 모듈 추가
 2-3. NGINX Management Suite – Instance Manager 설치
 2-4. NGINX Management Suite – Security Monitoring 설치
3. NGINX Plus – Data Plane 구성
 3-1. NGINX App Protect WAF 설치
 3-2. NGINX Agent 설치
 3-3. NGINX 구성파일 편집
 3-4. NGINX Agent 구성파일 편집
4. NGINX Management Suite – Security Monitoring 시연

1. NGINX Management Suite – 전제조건 및 요구사항

해당 가이드에서 진행한 전제조건 및 요구사항을 설명합니다.

  • Ubuntu 20.04.2 LTS
  • NGINX OSS 1.23.0, 혹은 NGINX Plus R29 이상 (해당 매뉴얼에서는 NGINX Plus로 진행)
  • NGINX Management Suite 평가판(Trial) 또는 프로덕션용 구독 라이선스 키
  • Instance Manager 2.11.0
  • Security Monitoring 1.5.0 (with lic)
  • NGINX App Protect WAF 4.3
  • 두 개 이상의 인스턴스

설치 워크플로 (workflow)는 다음과 같습니다.

NGINX Management Suite - Security Monitoring 설치 워크플로

해당 가이드에서 설명하는 Control Plane과 Data Plane의 개념은 다음과 같습니다.

  • Control Plane
    • NGINX OSS 또는 NGINX Plus가 설치되어 있고 NGINX Management Suite 및 Instance Manager, Security Monitoring 모듈이 설치된 서버
  • Data Plane
    • NGINX Agent를 통해 NGINX Plus 인스턴스와 NGINX App Protect WAF의 메트릭을 Control Plane으로 전송

가이드의 모든 목차 진행은 sudo 권한으로 진행합니다.

1-1. NGINX Plus 설치

Control Plane 및 Data Plane 두 인스턴스에 NGINX를 설치합니다.

  • Control Plane – NGINX OSS (권장) 또는 NGINX Plus
  • Data Plane – NGINX App Protect WAF 설치를 위한 NGINX Plus

Control Plane에 NGINX Plus를 설치할 시 발급받은 NGINX Management Suite 평가판 (Trial) 또는 프로덕션용 구독 라이선스 키 (nginx-repo.crt 및 nginx-repo.key)를 사용할 수 있습니다.

  • Control Plane (가이드에서는 NGINX Plus로 진행)
# nginx -v
nginx version: nginx/1.23.4 (nginx-plus-r29)
  • Data Plane
# nginx -v
nginx version: nginx/1.23.4 (nginx-plus-r29)

NGINX OSS 및 NGINX Plus 설치 방법은 NGINX STORE Docs를 참고하세요.

2. NGINX Management Suite – Control Plane 구성

2-1. ClickHouse 설치

Note❗: NGINX Management Suite에는 ClickHouse 22.3.15.33 이상이 필요합니다.

NGINX Management Suite는 ClickHouse를 사용하여 메트릭, 이벤트, 경고 및 구성 설정을 저장합니다.
해당 매뉴얼은 ClickHouse 23.3.4.17 을 통해 진행되었습니다.

2-1-1. 패키지 설치 및 저장소 설정

1. 필수 전제조건 패키지를 설치합니다.

apt-get install -y apt-transport-https ca-certificates dirmngr

2. GPG 키 생성을 위한 저장소를 생성합니다.

GNUPGHOME=$(mktemp -d)

3. GPG 키를 생성합니다.

sudo GNUPGHOME="$GNUPGHOME" gpg --no-default-keyring --keyring /usr/share/keyrings/clickhouse-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 8919F6BD2B48D754

4. 생성했던 저장소를 삭제합니다.

sudo rm -r "$GNUPGHOME"

5. clickhouse 키에 권한을 부여합니다.

sudo chmod +r /usr/share/keyrings/clickhouse-keyring.gpg

6. GPG 키를 바탕으로 clickhouse 저장소를 설정합니다.

echo "deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg] https://packages.clickhouse.com/deb lts main" | sudo tee /etc/apt/sources.list.d/clickhouse.list

7. 패키지를 업데이트 합니다.

sudo apt-get update

2-1-2. ClickHouse 설치

Note❗: ClickHouse를 설치할 때 비밀번호를 지정하거나 비밀번호를 공백으로 둘 수 있습니다. (기본값은 빈 문자열)

ClickHouse에 대한 암호를 지정하도록 선택한 경우 NGINX Management Suite를 설치한 후 /etc/nms/nms.conf 파일을 편집하여 암호를 입력해야 합니다. 그렇지 않으면 NGINX Management Suite 가 시작되지 않습니다.

1. 해당 매뉴얼 에서는 ClickHouse의 비밀번호를 공백으로 진행합니다. (Enter)

sudo apt-get install -y clickhouse-server clickhouse-client

2. 서버가 다시 시작되면 자동으로 시작되도록 ClickHouse를 활성화합니다.

systemctl enable clickhouse-server

3. ClickHouse 서버를 시작합니다.

systemctl start clickhouse-server

4. ClickHouse가 실행 중인지 확인합니다.

systemctl status clickhouse-server

2-2. NGINX Management Suite 모듈 추가

1. NGINX Management Suite 리포지토리를 추가합니다. 리포지토리 추가를 위해서는 /etc/ssl/nginx 디렉토리에 NGINX Management Suite 평가판 (Trial) 또는 유료 구독 라이선스 인증키가 존재하여야 합니다. (nginx-repo.crtnginx-repo.key)

printf "deb https://pkgs.nginx.com/nms/ubuntu `lsb_release -cs` nginx-plus\n" | sudo tee /etc/apt/sources.list.d/nms.list

printf "deb https://pkgs.nginx.com/adm/ubuntu `lsb_release -cs` nginx-plus\n" | sudo tee -a /etc/apt/sources.list.d/nms.list

wget -q -O /etc/apt/apt.conf.d/90pkgs-nginx https://cs.nginx.com/static/files/90pkgs-nginx

2. NGINX 서명 키를 추가합니다.

wget -O /tmp/nginx_signing.key https://cs.nginx.com/static/keys/nginx_signing.key

apt-key add /tmp/nginx_signing.key

2-3. NGINX Management Suite – Instance Manager 설치

1. 최신 버전의 Instance Manager를 설치하려면 다음 명령을 실행하세요.

Note❗: Instance Manager의 Instance Manager의 관리자 사용자 이름 (기본값은 admin)과 자동으로 생성된 암호과 설치 중에 터미널에 표시됩니다. Admin usernameAdmin password를 통해 웹 인터페이스에 액세스 할 수 있으므로 이 비밀번호를 메모하고 안전하게 보관해야 합니다.

Admin username: admin

Admin password: 9JIWJsFi******************

Instance Manager를 설치하는 과정은 다소 시간이 소요될 수 있습니다.

2. NGINX Management Suite 플랫폼 서비스를 활성화하고 시작합니다.

systemctl enable nms nms-core nms-dpm nms-ingestion nms-integrations --now

3. NGINX 웹 서버를 다시 시작합니다.

systemctl restart nginx

</etc/nginx/conf.d/nms-http.conf>

# main external HTTPS server, need port 443
server {
    listen 443 ssl http2;
    root /var/www/nms;
    server_name _;

위 경로의 nms conf 파일을 확인하여 해당 내용이 삽입 되어있는지 확인하고 아래 주소로 웹 인터페이스에 액세스 합니다.

https://<NGINX Management Suite 호스트 주소>/

NGINX Management Suite 웹 인터페이스

2-4. NGINX Management Suite – Security Monitoring 설치

1. Security Monitoring 모듈의 최신 버전을 설치하려면 다음 명령을 실행하십시오.

apt-get update

apt-get install -y nms-sm

2. NGINX Management Suite 서비스를 다시 시작합니다.

systemctl restart nms

3. NGINX 웹 서버를 다시 시작합니다.

systemctl restart nginx

4. NGINX Management Suite 웹 인터페이스에 액세스 한 후, Setting 버튼을 클릭합니다.

NGINX Management Suite Setting 버튼

5. Security Monitoring 모듈이 포함된 .lic 파일을 업로드 합니다.

6. Launchpad 탭에서 새로 고침을 하고 Security Monitoring 모듈이 설치되었음을 확인합니다.

NGINX Management Suite - Security Monitoring 설치 확인 이미지

3. NGINX Plus – Data Plane 구성

3-1. NGINX App Protect WAF 설치

Note ❗: NGINX App Protect가 이미 설치되어 운영 중인 경우 해당 목차는 생략할 수 있습니다.
3-2. NGINX Agent 설치 목차로 넘어가 Security Monitoring 구성을 재개하세요.

1. 아래 명령어로 전제조건 패키지를 설치합니다.

apt-get update && apt-get install apt-transport-https lsb-release ca-certificates wget gnupg2

2. NGINX 서명 키를 다운로드하고 추가합니다.

wget https://cs.nginx.com/static/keys/nginx_signing.key && apt-key add nginx_signing.key

wget https://cs.nginx.com/static/keys/app-protect-security-updates.key && apt-key add app-protect-security-updates.key

3. 이전 NGINX Plus 리포지토리 및 apt 구성 파일을 삭제합니다.

rm /etc/apt/sources.list.d/nginx-plus.list
rm /etc/apt/sources.list.d/*app-protect*.list
rm /etc/apt/apt.conf.d/90pkgs-nginx

4. NGINX Plus 리포지토리를 추가합니다.

printf "deb https://pkgs.nginx.com/plus/ubuntu `lsb_release -cs` nginx-plus\n" | sudo tee /etc/apt/sources.list.d/nginx-plus.list

5. NGINX App Protect WAF 리포지토리를 추가합니다.

printf "deb https://pkgs.nginx.com/app-protect/ubuntu `lsb_release -cs` nginx-plus\n" | sudo tee /etc/apt/sources.list.d/nginx-app-protect.list

printf "deb https://pkgs.nginx.com/app-protect-security-updates/ubuntu `lsb_release -cs` nginx-plus\n" | sudo tee /etc/apt/sources.list.d/app-protect-security-updates.list

6. apt 구성을 다음 위치에 다운로드합니다. </etc/apt/apt.conf.d>

wget -P /etc/apt/apt.conf.d https://cs.nginx.com/static/files/90pkgs-nginx

7. 리포지토리를 업데이트하고 최신 버전의 NGINX App Protect WAF 패키지 (NGINX Plus 포함)를 설치합니다.

apt-get update
apt-get install app-protect

3-2. NGINX Agent 설치

이전 버전의 NGINX Agent가 있다면 아래 명령어를 사용해 제거 하십시오.

dpkg -s nginx_agent_selinux

1. curl 또는 wget을 사용하여 NGINX Agent를 설치할 수 있습니다. NGINX Management 호스트가 유효한 TLS 인증서로 설정되지 않은 경우 설치 도구의 사용 가능한 비보안 플래그를 사용할 수 있습니다.

유효하지 않은 인증서 :

curl

curl https://<NMS 호스트주소>/install/nginx-agent | sudo sh

curl 비보안 플래그

curl --insecure https://<NMS 호스트주소>/install/nginx-agent | sudo sh

wget

wget https://<NMS 호스트주소>/install/nginx-agent -O - | sudo sh -s --skip-verify false

wget 비보안 플래그

wget --no-check-certificate https://<NMS 호스트주소>/install/nginx-agent -O - | sudo sh

2. 다음 명령을 실행하여 NGINX 에이전트 서비스를 활성화하고 시작합니다.

systemctl enable nginx-agent --now

3-3. NGINX 구성파일 편집

1.nginx.conf에서 NGINX App Protect WAF 모듈을 로드합니다. (/etc/nginx/nginx.conf)

load_module modules/ngx_http_app_protect_module.so;

2. 다음을 통해 NGINX App Protect WAF를 활성화 하고, WAF 기본정책을 적용합니다.
NGINX App Protect WAF 는 http, server, location 컨텍스트 내에서 활성화 시킬 수 있습니다.

app_protect_enable on;
app_protect_policy_file "/etc/app_protect/conf/NginxDefaultPolicy.json";

3. /etc/app_protect/conf/log_sm.json 파일을 생성하여 보안 모니터링 모듈의 로그 형식을 정의합니다.

{
    "filter": {
        "request_type": "illegal"
    },
    "content": {
        "format": "user-defined",
        "format_string": "%blocking_exception_reason%,%dest_port%,%ip_client%,%is_truncated_bool%,%method%,%policy_name%,%protocol%,%request_status%,%response_code%,%severity%,%sig_cves%,%sig_set_names%,%src_port%,%sub_violations%,%support_id%,%threat_campaign_names%,%violation_rating%,%vs_name%,%x_forwarded_for_header_value%,%outcome%,%outcome_reason%,%violations%,%violation_details%,%bot_signature_name%,%bot_category%,%bot_anomalies%,%enforced_bot_anomalies%,%client_class%,%client_application%,%client_application_version%,%transport_protocol%,%uri%,%request%",
        "escaping_characters": [
            {
                "from": ",",
                "to": "%2C"
            }
        ],
        "max_request_size": "2048",
        "max_message_size": "5k",
        "list_delimiter": "::"
    }
}

4. App Protect WAF가 활성화 된 컨텍스트에 logging을 구성합니다.
NGINX Agent가 로그를 수집할 수 있도록 syslog to Logging을 진행합니다.

app_protect_enable on;
app_protect_policy_file "/etc/app_protect/conf/NginxDefaultPolicy.json";
app_protect_security_log_enable on;
app_protect_security_log "/etc/app_protect/conf/log_sm.json" syslog:server=127.0.0.1:514;

5. NGINX 웹 서버 구성 파일에 location /api 디렉티브를 추가합니다.

    location /api {
        api write=on;
        allow 127.0.0.1;
        deny all;
    }

3-4. NGINX Agent 구성파일 편집

1. /etc/nginx-agent/nginx-agent.conf 파일을 편집하여 nap_monitoring 구성을 추가합니다.


# OSS NGINX default config path
# path to aux file dirs can also be added
config_dirs: "/etc/nginx:/usr/local/etc/nginx:/usr/share/nginx/modules:/etc/nms"

# Enable reporting NGINX App Protect details to the management plane.
extensions:
  - nginx-app-protect
  - nap-monitoring
# Enable reporting NGINX App Protect details to the control plane.
nginx_app_protect:
# Report interval for NGINX App Protect details - the frequency the NGINX Agent checks NGINX App Protect for changes.
report_interval: 15s

# NGINX App Protect Monitoring config
nap_monitoring:
# Buffer size for collector. Will contain log lines and parsed log lines
collector_buffer_size: 50000
# Buffer size for processor. Will contain log lines and parsed log lines
processor_buffer_size: 50000
# Syslog server IP address the collector will be listening to
syslog_ip: "127.0.0.1"
# Syslog server port the collector will be listening to
syslog_port: 514

syslog_ipsyslog_port3-3의 4번 목차에서 구성한 syslog logging과 다를 시 메트릭이 수집되지 않습니다.

2. NGINX와 NGINX Agent를 재시작합니다.

systemctl restart nginx-agent
systemctl restart nginx

4. NGINX Management Suite – Security Monitoring 시연

1. Control Plane의 https 호스트 주소로 접속합니다.
https://<NGINX Management Suite 호스트 주소>/

NGINX Management Suite - Security Monitoring 설치 완료 웹 인터페이스

2. Instance Manager 탭으로 접속합니다.
인스턴스에 NGINX App Protect가 인식되는지 확인합니다.

3. Security Monitoring 탭으로 이동합니다.

4. 그래프를 확인합니다.
공격이 감지되지 않았기 때문에, 의도적으로 Data Plane을 취약한 웹 애플리케이션 서버로 설계해 SQL Injection과 같은 취약점 공격을 시도하고 수집된 메트릭을 확인할 수 있습니다.

NGINX Management Suite - Security Monitoring 대시보드

5. Data Plane을 SQL Injection 공격에 취약한 웹 애플리케이션 서버로 구성하고 공격을 시도합니다.

NGINX App Protect WAF로 인해 SQL Injection 공격이 차단되었고 공격을 시도한 ID (Support ID) 가 남았습니다. 이를 Security Monitoring에서 확인할 수 있습니다.

NGINX Management Suite - Security Monitoring 대시보드 2
NGINX Management Suite - Security Monitoring 공격 지표

6. Security MonitoringSupport ID Details 탭에서 NGINX App Protect WAF의 위반된 시그니처 등 특정 Support ID에 대한 자세한 정보를 확인할 수 있습니다.

NGINX Management Suite - Security Monitoring 시그니처 상세 확인
NGINX Management Suite - Security Monitoring 시그니처 상세확인 2

NGINX Management Suite의 Security Monitoring 모듈로 WAF 가시성을 개선하고 싶으신가요?
지금 NGINX STORE에 문의하여 사용 사례에 대해 상담을 받고 무료 평가판을 시작해보세요.

아래 뉴스레터를 구독하고 NGINX와 NGINX STORE의 최신 정보들을 빠르게 전달 받아보세요.

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required