리눅스에서 열린 포트 확인하는 방법: 완벽 가이드 2026

Linux 터미널에서 ss 및 netstat 명령으로 열린 포트 표시

Linux에서 열린 포트를 확인하는 방법은 서버를 관리하거나, 네트워크 문제를 진단하거나, 시스템 보안을 강화하려는 모든 사람에게 꼭 필요한 기본 기술이에요. 열린 포트는 시스템으로 들어오는 문과 같아요. 어떤 문이 열려 있는지 모르면 제대로 보안을 설정할 수 없죠. Ubuntu에서 웹 서버를 운영하든, VPS를 관리하든, 연결 문제를 해결하든 - 열린 포트 목록을 확인하면 시스템이 네트워크에 무엇을 노출하고 있는지 한눈에 파악할 수 있어요. 이 가이드에서는 네 가지 실용적인 방법을 소개하고, 결과를 필터링하는 방법과 불필요한 포트를 닫는 방법까지 알아볼게요.

핵심 요약:

  • ss 명령어는 Linux에서 열린 포트를 확인하는 가장 빠르고 현대적인 방법이에요.
  • nmap은 외부 관점에서 포트를 스캔해 공격자가 실제로 보는 것을 보여줘요.
  • lsof를 사용하면 특정 포트를 점유한 프로세스를 즉시 확인할 수 있어요.
  • ufw 또는 iptables로 불필요한 포트를 닫는 것이 공격 표면을 줄이는 가장 직접적인 방법이에요.

Linux에서 열린 포트 확인이 중요한 이유

Linux 머신에서 실행 중인 모든 서비스는 하나 이상의 포트에서 수신 대기해요. SSH는 포트 22, HTTP는 포트 80, HTTPS는 포트 443을 사용하죠. 그런데 몇 달에 걸쳐 소프트웨어를 설치하고 제거하다 보면, 의도치 않게 열린 포트가 생기는 경우가 많아요. 방화벽 규칙 없이 포트 5432에서 수신 대기 중인 데이터베이스 daemon은 실제로 데이터 유출로 이어질 수 있는 현실적인 위험이에요.

Linux에서 열린 포트를 확인하면 다음과 같은 작업을 할 수 있어요:

  • 실제로 실행 중이고 외부에 노출된 서비스를 감사할 수 있어요.
  • 애플리케이션이 다른 서비스에 연결하지 못하는 이유를 진단할 수 있어요.
  • 방화벽 규칙이 의도한 대로 작동하는지 검증할 수 있어요.
  • 보안 감사나 침투 테스트를 준비할 수 있어요.

아래에서 소개하는 방법들은 로컬 검사(머신 자체가 보고하는 내용)와 외부 스캔(원격 호스트에서 볼 수 있는 내용)을 모두 다뤄요. 두 관점 모두 중요해요.

방법 1: ss 명령어 (최신, 권장)

ss 명령어(소켓 통계)는 대부분의 최신 Linux 배포판에서 netstat을 대체했어요. 더 빠르고 더 상세하며, Ubuntu, Debian, CentOS, Fedora에 기본으로 포함된 iproute2 패키지에 내장되어 있어요.

프로세스 이름과 함께 모든 열린 포트를 나열하려면 다음을 실행하세요:

sudo ss -tulnp

플래그 설명:

  • -t - TCP 소켓 표시
  • -u - UDP 소켓 표시
  • -l - 수신 대기 중인 소켓만 표시
  • -n - 서비스 이름 대신 숫자 포트 표시
  • -p - 각 소켓을 사용하는 프로세스 표시

실제 예시: Nginx와 PostgreSQL이 실행 중인 Ubuntu 서버에서 출력 결과는 다음과 같아요:

Netid  State   Recv-Q  Send-Q  Local Address:Port  Peer Address:Port  Process
tcp    LISTEN  0       128     0.0.0.0:80           0.0.0.0:*          users:(("nginx",pid=1234,fd=6))
tcp    LISTEN  0       128     127.0.0.1:5432       0.0.0.0:*          users:(("postgres",pid=5678,fd=5))
tcp    LISTEN  0       128     0.0.0.0:22           0.0.0.0:*          users:(("sshd",pid=910,fd=3))

PostgreSQL은 127.0.0.1에만 바인딩되어 있어 외부에서 접근할 수 없어요. SSH와 Nginx는 0.0.0.0에 바인딩되어 있어 모든 IP에서 연결을 허용해요. 이 출력 결과 하나로 시스템의 노출 상태를 많이 파악할 수 있죠.

ss의 모든 옵션에 대한 참고 자료는 공식 ss 매뉴얼 페이지를 확인하세요.

방법 2: netstat 명령어 (레거시지만 여전히 널리 사용)

netstat 명령어는 구버전 net-tools 패키지의 일부예요. 많은 배포판에서 더 이상 기본으로 설치되지 않지만, 특히 오래된 시스템에서 작업할 때 알아두면 유용해요.

필요한 경우 설치하세요:

sudo apt install net-tools   # Debian/Ubuntu
sudo yum install net-tools   # CentOS/RHEL

netstat으로 Linux에서 열린 포트를 확인하려면:

sudo netstat -tulnp

플래그의 의미는 ss와 동일해요. 출력 형식은 약간 다르지만 프로토콜, 로컬 주소, 포트, 소유 프로세스 등 동일한 핵심 정보를 제공해요.

실용적인 한계가 하나 있어요. 수천 개의 연결이 있는 매우 바쁜 서버에서는 netstatss보다 눈에 띄게 느릴 수 있어요. 일반적인 서버에서의 일상적인 작업에서는 차이가 거의 없지만요.

방법 3: nmap 포트 스캔 (외부 관점)

위의 도구들은 머신이 내부적으로 보고하는 내용을 보여줘요. nmap은 다른 접근 방식을 취해요. 네트워크를 통해 포트를 스캔해서 외부 공격자나 원격 클라이언트가 보는 것을 시뮬레이션하죠. 방화벽이 포트를 차단하고 있어도 ss에는 여전히 수신 대기 중으로 표시될 수 있기 때문에 이 관점은 매우 중요해요.

nmap 설치:

sudo apt install nmap   # Debian/Ubuntu
sudo yum install nmap   # CentOS/RHEL

같은 네트워크의 다른 머신에서 서버를 스캔하려면:

nmap -sT -p 1-1024 192.168.1.10

서비스 버전 감지와 함께 상위 1000개 포트를 스캔하려면:

nmap -sV 192.168.1.10

-sV 플래그는 각 열린 포트에서 실행 중인 소프트웨어 버전을 감지하려고 시도해요. 패치가 필요한 오래된 서비스를 식별하는 데 유용해요.

중요: nmap은 본인이 소유하거나 명시적으로 스캔 권한을 받은 서버에 대해서만 실행하세요. 허가 없이 제3자 시스템을 스캔하는 것은 해당 국가의 법률에 따라 불법일 수 있어요.

nmap을 설치하지 않고 외부 네트워크에서 특정 포트에 접근 가능한지 확인하고 싶다면, 저희 무료 포트 체커 도구를 사용해 보세요. 별도 설정 없이 즉시 확인할 수 있어요.

방법 4: lsof 명령어 (프로세스-포트 매핑)

lsof(열린 파일 목록) 명령어는 네트워크 소켓을 파일로 취급해요. Linux의 "모든 것은 파일이다" 철학과 일치하는 방식이죠. "포트 8080을 사용하는 프로세스가 뭐지?"라는 질문에 답해야 할 때 특히 유용해요.

모든 네트워크 연결 목록 보기:

sudo lsof -i

특정 포트를 사용하는 프로세스 찾기 (예: 포트 3000):

sudo lsof -i :3000

개발자의 Node.js 애플리케이션이 포트를 점유하고 있어서 서비스를 재시작하기 전에 해당 프로세스를 찾아 종료해야 할 때 특히 편리해요.

포트, TCP, UDP별 결과 필터링 방법

이 도구들의 원시 출력은 정보가 너무 많을 수 있어요. 가장 유용한 필터링 패턴을 소개할게요:

TCP 수신 대기 포트만 표시 (ss):

sudo ss -tlnp

UDP 포트만 표시 (ss):

sudo ss -ulnp

특정 포트가 열려 있는지 확인 (ss와 grep 조합):

sudo ss -tulnp | grep :443

nmap으로 포트 필터링:

nmap -p 80,443,8080 192.168.1.10

이 패턴들은 일상적인 필터링 작업의 대부분을 처리할 수 있어요. 포트 80에서의 HTTP 관련 문제 해결에 대해서는 포트 80 HTTP 문제 해결 가이드를 참고하세요.

Windows에서 같은 작업이 필요하다면 Windows에서 열린 포트 확인하기 완전 가이드 2026를 확인해 보세요.

ufw 또는 iptables로 포트 닫기 및 차단하기

불필요한 열린 포트를 찾는 것은 절반의 작업일 뿐이에요. 가장 많이 사용되는 두 가지 Linux 방화벽 도구로 포트를 닫는 방법을 알아볼게요.

ufw (Uncomplicated Firewall) 사용 - Ubuntu 권장

포트 8080의 인바운드 트래픽 차단:

sudo ufw deny 8080/tcp

SSH와 HTTPS만 허용하고 나머지는 모두 차단:

sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 443/tcp
sudo ufw enable

현재 방화벽 상태 확인:

sudo ufw status verbose

iptables 사용 - 고급 제어를 위한 방법

포트 3306(MySQL)의 모든 인바운드 트래픽 차단:

sudo iptables -A INPUT -p tcp --dport 3306 -j DROP

재부팅 후에도 규칙이 유지되도록 저장:

sudo iptables-save | sudo tee /etc/iptables/rules.v4

iptables 문법과 규칙 순서에 대한 더 깊은 참고 자료는 공식 Netfilter 문서가 권위 있는 출처예요.

팁: ufw나 iptables로 포트를 차단해도 해당 서비스 자체는 계속 실행돼요. 외부 연결이 서비스에 도달하지 못할 뿐이에요. 서비스를 완전히 중지하려면 sudo systemctl stop servicename을 사용하세요. 재부팅 시 자동 시작을 막으려면 sudo systemctl disable servicename도 함께 실행하세요.

마무리

Linux에서 열린 포트를 확인하는 데 복잡한 도구나 깊은 전문 지식이 필요하지 않아요. ss 명령어로 빠르고 신뢰할 수 있는 로컬 뷰를 얻을 수 있어요. nmap은 외부에서 접근 가능한 것을 보여주고, lsof는 어떤 프로세스가 포트를 점유하는지 정확히 찾아줘요. 그리고 ufwiptables로 노출되어서는 안 되는 포트를 닫을 수 있죠. 새 소프트웨어를 설치하거나 네트워크 설정을 변경한 후 정기적으로 이런 점검을 하는 것은 Linux 서버를 안전하게 유지하기 위해 만들 수 있는 가장 간단한 습관 중 하나예요. 지금 바로 sudo ss -tulnp를 실행해서 서버가 실제로 무엇을 노출하고 있는지 확인해 보세요.

무료 포트 체커 도구 - Linux 서버의 포트가 열려 있는지 즉시 확인

Linux 서버의 포트를 즉시 확인하세요

포트가 외부에서 실제로 접근 가능한지 확실하지 않으신가요? 저희 무료 포트 체커 도구는 외부 관점에서 몇 초 만에 서버를 스캔해요. 설치나 설정이 전혀 필요 없어요.

무료 포트 체커 도구 사용해보기 →

FAQ - 자주 묻는 질문

터미널에서 sudo ss -tulnp를 실행하세요. 최신 ss 명령어를 사용해 모든 TCP 및 UDP 수신 대기 포트와 프로세스 이름을 표시해요. Ubuntu와 Debian을 포함한 대부분의 최신 Linux 배포판에서 기본으로 사용 가능하며 netstat보다 빠르게 동작해요.

두 명령어 모두 열린 포트와 소켓 정보를 표시하지만, ssnetstat의 현대적인 대체제예요. 커널에서 직접 데이터를 읽어 부하가 높은 시스템에서 더 빠르고 정확해요. netstat은 많은 배포판에서 더 이상 기본으로 설치되지 않는 별도의 net-tools 패키지가 필요해요.

네트워크의 다른 머신에서 nmap -p PORT TARGET_IP를 사용하세요. 아무것도 설치하지 않고 빠르게 외부 확인을 하려면 웹 기반 포트 체커 도구를 사용하세요. 이 방법은 ss 같은 로컬 도구로는 반영할 수 없는 방화벽 규칙을 고려해 포트가 외부에서 실제로 접근 가능한지 테스트해요.

sudo lsof -i :PORT 또는 sudo ss -tulnp | grep :PORT를 사용하세요. 두 명령어 모두 해당 포트와 연결된 프로세스 이름과 PID를 표시해요. lsof 방법은 명령어, PID, 사용자를 읽기 쉬운 형식으로 나열하기 때문에 특히 명확해요.

아니에요. ufwiptables로 포트를 차단하면 외부 연결이 서비스에 도달하지 못하게 되지만, 서비스 자체는 계속 실행돼요. 서비스를 완전히 중지하려면 sudo systemctl stop servicename을 사용하세요. 재부팅 시 자동 시작을 영구적으로 막으려면 sudo systemctl disable servicename도 함께 실행하세요.