Ubuntu에서 X_FORWARDED_FOR 와 REMOTE_ADDR 일치시키기

HYEONG HWAN, MUN/ 2월 16, 2015/ 미분류/ 4 comments

https://blog.lael.be/post/834

가장 앞단에 proxy 서버가 있고, 이 proxy 서버의 80포트에 데몬(해석 프로그램)이 구동되고 있고,

이 데몬은 http host 를 해석에서 알맞은 내부서버로 포워딩하는 역할을 한다.

 

외부에서 보기에는 하나의 서버가 다 처리하는 것처럼 보이는데, 실제로는 내부의 전용 서버가 요청을 받아서 처리하는 것이다.

 

이때 내부서버의 apache 에서는 REMOTE_ADDR 에는 proxy server 의 아이피가 찍히고, X_FORWARDED_FOR 에 실제 요청을 하는 고객 아이피가 찍힌다.

이것은 많은 웹프로그램에게 혼란을 준다. 예를 들어 스팸글이 등록되었는데 proxy server 의 아이피로 기록이 되고, 관리자가 proxy server를 차단하면 서버가 모두 먹통이 되는 현상이 발생한다.

 

내부 서버에서 proxy 서버 정보를 설정해서 고객의 아이피가 REMOTE_ADDR에 기록되게 하자.

 


자세한 이론.

전문용어를 풀어쓰지 않고 그냥 쓰겠다.

 

패킷을 전달하는 routing 방식에는 pre-routing과 post-routing이 있다.

우리가 사용하는 인터넷은 OSI 7 네트워크 구성중 TCP/IP 모델을 사용하고 있다.

- 5계층 : 응용계층 (Application Layer)

- 4계층 : 전송계층 (Transport Layer)

- 3계층 : 네트워크계층 (Network Layer)

- 2계층 : 데이터링크계층 (Datalink Layer)

- 1계층 : 물리계층 (Physical Layer)

보통 응용계층을 생략하고 4계층이라고 말하거나, 또는 5계층이라고 말한다.

계층마다 정해진 역할이 있는데, 3계층에서는 패킷의 ip를 해석할 수 있고, 4계층에서는 패킷을 해석할 수 있다.

- 3계층에서 할 수 있는 라우팅은 ip 기반 라우팅 : 120번 아이피의 요청이면 -> k 서버에게

pre-routing, 일반적인 라우팅방식, 패킷의 ttl 줄어들고 라우팅

- 4계층에서 할 수 있는 라우팅은 문맥 기반 라우팅 : abc.com 요청이면 -> p 서버에게

post-routing, 프록시서버에서 재 전송해는 방식, 패킷의 source address 가 바뀐다.


 

1) Advanced Packaging Tool 패키지 목록 갱신

#apt-get update

 

2) Advanced Packaging Tool 갱신된 패키지 목록에서 rpaf 있는지 찾기

#apt-cache search rpaf

libapache2-mod-rpaf - module for Apache2 which takes the last IP from the ‘X-Forwarded-For’ header

3) rpaf 설치

#apt-get install libapache2-mod-rpaf

 

4) rpaf 모듈 켜기

#a2enmod rpaf

 

5) Proxy 아이피 등록

#vi /etc/apache2/mods-available/rpaf.conf

 

<IfModule mod_rpaf.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 #set your proxy ip here
</IfModule>

 

6) Apache 재시작

#service apache2 restart

 

7) 테스트

다음의 php문서를 작성하고 실행시켜보자.

<?php echo $_SERVER[‘REMOTE_ADDR’]; ?>

 

4 Comments

  1. 안녕하세요.몇일동안 삽질 하다 이렇게 질문남깁니다.
    nginx(https)+varnish+nginx(wordpress) 많은 문제가 발생합니다.
    1.대시보드 접근이 차단됩니다. 에러 메시지:죄송합니다.이 페이지에 액세스 할 수 없습니다.
    2.댓글을 달면 시간 초과됩니다.에러 메시지:504 Gateway Time-out nginx/1.13.8
    위문제 빼고 다른 문제없이 https잘 됩니다.
    https nginx 서버 하나로도 위같은 문제없이 잘 됩니다.
    제 생각에는 작가님의 이글과 관련있는것 같기도 하네요.
    혹시 무슨 문제인제 아시나요?

    1. 이 글과는 관련이 없는것 같습니다.
      https://blog.lael.be/post/2363 글 하단부분의 워드프레스 설정 링크를 참조해보세요.

      1. varnish 서버를 빼고 접속해도 같은 문제가 발생합니다.
        로그인은 되는데 대시보드 접근이 안됩니다.
        NGINX(HTTPS)와 NGINX(HTTP) 를 한서버에 설치하면 저런문제는 없어집니다.
        일단 varnish설정 문제은 아닌거 같아요.

        1. 대시보드만 접근이 안되는건 서버문제가 아니라 소프트웨어 문제 같습니다.
          wp-config.php 에서 WP_DEBUG 를 true 로 설정하고 로그를 살펴보세요. 플러그인 문제일 수 있습니다.
          디버깅 방법은 https://codex.wordpress.org/WP_DEBUG 을 참조해보세요.

varr에 답글 남기기 응답 취소

작성하신 댓글은 관리자의 수동 승인 후 게시됩니다.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*