복호화 경로를 그려라: VPN 어플라이언스가 정책을 적용하는 지점
암호화된 리스너에서 멈추는 다이어그램은 중요한 정책을 보여주지 않는다. 복호화 경로를 그리고, 요청이 무엇을 지나는지로 배치를 비교하라.
벤더 다이어그램은 보통 암호화된 리스너에서 끝난다. 공인 주소를 가진 부분이 거기이기 때문이다. 보안 태세를 결정하는 질문은 복호화 이후에 무슨 일이 일어나는가이다. 패킷은 평범한 IP가 되어 라우팅 테이블이 허용하는 모든 곳에 도달할 수 있다. 아무도 그 구간을 그리지 않았다면, 그 구간의 주인도 없다. 아래 런북은 먼저 그것을 그리고, 다음으로 복호화된 요청이 실제로 무엇을 지나는지로 배치를 비교한다.
패킷은 복호화 이후에 그려라. 이전이 아니다
바깥 경로는 벤더가 문서화하는 부분이다. 공인 엔드포인트, 연결을 허용하는 전송 정책, 그리고 연결을 종료하는 서비스다. 안쪽 경로는 패킷이 터널 헤더를 잃는 순간 시작되며, 거기서부터는 터널과 아무 관련이 없는 라우팅과 필터 규칙이 이를 지배한다. 둘 다 같은 페이지에 두어라. 첫 번째만 있는 다이어그램은 입장과 인가가 하나의 결정이라고 암시한다. 그렇지 않으며, 둘 사이의 간극이 바로 대부분의 배치가 틀리는 지점이다.
안쪽 구간은 화살표가 아니라 이름 붙인 장치 유형을 가진 번호 매긴 순서로 써라. 화살표는 요청이 필터를 지나는지 여부를 감추는데, 지나느냐 아니냐가 질문의 전부다. 아래의 각 홉은 장치와 그곳에서 작동하는 규칙 집합을 지목하므로, 빠진 필터는 선으로 암시되는 것이 아니라 빈틈으로 드러난다.
- 원격 클라이언트: 터널을 만드는 사용자 장치.
- 엣지 정책: 바깥 전송을 공인 리스너로 허용하는 규칙 집합.
- 종료 어플라이언스: 캡슐화를 풀고 패킷을 평범한 IP로 넘기는 VPN 엔드포인트.
- 안쪽 필터: 클라이언트에서 서비스로 가는 트래픽을 제한하는 전달 또는 보안 그룹 규칙 집합.
- 애플리케이션 호스트: 복호화된 요청을 받는 서비스.
두 정책, 두 주인
바깥 정책은 누가 터널을 세울 수 있는지에 답하며, 종료 서비스로 전송을 허용하는 규칙에 표현된다. 안쪽 정책은 인증된 사용자가 어느 서비스에 도달할 수 있는지에 답하며, 전달 규칙, 보안 그룹, 또는 애플리케이션 자체에 존재한다. 하나의 장치가 둘 다 맡을 수 있고, 여러 장치로 된 설계에도 둘 다 있다. 이들을 따로 이름 붙이는 것이야말로 사용자가 애플리케이션에 도달하지 못할 때 어느 쪽이 실패했는지 말할 수 있게 한다.
인증서와 다중 인증 같은 입장 제어는 신원에 답할 뿐 그 밖에는 답하지 않는다. 배치를 결정하지 않으며, 사용자가 안에 들어온 뒤 자원별 권한을 부여하지도 않는다.
배치가 요청이 지나는 경계를 결정한다
세 가지 배치가 흔하며, 각각은 복호화된 요청이 지나는 경계를 바꾼다. 그곳에서 무엇이 종료되는지, 무엇이 평문을 볼 수 있는지, 어떤 제어가 여전히 요청을 거부할 수 있는지, 어플라이언스와 함께 무엇이 실패하는지로 비교하라. 아래 표는 일반적인 질문 대신 그 네 열을 쓴다. 각 답이 별개의 설계 결정이기 때문이다.
| Placement | What terminates there | What sees plaintext | Which control can still deny | Failure domain |
|---|---|---|---|---|
| Termination in a dedicated segment | A dedicated VPN endpoint | The endpoint and anything on its segment | The filter between that segment and the application | The segment path can bypass the filter if no rule sits on it |
| Termination on the edge firewall | The firewall's public listener | The firewall, after decapsulation | The firewall's inner rule set | Admission and inspection fail together |
| Termination on the protected LAN | The appliance's LAN leg | Every host on the protected LAN | Only a host control or a downstream gateway | The appliance and the protected hosts fail together |
세 번째 배치는 적용을 조용히 없앤다. 보호된 세그먼트 위의 구간은 다이어그램이 보여주지 않을 수 있는 직접 경로를 어플라이언스에 준다. 그림이 아니라 인터페이스와 경로를 검사하라: ip route get 10.20.5.10 은 패킷이 어느 인터페이스로 나갈지 보고하며, 그 답은 설계가 가정한 것과 다른 경우가 많다. 자세 사이의 트래픽을 제어하는 방화벽의 고전적 역할은 다음 문서에 서술된 대로 여기서 유용한 시험이다.NIST SP 800-41. 보호된 네트워크로 무제한 구간을 가진 장치는 별로 제어하지 못하기 때문이다. 경로 조회는 발표 자료의 다이어그램보다 정직한 다이어그램이다.
관리는 명시적으로 허용된 자기 경로에 속한다. 사용자가 애플리케이션에 도달하도록 허용하는 것이 장치의 제어 인터페이스에 도달하도록 허용하는 것을 요구하는 경우는 결코 없다. 두 권한은 서로 다른 규칙에서 부여되어야 한다. 두 경로를 따로 감사하라. 공유된 규칙은 어느 쪽이 열렸는지 감춘다.
변환은 하위 규칙이 볼 수 있는 것을 바꾼다
출발지 변환은 편리하고 정보를 파괴한다. masquerade 이후에는 모든 클라이언트가 어플라이언스처럼 보이므로, 사용자를 구분하려고 쓴 하위 규칙은 더 이상 그 일을 할 수 없다. 이것은 기록만의 문제가 아니라 정책의 문제다. 클라이언트 주소를 키로 한 규칙은 조용히 게이트웨이를 키로 한 규칙이 된다. 사용자별 정책이 중요하다면 출발지를 보존하거나 변환 전에 정책을 적용하라.
반환 경로도 같은 점검을 받을 자격이 있다. 목적지가 반환 패킷에 어느 경로를 고르는지 기록하라. 비대칭 반환은 상태 기반 검사를 우회하고, 연결이 맺어진 뒤 멈추게 만든다. 양방향이 그린 경계를 지나야 한다. 그렇지 않으면 경계는 장식이다.
sudo tcpdump -ni inside0 host 10.20.5.10
ip route get 10.20.5.10
sudo iptables -t nat -S POSTROUTING허용된 작업과 거부된 작업을 함께 받아들여라
관리 호스트가 아니라 실제 원격 클라이언트에서 시험하라. 관리 호스트는 보통 사용자가 결코 가지 않을 곳에 앉아 있다. 허용된 작업 하나는 경로가 작동함을 증명하고, 거부된 작업 하나는 정책이 무언가를 하고 있음을 증명한다. 배치를 바꿀 때마다 둘 다 실행하고, 사용한 출발지 신원과 목적지를 기록하라. 성공만 증명하는 시험은 올바른 규칙과 빠진 규칙을 구별하지 못한다.
다음으로 상태를 바꾸는 경우를 시험하라. 재연결, 키 회전을 넘겨 살아남는 세션, 어플라이언스 자체의 고장이다. 갱신, 용량, 복구를 같은 배치의 일부로 비교하라. 여러 논리 제어를 안고 있는 하나의 어플라이언스는 여러 라벨을 단 하나의 고장 영역이다. 공유된 관리 자격 증명이나 무제한 경로가 만들려던 경계를 무너뜨린다면 두 번째 상자도 독립적이지 않다.
엔드포인트, 복호화된 경로, 그리고 그것을 제한하는 제어를 문서화하라. 구현이 무엇이라 불리든 그 세 줄은 의미를 지킨다.