X-Forwarded-For(XFF) 란?
XFF 는 HTTP Header 중 하나로 HTTP Server 에 요청한 Client 의 IP 를 식별하기 위한 표준입니다.

웹 서버나 WAS 앞에 L4 같은 Load balancers 나 Proxy server, caching server 등의 장비가 있을 경우 웹서버는 Proxy server 이나 장비 IP 에서 접속한 것으로 인식합니다.
그렇기 때문에 웹서버는 실제 클라이언트 IP 가 아닌 앞단에 있는 Proxy 서버 IP 를 요청한 IP 로 인식하고, Proxy 장비 IP 로 웹로그를 남기게 됩니다.

클라이언트 IP ⟶ Proxy 서버 및 장비 ⟶ 웹 서버

이때 웹프로그램에서는 X-Forwarded-For HTTP Hearder 에 있는 클라이언트 IP 를 찾아 실제 요청한 클라이언트 IP 를 알 수 있고, 웹로그에도 실제 요청한 클라이언트 IP 를 남길 수 있습니다.
X-Forwarded-For 는 다음과 같이 콤마를 구분자로 Client 와 Proxy IP 가 들어가게 되므로 첫번째 IP 를 가져오면 클라이언트를 식별할 수 있습니다.

X-Forwarded-For: client, proxy1, proxy2

PLURA V5 Agent 도 X-Forwarded-For 를 이용하여 XFF HTTP Hearder 에 있는 정보로 실제 요청한 Client IP 를 찾아내고,
웹로그에도 남깁니다.
Apache 나 nginx 에서 X-Forwarded-For 를 사용하려면 따로 설정이 필요합니다.

Apache httpd Web Server 에서 XFF 사용 방법

아파치 웹 서버에서는 LogFormat 지시자나 접근 권한 체크 시 Remote Address 를 사용하는데 앞에 Reverse Proxy 가 있다면
의도한대로 동작하지 않으므로 XFF 헤더를 사용하도록 수정해야 합니다.

☞로그포맷
기본 로그포맷은 %h 로 리모트 Address 를 사용하므로 다음과 같이 %{X-Forwarded-For}i 를 사용하도록 수정합니다.


##수정 전
LogFormat “%h %l %u %t \”%r\” %>s %b” common

## 수정 후
LogFormat “%{X-Forwarded-For}i %l %u %t \”%r\” %>s %b” common

☞접근제어(ACL)
ACL 이 필요할 경우 다음과 같이 전역 변수를 설정하고 ACL 이 필요한 곳에서 이 변수를 사용하는 게 편리합니다.


SetEnvIf X-Forwarded-For ^192\.168\.1\. admin_1
SetEnvIf X-Forwarded-For ^192\.168\.2\. admin_2

<Files wp-config.php>
order Deny,Allow
deny from all
</Files>
## 워드프레스 로그인은 내부 IP 에서만 허용
<Files ~ “^wp-login.php”>
Order Deny,Allow
Deny from all

## 내부 IP 만 관리자 로그인 허용
Allow From env=admin_1
Allow From env=admin_2
</Files>

 

nginx httpd Web Server 에서 XFF 사용 방법

nginx 는 –with-http_realip_module 옵션을 주고 컴파일해야 실제 ip 를 얻어올 수 있습니다.

먼저 해당 설정에는 http_realip_module 이 필요하므로 nginx -v 명령어로 지원 여부를 확인 후, http_realip_module이 없다면 –with-http_realip_module 옵션 을 주고 Nginx 를 다시 컴파일 합니다.

그리고 nginx.conf 파일을 아래와 같이 설정합니다.


http {
set_real_ip_from 127.0.0.1;
# proxy/L4 서버 IP
real_ip_header X-Forwarded-For;
#proxy/L4 가 실제 IP 를 설정하는 HTTP Header

 

 

 

 

[/fusion_builder_column]