본문으로 건너뛰기

fn-knock 앞단에 Alibaba Cloud ESA 배치

Alibaba Cloud ESA를 fn-knock 앞단에 배치하여 DNS, TLS, 엣지 전송을 처리할 수 있습니다. 오리진은 여전히 fn-knock 게이트웨이입니다. ESA 설정이 인증, 세션, Host 라우팅 또는 접근 정책을 우회하게 만들어서는 안 됩니다.

연동 전 확인 사항

  • ESA를 거치지 않는 경로에서 서브도메인 매핑을 이미 검증했습니다.
  • 인증 Host와 각 서비스 Host의 DNS, 인증서, 업스트림 대상을 확인했습니다.
  • ESA에서 fn-knock가 공개한 주소, 포트, 프로토콜로 오리진 연결을 할 수 있습니다.
  • ESA를 우회하는 관리 또는 롤백 경로를 확보했습니다.

핵심 설정

  1. 서브도메인 매핑 → 서브도메인 모드 설정 → 엣지 네트워크 실제 IP 식별에서 Alibaba Cloud ESA를 선택합니다. 게이트웨이는 Ali-Real-Client-IP를 읽고 감지한 주소를 X-Forwarded-For로 인증 서비스에 전달합니다. ESA에서는 관리형 요청 헤더 변환을 활성화합니다.
  2. ESA에 사이트를 추가하고 인증 Host와 서비스 Host의 오리진을 fn-knock 게이트웨이로 지정합니다.
  3. 원래 Host, WebSocket, 실제 클라이언트 IP 헤더를 오리진까지 전달합니다.
  4. 인증, 콜백, API와 기타 동적 경로에는 캐시 우회 규칙을 적용합니다. 정적 리소스를 캐시하기 전에도 쿠키나 인증을 깨뜨리지 않는지 확인합니다.
  5. 실제 외부 네트워크에서 로그인, 서비스 페이지, 파일 다운로드, 장시간 연결을 차례로 테스트합니다.

오리진 설정

ESA의 오리진에는 ESA에서 접속 가능한 fn-knock 게이트웨이 주소와 실제 게이트웨이 포트(기본 7999)를 입력합니다. 관리 엔드포인트 7991이나 내부 백엔드 포트를 오리진으로 사용하지 않습니다. 인증 Host와 서비스 Host가 같은 오리진을 사용할 수는 있지만 원래 Host를 fn-knock에 전달합니다.

ESA가 HTTPS로 오리진에 연결한다면 fn-knock 측 인증서에 오리진 Host가 포함되어야 하며 ESA에서 검증 가능한 인증서 체인이 필요합니다. HTTP 오리진을 사용하면서 클라이언트에서 ESA까지는 HTTPS라면, 앞단이 전달하는 프로토콜 정보 때문에 서비스가 http:// 콜백 URL이나 잘못된 쿠키를 생성하지 않는지 확인합니다.

다음 요청은 동적 요청으로 처리합니다.

  • 인증 페이지와 인증 API
  • OIDC, QQ 등 외부 로그인 콜백
  • 로그아웃, 세션 상태, 패스키, Set-Cookie가 포함된 응답
  • 서비스 자체의 로그인, 업로드, 다운로드 서명, WebSocket 핸드셰이크

정적 리소스는 응답이 쿠키, 사용자 또는 권한에 따라 달라지지 않는다는 사실을 확인한 뒤에만 캐시합니다. Set-Cookie 응답을 캐시하거나 개인 데이터가 포함된 캐시 객체를 여러 사용자가 공유하게 해서는 안 됩니다.

실제 IP의 신뢰 경계

ESA 제공자를 선택하면 Ali-Real-Client-IP가 클라이언트 주소 판정에 사용됩니다. 공격자가 ESA를 우회하여 오리진에 직접 접속할 수 있다면 같은 이름의 헤더를 직접 만들어 보낼 수 있습니다. 방화벽, 클라우드 보안 그룹 또는 오리진 접근 제어에서 ESA 오리진 노드와 꼭 필요한 운영 출발지만 게이트웨이 엔드포인트에 접근하도록 허용합니다.

공개 ESA 사이트를 통해 관리 엔드포인트를 제공하지 않습니다. 원격 관리가 필요하다면 VPN, 접근이 제한된 리버스 프록시 또는 별도의 관리 경로를 사용합니다.

문제 해결

모바일 네트워크에서 전체 경로를 다음 순서로 테스트합니다.

  1. 로그인하지 않은 상태로 서비스 Host에 접속하여 인증 절차로 들어가는지 확인합니다.
  2. 로그인을 완료하고 원래 서비스 Host로 돌아오는지 확인합니다.
  3. 요청 로그에서 클라이언트 IP가 실제 사용자 주소인지 확인합니다. 연결 출발지 IP는 ESA 노드일 수 있으므로 Ali-Real-Client-IP도 표시되는지 확인합니다.
  4. 요청 Host, 인증 결과, 업스트림 대상(타깃), 응답 상태를 확인합니다.
  5. 로그아웃, 외부 로그인 콜백, WebSocket, 파일 전송을 테스트합니다.
  6. ESA를 우회하여 오리진에 직접 접속해 보고 네트워크 계층에서 거부되는지 확인합니다.

로그인 리디렉션 루프, 리소스 로드 오류, 지역 규칙 오판이 발생하면 fn-knock 매핑을 바꾸기 전에 ESA 캐시 규칙, 오리진 Host, 외부 프로토콜, 쿠키 도메인, 클라이언트 IP 헤더를 먼저 확인합니다. 요청이 fn-knock 로그에 전혀 나타나지 않으면 DNS, ESA 오리진 상태, 오리진 네트워크를 확인합니다. 로그에 502가 표시되면 fn-knock에서 서비스 대상(타깃)까지의 경로를 확인합니다.

롤백

변경하기 전에 기존 DNS, 오리진 프로토콜, 포트, 인증서, 캐시 정책을 저장합니다. 롤백할 때는 먼저 기존 엔드포인트를 복원하거나 ESA 프록시를 비활성화한 뒤, fn-knock의 엣지 실제 IP 제공자를 현재 경로에 맞는 옵션으로 바꿉니다. DNS가 전파되는 동안 이전 엔드포인트와 새 엔드포인트에 서로 다른 쿠키 도메인이나 캐시 규칙을 사용하지 않습니다.

ESA 콘솔과 요금제별 기능은 변경될 수 있으므로 엣지 측 설정은 ESA 공식 문서를 기준으로 진행합니다.

QQ 커뮤니티: 1081609274