UFW(Uncomplicated Firewall)는 iptables의 복잡한 문법을 단순화한 Ubuntu 기본 방화벽 도구입니다. 직관적인 명령어로 포트 제어를 할 수 있어 서버 보안의 첫 번째 단계로 적합합니다.

기본 개념

방화벽 정책의 기본 원칙은 화이트리스트 방식입니다. 모든 접속을 차단하고 필요한 것만 허용합니다.

UFW 설치 및 활성화

Ubuntu에는 기본 설치되어 있습니다:

sudo apt install -y ufw

중요: 활성화 전에 반드시 SSH 포트를 허용해야 합니다. 그렇지 않으면 서버에서 잠깁니다.

# SSH 허용 (기본 22번)
sudo ufw allow 22/tcp

# 또는 변경한 포트
sudo ufw allow 2222/tcp

# UFW 활성화
sudo ufw enable

# 상태 확인
sudo ufw status verbose

주요 서비스 포트 허용

# 웹 서버
sudo ufw allow 80/tcp     # HTTP
sudo ufw allow 443/tcp    # HTTPS

# 데이터베이스 (내부 접근만 필요하면 허용하지 않음)
sudo ufw allow 3306/tcp   # MySQL
sudo ufw allow 5432/tcp   # PostgreSQL

# 메일 서버
sudo ufw allow 25/tcp     # SMTP
sudo ufw allow 587/tcp    # SMTP (제출)
sudo ufw allow 993/tcp    # IMAPS

특정 IP에서만 허용

관리자 IP에서만 SSH를 허용하는 것이 가장 안전합니다:

# 특정 IP에서 SSH만 허용
sudo ufw allow from 203.0.113.1 to any port 2222

# 특정 IP 대역에서 허용
sudo ufw allow from 203.0.113.0/24 to any port 2222

# 특정 IP의 모든 접근 차단
sudo ufw deny from 1.2.3.4

규칙 확인 및 삭제

# 번호와 함께 규칙 목록 확인
sudo ufw status numbered

# 번호로 규칙 삭제
sudo ufw delete 3

# 규칙 내용으로 삭제
sudo ufw delete allow 80/tcp

기본 정책 설정

# 들어오는 트래픽 기본 차단
sudo ufw default deny incoming

# 나가는 트래픽 기본 허용
sudo ufw default allow outgoing

로깅 설정

# 로깅 활성화
sudo ufw logging on

# 로그 수준 설정 (low, medium, high, full)
sudo ufw logging medium

# 로그 확인
sudo tail -f /var/log/ufw.log

Docker 사용 시 주의사항

Docker를 사용하면 UFW 규칙을 우회할 수 있습니다. Docker는 iptables를 직접 수정하기 때문입니다. 이 경우 /etc/docker/daemon.json에 다음을 추가합니다:

{
  "iptables": false
}

그 후 iptables 규칙을 직접 관리하거나, Docker Compose에서 포트 바인딩을 127.0.0.1:8080:80처럼 루프백으로 제한하는 방식을 사용합니다.

권장 최소 설정

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow from [관리자IP] to any port [SSH포트]
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

이 설정만으로도 대부분의 자동화 공격을 차단할 수 있습니다.