📚 네트워크 · 패킷 분석 › 02. 포트 · 프로토콜 분석 — 54편
이전 글: 53. Well-Known Port · 다음 글: 55. Dynamic Port
Registered Port는 1024~49151번 구간으로, IANA 명칭은 User Ports입니다(RFC 6335). 특정 애플리케이션 개발사나 단체가 "이 번호를 우리 프로토콜에 쓰겠다"고 신청해 등록한 번호들입니다.
53. Well-Known Port가 표준 프로토콜 중심이라면, 이 구간은 데이터베이스·원격 관리·미들웨어처럼 제품별 서비스가 많이 모여 있습니다.
| 항목 | 내용 |
|---|---|
| 범위 | 1024 ~ 49151 |
| IANA 명칭 | User Ports |
| 할당 절차 | Expert Review — 신청서를 IANA 지정 전문가가 검토 |
| 등록의 의미 | 충돌을 피하기 위한 권고. 다른 프로그램의 사용을 막지 않음 |
| 운영체제 권한 | Linux 기본 설정에서 일반 사용자도 LISTEN 가능 |
Registered Port는 "등록"이라는 이름 때문에 예약된 것처럼 느껴지지만, 실제로는 운영체제가 아무 제약도 두지 않습니다. 같은 번호가 전혀 다른 두 용도로 동시에 쓰이는 흐름을 보면 이해가 쉽습니다.
[서버 A 192.168.10.20] [클라이언트 B 192.168.10.30 (Linux)]
MySQL이 0.0.0.0:3306 LISTEN connect(203.0.113.50:443) 호출
→ 3306은 IANA 등록 "mysql" ↓
커널이 임시 포트 범위(32768~60999)에서
출발지 포트 선택 → 예: 45000
↓
45000도 Registered 구간 번호지만
여기서는 "서비스"가 아니라 "클라이언트 임시 포트"
net.ipv4.ip_local_reserved_ports로 특정 번호를 임시 포트 선택에서 제외할 수 있게 합니다.관제 로그에서 자주 보이는 Registered Port입니다. 각 서비스의 상세는 링크한 글에서 다룹니다.
| 포트 | 관례상 서비스 | 분류 | 상세 |
|---|---|---|---|
| 1433 / 1521 | MS SQL Server / Oracle | DB | 83. DB 포트(3306·1433·5432·1521·6379) 노출 점검 |
| 3306 / 5432 | MySQL·MariaDB / PostgreSQL | DB | 83. DB 포트(3306·1433·5432·1521·6379) 노출 점검 |
| 3389 | RDP | 원격 접속 | 76. RDP와 3389 포트 — 원격 접속 노출 위험 |
| 5900 | VNC | 원격 접속 | — |
| 5985 / 5986 | WinRM (HTTP / HTTPS) | 원격 관리 | 77. WinRM |
| 8080 | HTTP 대체 (IANA 이름 http-alt) | 웹 | 81. Web Server Port |
| 2049 | NFS | 파일 공유 | 74. NFS |
IANA 등록 이름과 현장 관례가 다른 경우도 있습니다. 이 차이 때문에 도구가 보여주는 서비스 이름을 그대로 믿으면 안 됩니다.
| 포트 | IANA 등록 이름(예) | 현장에서 흔한 용도 | 관제 시 주의 |
|---|---|---|---|
| 8443 | pcsync-https | HTTPS 대체 포트, 관리 콘솔 | 도구가 낯선 이름으로 표시할 수 있음 |
| 9200 | wap-wsp | Elasticsearch HTTP API | 이름만 보면 다른 서비스로 오인 |
| 1024~49151 중 미등록 번호 | 없음 | 사내 애플리케이션 고유 포트 | 자산·서비스 대장으로만 확인 가능 |
등록 이름은 /etc/services나 도구 내장 목록에 따라 달라질 수 있으므로, "이 번호의 이름이 무엇으로 찍혔는가"보다 "이 서버에서 이 번호를 어떤 프로세스가 열었는가" 를 기준으로 봅니다(93. 서비스와 포트 매핑 — 포트 번호만으로 서비스를 단정하면 안 되는 이유).
실습 예시 — 본인 소유 Linux VM에서 Registered 구간 번호가 서비스로 쓰일 때와 임시 포트로 쓰일 때를 구분해 봅니다(Rocky/Ubuntu 공통).
# 임시 포트 범위와 예약 포트 설정 확인
sysctl net.ipv4.ip_local_port_range
sysctl net.ipv4.ip_local_reserved_ports
# Registered 구간에서 LISTEN 중인 소켓 (서비스로 쓰이는 경우)
sudo ss -tlnp '( sport >= :1024 and sport <= :49151 )'
# Registered 구간 번호가 출발지로 쓰인 연결 (임시 포트로 쓰이는 경우)
ss -tn state established '( sport >= :32768 and sport <= :49151 )'
출력 형식 예시(값은 환경마다 다름, 일부 열 생략):
# LISTEN — 서비스 포트
tcp LISTEN 0.0.0.0:3306 users:(("mariadbd",pid=2210,...))
# ESTABLISHED — 같은 구간이지만 클라이언트 임시 포트
tcp ESTAB 192.168.10.30:45000 203.0.113.50:443
Windows에서는 등록 포트를 서비스가 쓰는지 다음처럼 확인할 수 있습니다(PowerShell, 예시).
Get-NetTCPConnection -State Listen |
Where-Object { $_.LocalPort -ge 1024 -and $_.LocalPort -le 49151 } |
Select-Object LocalAddress, LocalPort, OwningProcess
| 흔적 위치 | 확인할 수 있는 것 |
|---|---|
| 방화벽 로그 | 외부 → DB·원격 접속 포트 접근 시도, 내부 → 외부 고번호 포트 연결 |
| IDS/IPS | 포트 기준 룰 + 프로토콜 인식(예: 3306에서 MySQL이 아닌 트래픽) |
서버 ss/EDR | 등록 포트를 연 프로세스, 실행 경로, 실행 계정 |
| 자산 대장 | 서버별 허용 서비스·포트 목록 |
관제자가 확인할 질문
오탐 주의: Linux 클라이언트의 출발지 포트 40000번대를 "Registered Port 사용"으로 보고 서비스로 오인하지 않습니다. 방향 판단은 56. Source Port를 참고합니다.