로드 밸런서 또는 클라우드 WAF를 통해 X-Forwarded-For를 사용하는 경우 Apache 설정

5993 단어 아파치Apache2.4AWS
웹 서비스 이야기. 서버에 도착할 때까지 AWS-ELB 등의 로드 밸런서나 클라우드형의 WAF를 경유하는 경우, 정확한 액세스 원 IP를 취득하려면 X-Forwarded-For(향후 XFF라고 부른다)라는 리퀘스트 헤더를 봐야 한다.
단순히 보면 좋다는 것은 아닌 것을 알았으므로 그림. Apache 설정(.htaccess)에서 고뇨고뇽하고 앱은 XFF를 보면 좋은 상태로 하는 것이 목적. 애플 리케이션으로 분석 해 보면 좋을까요? 라고 하는 이야기는 둔다(일단, 환경 의존 정보는 되도록 미들웨어 설정에 놓치는 사상하의 경우에서는 유효)

※ 로드 밸런서·클라우드 WAF 경유의 올바른 경로외의 액세스인가 어떤가도 판단하는 것은 어려운 것이 나중에 알게 되므로, 올바른 경로외의 액세스는 끊어지고 있는 것이 전제. 뭐, 원래 그 시점에서 부하나 공격으로부터 지켜지지 않는다고 하는 것이므로 아무쪼록.

클라이언트 ⇒ 로드 밸런서 경유 ⇒ 서버 행



Designed by Mermaid.js
  • 브라우저 A는 일반적인 피포적인 사람. XFF는 그대로 보면 좋다.
  • 브라우저 B는 가끔 오는 사람. 부정이기 때문에 제외하지 말라. (제공 서비스 엔드 포인트에 대한 연결 소스 IP 양수)
  • 브라우저 C는 분명히 공격하는 기발한 사람. XFF 헤더를 변조하여 액세스.

  • 서버에 도착했을 때는 XFF를 보면 금붕어의 훈 상태입니다만, 요점은 제일 뒤를 보면 좋다.
    서버의 Apache에 다음 설정을 넣으면 올바른 IP로 리필 할 수 있어야합니다. (잘못되면 지적해 주세요.)

    Apache (httpd.conf/.htaccess)
        SetEnvIf X-Forwarded-For ", " multiforward
        RewriteCond %{HTTP:X-Forwarded-For} ,\ (.+)$
        RewriteRule .* - [E=CENV_CLIENT_ADDR:%1]
        RequestHeader set X-Forwarded-For "%{CENV_CLIENT_ADDR}e" env=multiforward
    

    클라이언트 ⇒ 클라우드 WAF 경유 ⇒ 로드 밸런서 경유 ⇒ 서버 행



    Designed by Mermaid.js
    서버는 무엇을 볼 수 있습니까? 요점은 **뒤로부터 제공 서비스 내에서 경유된 수(위의 예에서는 2번째)**를 보면 된다.
    서버의 Apache에 다음 설정을 넣으면 올바른 IP로 리필 할 수 있어야합니다. (잘못되면 지적해 주세요.)

    Apache (httpd.conf/.htaccess)
        SetEnvIf X-Forwarded-For ", " multiforward
        RewriteCond %{HTTP:X-Forwarded-For} ([0-9\.]+)(,\ [0-9\.]+){1}$
        RewriteRule .* - [E=CENV_CLIENT_ADDR:%1]
        RequestHeader set X-Forwarded-For "%{CENV_CLIENT_ADDR}e" env=multiforward
    

    2행째 마지막 {1} 의 숫자는 뒤에서 날리는 수. 뒤에서 2번째의 경우는 '뒤에서 1개 날린다'는 의미로 '1'을 지정하고 있다.

    좋은 웹페이지 즐겨찾기