소개
이 실습에서는 다양한 Linux 배포판에서 사용할 수 있는 최신 방화벽 관리 도구인 Firewalld를 살펴봅니다.
방화벽은 시스템 안팎으로 허용할 네트워크 트래픽을 제어합니다. 기존의 패킷 필터링 규칙은 초보자에게 다소 복잡하고 유연하지 않게 느껴질 수 있습니다. Firewalld는 더 높은 수준의 관리 모델을 제공하므로 관리자가 정책을 더 안전하고 동적으로 조정할 수 있습니다.
Firewalld 의 핵심 개념은 **영역 (zones)**입니다. 영역을 사용하면 네트워크 인터페이스나 연결마다 서로 다른 신뢰 수준을 적용할 수 있습니다.
- Home 영역: 거실과 비슷합니다. 이곳의 사람 (장치) 을 신뢰하므로 문을 대부분 열어 둡니다.
- Public 영역: 커피숍과 비슷합니다. 주변의 다른 사람 (장치) 을 신뢰하지 않으므로 문을 잠그고 매우 특정한 상호작용만 허용합니다.
Firewalld 를 사용하면 서로 다른 네트워크 연결 (인터페이스) 을 이러한 영역에 할당할 수 있습니다.
이 실습을 마치면 다음 작업을 수행할 수 있습니다.
- Firewalld 서비스를 안전하게 설치하고 시작합니다.
- 어떤 보안 "영역"이 활성 상태인지 확인합니다.
- 영역 내부의 규칙을 확인합니다.
- 네트워크 인터페이스를 한 영역에서 다른 영역으로 이동합니다.
Firewalld 설치 및 시작
이 단계에서는 Firewalld 소프트웨어를 설치하고 실행 중인지 확인합니다.
중요한 안전 단계: 이 원격 실습 환경에서는 터미널 연결이 네트워크가 열려 있는지에 따라 달라집니다. 방화벽을 기본 설정 (일반적으로 "Public" 또는 "Drop") 으로 시작하면 연결이 차단되어 즉시 접속이 끊길 수 있습니다. 이를 방지하기 위해 Firewalld 가 연결에 trusted 영역을 사용하도록 명시적으로 구성합니다.
이는 중요한 운영상의 교훈입니다. 방화벽 작업은 공격 표면을 줄이는 일이지만, 네트워크 정책을 부주의하게 변경하면 자신의 접속도 차단할 수 있습니다. 훌륭한 관리자는 네트워크 제어를 변경하기 전에 복구 방법과 현재 접속 경로를 먼저 고려합니다.
먼저 패키지를 설치합니다.
sudo apt-get update
sudo systemctl mask firewalld
sudo apt-get install firewalld -y
마스킹하면 패키지 설치 과정에서 firewalld 가 자동으로 시작되지 않습니다. 서비스를 시작하기 전에 firewall-offline-cmd를 사용하여 기본 영역을 trusted로 설정하고 eth0을 해당 영역에 연결합니다. 이 클라이언트는 firewalld 가 중지된 상태에서 작동합니다. 이러한 영구적인 관리용 접속 설정을 저장한 후에만 서비스의 마스킹을 해제하십시오.
sudo firewall-offline-cmd --set-default-zone=trusted
sudo firewall-offline-cmd --zone=trusted --add-interface=eth0
sudo systemctl unmask firewalld
sudo systemctl start firewalld
sudo firewall-cmd --reload
부팅할 때 서비스가 자동으로 시작되도록 활성화합니다.
sudo systemctl enable firewalld
마지막으로 Firewalld 가 실행 중인지 확인합니다.
sudo firewall-cmd --state
출력에 running이 표시되어야 합니다.
활성 영역 확인
이 단계에서는 Firewalld 가 실행 중이므로 **영역 (Zones)**을 확인합니다.
영역은 Firewalld 의 주요 추상화 계층입니다. 패킷 규칙을 길게 나열한 목록을 모두 기억하는 대신, 인터페이스를 신뢰 수준별로 그룹화하고 영역이 해당 환경의 기본 정책을 표현하도록 합니다.
현재 사용 중인 영역을 확인하려면 다음 명령을 실행합니다.
sudo firewall-cmd --get-active-zones
이전 단계에서 설정했으므로 다음과 같은 결과가 표시되어야 합니다.
trusted
interfaces: eth0
이 결과는 다음을 의미합니다.
- trusted 영역이 활성 상태입니다.
- 네트워크 인터페이스 eth0(기본 연결) 이 이 영역에 안전하게 포함되어 있습니다.
다른 영역에는 무엇이 있는지 확인하려면 사용 가능한 모든 영역을 나열할 수 있습니다.
sudo firewall-cmd --get-zones
block, home, work, public 등의 이름이 표시됩니다.
영역 구성 나열
이 단계에서는 활성 영역의 상세 규칙을 확인합니다.
이제 Firewalld 의 동작이 더 구체적으로 보이기 시작합니다. 영역은 public이나 trusted 같은 이름만을 의미하지 않습니다. 기본 대상, 허용된 서비스와 포트, 포워딩 동작 등 실제 정책 결정이 묶여 있는 구성입니다.
--list-all 옵션을 사용하여 현재 기본 영역 (trusted) 의 전체 구성을 확인합니다.
sudo firewall-cmd --list-all
구성이 출력됩니다. trusted 영역에서 핵심 필드는 다음과 같습니다.
- target:
ACCEPT. 이는 "모든 항목을 허용"한다는 뜻입니다.
이 설정을 통해 현재 연결이 안전한 이유를 확인할 수 있습니다.
다른 영역의 규칙을 확인하려면 (예: public 영역) 영역 이름을 지정합니다.
sudo firewall-cmd --zone=public --list-all
public 영역이 훨씬 더 제한적이라는 것을 확인할 수 있습니다.
인터페이스 영역 변경
이 단계에서는 인터페이스를 다른 영역으로 이동하는 작업을 연습합니다.
인터페이스의 영역을 변경하는 것은 해당 인터페이스로 들어오는 트래픽의 신뢰 분류를 변경하는 일입니다. 따라서 동일한 호스트라도 모든 규칙을 처음부터 다시 작성하지 않고 네트워크에 따라 다르게 동작할 수 있습니다.
경고: 기본 인터페이스 eth0을 work 영역으로 이동하면 work 영역이 웹 터미널 연결을 차단하므로 즉시 연결이 끊깁니다!
안전하게 연습하기 위해 "더미 (dummy)" 가상 네트워크 인터페이스를 만들고 이를 실험에 사용합니다.
먼저 dummy0이라는 더미 인터페이스를 만듭니다.
sudo ip link add dummy0 type dummy
sudo ip link set dummy0 up
처음에는 이 인터페이스를 public 영역에 추가합니다 (인터페이스가 속할 영역을 지정하기 위한 작업입니다).
sudo firewall-cmd --zone=public --add-interface=dummy0
이제 dummy0이 노트북의 Wi-Fi 카드이고 방금 사무실에 도착했다고 가정합니다. 이 인터페이스를 work 영역으로 전환합니다.
sudo firewall-cmd --zone=work --change-interface=dummy0
변경 결과를 확인합니다.
sudo firewall-cmd --get-active-zones
이제 다음 두 영역이 활성 상태로 표시되어야 합니다.
- trusted:
eth0이 포함되어 있으며, 연결을 유지합니다. - work:
dummy0이 포함되어 있으며, 테스트 인터페이스로 사용됩니다.
trusted
interfaces: eth0
work
interfaces: dummy0
접속을 차단하지 않고 영역을 변경하는 방법을 성공적으로 익혔습니다!
요약
이 실습에서는 Firewalld를 처음 사용해 보았습니다. 다음 작업을 수행했습니다.
- 서비스를 설치하고 접속이 끊기지 않도록 안전하게 구성했습니다.
- **영역 (Zones)**이 보안 프로필과 같은 역할을 한다는 것을 배웠습니다.
- 영역 내부의 규칙을 확인했습니다.
- 가상 인터페이스를 만들고 영역 간에 전환하는 작업을 연습했습니다.
영역을 이해하는 것은 Firewalld 의 기초입니다. 다음 실습에서는 특정 포트를 열어 이러한 영역을 사용자 지정하는 방법을 배웁니다.



