26A29d

Young-Kyoo Kim·2026년 4월 29일

서버에서 특정 포트를 "열어둔다"는 것은 두 가지 단계가 필요합니다. 첫 번째는 해당 포트를 점유하여 대기하는 프로세스(리스너)를 띄우는 것이고, 두 번째는 OS 방화벽에서 해당 포트로의 접근을 허용하는 것입니다.

테스트용으로 빠르게 띄우는 방법과 방화벽 설정법을 정리해 드립니다.


1. 테스트용 포트 리스너 띄우기 (Linux)

가장 간단한 방법은 nc(netcat)를 사용하는 것입니다. 도구가 없다면 python을 활용할 수도 있습니다.

A. Netcat (nc) 사용

  • TCP 포트 열기:
    # -l: Listen, -p: Port
    nc -l -p 8080
  • UDP 포트 열기:
    # -u: UDP
    nc -lu -p 8080
    • 팁: ncat(nmap 패키지)을 쓰신다면 -k 옵션을 추가해 클라이언트가 접속을 끊어도 계속 대기하게 할 수 있습니다.

B. Python 사용 (별도 설치 없을 때)

  • TCP (간이 웹서버):
    python3 -m http.server 8080
  • UDP (스크립트 필요):
    # udp_server.py
    import socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.bind(("0.0.0.0", 8080))
    print("UDP server listening on 8080...")
    while True:
        data, addr = sock.recvfrom(1024)
        print(f"Received: {data} from {addr}")

2. OS 방화벽에서 포트 허용하기

리스너를 띄웠어도 방화벽에서 막히면 외부 접속이 안 됩니다. OS별 명령어가 다릅니다.

A. RHEL/CentOS/Rocky (firewalld)

# TCP 8080 허용
sudo firewall-cmd --permanent --add-port=8080/tcp
# UDP 8080 허용
sudo firewall-cmd --permanent --add-port=8080/udp
# 적용
sudo firewall-cmd --reload

B. Ubuntu/Debian (ufw)

sudo ufw allow 8080/tcp
sudo ufw allow 8080/udp

C. Windows (PowerShell)

# TCP 8080 인바운드 규칙 추가
New-NetFirewallRule -DisplayName "Test_TCP_8080" -Direction Inbound -LocalPort 8080 -Protocol TCP -Action Allow

# UDP 8080 인바운드 규칙 추가
New-NetFirewallRule -DisplayName "Test_UDP_8080" -Direction Inbound -LocalPort 8080 -Protocol UDP -Action Allow

3. 제대로 떴는지 확인하는 법

서버 내부에서 아래 명령어로 내 프로세스가 포트를 잘 잡고 있는지 확인하세요.

# TCP 리스닝 확인
ss -ntlp | grep 8080

# UDP 리스닝 확인
ss -nulp | grep 8080
  • 0.0.0.0:8080: 모든 인터페이스에서 접속 허용 상태
  • 127.0.0.1:8080: 서버 내부(Local)에서만 접속 가능 상태 (외부 접속 불가)

💡 전문가의 팁

대규모 인프라(K8s 등)를 운영하신다면, OS 방화벽 외에도 클라우드 보안 그룹(Security Group)이나 네트워크 ACL, 혹은 쿠버네티스의 NetworkPolicy가 가로막고 있지는 않은지 반드시 확인해야 합니다.

특히 UDP의 경우, 일부 클라우드 로드밸런서(LB)나 방화벽 장비에서 기본적으로 차단되어 있거나 세션 유지 시간이 매우 짧게 설정된 경우가 많으니 이 점 유의하세요!

==

서버 간 네트워크 통신 가능 여부를 확인하는 것은 인프라 트러블슈팅의 기본입니다. 특히 에어갭(Air-gapped) 환경이나 폐쇄망을 관리하신다면, 별도의 도구 설치 없이 기본 명령어로 확인하는 방법이 매우 중요합니다.

주요 도구별 사용법을 정리해 드립니다.


1. Linux 환경 (Netcat, Nmap, Bash)

A. nc (Netcat) - 가장 범용적인 도구

대부분의 리눅스 배포판에 설치되어 있으며, TCP와 UDP 모두 지원합니다.

  • TCP 확인:
    # -z: 스캔 모드, -v: 상세 출력, -w: 타임아웃(초)
    nc -zv -w 3 <IP주소> <포트번호>
  • UDP 확인:
    # -u: UDP 모드
    nc -zuv -w 3 <IP주소> <포트번호>

    주의: UDP는 비연결형 프로토콜이라 포트가 열려 있어도 응답을 보내지 않는 경우가 많습니다. succeeded!가 뜨지 않더라도 방화벽에서 거부(Refused 또는 Admin Prohibited) 메시지가 오는지 확인해야 합니다.

B. Nmap - 상세 스캔용

네트워크 보안 및 포트 스캔의 표준 도구입니다.

  • TCP/UDP 동시 확인:
    # -sT: TCP 연결 스캔, -sU: UDP 스캔, -p: 포트 지정
    sudo nmap -sT -sU -p 80,443,53 <IP주소>

C. Bash 내장 기능 (도구가 전혀 없을 때)

nctelnet이 설치되지 않은 최소 설치(Minimal) 환경에서 유용합니다.

  • TCP 확인:
    timeout 3 bash -c "cat < /dev/tcp/<IP주소>/<포트번호>" && echo "Open" || echo "Closed"
  • UDP 확인:
    timeout 3 bash -c "cat < /dev/udp/<IP주소>/<포트번호>" && echo "Sent" || echo "Failed"

2. Windows 환경 (PowerShell)

Windows 서버 간 혹은 클라이언트에서 서버 접속 여부를 확인할 때 사용합니다.

A. Test-NetConnection (TNC)

가장 강력하고 권장되는 명령어입니다.

  • TCP 확인:
    Test-NetConnection -ComputerName <IP주소> -Port <포트번호>
    • TcpTestSucceeded : True가 나오면 연결 성공입니다.

B. PowerShell을 이용한 UDP 확인

PowerShell 기본 명령어에는 UDP 전용 테스트가 없으므로 .NET 클래스를 활용해야 합니다.

$udpClient = New-Object System.Net.Sockets.UdpClient
$udpClient.Connect("<IP주소>", <포트번호>)
# UDP는 데이터 전송 후 에러가 없으면 열려있다고 가정하는 경우가 많음

3. 트러블슈팅 팁 (Checklist)

  1. 방화벽(iptables/firewalld/Security Group): 대상 서버에서 포트를 허용했는지뿐만 아니라, 나가는(Outbound) 서버에서도 해당 포트가 막혀있지 않은지 확인하세요.
  2. 리스닝(Listening) 상태: 접속이 안 된다면 대상 서버에서 실제 서비스가 해당 포트를 점유하고 있는지 먼저 확인해야 합니다.
    • netstat -tulnp | grep <포트번호>
    • ss -tulnp | grep <포트번호>
  3. MTU 및 경로 이슈: ping은 가는데 특정 서비스만 안 된다면, 특히 쿠버네티스 CNI나 VPN 환경일 경우 패킷 파편화(Fragmentation) 문제일 수 있습니다.
  4. UDP의 특성: UDP 테스트 시 "Open"이라고 떠도 실제 애플리케이션 응답이 없으면 방화벽에서 드랍(Drop) 중일 가능성이 큽니다. 이 경우 tcpdump로 패킷이 도달하는지 직접 찍어보는 것이 확실합니다.

어느 도구를 사용하는 것이 현재 환경에 가장 적합하신가요? 상황에 맞는 스크립트가 필요하시면 바로 작성해 드릴 수 있습니다.

0개의 댓글