📚 네트워크 · 패킷 분석 › 02. 포트 · 프로토콜 분석 — 84편
이전 글: 83. DB 포트(3306·1433·5432·1521·6379) 노출 점검 · 다음 글: 85. Windows Service Port

1. 개념

Linux 서버의 포트 목록을 읽으려면 "이 번호는 어떤 데몬이 여는가"를 알아야 합니다. ss의 사용법과 Listening Port 점검 절차는 리눅스 시리즈에서 다뤘습니다.

이 글은 점검 절차가 아니라 포트 ↔ 데몬 대응표에 집중합니다. 웹·메일·DB 포트는 81~83편에서 따로 다루므로 여기서는 Linux 운영에 공통으로 등장하는 포트를 봅니다.

포트전송서비스대표 데몬(프로세스)비고
22TCPSSHsshd원격 관리 (65. SSH)
53UDP/TCPDNSsystemd-resolved, named, dnsmasqresolved는 127.0.0.53에서만 수신
68UDPDHCP 클라이언트NetworkManager, dhclient 등서버가 아닌 클라이언트 쪽
111TCP/UDPrpcbindrpcbindNFSv3 등 RPC 사용 시 (74. NFS)
123UDPNTPchronyd서버로 쓸 때만 외부 수신
323UDPchrony 제어chronydlocalhost 전용, chronyc가 사용
514UDP/TCPSyslog 수신rsyslogd중앙 로그 서버로 설정할 때만
631TCP인쇄(IPP)cupsd데스크톱 설치에서 흔함
5353UDPmDNSavahi-daemon데스크톱·일부 설치
9090TCP웹 관리 콘솔cockpit (systemd 소켓)Rocky에서 활성화 시

2. 동작 원리

Linux에서 포트를 여는 방식은 두 가지이며, 이 차이가 추적 방법을 바꿉니다.

① 데몬이 직접 여는 방식
   systemctl start sshd
        ↓
   sshd 프로세스 실행 → bind(0.0.0.0:22) → listen()
        ↓
   ss -tlnp 에 users:(("sshd",pid=...)) 표시

② systemd 소켓 활성화 방식
   systemctl enable --now cockpit.socket
        ↓
   systemd(PID 1)가 먼저 9090을 열고 대기
        ↓  첫 연결이 오면
   cockpit 서비스 프로세스 기동 → 연결 넘겨줌
        ↓
   연결 전에는 ss -tlnp 에 "systemd" 가 9090 소유자로 표시
  • ②의 경우 ss에 systemd만 보여 "시스템이 연 포트"로 오해하기 쉽습니다. systemctl list-sockets로 어느 유닛의 소켓인지 확인합니다.
  • Ubuntu 22.10 이후 SSH도 기본적으로 ssh.socket 방식이어서 같은 현상이 나타날 수 있습니다.

3. 주요 특징

바인드 주소에 따라 같은 포트라도 의미가 다릅니다.

예바인드 주소의미
127.0.0.53%lo:53루프백 전용systemd-resolved의 로컬 DNS 스텁, 외부 노출 아님
127.0.0.1:323루프백 전용chronyd 제어 포트, 정상
127.0.0.1:25루프백 전용로컬 메일 전달용 MTA
0.0.0.0:22 / [::]:22모든 IPv4 / IPv6외부 수신 가능, 방화벽 확인 필요
192.168.122.1:53가상 브리지libvirt의 dnsmasq(가상 머신용 DNS·DHCP)

설치 직후 기본 상태는 배포판과 설치 유형에 따라 다릅니다. 아래는 일반적인 경향이며 반드시 실제 목록으로 확인해야 합니다.

항목Rocky Linux (Server 설치)Ubuntu Server
SSHsshd.service, 22ssh.service 또는 ssh.socket, 22
로컬 DNS보통 없음systemd-resolved, 127.0.0.53:53
시간 동기화chronyd (323 localhost)systemd-timesyncd 또는 chronyd
웹 관리cockpit.socket (활성화하면 9090)기본 없음
방화벽 도구firewalldufw (기본 비활성)

에이전트형 보안·모니터링 도구는 서버가 포트를 여는 것이 아니라 밖으로 접속하는 경우가 많습니다. 예를 들어 Wazuh 에이전트는 매니저의 1514/TCP(이벤트 전송)·1515/TCP(등록)로 연결하고, Zabbix 에이전트는 10050/TCP에서 수신합니다(설정 기본값 기준).


4. 예시

실습 예시 — 본인 소유 Linux VM에서 포트 → 프로세스 → systemd 유닛 → 패키지 순으로 역추적합니다.

# 1) TCP·UDP LISTEN 목록과 프로세스
sudo ss -tulnp

# 2) systemd가 대신 연 소켓 확인
systemctl list-sockets

# 3) PID로 소속 유닛 확인 (예: PID 812)
systemctl status 812

# 4) 실행 파일 → 패키지
readlink /proc/812/exe
rpm -qf /usr/sbin/sshd        # Rocky
dpkg -S /usr/sbin/sshd        # Ubuntu

ss -tulnp 출력 형식 예시(Ubuntu Server, 값은 환경마다 다름, 일부 생략):

Netid State  Local Address:Port   Process
udp   UNCONN 127.0.0.54:53        users:(("systemd-resolve",pid=560,fd=16))
udp   UNCONN 127.0.0.53%lo:53     users:(("systemd-resolve",pid=560,fd=14))
tcp   LISTEN 127.0.0.53%lo:53     users:(("systemd-resolve",pid=560,fd=15))
tcp   LISTEN 0.0.0.0:22           users:(("sshd",pid=812,fd=3),("systemd",pid=1,fd=112))
tcp   LISTEN [::]:22              users:(("sshd",pid=812,fd=4),("systemd",pid=1,fd=113))

22번에 sshd와 systemd가 함께 보이면 소켓 활성화 방식입니다. 53번은 루프백에만 있으므로 외부 DNS 서비스가 아닙니다.

📷 [실습 화면 삽입 위치] ss -tulnp와 systemctl list-sockets를 나란히 두고 포트별 유닛을 대응시킨 화면


5. 보안 관점

  • 불필요한 기본 서비스: 서버에 cups(631), avahi(5353), rpcbind(111)가 필요 없이 켜져 있으면 공격 표면이 늘어납니다. 사용하지 않으면 중지·비활성화합니다.
  • 루프백 전용 확인: 127.0.0.x 바인드는 외부 노출이 아니지만, 설정 변경으로 0.0.0.0이 되는 순간 노출됩니다. 변경 이력 관리가 중요합니다.
  • 관리 포트: 22·9090은 서버 전체 권한으로 이어지므로 관리 대역에서만 접근하도록 제한합니다.
  • 514 수신: Syslog 수신을 전체 대역에 열면 위조 로그 주입 통로가 될 수 있습니다.

6. SOC 관점

흔적 위치확인할 수 있는 것
서버 (ss, systemctl)포트·프로세스·유닛·바인드 주소
패키지 이력새 서비스 설치 시점 (Rocky dnf history, Ubuntu /var/log/apt/history.log)
방화벽 로그해당 포트로의 외부 접근 시도
에이전트(Wazuh 등)리슨 포트 변화 감시 결과(설정 시)

관제자가 확인할 질문

  • 이 포트의 프로세스가 표에 있는 정상 데몬 이름·경로(/usr/sbin/...)와 일치하는가?
  • 자산 대장에 없는 서비스 포트가 새로 열렸는가? 언제, 어떤 패키지로?
  • 루프백 전용이어야 할 포트가 0.0.0.0으로 바뀌었는가?

오탐 주의: 같은 번호라도 배포판·설치 유형마다 기본 서비스가 다릅니다. 데스크톱 설치의 631·5353, 가상화 호스트의 192.168.122.1:53은 정상 구성입니다. 판단은 포트 번호가 아니라 프로세스·유닛·경로로 합니다.


7. 핵심 정리

  • Linux 공통 포트는 22(sshd), 53(resolved·named), 111(rpcbind), 123·323(chronyd), 514(rsyslog), 631(cups), 5353(avahi), 9090(cockpit) 등입니다.
  • 127.0.0.53:53, 127.0.0.1:323처럼 루프백에만 바인드된 포트는 외부 노출이 아닙니다.
  • systemd 소켓 활성화 포트는 ss에 systemd로 보이므로 systemctl list-sockets로 유닛을 확인합니다.
  • Rocky와 Ubuntu는 기본 서비스(시간 동기화, DNS 스텁, SSH 방식, 방화벽 도구)가 다릅니다.
  • 판단은 포트 번호 → 프로세스 → 유닛 → 패키지 순으로 역추적한 근거로 합니다.
profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글