본문으로 건너뛰기

보안 경계 및 기준선

보안 설정에서는 먼저 두 가지를 확인합니다. 모든 요청이 반드시 fn-knock를 통과하는지, 그리고 게이트웨이가 실제 클라이언트 IP를 받는지입니다. 둘 중 하나라도 충족되지 않으면 인증, 허용 목록 및 지역 규칙이 예상과 다르게 작동할 수 있습니다.

경계부터 확인

fn-knock는 게이트웨이 진입점을 통과하는 트래픽만 제어할 수 있습니다. 다음 상황은 게이트웨이 외부에서 처리합니다.

  • 라우터, 클라우드 보안 그룹 또는 Docker에서 서비스의 원래 포트를 공개한 경우
  • CDN, 리버스 프록시 또는 터널이 서비스로 직접 연결되는 경우
  • 앞단 프록시가 자신의 사설망 주소를 클라이언트 IP로 잘못 전달하는 경우
  • 관리 페이지, 데이터베이스 또는 SSH가 별도로 공개된 경우

게이트웨이는 루프백, 사설망, 링크 로컬 및 CGNAT 주소를 로컬 출발지로 판단하고 인증 사전 검사 단계에서 바로 허용합니다. 이 규칙은 세션과 IP 접근 권한보다 먼저 적용됩니다. 따라서 보호된 서비스를 확인할 때는 모바일 네트워크나 다른 실제 인터넷 연결을 사용하고 가정용 Wi-Fi에서만 테스트하지 않습니다.

권장 보안 기준선

  1. 게이트웨이에 필요한 포트만 외부에 공개하고 관리 진입점은 LAN, VPN 또는 신뢰할 수 있는 리버스 프록시 뒤에만 둡니다.
  2. 게이트웨이에 정식 HTTPS 인증서를 준비하고 공개하는 각 Host에 올바른 DNS를 설정합니다.
  3. 복구 가능한 로그인 자격 증명을 두 개 이상 만들고 자주 사용하는 기기에는 패스키도 연결합니다.
  4. 새 서비스는 기본적으로 “로그인 필요”를 켜고 명확한 필요가 있을 때만 공개합니다.
  5. 요청 로그와 이벤트 알림을 켜고 정상 트래픽을 관찰한 뒤 WAF, 게이트웨이 스로틀링, 스캐너 또는 차단 목록 규칙을 강화합니다.
  6. 호스트, fn-knock 및 업스트림 서비스를 정기적으로 업데이트하고 업데이트 전에는 보호된 백업을 내보냅니다.

제어 계층별 역할

계층해결하는 문제주요 메뉴
게이트웨이 접근 범위게이트웨이에 접근할 수 있는 지역 또는 CIDR 제한시스템 설정 → 게이트웨이
매핑 접근 정책Host를 공개할지 로그인을 요구할지 결정서브도메인 매핑
서브도메인 고급 인증출발지 또는 요청 특성에 따라 현재 Host의 임시 자격 증명 발급서브도메인 매핑 → 고급 인증
인증 및 세션ID, 세션 시간, 쿠키 공유 및 자격 증명 범위 확인인증 설정, 세션 및 보안
IP 허용 목록고정 IP/CIDR 또는 로그인한 IP에 접근 권한 부여IP 허용 목록
로그인 백오프같은 출발지에서 계속 실패하는 로그인 시도 지연세션 및 보안 → 로그인 백오프
게이트웨이 스로틀링 및 크롤러 차단빈번한 리버스 프록시 트래픽을 제한하고 확인된 크롤러 거부시스템 설정 → 게이트웨이
스캐너 차단비정상 경로 요청을 기준으로 별도의 차단 목록 유지시스템 설정 → 차단
일반 차단 목록확인된 개별 출발지 IP를 즉시 거부세션 및 보안 → 일반 차단 목록
WAF게이트웨이를 통과하는 HTTP 요청 탐지 또는 차단시스템 설정 → WAF
SSH 방화벽출발지와 로그인 실패를 기준으로 호스트 SSH 보호SSH 보안, 호스트 제어 기능을 지원하는 배포에서만 사용
호스트 또는 상위 방화벽서비스의 원래 포트와 관리 포트를 제한호스트, 라우터 또는 클라우드 보안 그룹

이러한 제어는 서로 보완하며 대신할 수 없습니다. 예를 들어 WAF는 이미 공개된 데이터베이스 포트를 닫지 않으며 허용 목록도 업스트림 서비스 취약점을 해결하지 않습니다. 서브도메인 고급 인증 규칙과 일치하면 현재 Host 전체가 허용되므로 지속적인 경로 단위 제한으로 사용하면 안 됩니다.

실제 클라이언트 IP

CDN, 리버스 프록시 또는 터널에서 온 요청을 올바르게 식별할 수 있는지는 업스트림의 실제 IP 헤더에 달려 있습니다. fn-knock는 일반적인 X-Forwarded-For, X-Real-IP, EO-Connecting-IPAli-Real-Client-IP 정보를 순서대로 처리합니다.

현재 설정 페이지에는 인바운드 신뢰 프록시 CIDR 목록이 없습니다. 앞단 프록시는 외부 클라이언트가 위조할 수 있는 실제 IP 헤더를 삭제하거나 다시 작성합니다. 127.0.0.1, 192.168.x.x 같은 주소를 잘못 전달하면 인터넷 요청이 로컬 예외로 오인될 수 있습니다. EdgeOne, ESA, Cloudflare 또는 자체 리버스 프록시를 연결한 뒤에는 외부 네트워크에서 요청 로그의 “클라이언트 IP”와 “연결 출발지 IP”를 각각 확인합니다.

관리 영역 분리

관리 페이지에는 인증, 인증서, 프록시, 차단 목록 및 터미널을 변경할 권한이 있으므로 일반 서비스 진입점보다 엄격한 경계를 적용합니다.

  1. 인증 설정에서 관리 페이지의 접근 가능 범위를 별도로 설정합니다.
  2. LAN, VPN 또는 신뢰할 수 있는 고정 CIDR로 우선 제한합니다.
  3. 공개 서비스와 취약한 비밀번호 자격 증명을 공유하지 않습니다.
  4. 터미널을 사용할 수 있는 플랫폼에서는 서비스 프로세스의 호스트 권한도 고려합니다.
  5. 두 번째 관리자 자격 증명과 로컬 콘솔 복구 수단을 유지합니다.
  6. 활성 세션, IP 변경 이력 및 로그인 백오프를 정기적으로 확인합니다.

관리 페이지의 경로를 숨기거나 바꾸는 것은 접근 제어가 아닙니다. 진입점에는 여전히 인증, 네트워크 제한 및 정식 HTTPS가 필요합니다.

업스트림 포트 제한

클라이언트가 리버스 프록시를 우회할 수 없을 때만 리버스 프록시가 보안 경계 역할을 합니다.

  • 업스트림 서비스는 127.0.0.1이나 fn-knock만 접근할 수 있는 컨테이너 네트워크에서 우선 수신 대기하도록 설정합니다.
  • LAN 주소에서 수신 대기해야 한다면 호스트 방화벽으로 게이트웨이 출발지만 허용합니다.
  • Docker ports, 라우터 포트 포워딩, 클라우드 보안 그룹, FRP 및 CDN 오리진 연결을 확인합니다.
  • 프로토콜 매핑은 TCP/UDP 트래픽을 공개하며 HTTP 인증과 WAF를 거치지 않으므로 별도로 제한합니다.

인터넷에서 공개 주소를 스캔해 서비스의 원래 포트가 실수로 노출되지 않았는지 확인합니다. 같은 LAN에서만 테스트해서는 인터넷 경계가 올바른지 입증할 수 없습니다.

이상 발생 시

  1. 먼저 요청 로그에서 요청이 게이트웨이에 도착했는지 확인합니다.
  2. Host, 경로, 업스트림 대상 및 라우트 유형이 예상과 일치하는지 확인합니다.
  3. 클라이언트 IP가 프록시 주소가 아니라 실제 공인 IP 주소인지 확인합니다.
  4. 세션, 허용 목록, 로그인 백오프, 스캐너 차단 목록, 일반 차단 목록 및 WAF 로그를 확인합니다.
  5. 이벤트 센터와 대조해 설정 변경, 로그인, 차단 또는 업데이트가 발생한 시각을 확인합니다.
  6. 원래 포트가 공개된 것으로 의심되면 라우터, 클라우드 보안 그룹, 컨테이너 포트 및 호스트 방화벽을 차례로 확인합니다.

서비스를 복구할 때는 문제가 발생한 한 계층의 정책만 일시적으로 완화하고 원래 값을 기록합니다. 원인을 확인한 뒤 보안 설정을 복원합니다. 인증, WAF 및 차단 목록을 동시에 꺼서 원인을 찾을 단서를 잃지 않습니다.

QQ 커뮤니티: 1081609274