IT/Cloud Architect

Dynamic & Ephemeral port 접근제어

송시 2022. 10. 21. 00:33
728x90

내가 아는 지식을 벗어나는 일이 발생했다.

 

물론 이런 경험이 한두번은 아니지만 IT에 있으면서 혀를 내두르게 하는 실력자들 혹은 상황에 통수잼을 느낀다.

 

L4 계층의 통신을 위해 서버 / 클라이언트는 포트로 통신을 하게 된다.

 

서버야 하나의 포트만 열면 되고 클라이언트는 랜덤하게 할당되는데 그 범위가 보통 32768–65535 을 사용한다.

 

이를 ephemeral port 라고 하고 범위가 조금 더 작은 49152~65535를 dynamic port라고 한다. 

 

그리고 이는 운영체제마다 그 범위가 다르지만 확실한 것은 과거 1025~5000 까지 사용했던 상황에서 여러 이유로(클라이언트 포트 고갈, registered port 범위) 30000 이후로 사용되도록 변화하고 있다는 것이다.

 

이러한 이유로 NACL 이나 ACG/Security Group 등에서 outbound의 범위에 30000~65535로 포트 범위를 지정하는게 일반적이긴하다.

 

물론 과거의 방식을 따르는 상황들이 있기에 1025~65535 범위를 사용하는 것도 방법일 수 있다. 하지만 reverse shell 형태의 공격에 더 많은 기회를 줄 수 있기에 최선책은 아니다.

 

어쨌든 그래서 최근 고객사에 32768~65535 까지의 NACL을 설정을 해놓았는데 특정 사람들은 접속하지 못하는 일이 발생했다.

 

NACL이 문제라는 점을 파악했는데 잘 되는 사람은 클라이언트의 포트가 40000 이후로 생성되었고, 실패하는 사람은 클라이언트 포트가 10000 이후로 생성됨으로써 NACL의 outbound 의 정책에서 통과하지 못하는 상황이였다.

 

정확한 원인은 모르지만 정확한 현상만 이야기 하겠다.

 

안되는 사람은 윈도우 10,11 사용자였고 netsh int ipv4 show dynamicport tcp 를 통해서 dynamicport의 범위가 1025 부터 시작한다는 것이다.

 

카더라 이야기로는 윈도우 인사이더 빌드 2004 버전에서 dynamic port 범위가 변경되는 문제가 있고, 그 이후 패치가 되었더라도 변경된 범위로 남아있는 현상이 있다고 한다.

 

안되었던 사람들은 해당 버그로 발생했던게 아닐까 하는 생각이 든다.

 

뭐 결국 1025~65535로 NACL 설정을 열어주었다.

 

이것을 알아보면서 생각보다 1025 이후부터 클라이언트 포트가 사용될 수 있다는 통수를 맞았지만 좋은 통수였다.

 

 

728x90