서버에서 포트란 무엇이며 어떻게 관리하는가

작성자

카테고리:

포트의 개념

네트워크 통신에서 IP 주소가 건물의 주소라면, 포트(Port)는 그 건물 안의 호수다. 하나의 서버(IP 주소)에서 여러 서비스가 동시에 동작할 수 있는 이유는 각 서비스가 서로 다른 포트 번호를 사용하기 때문이다. 웹서버는 80번(HTTP), 443번(HTTPS), SSH는 22번, 데이터베이스는 3306번(MySQL), 5432번(PostgreSQL)을 기본으로 사용한다. 클라이언트가 서버에 접속할 때 IP 주소와 포트 번호를 함께 지정하면, 운영체제가 해당 포트에서 대기 중인 프로세스에 요청을 전달한다.

포트 번호의 구분

포트 번호는 0부터 65535까지 총 65536개가 존재하며, 세 구간으로 나뉜다. 0~1023번은 잘 알려진 포트(Well-Known Ports)로 주요 서비스에 국제적으로 예약되어 있다. HTTP(80), HTTPS(443), FTP(21), SSH(22), DNS(53), SMTP(25)가 이 범위에 속한다. 리눅스에서 이 범위의 포트를 사용하려면 root 권한이 필요하다. 1024~49151번은 등록된 포트(Registered Ports)로 특정 애플리케이션이 등록하여 사용한다. MySQL(3306), PostgreSQL(5432), Redis(6379)가 여기에 속한다. 49152~65535번은 동적 포트(Dynamic Ports)로 클라이언트가 서버에 접속할 때 임시로 할당되는 포트다.

리스닝 상태 확인

서버에서 현재 어떤 포트가 열려 있고 어떤 프로세스가 사용하고 있는지 확인하는 것은 보안 관리의 기본이다. ss -tlnp 명령어는 현재 TCP 리스닝 상태의 포트와 해당 프로세스를 보여준다. 과거에는 netstat이 사용되었지만, 최신 배포판에서는 ss가 더 빠르고 정보가 풍부하다. 출력 결과에서 0.0.0.0으로 바인딩된 포트는 모든 네트워크 인터페이스에서 접속을 허용한다는 의미이고, 127.0.0.1로 바인딩된 포트는 로컬에서만 접근 가능하다.

포트 보안 관리

서버에서 불필요한 포트를 열어두는 것은 공격 표면을 넓히는 행위다. 방화벽에서 필요한 포트만 명시적으로 허용하고 나머지는 전부 차단하는 화이트리스트 방식이 원칙이다. UFW를 사용한다면 ufw default deny incoming으로 기본 인바운드를 차단한 뒤, ufw allow 22, ufw allow 443처럼 필요한 포트만 개방한다. SSH 포트는 기본 22번을 변경하는 것이 일반적인 보안 관행이다. 자동화된 공격 도구 대부분이 22번을 대상으로 무차별 로그인을 시도하기 때문이다.

포트 포워딩

가정이나 사무실 네트워크에서 내부 서버를 외부에서 접근하게 하려면 포트 포워딩(Port Forwarding)이 필요하다. 공유기가 외부에서 특정 포트로 들어오는 요청을 내부 네트워크의 특정 IP와 포트로 전달하는 설정이다. 외부 포트 8080을 내부 192.168.0.100의 80번 포트로 연결하면, 외부에서 공인IP:8080으로 접속 시 내부 웹서버에 도달한다.

포트 충돌 해결

두 개의 서비스가 같은 포트를 사용하려고 하면 포트 충돌이 발생한다. 나중에 시작하려는 서비스가 Address already in use 에러를 내며 구동에 실패한다. ss -tlnp로 해당 포트를 점유하고 있는 프로세스를 확인하고, 불필요한 프로세스를 종료하거나 서비스의 설정 파일에서 포트 번호를 변경하여 해결한다.

포트 #서버포트 #방화벽 #포트포워딩 #UFW #네트워크보안 #리눅스 #SSH포트 #서버관리 #포트번호

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다