서버 포트가 열려 있는지 확인하는 방법: ss와 netstat 네트워크 점검하기
리눅스 서버를 운영하다 보면 웹사이트가 접속되지 않거나 SSH 연결이 되지 않는 문제가 발생할 수 있습니다.
이럴 때 가장 먼저 확인해야 할 것 중 하나가 바로 서버 포트가 정상적으로 열려 있는지입니다.
예를 들어 웹서버가 실행되고 있는데도 외부에서 접속되지 않는다면 80번 또는 443번 포트가 제대로 열려 있는지 확인해야 합니다.
SSH 서버라면 22번 포트가 정상적으로 연결을 기다리고 있는지도 확인해야 합니다.
리눅스에서는 이러한 포트 상태를 확인하기 위해 ss와 netstat 명령어를 사용할 수 있습니다.
이번 글에서는 ss 명령어를 이용한 최신 리눅스 서버 포트 확인 방법부터 netstat 사용법, LISTEN 상태의 의미, 특정 포트 확인 방법, 네트워크 장애를 점검하는 실전 방법까지 쉽게 알아보겠습니다.
1. 서버 포트란 무엇일까?

먼저 포트의 개념을 간단하게 이해해보겠습니다.
서버의 IP 주소가 건물의 주소라면 포트는 건물 안에서 어떤 서비스를 찾아가는 출입구라고 생각하면 쉽습니다.
예를 들어 일반적으로 다음과 같은 포트가 사용됩니다.
| SSH | 22 | 원격 서버 접속 |
| HTTP | 80 | 일반 웹서비스 |
| HTTPS | 443 | 암호화된 웹서비스 |
| FTP | 21 | 파일 전송 |
| MySQL | 3306 | 데이터베이스 |
| PostgreSQL | 5432 | 데이터베이스 |
단, 실제 서버에서는 보안을 위해 기본 포트 번호를 변경해서 사용하는 경우도 있습니다.
따라서 위 번호는 일반적인 기본값으로 이해하면 됩니다.
2. 서버에서 포트가 열려 있다는 의미
포트 번호가 존재한다고 해서 무조건 외부에서 접속할 수 있는 것은 아닙니다.
예를 들어 80번 포트를 사용하는 웹서버가 있다고 가정해보겠습니다.
웹서버가 정상적으로 실행되면서 80번 포트에서 연결을 기다리고 있다면 다음과 같은 상태가 나타날 수 있습니다.
LISTEN은 쉽게 말해 해당 포트에서 외부 또는 로컬 연결 요청을 기다리고 있는 상태입니다.
하지만 LISTEN 상태라고 해서 인터넷에서 반드시 접근할 수 있다는 의미는 아닙니다.
방화벽이나 클라우드 보안 그룹, 네트워크 ACL 등이 추가로 연결을 차단할 수 있기 때문입니다.
3. ss 명령어란?
ss는 리눅스에서 네트워크 소켓과 연결 상태를 확인하는 명령어입니다.
최근 리눅스 환경에서는 netstat보다 ss를 사용하는 경우가 많습니다.
가장 기본적인 명령어는 다음과 같습니다.
서버에서 현재 LISTEN 중인 TCP와 UDP 포트를 확인하려면 다음 명령어를 많이 사용합니다.
각 옵션은 다음과 같은 의미입니다.
| -t | TCP 표시 |
| -u | UDP 표시 |
| -l | LISTEN 상태 표시 |
| -n | 포트와 주소를 숫자로 표시 |
즉,
은 현재 서버에서 대기 중인 TCP/UDP 포트를 숫자로 확인하는 명령어라고 이해하면 됩니다.
4. ss 명령어 실행 결과 확인하기
예를 들어 다음과 같은 결과가 나왔다고 가정해보겠습니다.
이 결과에서는 다음 포트가 LISTEN 상태입니다.
따라서 서버 내부에서는 해당 서비스가 연결 요청을 기다리고 있을 가능성이 있습니다.
5. 특정 포트만 확인하는 방법
전체 포트를 확인할 필요 없이 특정 포트만 확인할 수도 있습니다.
예를 들어 80번 포트를 확인하려면:
443번 포트는:
SSH 포트는:
이 방법을 사용하면 서버에 수많은 네트워크 연결이 있어도 원하는 포트만 빠르게 찾을 수 있습니다.
6. 어떤 프로그램이 포트를 사용하는지 확인하기
포트 번호만 확인하는 것보다 어떤 프로그램이 해당 포트를 사용하고 있는지 확인하면 문제를 해결하기가 훨씬 쉬워집니다.
다음 명령어를 사용합니다.
여기서 -p 옵션은 관련 프로세스 정보를 표시하는 데 사용됩니다.
예를 들어 다음과 같은 결과가 나올 수 있습니다.
이 경우 80번 포트를 nginx 프로세스가 사용하고 있다는 것을 확인할 수 있습니다.
특정 포트만 확인하려면:
이렇게 사용할 수 있습니다.
7. 0.0.0.0과 127.0.0.1의 차이
포트 확인 결과를 보다 보면 다음과 같은 주소를 볼 수 있습니다.
또는:
둘은 중요한 차이가 있습니다.
0.0.0.0:80
서버의 여러 네트워크 인터페이스에서 해당 포트의 연결을 받을 수 있도록 바인딩된 상태를 의미할 수 있습니다.
127.0.0.1:80
서버 자기 자신인 로컬호스트에서만 접근하도록 바인딩된 상태입니다.
예를 들어 웹서비스가 다음과 같이 설정되어 있다면:
서버 내부에서는 접근할 수 있지만 외부 컴퓨터에서 직접 접근하지 못할 수 있습니다.
따라서 포트가 LISTEN인지뿐 아니라 어떤 주소에 바인딩되어 있는지도 확인해야 합니다.
8. netstat 명령어란?
netstat 역시 네트워크 연결과 포트 상태를 확인하는 대표적인 명령어입니다.
과거 리눅스 서버에서는 netstat이 매우 널리 사용됐습니다.
기본적으로 다음과 같이 사용할 수 있습니다.
LISTEN 중인 포트를 확인하려면:
프로세스 정보까지 확인하려면:
여기서 옵션의 의미는 ss와 비슷합니다.
9. ss와 netstat 차이점
두 명령어는 비슷한 목적에 사용할 수 있지만 최근 리눅스에서는 ss를 사용하는 경우가 많습니다.
| 네트워크 상태 확인 | 가능 | 가능 |
| LISTEN 포트 확인 | 가능 | 가능 |
| 프로세스 확인 | 가능 | 가능 |
| 최신 리눅스 환경 | 권장되는 경우가 많음 | 설치되지 않을 수 있음 |
| 오래된 서버 | 사용 가능 | 많이 사용됨 |
특히 최근 배포판에서는 net-tools 패키지가 기본 설치되지 않아 netstat 명령어가 없는 경우도 있습니다.
그럴 때는 ss를 사용하는 것이 편리합니다.
10. netstat이 없다고 나올 때
다음 명령어를 실행했는데:
다음과 같은 오류가 발생할 수 있습니다.
이 경우 netstat이 포함된 패키지가 설치되지 않았을 가능성이 있습니다.
Ubuntu/Debian 계열에서는 일반적으로 net-tools 패키지를 설치하면 사용할 수 있습니다.
설치 후:
을 실행합니다.
다만 별도로 netstat을 설치하지 않고 기본 제공되는 ss 명령어를 사용하는 방법도 충분히 좋습니다.
11. TCP와 UDP 포트의 차이
포트를 확인하다 보면 TCP와 UDP라는 용어를 자주 만나게 됩니다.
TCP
TCP는 연결을 기반으로 통신하며 데이터가 안정적으로 전달되도록 관리합니다.
웹서비스, SSH 등에서 주로 사용됩니다.
예:
UDP
UDP는 TCP보다 연결 관리가 단순하고 빠른 통신에 적합한 경우가 있습니다.
DNS, 스트리밍, 일부 게임 및 실시간 통신 등에 사용됩니다.
따라서 서버 포트를 확인할 때는 TCP뿐만 아니라 필요한 경우 UDP도 함께 확인해야 합니다.
12. 현재 TCP 연결 상태 확인하기
LISTEN 포트뿐만 아니라 현재 연결되어 있는 TCP 세션도 확인할 수 있습니다.
프로세스 정보까지 확인하려면:
여기에서 다음과 같은 상태를 볼 수 있습니다.
LISTEN
연결 요청을 기다리는 상태입니다.
ESTAB
연결이 성립되어 통신 중인 상태입니다.
TIME-WAIT
TCP 연결이 종료된 뒤 일정 시간 동안 유지되는 상태입니다.
CLOSE-WAIT
상대방이 연결 종료를 요청한 뒤 로컬 프로그램이 연결을 정리하는 과정에서 나타날 수 있습니다.
특정 상태가 많다고 해서 무조건 장애라고 볼 수는 없으며, 서비스 특성과 연결량을 함께 살펴봐야 합니다.
13. 웹서버 포트 확인하기
Nginx나 Apache 같은 웹서버를 운영한다면 가장 먼저 80번과 443번 포트를 확인할 수 있습니다.
예를 들어:
이런 결과가 나온다면 서버 내부에서 HTTP와 HTTPS 포트가 LISTEN 상태인지 확인할 수 있습니다.
하지만 외부 접속이 되지 않는다면 다음 항목도 추가로 확인해야 합니다.
- Linux 방화벽
- 클라우드 보안 그룹
- 라우터 또는 네트워크 방화벽
- Nginx 설정
- DNS 설정
- SSL 인증서 설정
14. SSH 포트 확인하기
SSH 접속이 되지 않는다면 SSH 서비스가 어떤 포트에서 LISTEN하고 있는지 확인합니다.
또는:
만약 SSH 포트를 22번에서 다른 포트로 변경했다면 실제 설정된 포트 번호를 확인해야 합니다.
SSH 서비스 상태도 함께 확인하면 좋습니다.
배포판에 따라 서비스 이름이 sshd일 수도 있습니다.
15. MySQL 포트 확인하기
MySQL 서버를 사용하는 경우 일반적인 기본 포트는 3306입니다.
다음 명령어로 확인할 수 있습니다.
만약 아무런 결과가 나오지 않는다면 MySQL이 해당 포트에서 연결을 기다리고 있지 않을 가능성이 있습니다.
이 경우 서비스 상태와 설정 파일을 함께 확인해야 합니다.
16. 포트가 LISTEN인데 외부 접속이 안 된다면?
이 부분이 서버 네트워크 점검에서 매우 중요합니다.
예를 들어:
결과가 정상적으로 나왔다고 가정하겠습니다.
그런데 외부 PC에서 웹사이트 접속이 되지 않습니다.
이 경우 서버 내부의 프로그램이 443번 포트를 열고 있는 것과 외부 인터넷에서 443번 포트로 접근할 수 있는 것은 별개의 문제입니다.
다음 항목을 확인해야 합니다.
① 서버 방화벽
Ubuntu에서 UFW를 사용한다면:
② 클라우드 보안 그룹
AWS EC2 등의 클라우드 서버라면 보안 그룹의 인바운드 규칙을 확인해야 합니다.
③ 웹서버 설정
Nginx 또는 Apache가 올바른 IP와 포트에서 요청을 받고 있는지 확인합니다.
④ 네트워크 방화벽
회사나 데이터센터 네트워크를 사용하는 경우 외부 방화벽에서 차단할 수도 있습니다.
17. 로컬에서 먼저 테스트하기
외부 접속 문제를 확인할 때는 서버 내부에서 먼저 테스트하면 문제의 범위를 줄일 수 있습니다.
예를 들어 80번 포트라면:
443번 포트라면:
로컬에서 정상적으로 응답하는데 외부에서만 접속되지 않는다면 네트워크 또는 방화벽 영역을 집중적으로 확인할 수 있습니다.
18. 서버 포트 점검 실전 순서
웹사이트가 갑자기 접속되지 않는 상황을 가정해보겠습니다.
1단계: 웹서버 포트 확인
2단계: 웹서버 서비스 상태 확인
3단계: 로컬 접속 테스트
4단계: 방화벽 확인
5단계: 외부 네트워크에서 접속 테스트
외부 PC나 다른 서버에서 실제 도메인으로 접속을 테스트합니다.
이런 순서로 확인하면 단순히 "사이트가 안 된다"는 문제를 서비스 문제인지, 포트 문제인지, 방화벽 문제인지 구분하기 쉬워집니다.
19. 서버 포트 확인에 자주 사용하는 명령어
실무에서 다음 명령어는 기억해두면 좋습니다.
모든 LISTEN 포트 확인
TCP 포트 확인
UDP 포트 확인
80번 포트 확인
443번 포트 확인
22번 포트 확인
netstat 사용
20. 서버 포트 보안도 함께 확인해야 한다
포트를 많이 열어놓는다고 해서 좋은 서버가 되는 것은 아닙니다.
사용하지 않는 포트는 불필요하게 외부에 노출하지 않는 것이 좋습니다.
예를 들어 데이터베이스 포트인 3306번을 인터넷 전체에 공개하는 것은 서버 환경에 따라 보안 위험을 높일 수 있습니다.
가능하다면 필요한 네트워크에서만 접근하도록 방화벽이나 보안 그룹을 설정하는 것이 좋습니다.
특히 다음과 같은 원칙을 기억하면 좋습니다.
21. ss와 netstat 명령어 비교 정리
다시 한번 핵심 내용을 정리해보겠습니다.
새로운 리눅스 서버를 관리한다면 먼저 다음 명령어를 익혀두는 것을 추천합니다.
이 명령어 하나만으로도 현재 서버에서 어떤 TCP 포트가 LISTEN 상태인지, 어떤 프로세스가 사용하는지 확인하는 데 큰 도움이 됩니다.
마무리
리눅스 서버에서 포트가 열려 있는지 확인하는 것은 서버 장애를 진단할 때 매우 중요한 기본 작업입니다.
특히 ss 명령어를 활용하면 현재 서버에서 LISTEN 중인 포트와 네트워크 연결 상태를 빠르게 확인할 수 있습니다.
기본적으로 다음 명령어부터 기억해두면 좋습니다.
특정 포트를 확인하려면:
HTTPS 포트를 확인하려면:
예전 리눅스 서버나 기존 운영 환경에서는 netstat도 많이 사용합니다.
다만 포트가 LISTEN 상태라고 해서 외부에서 반드시 접속할 수 있는 것은 아닙니다.
실제 외부 연결 여부를 판단하려면 서버의 서비스 상태, 방화벽, 클라우드 보안 그룹, 네트워크 설정까지 함께 확인해야 합니다.
서버 장애가 발생했을 때는 다음 순서로 점검하면 편리합니다.
이처럼 ss와 netstat을 기본 도구로 익혀두면 리눅스 서버 포트 확인과 네트워크 장애 원인 분석을 훨씬 빠르게 진행할 수 있습니다.