포트 연결 테스트 방법 (nc, telnet, curl)
서비스는 떠 있는데 밖에서 접속이 안 된다면, 방화벽에 막혔는지, 서비스가 엉뚱한 주소에서 듣고 있는지, 중간 네트워크 문제인지 가려내야 한다. 이 글은 nc, telnet, curl, bash로 하는 포트 연결 테스트 방법을 정리한다. 서버 안에서 포트를 누가 쓰는지 보는 방법은 포트 사용 중 오류 해결에 먼저 정리해 두었다.

포트 연결 테스트 nc 사용법
# 포트가 열려 있는지 (z: 연결만, v: 자세히)
nc -zv example.com 443
# Connection to example.com 443 port [tcp/https] succeeded!
# 여러 포트 한 번에
nc -zv example.com 22 80 443
# 3초 안에 응답 없으면 실패로
nc -zv -w 3 192.168.0.20 3306
| 결과 | 의미 |
|---|---|
| succeeded / open | 포트가 열려 있고 무언가 듣고 있다 |
| Connection refused | 서버에는 닿았지만 그 포트를 듣는 프로그램이 없다 |
| timed out | 방화벽이나 보안 그룹에서 막혔거나 경로 문제 |
refused와 timeout의 차이가 핵심이다. refused는 서비스 쪽, timeout은 방화벽 쪽을 먼저 의심한다. 방화벽 설정은 리눅스 방화벽 설정에 있다.
포트 연결 테스트 임시 서버 띄우기
아직 서비스를 설치하지 않았는데 방화벽이 열렸는지 먼저 확인하고 싶을 때는 nc로 임시 대기 서버를 띄운다.
# 서버 쪽: 9000 포트에서 대기 (OpenBSD nc, Ubuntu 기본)
nc -l 9000
# 일부 배포판의 nc 는: nc -l -p 9000
# 내 컴퓨터 쪽
nc -zv 서버IP 9000
nc는 배포판마다 옵션이 조금 다르다(OpenBSD 계열, 전통 netcat, Rocky의 ncat). 옵션이 안 먹으면 nc -h로 확인하자.
nc가 없을 때
# telnet
telnet example.com 443
# curl (HTTP가 아닌 포트도 연결 여부는 확인 가능)
curl -v telnet://example.com:22
# bash 내장 기능
timeout 3 bash -c '</dev/tcp/example.com/443' && echo open || echo closed
curl 옵션은 curl 사용법에, 전체 옵션은 curl 공식 매뉴얼에 정리되어 있다.
포트 연결 테스트 점검 순서
- 서버 안에서 서비스가 떠 있는지: sudo ss -ltnp로 확인한다.
- 듣는 주소 확인: 127.0.0.1:8080이면 서버 밖에서는 접속할 수 없다. 0.0.0.0이나 서버 IP여야 외부 접속이 된다.
- 서버 방화벽(ufw, firewalld) 규칙을 확인한다.
- 클라우드 보안 그룹(Lightsail 네트워킹 탭 등)에서 포트를 열었는지 확인한다.
- 밖에서 nc -zv로 다시 시험한다.
듣는 주소를 일부러 127.0.0.1로 묶고 Nginx로만 연결하는 구성은 보안상 권장되는 방식이니, 외부 접속이 안 되는 것이 정상일 수도 있다. 네트워크 기본 명령은 리눅스 네트워크 확인 명령어에 있다.
마무리
refused면 서비스, timeout이면 방화벽. 이 구분 하나만으로도 접속 문제의 절반은 원인이 보인다. SSH 접속 문제라면 SSH 접속 안될 때 확인할 것도 함께 보자. 전날 글은 Nginx HTTPS 보안 강화다.
첫 댓글을 남겨보세요