직원과 실험실 클라이언트를 위해 작성한 규칙이 새 에지 방화벽에 올라가는데, 그것은 조용히 모든 것과 일치하거나 아무것도 일치하지 않는다. 원인은 업스트림에 있다. 게이트웨이가 이미 클라이언트 주소를 다시 썼기 때문에 규칙은 두 그룹 대신 하나의 통과 주소만 본다. 장비를 추가해도 경로가 제거한 정보는 복원되지 않는다. 정책을 쓰기 전에 구분이 아직 존재하는 마지막 지점을 찾아야 한다.

에지 규칙이 하나의 주소만 보는 이유

다대일 변환은 각 내부 주소와 포트 튜플을 할당된 포트가 있는 공용 외부 주소로 매핑한다. 대화는 그 포트 바인딩 덕분에 변환기에게는 구별되지만, 단순한 소스 접두사 일치를 수행하는 하위 장비는 공용 주소만 본다. 그것만으로도 규칙에서는 두 그룹이 동일해진다. 패킷은 여전히 도착하지만 그룹 구분은 도착하지 않는다.

다이어그램이 약속하는 것이 아니라 방화벽 인터페이스가 실제로 관찰하는 것을 확인해야 한다. 둘은 누구의 예상보다도 자주 어긋난다.

마지막으로 적용 가능한 신원 찾기

적용 지점에서 시작해 원래 접두사가 나타날 때까지 거슬러 올라간다. 보통 두 개의 명령이 경계를 찾아낸다.

iptables -t nat -L POSTROUTING -n -v
conntrack -L -s 10.90.0.2 | head

NAT 테이블은 어떤 트래픽이 어떤 규칙으로 변환되는지 보여 주고, conntrack 목록은 활성 흐름의 원래 튜플과 변환된 튜플을 보여 준다. 업스트림 방화벽이 변환된 주소만 보는 곳에서는 그룹별 소스 규칙이 어떻게 작성되든 작동할 수 없다. 경로를 따라 앞이나 뒤로 이동하며 두 클라이언트 접두사가 구별되는 장비에 도달해야 한다. 안쪽이나 바깥쪽이라는 레이블을 믿는 대신 각 홉에서 소스를 기록한다.

세 가지 배치와 각각의 비용

정책은 원래 소스가 아직 보이는 변환 게이트웨이에 둘 수 있다. 통과가 변환 대신 라우팅되면 업스트림 방화벽에 둘 수 있는데, 이는 반환 경로를 추가하고 소스 재작성을 제거하는 일을 뜻한다. 또는 주소가 아니라 신원에 적용할 수 있으며, 사용자나 장비를 아는 인증된 제어를 통해 수행한다. 각 선택에는 소유자와 실패 방식이 있고, 규칙을 순수하게 소스 주소에 관한 것으로 유지하는 것은 처음 두 가지뿐이다.

무엇을 선택하든 규칙을 그것이 일치하는 주소와 함께 문서화해야 한다. 주소 가정이 조용히 바뀐 규칙은 규칙이 없는 것보다 나쁘다. 트래픽과 계속 일치하면서 전혀 다른 것을 보호하기 때문이다.

승인: 허용된 클라이언트 하나와 거부된 클라이언트 하나

각 그룹에서 하나씩 두 클라이언트로 시험하고 각자가 적용 지점에 어떻게 도달하는지 기록한다. 두 튜플을 규칙 결과 옆에 남겨, 증거가 구분이 살아남았다는 것을 보여 주고 다른 방화벽이 있다는 것을 보여 주지 않도록 한다. NAT나 라우팅을 바꾼 뒤 시험을 반복한다. 제시되는 주소가 조용히 깨지는 부분이기 때문이다. 사람을 구별해야 하는 곳에서는 인증을 유지한다. 소스 주소는 정책의 입력이지 신원의 증거가 아니기 때문이다.

적용 지점, 관찰된 소스, 규칙을 티켓에 적는다. 그렇지 않으면 다음 엔지니어가 두 번째 방화벽과 같은 규칙을 추가한다.

관련 글