대상 OS: Ubuntu Server 24.04 LTS

서버 보안에서 제일 쉬운 실수는 “필요 없는 포트가 열려 있는 상태”로 오래 방치하는 것입니다.
서비스는 늘어나고, 테스트용 포트는 남고, 어느 순간 규칙이 누더기가 됩니다.
그 사이 공격자는 스캔으로 열린 포트를 찾아내고, 취약한 지점을 골라 두드리죠.
그래서 방화벽은 ‘한 번 설정’이 아니라 “기본 차단(default deny) + 최소 허용(allowlist)”이라는 운영 원칙을 유지하는 일이 핵심입니다.

Ubuntu Server 24.04에서는 UFW(Uncomplicated Firewall)로 이 원칙을 비교적 안전하게 적용할 수 있습니다.
이 글은 UFW를 운영 서버에 도입할 때 필요한 “SSH 안전 적용 → 서비스별 규칙 → 레이트리밋 → 로그/점검 → 롤백”까지 실전 절차로 정리합니다.

---

1) UFW를 쓰는 이유(그리고 언제 안 쓰나)

1) iptables/nftables를 직접 다루기보다 운영 난이도가 낮다

2) 규칙이 사람이 읽기 쉬워 ‘운영 표준’으로 만들기 좋다

3) 기본 정책(default deny)을 빠르게 강제할 수 있다

4) 아주 복잡한 방화벽(고급 set/맵, 대규모 정책)을 쓰면 ufw는 한계가 있어 nftables 직접 운영이 더 적합할 수 있다

UFW는 “서버 단일 노드에서 최소 노출”을 만들기엔 충분히 실용적입니다.

---

2) 적용 전 필수 안전장치(특히 원격 서버)

1) 콘솔 접근(클라우드 콘솔/시리얼) 가능 여부 확인

2) SSH 세션 2개 이상 열어두기(한 세션은 ‘살려두기’)

3) 현재 방화벽 상태 백업 겸 확인

sudo ufw status verbose || true
sudo iptables -S 2>/dev/null | head -n 40 || true
sudo nft list ruleset 2>/dev/null | head -n 60 || true

UFW는 보통 iptables/nftables 백엔드를 사용합니다. 이미 다른 방화벽을 강하게 쓰고 있다면 충돌 가능성이 있으니 “무엇이 실제로 필터링하는지”부터 확인해야 합니다.

---

3) 설치 및 기본 상태 확인

1) 설치

sudo apt update
sudo apt -y install ufw

2) 상태 확인

sudo ufw status verbose

---

4) 기본 정책: 들어오는 건 차단, 나가는 건 허용

운영 서버의 가장 흔한 기본값은 이 조합입니다.

1) 기본 정책 설정

sudo ufw default deny incoming
sudo ufw default allow outgoing

2) (중요) SSH 허용을 먼저 잡기

SSH를 열기 전에 ufw를 enable하면 바로 잠길 수 있습니다.

sudo ufw allow 22/tcp

SSH 포트가 22가 아니라면 먼저 확인하세요.

sudo sshd -T | grep -i '^port '

---

5) SSH 하드닝 관점: ‘허용’만 하지 말고 제한하기

# 5-1) 특정 관리망/고정 IP만 허용(가능하면 최선)

1) 예: 사무실 공인 IP만 허용

sudo ufw allow from 203.0.113.10 to any port 22 proto tcp

2) 그 외는 기본 차단 정책으로 막힘

이 구조는 Fail2ban보다 앞단에서 “노출 자체”를 줄여 주기 때문에 효과가 큽니다.

# 5-2) 고정 IP가 어렵다면 레이트리밋으로 소음 줄이기

UFW는 SSH에 대해 rate limit 규칙을 제공할 수 있습니다.

1) SSH 레이트리밋

sudo ufw limit 22/tcp

주의
- limit는 “무차별 대입/폭주 완화”에 도움되지만, 분산 공격에는 한계가 있습니다.
- 그래도 로그 노이즈와 서버 부담을 줄이는 데는 효과가 있습니다.

---

6) 서비스별 규칙 추가(최소 허용)

방화벽 운영은 “필요한 서비스만” 열어주는 습관이 전부입니다.

1) 예: HTTPS만 외부에 공개

sudo ufw allow 443/tcp

2) 예: HTTP는 리다이렉트 용도로만 열기(정책에 따라)

sudo ufw allow 80/tcp

3) 예: 특정 내부망에서만 접근해야 하는 서비스(예: 모니터링)

sudo ufw allow from 10.0.0.0/8 to any port 9100 proto tcp

규칙을 쌓을 때는 “외부 노출 포트가 실제로 필요한가?”를 매번 질문하세요.

---

7) 활성화(enable)와 검증

1) UFW 활성화

sudo ufw enable

2) 상태/규칙 확인

sudo ufw status numbered
sudo ufw status verbose

3) 실제 리스닝 포트와 교차 확인

sudo ss -ltnp | head -n 80
sudo ss -lunp | head -n 80

UFW는 “열려 있는 포트를 닫는” 게 아니라, “열려 있어도 외부에서 접근을 막는” 방식입니다.
그래서 ss 출력(리스닝)과 ufw 규칙을 반드시 같이 봐야 합니다.

---

8) 로깅: 차단 이벤트를 남기고, 과도한 로그는 피하기

방화벽 로그는 사고 대응에 도움이 되지만, 과도하면 노이즈가 됩니다.

1) 로깅 수준 설정(예: low)

sudo ufw logging low

2) 로그 확인(환경에 따라 journald/syslog)

sudo journalctl -k -n 200 --no-pager | tail -n 120
sudo grep -i "ufw" /var/log/syslog | tail -n 120

운영 팁
- low로 시작하고, 필요 시에만 올리세요.
- “차단 이벤트가 급증”하면 그 자체가 공격 신호일 수 있습니다.

---

9) 규칙 관리: numbered 삭제/정리로 누더기 방지

1) 번호 기반 목록 확인

sudo ufw status numbered

2) 불필요 규칙 삭제

sudo ufw delete 3

운영 표준
- 규칙을 추가할 때마다 “왜 필요한지”를 메모(티켓/문서)로 남기면, 나중에 정리할 때 훨씬 쉽습니다.

---

10) 롤백(원복) 절차: 잠기기 전에 알아두기

1) UFW 비활성화

sudo ufw disable

2) 규칙 초기화(주의: 모든 규칙 삭제)

sudo ufw reset

주의
- reset은 운영 정책 전체를 지우는 명령입니다. 사고/긴급 상황에서만 사용하세요.
- 가능하면 콘솔 접근이 가능한 상태에서 수행하는 것이 안전합니다.

---

마무리

Ubuntu Server 24.04에서 UFW는 “기본 차단 + 최소 허용”을 운영 서버에 빠르게 적용하는 실용적인 도구입니다.
핵심은 기술이 아니라 운영 습관입니다.

- SSH는 먼저 안전하게(가능하면 IP 제한, 아니면 limit)
- 필요한 서비스만 allow
- enable 후 반드시 ss/로그로 검증
- 규칙을 정기적으로 정리하고, 원복 절차를 알고 있을 것

이 원칙만 지켜도 ‘열려 있던 구멍’이 확실히 줄어듭니다.