휴대폰의 Wi-Fi Calling을 깨지 않고 IPsec 차단하기
여섯 가지 점검이 일괄 프로토콜 차단을 방어 가능한 서비스 예외로 바꾼다. 기능, 출발지, 목적지, 한도, 검토 날짜다.
요청은 언제나 같은 형태로 온다. 아무도 승인하지 않은 터널을 나른다며 경계에서 IPsec을 닫으라는 것, 그리고 첫 불만은 Wi-Fi 통화가 끊긴 사람에게서 온다. 두 사실은 동시에 참이며 어느 것도 통제를 포기할 이유가 되지 않는다. 방화벽에 필요한 것은 이름 붙은 기능, 한정된 출발지, 문서화된 목적지, 담당자를 갖춘 서비스 예외다. 다섯 단계면 내년에 낯선 사람이 검토할 수 있는 규칙이 된다.
프로토콜에 이름을 붙이기 전에 서비스에 이름을 붙여라
SIP 서비스의 데스크 전화와 통신사의 Wi-Fi Calling을 수행하는 단말은 같은 네트워크 프로필을 공유하지 않으며, 방화벽 용어로서의 VoIP는 둘 다 설명하지 못한다. 포트와 목적지 데이터는 서비스를 운영하는 공급사나 통신사에서 와야 하며, 다른 전화 시스템에 속한 기억 속 포트 목록에서 오면 안 된다. 이것이 기능을 보호하는 규칙과 단어를 보호하는 규칙의 차이다.
Apple의 서비스 포트 참조 에는 Wi-Fi Calling용으로 UDP 500과 4500이 나오는데, 이는 대부분의 일괄 IPsec 차단이 빠뜨리는 바로 그 쌍이다. 변경 기록에는 그 포트 옆에 기능 이름을 적는다. 사용한 참조의 버전이나 날짜도 붙인다. 공급사 표는 수정되기 때문이다. 존재 이유인 서비스를 지목한 규칙은 검토할 수 있지만, 프로토콜 범주를 지목한 규칙은 그럴 수 없다.
예외는 호의가 아니라 계약으로 써라
예외는 허용된 기능, 그것을 쓰는 단말 등급, 필요한 전송, 책임 당사자가 문서화한 목적지를 밝힌다. 소유자와 검토 날짜도 담는다. 통신사의 종단점과 단말 모델은 방화벽 팀에 알리지 않고 바뀌기 때문이다. 검토는 팀보다 오래 남을 팀 이름이 아니라 사람에게 맡긴다. 기록만으로도 낯선 사람이 규칙을 다시 이끌어낼 수 있을 만큼 구체적으로 문장을 유지한다.
예외를 나머지 경계 정책과 같은 주기에 올린다. 통신사가 목적지를 옮기거나 단말 모델이 바뀌면 다음 장애가 아니라 검토에서 알아차리게 하기 위해서다. 통화가 깨졌다고 보고한 사람과 고리를 닫는다. 차단이 닫으려던 터널을 다시 열지 않고도 수정을 확인할 수 있는 사람은 그뿐이다. 그 확인도 날짜와 함께 기록에 남긴다.
임시 휴대폰 수리라고 이름 붙인 영구 허용은 이 년 뒤에는 변호할 수 없다. 식별된 서비스에 묶인 허용에는 의도적으로 갱신하는 만료가 있다.
출발지 범위를 정직하게 정하라
예외를 관리 단말 세그먼트로 제한하는 것은 건물의 모든 노트북에 프로토콜을 여는 것보다 훨씬 강하다. 네트워크가 그 세그먼트를 식별할 수 없다면, 단말을 안다는 듯한 암시 대신 그 사실을 적는다. 가장 싼 좋은 결과는 다른 이유로 이미 존재하는 경계를 재사용하는 것이다. 예외는 새 통제를 발명하는 대신 기존 통제를 물려받는다. 주소로 거르는 것은 단말 인증이 아니며, 변경 기록도 그렇게 암시해서는 안 된다.
출발지 주소나 하드웨어 주소는 물리 단말의 증거가 아니다. 둘 중 무엇이든 의미가 있는지는 그 세그먼트 안의 다른 통제에 전적으로 달려 있다. 규칙의 근거가 MAC 주소에 기대고 있다면, 배포 전에 사용자가 그것을 바꾸지 못하게 하는 것이 무엇인지 확인한다.
포트 규칙이 말할 수 없는 것을 받아들여라
포트는 전송 종단점을 식별하지, 업무 의도를 식별하지 않는다. 승인된 통화 서비스와 승인되지 않은 터널이 같은 UDP 4500을 지나면, 어떤 포트 기반 규칙도 둘을 가르지 못한다. 그렇게 한다고 주장하는 규칙은 정확해 보이지만 아니며, 자기 형태를 인정하는 규칙보다 나쁘다. 이것은 구조의 한계이지 쓴 사람의 실수가 아니다.
그 사실을 규칙 옆에 적고, 예외를 네트워크가 가진 강제 수단, 예를 들어 단말 관리나 승인 목적지 목록과 짝지어라. 그다음 도구가 허락하는 만큼 좁게 예외를 표현한다. 예컨대 세그먼트와 포트 쌍을 지목하고 일반 차단을 그 뒤에 두는 nftables 규칙이다.
nft add rule inet edge forward ip saddr 10.40.0.0/24 udp dport { 500, 4500 } counter accept
nft add rule inet edge forward udp dport { 500, 4500 } counter drop
nftables는 순서대로 평가하고 첫 일치에서 멈추므로, 한정 허용은 일반 차단 위에 있어야 한다. 둘을 뒤집으면 예외는 조용히 아무것도 하지 않는다.
기능과 차단을 검증하라
승인된 검증을 평범한 Wi-Fi 통화로, 예외가 존재하는 단말 등급에서 수행하고 제외된 클라이언트가 여전히 실패하는지 확인한다. 어떤 상황에서도 긴급 통화를 시험 사례로 쓰지 않는다. 그리고 배포된 규칙을 점검한다. 카운터가 영에 멈춰 있으면 예외가 한 번도 일치하지 않았다는 가장 빠른 증거다.
nft -a list chain inet edge forward
시험에 재접속이나 네트워크 변경을 넣고, 이미 연결된 상태가 아니라 단말이 네트워크에 합류하는 차가운 시작부터 반복한다. 통화가 계속 실패하는데 카운터가 움직인다면, 문제는 방화벽을 떠나 통신사의 목적지 목록에 속한다.