두 클라이언트 그룹을 서로 다른 서브넷에 두는 것은 격리처럼 보이지만 격리가 아닙니다. 주소는 패킷이 어디서 온 것처럼 보이는지를 나타내고, 권한은 그것을 포워딩하는 주체가 내리는 결정입니다. 이 질문에 답하는 것은 마스크가 아니라 구성이므로, 어떤 규칙이든 쓰기 전에 어느 구성 요소가 피어 트래픽을 포워딩하는지 결정하십시오.

서브넷은 라벨이지 규칙이 아니다

그룹마다 풀 하나를 할당하면 읽기 쉬운 주소를 얻을 뿐 그 이상은 없습니다. 추가 경로를 받아들이는 클라이언트는 도달성을 얻은 것이며, 도달성은 권한 부여가 아닙니다. 통신 권한은 포워딩 결정에 있고, 그 결정은 서버 구성에 따라 데몬이나 커널에 있을 수 있습니다.

주소 소유권이 있어야 프리픽스를 그룹 선택자로 쓸 수 있습니다. 인증된 각 신원은 예측 가능한 주소나 범위에 매핑되어야 하며, 여러 장치가 하나의 자격 증명과 하나의 할당을 공유하는 순간 그 매핑은 깨집니다. 소스 프리픽스에 의존하기 전에 신원과 동시성을 해결하십시오. 어느 머신이 호출하는지 추측하는 정책은 최악의 순간에 잘못된 쪽을 승인합니다.

피어 트래픽을 나르는 경로를 고르라

데몬이 자체 프로세스 안에서 피어 패킷을 포워딩하면, 그 패킷은 호스트의 포워딩 훅에 절대 도달하지 않으므로 커널 규칙이 볼 수 없습니다. 그 내부 포워딩을 끄면 커널이 포워딩 지점이 되고, 일반적인 포워딩 규칙이 적용됩니다.

# peer forwarding inside the daemon: enforce with per-group policy instead of FORWARD rules
client-to-client
# kernel forwarding path: remove the line above, then filter in the forward chain

오프로드된 데이터 채널과 제품이 관리하는 서버는 자체 적용 모델을 공개하므로, 커뮤니티 동작을 가정하지 말고 어느 것을 실행 중인지 확인하십시오. 피해야 할 실패는 검토에서는 올바르게 보이지만 런타임에 결코 참조되지 않는 규칙입니다.

규칙보다 먼저 매트릭스를 작성하라

짧은 매트릭스는 규칙 집합보다 검토하기 쉬우며, 구현이 충족해야 할 계약입니다. 같은 그룹의 피어는 허용, 그룹 간 피어는 거부, 두 그룹 모두 이름이 있는 공유 서비스로는 허용, 그 외 전부 거부. 방화벽 편집기를 열기 전에 이 네 줄을 적으십시오. 규칙 구문을 읽지 못하는 검토자도 매트릭스는 확인할 수 있습니다. 그다음 구현은 그 줄에 맞추기만 하면 됩니다.

SourceDestinationDecision
Group A addressAnother Group A addressAllow
Group A addressA Group B addressDeny
Either groupThe shared internal serviceAllow
Either groupAnything not listedDeny

작성할 때 세 목적지 클래스를 분리해 두십시오. VPN 호스트의 서비스는 로컬 입력이고, 다른 클라이언트는 피어 통과이며, 게이트웨이 뒤의 머신은 다른 포워딩 경로입니다. 관대한 규칙 하나가 실수로 셋 모두를 허용하며, 이렇게 그룹 정책은 군더더기 단계가 붙은 평면 네트워크가 됩니다. 각 행 옆에 클래스를 적어 의도가 다음 편집에서도 살아남게 하십시오.

규칙이 살아남는 곳에 두라

방화벽의 나머지를 유지하는 같은 위치에 결정을 추가하고, 그 결정을 삼킬 수 있는 어떤 허용 규칙보다 앞에 두십시오. 규칙 순서는 정책의 일부이며, 넓은 허용 뒤에 놓인 올바른 규칙은 아무것도 강제하지 않습니다. 변경 전후의 규칙 번호를 기록하십시오. 편집기에는 있지만 실행 중인 규칙 집합에는 없는 정책은 계획이지 통제가 아닙니다.

정책이 바뀔 때 이미 존재하는 흐름이 어떻게 되는지 결정하십시오. 변경 전에 열린 세션은 변경 후에도 계속 실행될 수 있습니다. 떠난 구성원이 즉시 접근을 잃어야 한다면, 연결이 스스로 닫히기를 기다리는 대신 그 상태를 종료할 방법이 규칙 집합에 필요합니다.

방화벽의 나머지를 소유한 메커니즘을 통해 규칙을 영구화하고, 그 옆에 매트릭스를 기록하십시오. 기록되지 않은 정책은 다음 사고 때 기억에서 다시 도출되며, 대개 서두르는 사람에 의해 이루어집니다.

양쪽에서 증명하라

각 그룹의 클라이언트 하나에서 같은 그룹 내 도달성, 그룹 간 실패, 공유 서비스를 시험하십시오. 클라이언트 하나에서의 시험 하나는 매트릭스의 절반만 증명하며, 빠뜨린 절반이 보통 잘못된 쪽입니다. 거부 방향은 두 번 반복하십시오. 캐시된 세션이 적용 오류를 숨길 수 있기 때문입니다. 어떤 쌍을 시험했는지 기록해 다음 사람이 반복하지 않게 하십시오.

터널이 IPv6를 나른다면 같은 확인을 그 프로토콜에서 반복하고, 일반 애플리케이션 인증은 그대로 두십시오. 소스 프리픽스는 계정이 아니므로, 네트워크 정책을 통과했다고 해서 서비스가 호출자를 신뢰해야 하는 것은 아닙니다.

관련 글