NGINX Management Suite - Security Monitoring (SM) 을 통해, 

NGINX App Protect 에 대해 GUI 모니터링 및 로그 확인이 가능하다. 


해당 사항을 활용하기 위해서는 아래와 같은 작업이 필요하다

1. 필요 라이센스

 - NGINX Plus License ( with NAP )

 - NGINX Instance Manager License 


2. 설정 구성

 - 하단의 설정에 대해 구성이 가능하며, code 인 관계로 커스터마이징 또한 자유롭게 가능하다 


NMS - SM 모니터링간 필요 항목

  • 설정 변경 대상
    • 모니터링 대상에 설치된  nginx-agent.conf
    • 모니터링 대상의 NGINX Config (API Access / status_zone )
    • 모니터링 대상의 WAF Logging

NGINX Agent 구성 - NGINX Agent 변경

  • /etc/nginx-agent/nginx-agent.conf 에 내용 추가

    # 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
    

NGINX 설정 변경

  • NGINX.conf 변경

    API Access Allow 설정

    http {
       server {
          listen 127.0.0.1:8080;
          location /api {
             api write=on;
             allow 127.0.0.1;
             deny all;
         }
       }
    }
    
  • NGINX Config 설정

    status_zone 명시 필요

    waf log PATH : nginx-agent.conf 와 동일해야 함

    location / {
            status_zone default_server; ## ADD
            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;
    
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    

NGINX App Protect Log Profile 변경

  • NAP Logging format 생성

    vi /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%",
            "max_request_size": "2048",
            "max_message_size": "5k",
            "list_delimiter": "::"
        }
    }
    

NGINX 설정 적용

  • Code

    nginx -s reload
    systemctl restart nginx-agent