extract_forwarded_module을 사용하여 REMOTE_ADDR에 액세스 소스 IP 설정

하고 싶은 일



.htaccess 내에서 modRewrite를 사용하여 IP 주소로 유지 보수 페이지로 나누기를 원합니다.
허가 IP의 경우는 열람 가능, 그 이외는 메인터넌스 페이지를 표시로 한다고 하는 대응을 실시한다.

환경



CloudFront(이후 CDN)
ELB
Amazon Linux(이후 EC2)

구성으로서는 CDN을 경유해, ELB를 지나, EC2에의 액세스 됩니다.

문제점



.htaccess에서 "X_FORWARDED_FOR"을 사용하여 액세스 소스의 IP 주소를 결정하려고 시도한 결과, "X-Forwarded-For"에 여러 IP가 나열되어 modRewrite를 사용한 IP 주소 등에 의한 페이지 분류 수 없었다.

위의 환경 문제로 인해 CDN의 IP 주소가 분명히 출력되는 것 같습니다.
본래는 ELB의 IP 주소도 기재될 것입니다만, 이번 apache 모듈의 「mod_rpaf」를 넣고 있기 때문에, ELB의 IP는 없었습니다.

생각한 것(대책)


  • SetEnv에 허용 IP 주소를 변수에 설정하고 액세스 제한을 수행합니다.
  • extract_forwarded_module을 도입한다. REMOTE_ADDR을 취득해, modRewrite로 분배를 실시한다.

  • ■ phpinfo에서 IP 주소 확인


    1은 IP 주소로 액세스 제한할 수 있습니다만, 페이지의 배분을 할 수 없기 때문에 거부.
    2를 채용한다.

    했던 일



    1. extract_forwarded_module 설치



    yum에서 설치를 수행합니다.
    $ sudo yum install mod_extract_forwarded
    

    2. mod_extract_forwarded.conf 편집



    MEFaccept를 'all'으로 변경
    # コメントは省略しています
    LoadModule extract_forwarded_module modules/mod_extract_forwarded.so
    MEForder refuse,accept
    MEFrefuse all
    MEFaccept all
    MEFaddenv on
    MEFdebug off
    

    3. "httpd.conf"편집



    mod_extract_forwarded.so를로드하도록 편집합니다.

    LoadModule을 검색하고 mod_extract_forwarded.so를 추가합니다.
    이미 추가되었고 댓글이 달린 경우 댓글을 뽑습니다.
    또 환경에 의해 파일명이나, PATH가 다를지도 모르기 때문에, module 디렉토리 부하에서 「extract_forwarded」를 검색해 적절한 것으로 변경할 필요가 있습니다.
    LoadModule extract_forwarded_module modules/mod_extract_forwarded.so
    

    apache 재부팅



    설정을 반영
    $ /etc/init.d/httpd restart
    

    확인



    phpinfo에서 REMOTE_ADDR을 확인한다.



    감상



    무사히 액세스 원래 IP 주소를 얻을 수 안심.
    CDN이나 SetEnv를 사용한 제어를 할 수 있을지도 모릅니다만, 조사할 시간이 없고 단념.

    좀 더 CDN이나 ELB(어플리케이션 로드 밸런서)등을 사용한 환경도 연구해 여러가지 지견을 위해 가려고 생각합니다.

    고마워요! !

    좋은 웹페이지 즐겨찾기