Jay's <Devlog />Jay's Devlog
HomeBlogAbout
Login

© 2026 Jay's <Devlog />. All Rights Reserved.

GitHubLinkedIn
Gravatar
  1. Home
  2. Blog
  3. 홈 서버
  4. [Home Server] 우분투 24.04 LTS 보안 강화 가이드: UFW 설정과 3중 방어 체계 분석
INFRASTRUCTURE
홈 서버개인서버 12 min read

[Home Server] 우분투 24.04 LTS 보안 강화 가이드: UFW 설정과 3중 방어 체계 분석

jay

jay

2026년 1월 15일 22:48

목차

  • 1. 현황 파악: 내 서버는 얼마나 열려있나?
  • 2. 조치 1: UFW 방화벽 설정
    • 2-1. UFW 설치 및 정책 수립
    • 2-2. 필수 포트 허용 (순서 중요)
    • 2-3. 방화벽 활성화
  • 3. 심층 분석: Docker의 함정과 홈 서버의 이점
    • 나의 3중 방어 아키텍처
  • 4. 마무리 및 남은 과제

홈 서버를 운영하다 보면 기능 구현에 집중하느라 보안은 뒷전이 되기 쉽다. 최근 Ubuntu 24.04.3 LTS로 서버를 세팅하고 K3s와 각종 Docker 컨테이너를 올리면서 서비스 확장에만 열을 올렸는데, 문득 로그인 화면(MOTD)을 보고 보안 점검의 필요성을 느꼈다.

이번 포스팅에서는 ss 명령어로 현재 열려있는 포트를 분석하고, UFW(Uncomplicated Firewall) 설정과 함께 Cloudflare – 공유기(NAT) – 서버로 이어지는 3중 방어 체계가 어떻게 내 서버를 지키고 있는지 정리해본다.

1. 현황 파악: 내 서버는 얼마나 열려있나?

서버에 로그인했을 때, 업데이트 대기 알림과 함께 시스템 부하 등을 확인했다. ESM(Expanded Security Maintenance)이 켜져 있어 기본적인 보안 패치는 되고 있었지만, 네트워크 레벨에서의 보안은 별개다.

가장 먼저 ss 명령어를 통해 현재 리스닝 중인 포트와 프로세스를 확인했다.

sudo ss -tulpn

결과를 보고 놀랐었다. K3s와 Docker 컨테이너들이 즐비하게 떠 있으면서, 수많은 포트가 0.0.0.0 (모든 IP에서의 접속 허용)으로 열려 있었다.

  • 위험 요소:
    • 5432, 13306: PostgreSQL, MySQL 등 데이터베이스 포트가 공인망에 노출.
    • 6443: Kubernetes(K3s) API 서버가 전 세계에 오픈.
    • 9090, 3000: Prometheus, Grafana 등 관리 도구 접근 가능.

이 상태라면 누군가 내 공인 IP를 스캔했을 때, DB 브루트 포스 공격이나 관리자 페이지 접근을 시도할 수 있는 “문이 활짝 열린 서버” 상태였다.

2. 조치 1: UFW 방화벽 설정

Ubuntu에는 iptables를 쉽게 관리할 수 있는 UFW가 있다. Docker가 iptables를 직접 건드리는 문제가 있긴 하지만(후술), OS 레벨에서의 1차 방어선 구축은 필수다.

가장 중요한 건 “기본은 모두 막고(Deny), 필요한 것만 연다(Allow)”는 화이트리스트 정책이다.

2-1. UFW 설치 및 정책 수립

# UFW 설치
sudo apt update && sudo apt install ufw -y

# 기본 정책 설정 (들어오는 건 막고, 나가는 건 허용)
sudo ufw default deny incoming
sudo ufw default allow outgoing

2-2. 필수 포트 허용 (순서 중요)

방화벽을 활성화하기 전에 SSH 포트를 열어주지 않으면, 현재 연결된 터미널이 끊기는 대참사가 발생한다.

# 1. SSH (원격 접속용) - 필수!
sudo ufw allow ssh

# 2. 웹 서비스 (HTTP/HTTPS)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 3. K3s API (선택 사항, 외부 제어 필요 시)
sudo ufw allow 6443/tcp

2-3. 방화벽 활성화

sudo ufw enable

설정 후 sudo ufw status를 통해 22, 80, 443, 6443 포트 외에는 모두 차단됨을 확인했다.

3. 심층 분석: Docker의 함정과 홈 서버의 이점

여기서 한 가지 보안 맹점이 있다. Docker는 컨테이너를 실행할 때 iptables 규칙을 직접 수정하여 UFW보다 앞단에서 포트를 열어버린다. 즉, UFW에서 막았어도 Docker로 띄운 DB(-p 5432:5432)는 외부에서 접속이 될 수 있다는 것이다.

하지만 결론적으로 내 서버는 안전했다. 그 이유는 홈 서버(Home Lab)라는 환경적 특성 덕분이다.

나의 3중 방어 아키텍처

  1. 1차 방어 (Cloudflare):
    • 도메인을 Cloudflare에 연동하여 웹 트래픽(80, 443)을 프록시 처리한다. 공격자는 내 실제 집 IP(Origin IP)를 알기 어렵다.
  2. 2차 방어 (공유기 NAT/Port Forwarding) – 핵심:
    • 집 공유기 설정에서 외부의 80, 443 포트만 서버로 포트포워딩 해두었다.
    • Docker가 서버 내부에서 5432 포트를 열어두고 UFW를 우회한다 해도, 공유기라는 물리적 관문이 5432번 요청을 아예 서버로 보내주지 않고 드랍(Drop)시킨다.
  3. 3차 방어 (UFW + Fail2Ban):
    • 내부망에서의 오동작이나 만약의 뚫림을 대비해 UFW가 활성화되어 있고, SSH 무차별 대입 공격을 막기 위해 Fail2Ban도 구동 중이다.

4. 마무리 및 남은 과제

보안 점검 결과, Cloudflare + 공유기 NAT + UFW의 조합으로 상당히 견고한 보안 환경이 구축되어 있음을 확인했다.

다만, IPv6 환경에서는 공유기의 NAT를 거치지 않고 직접 통신하는 경우가 있어, ip a | grep inet6 명령어로 공인 IPv6 할당 여부를 체크해 볼 필요는 있다. (내 경우엔 다행히 안전했다.)

보안 설정이 완료되었으니, 미뤄뒀던 패키지 업데이트(apt upgrade)를 수행하며 작업을 마쳤다. 이제 안심하고 K3s 클러스터 운영에 집중할 수 있겠다.

#Cloudflare#Docker#Fail2Ban#Firewall#k3s#Kubernetes#Linux#Linux Security#Ubuntu#UFW#개인서버#미니PC#미니피씨#홈 서버

You might also like

[Jenkins] Docker로 띄운 Jenkins, 데이터 그대로 Kubernetes로 이관하기

#Helm#Jenkins#k3s

[Next.js + WordPress] 홈서버 배포기: ETIMEDOUT 해결부터 성능 최적화까지

#DevOps#Docker#Jenkins

Kubernetes K3s 환경에서 PostgreSQL HA 부하 테스트: pgbench로 검증하는 성능과 오토스케일링(HPA)

#Autoscaling#Helm#Home Lab

Comments (0)

Leave a Reply

Or login to comment with your account.

No comments yet. Be the first to share your thoughts!