대상 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/로그로 검증
- 규칙을 정기적으로 정리하고, 원복 절차를 알고 있을 것
이 원칙만 지켜도 ‘열려 있던 구멍’이 확실히 줄어듭니다.