진행 중인 SSH 세션이 중단되지 않도록 방화벽 설정을 변경해야 합니다.

진행 중인 SSH 세션이 중단되지 않도록 방화벽 설정을 변경해야 합니다.

SSH를 통해 서버에 로그인한다고 가정해 보겠습니다. 세션 중에 모든 트래픽을 차단하도록 방화벽 구성을 변경합니다.

이전에 FreeBSD와 pf로 이것을 시도했을 때 현재 연결이 끊어졌습니다. 지금 시도해 보면 현재 연결은 활성 상태로 유지되지만 핑(및 새 연결)이 작동하지 않습니다. 또 뭔가 빠진 것이 있는지 잘 모르겠습니다.

예상되는 동작은 무엇입니까? 이로 인해 현재 세션이 중단됩니까?

답변1

block all" 진행 중인 SSH 세션을 중단 하려면 방화벽 설정을 변경해야 합니다 ."

대답은 '아마도'입니다. 때에 따라 다르지정확한 규칙, 표시되는 내용 및 기존 SSH 연결이 (또는) block all에서 관리되는지 여부. 또한 공격적인 정리로 설정된 방화벽은 방화벽 규칙을 수정하는 동안 세션을 삭제할 수 있습니다. 상태가 유지되는지 여부에 영향을 미칠 수 있는 다른 관련 설정이 있습니다. 예를 들어 설정될 수 있고 일부 라우팅 이유로 인해 SSH 패킷이 다른 인터페이스에 나타나기 시작합니다.keep statemodulate stateset optimizationset state-policyif-bound

pf내부마지막quick규칙에 추가 되지 않으면 일치 규칙이 적용됩니다 . 이는 다른 방화벽 규칙 시스템, 특히 Linux의 iptables와 대조됩니다. 따라서 규칙의 정확한 순서는 quick사용 여부와 마찬가지로 중요합니다.

상태가 활성화된 경우 기존 연결은 규칙 변경을 통해 보존되어야 합니다( set optimization시간 초과로 인해 종료되지 않는 한).

예: block all마지막 일치 규칙이 추가로 적용되므로 적용되지 않으며 기존 SSH 연결 상태가 유지됩니다.

block all
pass out on $ext_if proto tcp all modulate state
pass in on  $ext_if proto tcp from any to any port ssh modulate state

다음 규칙 세트는 보안 방화벽입니다. 기존 SSH 연결은 세션 시간이 초과될 때까지 계속 유지되어야 하지만 모든 것이 빠르게 차단됩니다.

block quick all
pass out proto tcp all modulate state
pass in proto tcp from any to any port ssh modulate state

위 내용을 작성하는 또 다른 방법은 마지막 일치 규칙이 기본적으로 승리하므로 이를 block all최종 규칙으로 만드는 것입니다(다른 규칙이 없는 한 ).quick

flags any(새 상태가 일치하는 방법도 복잡합니다 . 새 연결의 기본값뿐만 아니라 TCP 연결의 모든 부분에 대해 상태가 생성될 수 있도록 제한을 줄일 수 있습니다 flags S/SA. 그리고 비대칭 라우팅과 같은 기타 복잡한 문제도 있습니다.)

방화벽 규칙을 변경할 때 시스템이 잠기지 않도록 일종의 롤백이나 복구 옵션을 사용하는 것도 일반적으로 매우 좋은 생각입니다.

# pfctl -f pf.conf; sleep 30; cp pf.conf.bak pf.conf; pfctl -f pf.conf
jfkd^C

규칙 변경(설정 block return quick)으로 인해 기존 세션이 종료되지 않았기 때문에 control+c몇 번 키를 누른 후 클릭하여 터미널에서 해당 내용이 반영되는지 확인했습니다.

관련 정보