X-Forwarded-For(XFF)는 서버에서 접속한 클라이언트의 IP를 식별하는 HTTP 해더입니다.
L4스위치에서는 해당 XFF 해더를 통해 proxy 환경에서 서버에게 접속한 클라이언트의 ip를 전달합니다.
해당 글은 alteon L4 및 centos 7.9 , Apache 2.4.6 환경에서 작성되었습니다.
1.사용 예시
위 구성은 L4스위치와 로드벨런싱 대상 서버를 L3스위치에 연결한 구성입니다. 이러한 구조를 원암구조라고 하며
L4스위치와 서버가 다른 대역에 있어 L3 DSR이나 PROXY를 사용하여 서비스를 합니다.
L3 DSR 경우는 고려할 사항들이 많아 보통 PROXY 구성을 많이 사용합니다.
하지만 PROXY로 서비스시 서버에서는 클라이언트 IP가 L4스위치의 VIP로 LOG를 남겨 실제 클라이언트의 ip를 식별할 수 없습니다. 그 이유는 아래에서 설명하겠습니다.
간혹 솔루션이나 서비스 중에 서버에서 클라이언트의 IP를 체크해야 되는 경우가 있습니다.
위 구성에서 proxy 구성 사용 시 실제 클라이언트의 IP가 체크가 되어야 할때 XFF를 이용하여 서버에서 실제 클라이언트의 IP를 체크합니다.
2.서비스 흐름
TEST PC에서 WEB SERVER로부터 HTTP 서버스 요청 및 응답 과정을 설명하겠습니다.
L4스위치에서는 VIP인 192.168.5.199가 서비스 IP이고 VIP로 HTTP 요청이 오면 WEB SERVER에 HTTP 웹 페이지를
요청하고 서버는 L4스위치에 응답합니다. L4스위치는 서버의 응답 패킷을 다시 TEST PC에 전달합니다.
1)TEST PC에서 L4의 VIP로 HTTP 서비스를 요청합니다. (DIP:192.168.5.199 SIP:192.168.4.51)
2)L4스위치는 TEST PC로부터 서비스 요청을 받아 목적지 IP를 실제 서버의IP로 변환하고 소스IP를 L4의 VIP로 변환하여 서버에 HTTP 서비스를 요청합니다. (DIP:192.168.5.198->192.168.0.195 SIP:192.168.4.51->192.168.5.199)
3)서버는 L4스위치에 서비스 응답을 합니다. (DIP:192.168.5.199 SIP:192.168.0.195)
4)L4스위치는 서버에서 받은 응답 패킷을 다시 TEST PC에게 전달합니다.
(DIP:192.168.5.199->192.168.4.51 SIP:192.168.5.199)
* ->는 PROXY 설정으로 인한 IP변환을 표시합니다. DIP는 목적지IP ,SIP는 소스IP를 표시합니다.
2번에서 L4스위치의 VIP로 WEB SERVER에 HTTP서비스를 요청하기 때문에 L4를 통해 서비스를 요청한 클라이언트의 IP가 전부 L4의 VIP로 표시되게 됩니다.
3.L4 스위치 설정
Alteon L4는 Alteon VA를 사용했습니다.
PIP를 이용하여 L4스위치에서 PROXY 설정을 진행했습니다.
/c/l3/if 1
ena
ipver v4
addr 192.168.5.198
/c/l3/gw 1
ena
ipver v4
addr 192.168.5.1
/c/l3/frwd/local/add 192.168.5.0 255.255.255.0
/c/slb/real 1
ena
ipver v4
rip 192.168.0.195
/c/slb/group 1
ipver v4
add 1
/c/slb/pip/type port
/c/slb/pip/add 192.168.5.199 1
/c/slb/port "1"
client ena
server ena
proxy ena
/c/slb/virt 1
ena
ipver v4
vip 192.168.5.199
/c/slb/virt 1/service 80 http
group 1
rport 80
dbind forceproxy
/c/slb/virt 1/service 80 http/http
xforward ena ##해당 설정이 XFF 해더 설정입니다.
4. 서버 설정
해당 설정은 centos 7.9 및 Apache 2.4.6 버전을 사용했습니다.
vi /etc/httpd/conf/httpd.conf
<IfModule log_config_module>
#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined ##주석 처리
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
#LogFormat "%h %l %u %t \"%r\" %>s %b" common ##주석처리
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" commom
파란 부분은 주석처리 해주시고 빨간 부분을 추가하시면 됩니다.
5. log 확인
[root@localhost ~]# cat /etc/httpd/logs/access_log
192.168.4.51 - - [03/Mar/2022:09:11:24 +0900] "GET / HTTP/1.1" 200 625 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"
192.168.4.51 - - [03/Mar/2022:09:11:25 +0900] "GET /favicon.ico HTTP/1.1" 404 424 "http://192.168.5.199/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"
- - - [03/Mar/2022:09:12:16 +0900] "-" 408 0 "-" "-"
실제 real ip가 log에 남는 것을 확인할 수 있습니다.
'Technical > Network' 카테고리의 다른 글
CISCO SPAN(switch port analyzer) 설정 방법 (0) | 2022.04.04 |
---|---|
SLA기능을 이용한 PBR Track 설정하기 (0) | 2022.03.04 |
CISCO 네트워크 보안 취약점 조치 방법(7) (0) | 2022.02.21 |
LAG PSC , LACP bonding 구성시 포트별 트래픽 고르게 분산 하기 (0) | 2022.02.11 |
Apache Log4j 2(Log for java) 취약점 및 밴더 장비별 답변 (0) | 2022.01.07 |
댓글