소개
네트워크 서비스를 개방하는 것은 관리 작업의 절반에 불과합니다. 호스트 방화벽이 어떤 트래픽을 허용할지 제어하는 것 또한 필수적입니다. Red Hat 시스템에서 firewalld는 영역, 서비스, 포트 및 리치 규칙을 통해 방화벽 정책을 관리합니다.
이 실습에서는 TCP 포트 8088에서 실행되는 간단한 HTTP 서비스가 준비되어 있습니다. 기본 영역을 검사하고, 런타임에 포트를 개방하며, 해당 규칙을 영구적으로 적용하고, 광범위한 포트 개방을 소스 제한이 포함된 리치 규칙으로 교체한 뒤 최종 방화벽 상태를 감사하는 과정을 진행합니다.
방화벽 및 서비스 기준 상태 검사
이 단계에서는 현재 firewalld 상태와 준비된 네트워크 서비스를 검사합니다. 규칙을 변경하기 전에 방화벽이 실행 중인지 확인해야 합니다.
초기 설정에서는 public 영역에 SSH와 3002/tcp 포트의 LabEx 브라우저 터미널 접속을 허용하는 영구 규칙을 구성해 두었습니다. 애플리케이션의 방화벽 정책을 변경할 때도 이 관리용 접속 규칙을 유지하십시오.
프로젝트 디렉토리로 이동합니다.
cd /home/labex/project
firewalld 가 실행 중인지 확인합니다. 이 환경에서는 읽기 및 쓰기 작업 모두에 sudo firewall-cmd를 사용합니다.
sudo firewall-cmd --state
기본 영역을 확인합니다.
sudo firewall-cmd --get-default-zone
활성 영역을 검사합니다. LabEx SSH 세션이 유지될 수 있도록 ssh가 허용되어 있는지 확인하십시오.
sudo firewall-cmd --list-all
실습용 웹 서비스가 실행 중이며 포트 8088에서 수신 대기 중인지 확인합니다.
systemctl is-active rhcsa-fw-web.service
ss -ltn | grep ':8088'
curl -s http://127.0.0.1:8088/
포트 8088/tcp가 아직 firewalld 에서 광범위하게 개방되어 있지 않은지 확인합니다.
sudo firewall-cmd --query-port=8088/tcp || echo "port 8088 is not open in the zone"
런타임 포트 개방
이 단계에서는 런타임 방화벽 규칙을 추가합니다. 런타임 규칙은 즉시 적용되지만, 영구적으로 설정하지 않으면 firewalld 를 리로드할 때 사라집니다.
현재 런타임 구성에서 TCP 포트 8088을 엽니다. 영역을 지정하지 않았으므로 firewall-cmd는 앞서 확인한 기본 영역에 변경 사항을 적용합니다.
sudo firewall-cmd --add-port=8088/tcp
런타임 규칙을 조회합니다. 결과가 yes이면 활성 방화벽이 현재 해당 포트를 허용하고 있음을 의미합니다.
sudo firewall-cmd --query-port=8088/tcp
런타임 포트 목록을 확인합니다. 이를 통해 활성 영역에서 수동으로 개방된 포트를 간략하게 볼 수 있습니다.
sudo firewall-cmd --list-ports
영구 구성을 확인합니다. 런타임 구성과 영구 구성은 별개이므로 여전히 no라고 보고되어야 합니다. 즉, 런타임 전용 규칙은 지금은 작동하지만 firewalld 가 리로드되면 사라집니다.
sudo firewall-cmd --permanent --query-port=8088/tcp || echo "port 8088 is not permanent yet"
포트 규칙을 영구적으로 설정
이 단계에서는 동일한 포트를 영구 구성에 추가하고 firewalld 를 리로드합니다. 리로드를 수행하면 영구 구성이 런타임 방화벽에 적용됩니다.
영구 포트 규칙을 추가합니다. --permanent 옵션은 실행 중인 방화벽만 변경하는 것이 아니라 firewalld 구성 파일에 규칙을 기록합니다.
sudo firewall-cmd --permanent --add-port=8088/tcp
firewalld 를 리로드합니다. 리로드는 영구 구성으로부터 런타임 방화벽을 재구축합니다. 이 단계는 저장된 규칙이 리로드 후에도 유지되는지 테스트하는 과정입니다.
sudo firewall-cmd --reload
런타임 및 영구 구성을 모두 조회합니다. 첫 번째 명령어는 활성 방화벽을 확인하고, 두 번째 명령어는 저장된 구성을 확인합니다.
sudo firewall-cmd --query-port=8088/tcp
sudo firewall-cmd --permanent --query-port=8088/tcp
두 명령어 모두 yes를 반환해야 합니다.
개방된 포트를 리치 규칙으로 교체
이 단계에서는 모든 소스에 서비스를 개방하는 대신 접근을 제한합니다. 리치 규칙 (rich rule) 을 사용하면 소스 주소와 대상 포트를 하나의 규칙에 포함할 수 있습니다.
광범위하게 개방된 영구 포트 규칙을 제거합니다. 이는 더 엄격한 규칙을 적용하기 위한 준비 단계입니다. 그렇지 않으면 리치 규칙이 존재하더라도 광범위한 포트 규칙이 모든 소스의 접근을 허용하게 됩니다.
sudo firewall-cmd --permanent --remove-port=8088/tcp
문서 네트워크인 192.0.2.0/24에서만 8088/tcp로의 접근을 허용하는 리치 규칙을 추가합니다. 리치 규칙은 단순한 서비스나 포트 규칙만으로는 충분하지 않을 때, 예를 들어 소스 주소 제한이 필요할 때 유용합니다.
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.0.2.0/24" port port="8088" protocol="tcp" accept'
firewalld 를 리로드하여 영구 변경 사항을 적용합니다.
sudo firewall-cmd --reload
광범위한 포트가 더 이상 열려 있지 않은지 확인합니다. 예상 결과인 no는 서비스가 일반 포트 규칙에 의해 노출되지 않음을 의미합니다.
sudo firewall-cmd --query-port=8088/tcp || echo "broad port rule removed"
리치 규칙 목록을 확인합니다. 리치 규칙 출력은 소스 기반의 더 엄격한 규칙이 광범위한 포트 개방을 대체했음을 증명합니다.
sudo firewall-cmd --list-rich-rules
최종 방화벽 상태 감사
이 단계에서는 최종 상태를 감사합니다. 최종 검증은 중요한 관리 습관입니다. 서비스가 실행 중인지, SSH 가 여전히 허용되는지, 광범위한 포트가 닫혔는지, 그리고 제한된 규칙이 존재하는지 확인하십시오.
활성 영역을 나열합니다.
sudo firewall-cmd --list-all
영구 리치 규칙을 나열합니다.
sudo firewall-cmd --permanent --list-rich-rules
SSH 가 여전히 허용되는지 확인합니다.
sudo firewall-cmd --query-service=ssh
서비스 자체가 로컬에서 여전히 응답하는지 확인합니다. 로컬 루프백 접근은 서비스 프로세스를 검증하며, firewalld 는 인바운드 영역 트래픽을 별도로 제어합니다.
curl -s http://127.0.0.1:8088/
요약
firewalld 를 사용하여 호스트 방화벽 관리 실습을 완료했습니다. 기본 영역 검사, 네트워크 서비스 실행 확인, 런타임 포트 규칙 추가, 규칙 영구 설정, firewalld 리로드, 광범위한 포트 개방을 소스 제한 리치 규칙으로 교체, 그리고 최종 방화벽 상태 감사 과정을 수행했습니다.



