JAN's History

서버 1대에서 여러 서비스 운영하기: 포트별 관리와 방화벽 설정 완전 가이드 본문

개발용어

서버 1대에서 여러 서비스 운영하기: 포트별 관리와 방화벽 설정 완전 가이드

JANNNNNN 2025. 9. 3. 22:29

서버 한 대에 여러 서비스를 띄우면서 보안도 챙기고 싶을 때 어떻게 해야 할까요?
이번 글에서는 단일 서버에서 여러 포트를 활용해 웹서버, 백엔드, DB를 분리 운영하고, 리눅스 방화벽(ufw, iptables)으로

포트별 접근 제어하는 방법을 예시와 함께 알아보겠습니다!

왜 포트별 서비스 운영과 방화벽 설정이 중요한가?

  • 서버 비용 절감 (서버 1대만 사용)
  • 보안 강화 (필요한 포트만 외부 개방)
  • 서비스 안정성 향상 (내부 DB에 외부 접근 차단)

서비스별 포트는 어떻게 관리할까

예시) 3가지 서비스 포트

서비스포트 번호 역할
웹서버 (Nginx/Apache) 80, 443 외부 사용자 접속용
백엔드 API (Node.js 등) 8080 API 요청 처리용
데이터베이스 (MySQL) 3306 내부 데이터 저장, 외부 차단

일반적으로 사용되는 서비스 포트인데요!

서버에서는 각 서비스가 해당 포트에서 동작하도록 설정해야 합니다.

방화벽 설정하기 (UFW 기준)

sudo ufw default deny incoming  # 모든 수신 연결 차단  
sudo ufw default allow outgoing # 모든 발신 연결 허용  

sudo ufw allow 80/tcp           # HTTP 허용  
sudo ufw allow 443/tcp          # HTTPS 허용  
sudo ufw allow 8080/tcp         # 백엔드 API 허용 (필요 시)  

# DB 포트 3306은 허용하지 않아 외부에서 차단됨  
sudo ufw enable                 # 방화벽 활성화  
sudo ufw status verbose         # 설정 확인

 

방화벽 활성화란 기본적으로 서버로 들어오고 나가는 네트워크 트래픽을 기본적으로 모두 차단하고, 허용할 것만 따로 열어주는 상태로 만드는 것입니다.


MySQL DB는 로컬에서만 접근하도록 설정하기

/etc/mysql/mysql.conf.d/mysqld.cnf 에서 아래와 같이 설정

bind-address = 127.0.0.1

아까 방화벽을 활성화해서 트래픽을 차단했었죠?

이렇게 하면 DB는 서버 내부에서만 접속 가능해집니다.

 

실제 서비스 포트 확인하기

sudo ss -tulpn | grep LISTEN

출력 예시

tcp    LISTEN 0      128    0.0.0.0:80       0.0.0.0:*    users:(("nginx",pid=1234,fd=6))
tcp    LISTEN 0      128    127.0.0.1:3306   0.0.0.0:*    users:(("mysqld",pid=5678,fd=10))
tcp    LISTEN 0      128    0.0.0.0:8080     0.0.0.0:*    users:(("node",pid=9012,fd=11))

주의사항

  • 포트별로 서비스 분리하면 관리가 쉽고 보안에도 효과적입니다.
  • 방화벽은 꼭 활성화해서 외부 불필요한 접근 막아야해요.
  • DB는 가능하면 로컬 바인딩하거나 내부 네트워크에서만 접근 가능하도록 설정해야합니다.
  • 서버가 한 대일 때는 장애 대비 백업 계획도 중요합니다!

이렇게 한 대의 서버에서 여러 서비스를 안전하게 운영하는 방법을 알아봤습니다.
더 복잡한 구조나 트래픽이 많아지면 멀티 서버, 로드밸런서, 컨테이너 오케스트레이션 등을 고려해보세요!