본문 바로가기
리눅스의 모든 것

리눅스 포트 열기 방법 – 방화벽 설정부터 확인까지 완벽 가이드

by 운따돈 2025. 8. 17.

리눅스에서 포트를 여는 이유

리눅스 서버에서 특정 서비스(Nginx, Apache, MySQL, Node.js 등)를 외부에서 접속하려면 해당 서비스의 포트를 열어야 합니다.
포트가 닫혀 있으면 애플리케이션이 정상적으로 실행되고 있어도 외부 접속이 차단됩니다.


대표 예시

  • 80번 포트: HTTP 웹 서비스
  • 443번 포트: HTTPS 웹 서비스
  • 3306번 포트: MySQL 데이터베이스
  • 22번 포트: SSH 접속

현재 포트 상태 확인

먼저 해당 포트가 열려 있는지 확인합니다.

sudo ss -tuln

또는

sudo netstat -tuln

LISTEN 상태로 표시되고 외부 IP(0.0.0.0 또는 ::)에 바인딩되어 있다면 서비스는 포트를 열고 있는 상태입니다.
다만 방화벽에서 차단 중이면 외부에서는 접근이 불가능합니다.


방화벽 종류 확인

리눅스 배포판에 따라 사용하는 방화벽이 다릅니다.

  • Ubuntu/Debian 계열 → UFW(Uncomplicated Firewall)
  • CentOS/RHEL 계열 → firewalld 또는 iptables

먼저 어떤 방화벽이 활성화되어 있는지 확인하세요.

sudo ufw status
sudo systemctl status firewalld


UFW(Ubuntu)에서 포트 열기

4-1. 포트 허용

sudo ufw allow 80/tcp

또는 특정 포트를 범위로 열기
sudo ufw allow 3000:3010/tcp

4-2. 규칙 확인

sudo ufw status numbered

4-3. 규칙 삭제

sudo ufw delete 번호


firewalld(CentOS/RHEL)에서 포트 열기

5-1. 포트 허용

sudo firewall-cmd --permanent --add-port=8080/tcp

5-2. 변경 사항 적용

sudo firewall-cmd --reload

5-3. 허용된 포트 확인

sudo firewall-cmd --list-ports


iptables에서 포트 열기 (구버전)

sudo iptables -A INPUT -p tcp --dport 5000 -j ACCEPT

저장 후 재부팅 시 유지하려면 iptables-save 명령으로 규칙 저장이 필요합니다.


서비스 자체 설정 확인

방화벽이 아니라 서비스 자체 설정에서 IP 접근을 제한하는 경우도 있습니다.
예를 들어 MySQL은 기본적으로 로컬호스트(127.0.0.1)에서만 접속 가능하게 설정되어 있습니다.
이 경우 my.cnf 파일에서 bind-address를 0.0.0.0으로 수정해야 합니다.


포트 개방 여부 외부에서 확인

서버 외부에서 포트가 열려 있는지 확인하려면 다음 명령을 사용할 수 있습니다.

telnet 서버IP 포트번호
nc -zv 서버IP 포트번호

또는 웹 기반 포트 스캐너를 이용해 확인할 수도 있습니다.


보안 주의 사항

포트를 열면 외부에서 해당 서비스에 접근할 수 있으므로 보안 위험이 커집니다.

  • 꼭 필요한 포트만 개방
  • SSH 포트(22)는 IP 제한 또는 키 인증 사용
  • 웹 서비스는 반드시 HTTPS 적용
  • 데이터베이스 포트는 외부 접근을 차단하고 내부 네트워크에서만 허용

결론

리눅스에서 포트를 여는 작업은 방화벽 설정과 서비스 설정을 모두 확인해야 합니다.

  • UFW 사용 시: sudo ufw allow 포트번호/tcp
  • firewalld 사용 시: sudo firewall-cmd --permanent --add-port=포트번호/tcp 후 reload
  • 서비스 자체 bind-address 및 리스닝 상태 확인

위 단계를 순서대로 점검하면 포트 개방 문제를 대부분 해결할 수 있습니다.
특히 보안상 불필요한 포트는 닫고, 필요한 포트만 안전하게 관리하는 습관이 중요합니다.