소개
컴퓨터를 집이라고 생각해 보겠습니다. 기본적으로 문과 창문이 열려 있어 누구나 들어올 수 있습니다. 집을 보호하려면 일정한 규칙에 따라 출입을 통제하는 경비원이 필요합니다.
Linux 에서 UFW(Uncomplicated Firewall) 는 이러한 경비원 역할을 합니다. UFW 는 하위 수준의 방화벽 시스템을 더 쉽게 사용할 수 있도록 제공되는 인터페이스입니다. UFW 를 사용하면 시스템에 연결할 수 있는 대상과 연결할 수 없는 대상을 정의할 수 있습니다.
이 차이를 이해하는 것이 중요합니다. UFW 는 방화벽 엔진 자체가 아니라 관리 계층입니다. 초보자도 하위 수준의 패킷 필터 규칙을 직접 작성하지 않고 네트워크 액세스를 제어할 수 있도록 더 간단한 정책 인터페이스를 제공합니다.
하지만 LabEx 와 같은 클라우드 환경에서 방화벽을 구성할 때는 주의해야 합니다. 기본적으로 모든 들어오는 연결을 차단하면 (일반적인 보안 방식입니다) 실수로 실습 환경과의 연결을 끊을 수 있습니다.
이 실습에서는 다음과 같은 안전한 방법을 사용합니다.
- 연결이 끊기는 것을 방지하기 위해 기본 정책을 Allow Incoming으로 설정합니다.
- 웹 애플리케이션에 필요한 8080 포트의 트래픽을 명시적으로 허용합니다.
- 방화벽을 활성화합니다.
이 과정을 통해 작업 공간에 대한 액세스를 잃지 않고 UFW 규칙을 관리하는 방법을 익힐 수 있습니다.
방화벽 상태 확인
변경하기 전에 현재 애플리케이션과 방화벽의 상태를 파악해야 합니다.
간단한 웹 서버가 8080 포트에서 실행 중입니다. 먼저 애플리케이션에 액세스할 수 있는지 확인합니다.
다음 명령을 실행합니다.
curl -I 127.0.0.1:8080
다음과 비슷한 HTTP 응답이 표시됩니다.
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.10.6
...
이 응답은 웹 애플리케이션이 실행 중이며 로컬에서 연결할 수 있음을 확인해 줍니다.
방화벽을 변경하기 전에 서비스를 확인하면 애플리케이션 문제와 네트워크 정책 문제를 구분할 수 있습니다. 서비스가 이미 로컬에서 작동하지 않는다면 먼저 방화벽을 원인으로 의심해서는 안 됩니다.
다음으로 UFW 의 상태를 확인하여 현재 활성화되어 있는지 확인합니다.
sudo ufw status
대개 다음과 같은 결과가 표시됩니다.
Status: inactive
이는 UFW 가 설치되어 있지만 현재 어떤 규칙도 적용하고 있지 않다는 뜻입니다. 따라서 모든 트래픽이 자유롭게 통과합니다.
방화벽 규칙 집합은 실제로 네트워크 액세스 정책입니다. inactive는 소프트웨어가 고장 났다는 뜻이 아니라, 현재 정책이 적용되고 있지 않다는 뜻입니다.
기본 정책 및 규칙 구성
이제 방화벽이 트래픽을 처리하는 방식을 구성합니다.
기본 정책을 Allow 로 설정
UFW 는 기본적으로 들어오는 모든 연결을 거부하도록 구성되는 경우가 많습니다. 로컬 머신에서는 안전한 설정입니다. 하지만 LabEx 온라인 환경에서 모든 들어오는 연결을 차단하면 브라우저와 실습 환경 사이의 연결이 끊길 수 있습니다.
이를 방지하려면 들어오는 트래픽의 기본 정책을 ALLOW로 설정합니다.
sudo ufw default allow incoming
출력:
Default incoming policy changed to 'allow'
(be sure to update your rules accordingly)
8080 포트 허용
다음으로 8080 포트에서 실행 중인 웹 애플리케이션으로 들어오는 트래픽을 명시적으로 허용하는 특정 규칙을 추가합니다. 기본 정책이 allow인 경우에도 이렇게 설정하는 것이 좋습니다. 의도를 명확히 기록할 수 있고, 나중에 기본 정책을 deny로 변경할 상황에도 대비할 수 있기 때문입니다.
보안에서는 이러한 명시적인 의도가 중요합니다. 명확한 규칙이 있으면 나중에 특정 포트가 열려 있는 이유와 해당 노출이 여전히 필요한지를 쉽게 파악할 수 있습니다.
sudo ufw allow 8080
시스템에서 다음과 같이 확인합니다.
Rules updated
Rules updated (v6)
이제 안전한 기본 구성을 설정하고 애플리케이션에 필요한 특정 규칙을 추가했습니다.
방화벽 활성화
규칙 구성을 완료했으므로 이제 방화벽을 활성화합니다.
다음 명령을 실행하여 UFW 를 활성화합니다.
sudo ufw enable
기본 정책을 ALLOW 로 설정했기 때문에 UFW 는 SSH 연결이 중단될 수 있다는 경고 없이 즉시 활성화됩니다. 기본 정책이 deny 일 때는 이러한 경고가 일반적으로 표시됩니다.
다음과 같은 결과가 표시됩니다.
Firewall is active and enabled on system startup
이 작업으로 보안 경비원을 실제로 "켜게" 됩니다.
이제 UFW 는 규칙을 저장만 하는 상태가 아니라, 해당 규칙을 적용합니다. 구성된 정책과 활성 상태의 정책을 구분하는 것은 여러 시스템에서 공통적으로 사용되는 중요한 보안 개념입니다.
방화벽 구성 확인
마지막으로 방화벽이 활성화되어 있고 규칙이 올바르게 적용되었는지 확인합니다.
다시 상태를 확인합니다.
sudo ufw status
이제 상태가 active로 표시되고, 앞에서 만든 규칙도 함께 표시됩니다.
Status: active
To Action From
-- ------ ----
8080 ALLOW Anywhere
8080 (v6) ALLOW Anywhere (v6)
연결 테스트
방화벽이 활성화된 상태에서도 웹 애플리케이션에 계속 액세스할 수 있는지 확인합니다.
curl -I 127.0.0.1:8080
앞에서와 동일한 HTTP/1.0 200 OK 응답이 표시되어야 합니다.
이 결과를 통해 다음 사항을 확인할 수 있습니다.
- 방화벽이 활성화되어 있습니다.
- 규칙이 예상대로 작동합니다.
- 애플리케이션에 계속 액세스할 수 있습니다.
요약
이 실습에서는 UFW 방화벽을 성공적으로 구성하고 활성화했습니다.
다음 작업을 수행하는 방법을 배웠습니다.
- 방화벽 상태 확인:
sudo ufw status를 사용하여 방화벽이 활성화되어 있는지 확인합니다. - 안전한 기본값 구성:
sudo ufw default allow incoming을 사용하여 클라우드 환경에서 실수로 연결이 끊기는 것을 방지합니다. - 규칙 추가:
sudo ufw allow 8080을 사용하여 특정 포트의 트래픽을 허용합니다. - 방화벽 활성화:
sudo ufw enable을 사용하여 규칙을 적용합니다.
일반적인 운영 환경에서는 들어오는 트래픽의 기본 정책을 deny로 설정하고 필요한 포트만 명시적으로 허용합니다 (예: SSH 용 22, HTTP 용 80 등). 하지만 이러한 규칙을 안전하게 관리하는 방법을 이해하는 것이 시스템 보안의 첫 단계입니다.



