1. 라이브러리
  2. 포트
  3. 포트 기본 개념

업데이트됨 1개월 전

포트가 없다면, 모든 기기는 네트워크 서비스를 단 하나만 실행할 수 있을 것입니다. 웹 서버가 곧 서버의 전부가 되는 셈이죠.

포트가 이를 해결합니다. 포트 덕분에 하나의 IP 주소에서 수십 개의 독립적인 서비스를—웹, 이메일, 파일 전송, 원격 접속—각자의 번호로 수신 대기하면서, 서로 간섭 없이 운영할 수 있습니다. 그리고 이 번호들 중 처음 1024개는? 예약되어 있습니다. 표준화되어 있습니다. 이것이 바로 잘 알려진 포트입니다.

표준화가 중요한 이유

웹 주소를 입력할 때, 브라우저는 "웹 서버가 어느 포트에서 실행 중인가요?"라고 묻지 않습니다. HTTP는 포트 80, HTTPS는 포트 443이라고 그냥 가정합니다. 이메일 서버가 메시지를 전달할 때도 협상 따위는 없습니다—수신자의 메일 서버 포트 25에 곧장 연결합니다.

이 모든 것이 가능한 이유는 전 세계가 하나의 약속을 맺었기 때문입니다. 인터넷 할당 번호 관리 기관(IANA)이 레지스트리를 관리하며 포트 번호를 할당합니다. 덕분에 포트 80은 도쿄에서도, 상파울루에서도, 지구 어디에서나 HTTP를 의미합니다.

반대 상황을 상상해보세요—모든 서비스가 임의의 포트를 쓰고, 매번 연결 전에 사전 협상이 필요하다면—인터넷은 제대로 작동하기 어려울 것입니다.

인터넷을 움직이는 포트들

포트 20–21: FTP

파일 전송 프로토콜(FTP)은 두 개의 포트를 사용하는데, 이는 초기 프로토콜 설계 철학을 잘 보여줍니다. 포트 21은 명령을 처리합니다: 디렉터리 목록 조회, 파일 삭제. 포트 20은 실제 데이터를 전송합니다. 제어와 데이터, 분리된 구조입니다.

이 패턴은 이후 등장한 프로토콜들에 영향을 주었지만, FTP 자체는 이제 SFTP(포트 22의 SSH를 통해 터널링)와 HTTPS 업로드에 자리를 내주었습니다. 레거시 시스템과 자동화된 배치 전송에서는 여전히 FTP를 볼 수 있습니다.

포트 22: SSH

Secure Shell은 원격 서버 관리 방식을 완전히 바꿔놓았습니다. SSH 이전에는 텔넷(Telnet)을 사용했는데—비밀번호를 포함한 모든 데이터가 네트워크를 통해 평문으로 흘렀고, 감청하는 누구에게나 노출되었습니다.

포트 22는 이제 안전한 접속의 대명사입니다. 웹 서버 관리, 저장소에 코드 푸시, 암호화된 연결을 통한 프로토콜 터널링—이 모든 것이 여기서 이루어집니다. SSH가 제공하는 보안 덕분에, 인증된 원격 접속이 필요한 모든 상황에서 SSH는 당연한 선택이 되었습니다.

포트 23: 텔넷

텔넷은 여전히 잘 알려진 포트 번호를 배정받고 있지만, 민감한 용도로 사용하는 것은 명백한 부주의입니다. 비밀번호를 포함한 모든 키 입력이 암호화 없이 전송됩니다. 오늘날에는 네트워크 연결 문제 해결이나 SSH 이전 시대의 오래된 장비 접속에만 제한적으로 쓰입니다.

포트 25: SMTP

서버 간 이메일 전송은 포트 25를 통해 이루어집니다. 이메일 클라이언트는 아마도 포트 587을 통해 서버에 연결하겠지만, 그 서버가 수신자의 서버로 메시지를 최종 전달할 때는 포트 25를 사용합니다.

이 포트는 전쟁터가 되었습니다. ISP들이 일반 가정용 네트워크에서 이 포트를 차단하는 이유가 있습니다—악성 코드에 감염된 가정용 컴퓨터들이 중간 과정을 완전히 건너뛰고 직접 스팸을 발송했기 때문입니다. 이메일을 배달하는 이 포트가 스패머들이 가장 탐내는 포트이기도 합니다.

포트 53: DNS

모든 도메인 이름 조회—URL을 입력할 때마다—포트 53으로 쿼리가 전송됩니다. 이 포트 없이는 IP 주소만으로 인터넷을 탐색해야 할 것입니다.

DNS는 이 포트에서 UDP와 TCP를 모두 사용합니다. UDP는 일반 쿼리를 담당합니다(더 빠르고, 연결 오버헤드가 없습니다). TCP는 대용량 응답과 DNS 서버 간 존 트랜스퍼를 처리합니다.

포트 80: HTTP

"https://"를 명시하지 않고 URL을 입력하면, 브라우저는 포트 80과 암호화되지 않은 HTTP를 기본으로 사용합니다.

포트 80은 여전히 엄청난 트래픽을 처리하는데, 대부분은 HTTPS로 리다이렉트하기 전의 초기 연결입니다. 하지만 인터넷은 점차 이 포트를 불안전한 선택지로 취급하는 방향으로 나아가고 있습니다.

포트 443: HTTPS

TLS 암호화로 감싸진 HTTP입니다. 포트 443은 이제 웹 트래픽의 기본—인터넷 뱅킹, 쇼핑, 일반 웹 서핑, 모든 것에 사용됩니다. 현대 브라우저는 암호화되지 않은 사이트에 연결할 때 경고를 표시하며, 웹 전체를 암호화 방향으로 이끌고 있습니다.

이 포트들에 특권이 필요한 이유

유닉스 계열 시스템에서는 1024 미만의 포트에 바인딩하려면 루트 권한이 필요합니다. 이것은 임의적인 규정이 아닙니다—보안 경계선입니다.

공유 시스템의 일반 사용자가 포트 80에서 수신 대기하는 프로그램을 실행할 수 있다고 상상해보세요. 그는 정상 서버로 향하는 웹 트래픽을 가로챌 수 있습니다. 자격 증명을 가로챌 수 있습니다. 특권 요건은 권한 없는 사용자가 중요한 서비스로 위장하는 것을 막습니다.

여기서 하나의 패턴이 생겨납니다: 서비스가 포트를 선점하기 위해 높은 권한으로 시작하고, 이후 정상 운영을 위해 그 권한을 내려놓습니다. nginx 웹 서버는 루트로 시작하여 포트 80 또는 443을 선점한 다음, 낮은 권한의 사용자 계정으로 실행되는 워커 프로세스를 생성합니다. 포트는 확보되고, 위험은 차단됩니다.

3계층 시스템

잘 알려진 포트(0–1023)는 첫 번째 계층에 불과합니다. IANA의 전체 체계:

  • 잘 알려진 포트 (0–1023): 필수 서비스를 위해 예약됨. 바인딩하려면 특권 필요.
  • 등록된 포트 (1024–49151): 애플리케이션이 등록하여 사용 가능. MySQL은 3306, PostgreSQL은 5432를 사용.
  • 동적 포트 (49152–65535): 클라이언트 측 연결을 위한 임시 포트. 브라우저가 웹 서버에 연결할 때, 반환 트래픽을 위해 이 범위에서 임의의 포트를 선택합니다.

이 계층 구조는 표준화와 유연성의 균형을 잡아줍니다. 중요한 서비스는 예약된 자리를 갖습니다. 나머지는 남은 공간에서 운영됩니다.

보안과의 균형

표준화는 인터넷을 작동하게 만들며—동시에 공격 가능하게 만들기도 합니다. 포트 80은 합법적인 사용자에게도, 공격자에게도 쉽게 찾을 수 있는 곳입니다. 포트 스캐너들은 취약한 서비스를 찾아 잘 알려진 포트들을 일상적으로 탐색합니다.

인터넷을 편리하게 만드는 포트들이 가장 많은 공격을 받기도 합니다. 시스템이 어떤 포트를 외부에 노출하고 있는지, 그리고 어떤 서비스가 응답하는지 파악하는 것이 보안의 첫걸음입니다.

잘 알려진 포트에 관한 자주 묻는 질문

sudo 없이 포트 80에서 웹 서버를 실행할 수 없는 이유는 무엇인가요?

유닉스 계열 시스템은 1024 미만의 포트에 바인딩하기 위해 루트 권한을 요구합니다. 이는 권한 없는 사용자가 중요한 서비스로 위장하는 것을 방지하기 위해서입니다. 해결 방법은 두 가지입니다: 포트를 선점하기 위해 루트로 서버를 시작한 뒤 권한을 내려놓거나, 특권 포트를 대신 처리해주는 리버스 프록시를 사용하는 것입니다.

포트 80을 HTTP 이외의 용도로 사용하면 어떻게 되나요?

기술적으로는 막을 수 없지만, HTTP를 기대하는 모든 것이 HTTP 요청을 보낼 것입니다. 브라우저는 받는 데이터를 웹 페이지로 렌더링하려 할 것입니다. 방화벽은 HTTP에 특화된 규칙을 적용할 수 있습니다. 수십 년간 쌓인 가정들과 싸우는 셈이 됩니다.

잘 알려진 포트가 높은 번호의 포트보다 더 안전한가요?

아닙니다. 예상치 못한 포트에서 서비스를 실행해도 보안 효과는 미미합니다—공격자는 잘 알려진 포트뿐만 아니라 모든 포트를 스캔합니다. 낮은 포트에 대한 특권 요건이 유닉스 시스템에서 어느 정도 보호를 제공하기는 하지만, 포트 번호 자체가 서비스를 더 안전하거나 덜 안전하게 만들지는 않습니다.

이 페이지가 도움이 되었나요?

😔
🤨
😃