터널은 올라오고 로그는 연결됨이라고 하는데, 한 애플리케이션은 여전히 아무것도 도달하지 못한다. Linux 클라이언트에서 이는 보통 배포판의 방화벽이 VPN 클라이언트가 관리한 적 없는 경로를 필터링하고 있다는 뜻이다. 두 관리자가 동시에 활성화될 수 있으며, 각자 인터페이스와 영역, 트래픽 방향에 대한 생각이 다르다. 무엇이든 편집하기 전에 소유자를 파악하는 편이 무언가 될 때까지 규칙을 시도하는 것보다 빠르다.

관리자와 백엔드 찾기

설치된 것이 아니라 실제로 로드된 것부터 시작한다. 배포판은 firewalld, ufw, 그리고 평범한 nftables 서비스를 함께 제공할 수 있으며, 실행 중인 규칙 집합을 소유한 것은 그중 하나뿐이다. 패키지들은 평화롭게 공존하고, 잘못된 프런트엔드로 입력한 규칙은 커널에 도달하지 않는다. 활성 서비스를 읽고, 그다음 그것이 만든 규칙 집합을 읽는다.

백엔드는 프런트엔드만큼 중요하다. firewalld 설치는 버전과 구성에 따라 nftables 또는 구형 iptables 백엔드를 구동할 수 있고, 둘은 서로 다른 검사 출력을 낸다. 시스템을 어떤 안내서와 비교하기 전에 배포판과 버전, 백엔드를 티켓에 적는다.

방향과 인터페이스 맞추기

나가는 클라이언트 요청, 들어오는 리스너, 전달되는 패킷은 서로 다른 훅을 지나가고, 하나에 대한 규칙이 나머지를 덮지 않는다. 로컬 LAN을 허용하는 영역은 종종 터널 인터페이스나 VPN 주소 풀을 포함하지 않는다. 터널 인터페이스는 보통 기본 영역에 도착하며, 그 영역은 물리 어댑터가 있는 영역보다 엄격한 경우가 많다. 이 불일치가 LAN에서는 탐색이 되고 터널이 올라오는 순간 멈추는 이유를 설명한다.

규칙을 고르기 전에 어느 방향이 실패했는지 질문한다. 바깥으로 연결할 수 없는 애플리케이션에는 출력 경로가 필요하고, 들어오는 서비스에는 터널 인터페이스의 입력 경로가 필요하다. 잘못된 체인에 규칙을 추가하면 적용된 것처럼 보이지만 아무것도 하지 않는 변경이 생긴다.

규칙 소유자들의 합의 유지

VPN 클라이언트의 훅, 컨테이너 런타임, 배포판 서비스는 모두 네트워크를 수정할 수 있다, 그리고 서로 조정하지 않는다. 손으로 입력한 규칙은 다음 재로드 때 사라지고, 관리자의 체인에 끼워 넣은 규칙은 의도하지 않은 순서로 평가될 수 있다. 관리자의 영구 구성을 사용하고, 작성한 파일이 아니라 결과 규칙 집합을 검사한다. 서비스 하나에 도달할 수 없다고 방화벽 전체를 끄는 것은 작은 문제를 큰 문제와 바꾸는 일이다.

좁은 카운터는 거부된 흐름을 찾는 저렴한 방법이다. 하나의 목적지와 하나의 포트로 제한한 로깅 규칙은 다른 사람의 트래픽을 잡지 않고도 드롭이 로컬에서 일어나는지 보여 준다. 조사가 끝나면 로깅 규칙을 제거하는데, 이는 정책이 아니라 진단이기 때문이며, firewalld의 영역 문서 가 인터페이스와 서비스가 어떻게 결합되는지 설명한다.

잠금을 잃지 않고 수정 확인하기

기록한 백엔드에 맞는 명령을 사용해, 그것을 소유한 관리자로 적용된 상태를 검사한다. 아래 목록은 firewalld가 담당한다고 가정하므로, 모두 실행하는 대신 nftables나 ufw의 동등한 명령으로 바꾼다. 한 세션에서 도구를 섞는 것이 머신이 서로 충돌하는 두 규칙 집합을 갖게 되는 경로다.

sudo firewall-cmd --get-active-zones
sudo firewall-cmd --zone=trusted --list-all
sudo nft list ruleset | head -40

첫 번째 명령은 영역과 그에 할당된 인터페이스의 이름을 보여 주어 터널이 실제로 어디에 도착했는지 알려 준다. 두 번째는 한 영역의 규칙과 서비스를 출력하므로 VPN 인터페이스가 애초에 덮여 있는지 볼 수 있다. nftables 목록은 사용 중인 백엔드의 근본 진실이고, 구성 파일에만 존재하는 규칙은 거기에 나타나지 않는다. 세 출력을 추가한 규칙과 비교하면 불일치가 대개 스스로 이름을 밝힌다.

그다음 원래 요청과 필요한 실패 동작을 반복한다. 같은 변경이 클라이언트의 잠금을 없앴다면 새로 동작하는 사이트만으로는 충분하지 않으므로 보호되지 않은 경로도 시험한다. 관리자와 백엔드, 인터페이스, 규칙의 목적을 기록하는데, 두 번째 관리자를 되살리는 패키지 업데이트가 그렇지 않으면 전체 혼란을 다시 만들기 때문이다.

관련 글