본문 바로가기

Cloud/AWS

AWS NLB Target Group : Proxy Protocol v2 관련

Today Keys :  Proxy protocol, target , group, mod_remoteip, aws, network load balancer, nlb, access log, cloud


 이번 포스팅은 AWS Network Load Balancer에서  Target Group Type으로 IP를 사용하는 경우에도 Proxy Protocol를 이용해서 사용자 IP를 확인하는 방법에 대해서 알아봅니다. 이 방법은 Target Group Type이 IP인 경우 이외에도 Private Link를 통한 서비스 호출 시에도 동일하게 적용하여 사용자 IP를 확인할 수 있습니다.


먼저 서버에서 Proxy Protocol에 의한 사용자  IP를 Access Log에 남기기 위해서 설정하는 방법을 알아 봅니다.

 아파치 데몬 설치 및  mod_remoteip module  확인        

[root@ip-10-1-0-142 ~]# yum -y install httpd
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
...중략...
Complete!
[root@ip-10-1-0-142 ~]#  apachectl -t -D DUMP_MODULES | grep -i remoteip
remoteip_module (shared)             // 모듈이 활성화 된 상태이며, 만약 활성화가 안된 경우에 모듈 활성화 필요
[root@ip-10-1-0-142 ~]#     

 

설정 파일에 Proxy Protocol 지원 및 로그 포맷 설정 추가 (/etc/httpd/conf/httpd.conf)   

RemoteIPProxyProtocol On
LogFormat "%h %p %a %{remote}p %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

※ ProxyProtocol 활성화 이후에는  ProxyProtocol을 적절하게 처리하지 않은 경우에 정상적인 서비스 불가


 

 이제 Proxy Protocol을 사용하기 전과 후의 테스트를 통해서 정상적으로 원하는 출발지(사용자) IP주소가 Access log에 남는지 확인해 봅니다.

 Proxy Protocol v2  설정 전   

Target Group에 Proxy Protocol v2를 설정하기 전의 Target Group Type에 따라서 서비스 호출 및 Access log 확인

 Target Type : Instance

 Target Type : IP

 

Target Group  Type에 따른  Access Log.       

    - NLB의 경우 Target Type이 Instance인 경우에 별도의 NAT 과정이 없기 때문에 Client IP 확인 가능
    - Target Type이 IP인 경우에는 NLB에서 NAT를 수행하여 Client IP가 Server에서는 NLB로 보임

 

[root@ip-10-1-0-142 ~]#  cat /var/log/httpd/access_log | cut -d' ' -f-6
2XX.XXX.9.90 - - [26/Jun/2020:04:48:55 +0000] "GET       // Instance Type Target 호출 로그
10.1.0.206 - - [26/Jun/2020:04:49:02 +0000] "GET         // IP Type Target 호출 로그

 

 

Proxy Protocol v2  설정 후   

 Target Type : Instance

 

 Target Type : IP

 

Target Group  Type에 따른  Access Log.   
 - Target Goup IP Type인 경우에도  Access log에서 출발지 IP 확인 가능

[root@ip-10-1-0-142 ~]#  cat /var/log/httpd/access_log | cut -d' ' -f-6
2XX.XXX.9.90 80 2XX.XXX.9.90 36933 - -                   // IP Type Target 호출 로그

 


Private Link 사용 시의 Proxy Protocol을 사용한 사용자 IP 확인
 ▪  Private Link 사용 시에 Provider 쪽에 Private Link Service를 위해서 NLB가 필요한 데, 출발지에서 Private Link를 이용해서 서비스 호출 시, 서버에서는 NLB IP 주소로 Access log가 남게 됨.

 ▪  Private Link Service를 위한 Provider의 NLB에서도 Proxy Protocol v2를 활성화하여, Private Link를 이용해서 호출하는
   사용자(출발지)의  IP주소 식별 가능


※ 테스트 환경
     Private Link 구성을 위한 NLB의 Target은 Instance Type으로 구성

 

 

Proxy Protocol v2  설정 전

일반적인 Private Link를 통한 서비스 호출 시, NLB IP가 로그에 남게 됨.

 Private Link 사용자 (요청)
[root@ip-10-2-0-22 ~]# curl http://vpce-015a87447edaXXXX-zf7q02h9.vpce-svc-0eba83ebb488b65d9.ap-northeast-2.vpce.amazonaws.com
<h2>ZIGISPACE - Proxy Protocol v2 TEST</h2>

Private Link 제공자(로그)
[root@ip-10-1-0-142 ~]# cat /var/log/httpd/access_log | cut -d' ' -f-6
10.1.0.206 - - [26/Jun/2020:08:35:08 +0000] "GET         // Private Link 제공자의 ENI IP 출력

 

Proxy Protocol v2  설정 후

Private Link를 통한 서비스 호출 시에도 출발지의 IP를 Access Log에서 확인 가능

 Private Link 사용자 (요청)
[root@ip-10-2-0-22 ~]# curl http://vpce-015a87447edaXXXX-zf7q02h9.vpce-svc-0eba83ebb488b65d9.ap-northeast-2.vpce.amazonaws.com
<h2>ZIGISPACE - Proxy Protocol v2 TEST</h2>

Private Link 제공자(로그)
[root@ip-10-1-0-142 ~]# cat /var/log/httpd/access_log | cut -d' ' -f-6
10.2.0.22 80 10.2.0.22 39030 - -                         // Private Link 사용자의 IP  출력

 

 

테스트 화면 :

 출발지에서 서비스를 2번 호출(Proxy Protocol 활성화 전 / 활성화 후)

서비스 제공자에서 Access Log 확인 시에 출발지 IP 확인 가능