본문으로 건너뛰기

업스트림으로 프록시 헤더 전달

fn-knock를 통해 요청을 전달할 때 업스트림 서비스에는 원래 프로토콜, 접속 Host 또는 클라이언트 주소가 필요할 수 있습니다. 시스템 설정 → 게이트웨이 → 프록시 헤더에서는 서비스 Host별로 게이트웨이가 업스트림에 X-Forwarded-* 같은 프록시 헤더를 보낼지 설정합니다. 이 항목은 Host 라우트를 사용하는 서브도메인 모드에서만 편집할 수 있습니다. 공인 IP로 직접 연결하는 서브도메인 모드리버스 프록시 모드 → 서브도메인 매핑이 여기에 해당하며 경로 모드와 직접 연결 모드에는 이 항목이 없습니다.

활성화하면 업스트림 서비스에서 이러한 헤더를 바탕으로 올바른 외부 링크를 생성하고, HTTPS 여부를 판단하고, 클라이언트 주소를 기록하거나 자체 신뢰 프록시를 설정할 수 있습니다. 비활성화하면 애플리케이션에는 일반적으로 fn-knock와 업스트림 사이의 연결 정보만 표시됩니다.

UI에는 Host별로 표시되지만 런타임에서는 업스트림 대상(타깃)별로 적용됩니다. 여러 Host가 같은 대상(타깃)을 재사용할 때 한 Host의 프록시 헤더를 끄면 같은 대상(타깃)을 사용하는 다른 Host에도 영향을 줍니다. 서로 다른 정책이 필요하다면 각각 다른 대상(타깃)을 사용합니다.

업스트림 설정

프록시 헤더를 보내는 것만으로 업스트림이 자동으로 해당 정보를 사용하지는 않습니다. 애플리케이션이나 앞단 웹 서버에서도 다음과 같이 설정합니다.

  1. fn-knock의 연결 주소 또는 네트워크 대역을 신뢰 프록시로 설정합니다.
  2. 실제로 사용할 프록시 헤더 이름을 지정합니다.
  3. 외부 URL, HTTPS 판단 및 접근 로그의 클라이언트 IP를 확인합니다.

업스트림이 모든 출발지의 X-Forwarded-For를 신뢰하면 공격자가 fn-knock를 우회해 업스트림에 직접 연결할 때 주소를 위조할 수 있습니다. 업스트림의 수신 범위를 제한하거나 방화벽에서 fn-knock의 접근만 허용합니다.

사용 원칙

  • 업스트림 서비스에 필요하고 헤더를 올바르게 처리할 수 있을 때만 활성화합니다.
  • 업스트림 서비스는 fn-knock에서 보낸 프록시 헤더만 신뢰하도록 구성합니다. 임의의 클라이언트가 위조한 X-Forwarded-For를 받아들이면 안 됩니다.
  • fn-knock 앞단에 CDN, FRP 또는 터널이 있다면 앞단 경로에서 외부 클라이언트가 위조할 수 있는 실제 IP 헤더를 삭제하거나 다시 작성합니다. 그런 다음 요청 로그에서 fn-knock가 식별한 클라이언트 IP를 확인합니다.
  • 변경 후 요청 로그와 업스트림 접근 로그의 Host, 프로토콜 및 클라이언트 IP를 대조합니다.

이 설정은 fn-knock가 업스트림으로 보내는 헤더에만 영향을 줍니다. fn-knock가 인바운드 클라이언트 IP를 식별하는 방식을 결정하지 않으며 신뢰 프록시 목록을 대신할 수도 없습니다. 인바운드 출발지 식별은 앞단 경로에서 실제 IP 헤더를 올바르게 처리하는지에 달려 있으므로 배포 후 요청 로그에서 반드시 검증합니다.

QQ 커뮤니티: 1081609274