규칙이 들어가고, 이미 열려 있는 터미널은 계속 응답하며, 다음 로그인은 거부된다. 이 틈이 바로 바꾸려는 연결 위에서 방화벽 변경을 시험하는 일의 온갖 어려움이다. 연결 추적은 한 번 판단하고 나면 더 이상 보지 않으므로, 이미 성립된 흐름은 새 정책을 볼 수 없는 유일한 검사다. 다음에서는 돌아가는 세 가지 길을 비교하고, 이어서 규칙을 바꾸고 확인할 순서를 정한다.

살아남은 세션이 가장 약한 증거인 이유

상태 기반 방화벽은 흐름의 첫 패킷을 평가하고 그 판정을 항목이 살아 있는 동안 유지한다. 나중에 추가한 규칙은 더 늦게 시작하는 흐름에 적용되므로, 입력 중인 창은 계속 쓸 수 있는 반면 나머지 모두는 거부된다. 그 창에서 배우는 것은 몇 분 전에 유효했던 정책을 설명할 뿐이다. 그 흐름에서 뜬 캡처조차 기계가 이미 내린 결정을 보여 줄 뿐이다.

작동하는 세션을 측정이 아니라 비상 탈출구로 다뤄라. 가치 있는 모든 검사는 새 규칙이 평가할 출처에서 새 흐름을 열어야 하며, 첫 검사는 실패했을 때 가장 아플 검사여야 한다. 그 세션이 유일한 진입로라면, 변경은 아직 할 준비가 되지 않았다.

돌아가는 세 가지 길, 각각 무엇에 기대는지에 따라 정렬

시험 대상 장치에 얼마나 의존하는지로 선택지를 정렬하라. 규칙이 잘못된 것으로 드러났을 때 기대는 것이 바로 그 순위이기 때문이다. 방화벽을 한 번도 거치지 않는 콘솔은 독립적이고, 연습한 롤백은 거의 그러하며, 이미 열려 있는 세션은 그렇지 않다.

Way back inWhat it survivesWhere it fails
out-of-band or hypervisor consolea policy that blocks new loginsneeds separate access you have already tried
rollback rehearsed on that platforma rule that breaks remote accessfails when nobody ever ran it
the session that is already openthe change itselfcannot show whether new flows work

변경 전에 콘솔로 로그인해 그것이 작동함을 증명하라. 한 번도 써 보지 않은 대역 밖 경로는 대안이 아니라 도면일 뿐이다. 롤백은 그 플랫폼에서, 그 규칙 집합으로, 승인된 절차를 따라 연습한 뒤에야 제자리를 얻는다. 운영 중인 기계에서 즉흥적으로 하지 말라. 단계를 적고 다른 사람에게 소리 내어 읽게 하라. 순서를 끝내는 데 당신의 기억이 필요하다면 그것은 계획이 아니다.

변경 하나, 그다음 평가되어야 할 연결

실행 중인 규칙 집합과 그것을 소유한 파일을 저장한 뒤, 하나의 좁은 수정만 하라. 시험마다 변경을 하나로 두면 결과를 귀속할 수 있다. 동시에 둘을 바꾸면 작동하는 기계만 남고 어느 수정이 일을 했는지는 알 수 없다. 플랫폼이 설정을 불러오지 않고 분석할 수 있다면 그것을 먼저 해서, 아무것도 걸린 것이 없을 때 오타가 걸러지게 하라.

nft list ruleset > /root/ruleset.before
nft -c -f /etc/nftables.conf

그다음 콘솔이 아직 붙어 있는 동안, 변경된 규칙이 일치할 출처에서 새 세션을 시작하라. 성공하면 한 번 더 반복하라. 첫 시도는 표에 이미 있던 항목에 떨어질 수 있기 때문이다. 실패해도 들어갈 길과 되돌릴 결정이 남아 있으며, 그것이 이용 가능한 가장 값싼 나쁜 결과다.

카운터, 상태, 파일은 서로 다른 질문에 답한다

세 관찰은 각각 단독으로는 설득력 있어 보이면서 나머지 둘에 대해 착각하게 만들 수 있다. 카운터는 방금 만든 흐름이 수정한 규칙에 도달했는지 보여 준다. 상태 표는 기계가 어떤 흐름을 이미 성립된 것으로 보는지 보여 주며, 그래서 고장 난 규칙도 여전히 건강해 보일 수 있다. 저장한 파일은 다음 재적재 뒤에 장치가 무엇을 할지 보여 주는데, 지금 실행 중인 규칙 집합의 동작과 다를 수 있다.

ss -tn state established

카운터는 합계가 아니라 차분으로 읽어라. 중요한 유일한 숫자는 시험 흐름이 움직인 값이기 때문이다. 카운터가 한 번도 오르지 않는 규칙은 종이 위에서 아무리 맞아 보여도 일치하지 않는다. 거부 사례도 확인하라. 한 번도 아무것도 거부한 적 없는 정책은 막으려던 것을 거부한다고 증명한 적이 없다. 배포가 실제로 운반하는 각 계열에서 인터페이스 하나를 훑어라. v4 규칙은 v6 흐름에 대해 아무것도 말하지 않는다.

저장한 규칙 집합에서 복원한 뒤, 파일을 일치시켜라

변경이 실패하면 로그인이 다시 될 때까지 허용 규칙을 더하는 대신 저장한 규칙 집합을 불러와라. 허용을 하나 더할 때마다 증상은 잠잠해지고, 사건과 그 기억보다 오래 사는 구멍이 남는다. 복원하고 다시 연결한 뒤, 실패한 비교를 시도한 내용의 기록 옆에 두라.

변경이 성공하면 디스크의 파일이 실행 중인 규칙 집합을 설명하게 하고, 재적재가 그것을 재현하는지 확인하라. 자기 설정 파일에서 벗어난 실행 중 규칙 집합은 다음 재부팅을 위해 놓인 함정이다.

관련 글