Ubuntu 22.04 UFW 방화벽 설정 가이드 (GitLab, Nexus, Apache, MySQL, vLLM 운영 서버)

Ubuntu 22.04에서 UFW(Uncomplicated Firewall)를 이용해 GitLab, Nexus Repository, Apache, MySQL, vLLM 운영 서버의 방화벽을 안전하게 설정하는 방법을 정리합니다. SSH, HTTP, HTTPS 포트 개방부터 MySQL·AI 서버 보안 설정까지 실무 기준으로 설명합니다.

Ubuntu 22.04 UFW 방화벽 설정 가이드 (GitLab, Nexus, Apache, MySQL, vLLM 운영 서버)

Ubuntu 서버를 구축한 후 GitLab, Nexus Repository, Apache, MySQL, vLLM 등의 서비스를 운영한다면 방화벽 설정은 가장 먼저 해야 하는 보안 작업 중 하나입니다.

특히 운영 서버에서는 서비스에 필요한 포트만 개방하고 나머지는 차단하는 것이 기본 원칙입니다. 잘못된 포트 개방은 데이터베이스 노출, 관리자 페이지 무단 접근, AI 서버 악용 등의 보안 문제로 이어질 수 있습니다.

이번 글에서는 Ubuntu 22.04 환경에서 UFW(Uncomplicated Firewall)를 이용하여 GitLab, Nexus, Apache, MySQL, vLLM 서버를 안전하게 운영하는 방법을 정리해보겠습니다.


운영 환경

항목내용
OS Ubuntu 22.04.5 LTS
Web Server Apache
Git Repository GitLab CE
Artifact Repository Nexus Repository
Database MySQL 8
AI Server vLLM
Firewall UFW

UFW 방화벽 상태 확인

Ubuntu 설치 직후에는 UFW가 비활성화된 경우가 많습니다.

현재 상태를 확인합니다.

 
sudo ufw status verbose
 

결과 예시

 
Status: inactive
 

위와 같이 표시되면 방화벽이 동작하지 않는 상태입니다.


현재 서버에서 사용 중인 포트 확인

방화벽 설정 전에 현재 어떤 포트가 열려 있는지 확인하는 것이 좋습니다.

 
sudo ss -ntlp
 

예시

 
LISTEN 0 4096 *:22
LISTEN 0 4096 *:8081
LISTEN 0 4096 *:9998
LISTEN 0 4096 *:9999
LISTEN 0 4096 *:3306
LISTEN 0 4096 *:8000
 

주요 포트 의미는 다음과 같습니다.

포트서비스
22 SSH
80 HTTP
443 HTTPS
3306 MySQL
8000 vLLM
8081 관리자 페이지
9998 Nexus
9999 GitLab

UFW 설치

대부분 Ubuntu 서버에는 기본 설치되어 있지만 없는 경우 아래 명령으로 설치할 수 있습니다.

 
sudo apt update
sudo apt install ufw -y
 

설치 여부 확인

 
ufw --version
 

SSH 포트 먼저 허용하기

원격 서버에서 작업 중이라면 가장 먼저 SSH 포트를 허용해야 합니다.

SSH 허용 없이 방화벽을 활성화하면 서버 접속이 끊어질 수 있습니다.

기본 SSH 포트

 
sudo ufw allow 22/tcp
 

SSH 포트를 변경한 경우 확인합니다.

 
sudo ss -ntlp | grep ssh
 

예를 들어 2222 포트를 사용하는 경우

 
sudo ufw allow 2222/tcp
 

Apache 웹 서버 포트 허용

웹 서비스 운영을 위해 HTTP와 HTTPS 포트를 개방합니다.

HTTP

 
sudo ufw allow 80/tcp
 

HTTPS

 
sudo ufw allow 443/tcp
 

관리자 포털 허용

사내 관리자 페이지나 별도 웹 관리 시스템을 운영하는 경우

 
sudo ufw allow 8081/tcp
 

단, 관리자 페이지는 가능하면 VPN 또는 특정 IP만 허용하는 것을 권장합니다.


GitLab 포트 허용

GitLab이 9999 포트에서 서비스 중인 경우

 
sudo ufw allow 9999/tcp
 

실제 운영 환경에서는 외부 전체 공개보다는 특정 관리자 IP만 허용하는 방식이 더욱 안전합니다.


Nexus Repository 포트 허용

Nexus Repository가 9998 포트를 사용하는 경우

 
sudo ufw allow 9998/tcp
 

Artifact 저장소 역시 관리자나 CI/CD 서버만 접근하도록 제한하는 것이 좋습니다.


MySQL 3306 포트는 열어야 할까?

실무에서는 대부분 열 필요가 없습니다.

MySQL 바인딩 상태를 확인합니다.

 
sudo ss -ntlp | grep 3306
 

결과

 
127.0.0.1:3306
 

이 경우 외부에서는 접근할 수 없습니다.

일반적인 구성은 다음과 같습니다.

Apache
   ↓
Application
   ↓
MySQL(Localhost)
 

따라서 MySQL 포트를 인터넷에 공개하는 것은 권장되지 않습니다.

비추천

 
sudo ufw allow 3306/tcp
 

권장

 
sudo ufw deny 3306/tcp
 

또는 별도 규칙을 만들지 않는 것이 좋습니다.


vLLM 8000 포트는 열어야 할까?

AI 서버 역시 인터넷 전체에 직접 공개하는 것은 권장되지 않습니다.

예를 들어 vLLM 서버를 실행할 때

 
vllm serve \
--host 127.0.0.1 \
--port 8000
 

처럼 localhost로만 바인딩하는 것이 안전합니다.

외부 접근 차단

 
sudo ufw deny 8000/tcp
 

Apache Reverse Proxy 구성 권장

AI API를 외부에 제공해야 한다면 Apache Reverse Proxy를 사용하는 것이 좋습니다.

설정 예시

 
ProxyPass /vllm http://127.0.0.1:8000/
ProxyPassReverse /vllm http://127.0.0.1:8000/
 

구성 예시

인터넷
   ↓
Apache (80/443)
   ↓
vLLM (8000)
 

이 방식은 SSL 적용, 인증 추가, 접근 제어를 한 곳에서 관리할 수 있다는 장점이 있습니다.


UFW 방화벽 활성화

모든 규칙을 설정한 후 방화벽을 활성화합니다.

 
sudo ufw enable
 

출력 예시

 
Command may disrupt existing ssh connections.
Proceed with operation (y|n)?
 

입력

 
y
 

최종 방화벽 설정 확인

등록된 규칙을 확인합니다.

 
sudo ufw status numbered
 

예시

 
Status: active

[1] 22/tcp     ALLOW Anywhere
[2] 80/tcp     ALLOW Anywhere
[3] 443/tcp    ALLOW Anywhere
[4] 8081/tcp   ALLOW Anywhere
[5] 9998/tcp   ALLOW Anywhere
[6] 9999/tcp   ALLOW Anywhere
 

GitLab과 Nexus를 특정 IP만 허용하기

운영 환경에서는 GitLab과 Nexus를 전체 공개하지 않는 것이 좋습니다.

예시

 
sudo ufw allow from 121.78.xxx.xxx to any port 9998 proto tcp
sudo ufw allow from 121.78.xxx.xxx to any port 9999 proto tcp
 

추천 구성

서비스권장 설정
80 전체 공개
443 전체 공개
8081 관리자 전용
9998 특정 IP 허용
9999 특정 IP 허용
3306 차단
8000 차단

운영 서버 권장 UFW 설정 예시

 
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 8081/tcp
sudo ufw allow 9998/tcp
sudo ufw allow 9999/tcp

sudo ufw deny 3306/tcp
sudo ufw deny 8000/tcp

sudo ufw enable
 

추가로 기본 정책까지 설정하면 더욱 안전합니다.

 
sudo ufw default deny incoming
sudo ufw default allow outgoing
 

이 설정은 허용한 포트만 외부에서 접근 가능하도록 만들어 보안 수준을 높여줍니다.


FAQ

UFW를 활성화하면 SSH가 끊길 수 있나요?

SSH 포트를 허용하지 않은 상태에서 ufw enable을 실행하면 접속이 끊어질 수 있습니다. 반드시 SSH 포트를 먼저 허용해야 합니다.

MySQL 3306 포트를 외부에 공개해도 되나요?

권장하지 않습니다. 대부분의 웹 서비스는 애플리케이션 서버를 통해 데이터베이스에 접근하므로 외부 공개가 필요하지 않습니다.

vLLM API를 외부에 공개해야 한다면?

Apache 또는 Nginx Reverse Proxy를 사용하여 HTTPS와 인증을 적용한 뒤 공개하는 것이 안전합니다.

GitLab과 Nexus는 전체 공개해도 되나요?

가능은 하지만 보안상 권장되지 않습니다. 특정 IP 또는 VPN을 통해 접근을 제한하는 것이 좋습니다.


마무리

Ubuntu 22.04에서 UFW 방화벽 설정은 서버 보안을 위한 가장 기본적이면서도 중요한 작업입니다. 특히 GitLab, Nexus Repository, MySQL, vLLM과 같은 서비스를 운영한다면 필요한 포트만 개방하고 나머지는 차단하는 최소 권한 원칙을 적용해야 합니다.

실무 환경에서는 일반적으로 80, 443 포트만 외부에 공개하고, GitLab·Nexus·MySQL·AI 서버는 내부망 또는 특정 IP만 접근 가능하도록 구성합니다. 이러한 방식은 보안 위험을 크게 줄이면서 안정적인 서비스 운영이 가능하게 해줍니다.


연관글

Ubuntu 22.04 LVM 디스크 용량 확장 방법 (100GB → 3.6TB 적용 사례)

Ubuntu 22.04 개발 서버 구축기 - Apache, PHP, MySQL, GitLab, Nexus, vLLM 포털 구성 및 트러블슈팅