FortiGate FW 정책 조회 사이트 만들기

mimic·2026년 9월 9일
이전 제작한 Console WEB에 삽입되는 기능입니다!

👉 👩‍💻 보러가기 - [Ubuntu 26.04] Ansible + WEB UI


개요

목표

FortiGate 장비에서 콘솔 명령어나 번거로운 작업 없이 한 번 입력하면 한 눈에 필터링 정책을 확인할 수 있는 조회 기능을 만들고 싶었습니다.

사전 작업

httpx 패키지 설치

장비와 토큰을 이용하여 API 통신을 하려면 서버에 httpx 패키지가 필요합니다.

sudo -u ansible pipx inject ansible-core httpx


sudo -u ansible /opt/ansible/.local/share/pipx/venvs/ansible-core/bin/python -c "import httpx; print('httpx', httpx.__version__)"
===
httpx 0.28.1
===

사용 경로 미리 생성

sudo -u ansible mkdir -p /opt/ansible/fortigate

프롬프트

# FortiGate 방화벽 정책 트러블슈팅 웹 사이트 개발

## 1. 역할 및 목적
너는 네트워크 보안 전문가이자 풀스택 웹 개발자야. 사용자가 보유한 **FortiGate 100E, 300E** 장비의 방화벽 정책(Firewall Policy)을 분석하여, 특정 IP 및 Port 트래픽이 어느 장비의 어느 정책에서 허용되거나 차단(또는 매칭)되는지 쉽게 찾아주는 웹 애플리케이션을 개발해야 해.

---

## 2. 핵심 기능 요구사항

### ① 장비 관리 및 인증 구조
* **장비 목록 등록:** FortiGate 장비(100E, 300E 등)의 IP, 관리자 계정, API Key(또는 토큰)를 등록하고 관리할 수 있는 UI/DB 구조를 마련해 줘.
* **API 연동:** 등록된 장비와 REST API를 통해 통신하며, 방화벽 정책(Firewall Policy), 주소 객체(Address Object), 서비스 객체(Service Object) 정보를 안전하게 가져올 수 있는 인증 및 데이터 교환 구조를 구현해 줘.

### ② 스마트 정책 검색 엔진 (핵심 기능)
사용자가 Source 및 Destination 정보(IP, Port - Port는 생략 가능)를 입력하면, 등록된 FortiGate 장비들을 대상으로 트래픽이 매칭되는 정책을 역추적하는 검색 창을 만들어 줘.

* **입력 방식에 따른 동적 검색 처리:**
  * **단일 조건 (하나만 입력 시):** Src 또는 Dst 중 하나만 입력해도 관련된 모든 규칙을 출력할 것.
  * **다중 조건 (여러 개 입력 시):** Src와 Dst를 모두 입력하거나 여러 조건을 넣었을 때, **해당 트래픽 흐름을 정확히 아우를 수 있는(매칭되는) 규칙만** 정확하게 필터링할 것. (엉뚱한 규칙이 매칭되지 않도록 정확도 최우선 적용)

### ③ 결과 출력 규격
검색 결과는 사용자가 원인 장비와 정책을 직관적으로 파악할 수 있도록 아래 필수 정보를 포함하여 깔끔한 테이블(또는 카드 형태)로 출력해 줘.

* **[필수 출력 항목]**
  1. **장비명 (또는 IP):** 어느 FortiGate 장비인지 (예: FortiGate-100E)
  2. **정책 번호 (Policy ID):** 방화벽 정책 번호
  3. **네트워크 정보:** Source(출발지) 및 Destination(목적지) 설정 값
  4. **서비스/포트:** 적용된 Port 정보
  5. **액션 (Action):** Accept 또는 Deny 여부
* **[추가 권장 항목]**
  * 정책 이름(Name), 코멘트(Comment), 히트 카운트(Hit count) 등 트러블슈팅에 유용한 부가 정보

---

## 3. 기술 스택 및 구현 가이드
* **Backend:** Python (FastAPI 또는 Flask 권장) - FortiGate API 통신 및 IP/Subnet/Port 매칭 로직 처리
* **Frontend:** HTML5, Tailwind CSS, JavaScript - 직관적이고 반응 빠른 검색 UI 구성
* **로직 주의사항:** FortiGate의 Address Object(IP/Subnet/Wildcard)와 Service Object(Port 범위)를 정확하게 파싱하여 사용자가 입력한 IP:Port가 해당 객체 범위 내에 포함되는지(CIDR 계산 등) 정밀하게 판별하는 알고리즘을 구현해 줘.

결과물 확인

장비 관리

정책 조회


장비 연결

FortiGate REST API Token 발급

① REST API 관리자 생성

[FortiGate 웹 관리 화면 로그인 → System → Administrators → Create New → REST API Admin]

② 프로파일 지정

[Administrator Profile에 정책·주소·서비스 읽기 권한이 있는 프로파일 선택]
기존에 적당한 게 없으면 super_admin으로 해도 되지만, 보안상 읽기 전용 프로파일을 새로 만드는 게 좋습니다.

③ 토큰 복사

생성 완료 시 API 토큰이 딱 한 번만 화면에 표시됩니다. 복사해서 안전한 곳에 임시 보관합니다.

FortiGate에서 HTTPS 관리 접근 허용

FortiGate 터미널에 아래와 같이 입력하여 확인합니다.

# 확인
show system interface $관리용_인터페이스_이름
===
config system interface
    edit "$관리용_인터페이스_이름"
    	...
        set allowaccess ping https ssh snmp
        ...
    next
end
===

# 수정
config system interface 
	edit $관리용_인터페이스_이름
		set allowaccess ping https
    next
end

제 경우에는 이미 https 허용되어 있습니다. 관리용 WEB UI 접근이 된다면 보통 허용되어 있다고 보시면 됩니다.
허용을 위해 설정 수정 후에는 sync 시간이 약간 (1분 내) 소요됩니다. 기다려줍니다.

WEB UI는 [FortiGate 웹 관리 화면 로그인 → Network → Interfaces]로 확인할 수 있습니다

네트워크 경로 확인

FortiGate 장비까지 TCP 443 통신을 체크합니다. 대부분 방화벽 정책의 문제이나 간혹 VM으로 구축하여 라우팅의 문제인 경우 아래처럼 확인합니다.

# 장비와 연결되는 라우팅 확인
ip route get $FortiGate_IP
===
$FortiGate_IP via 192.168.0.1 dev enX4 src 192.168.0.100 uid 0
===

# 라우팅 문제인 경우 변경하여 테스트
ip route replace $FortiGate_IP/32 via $Gateway_IP dev $ethernet_명
profile
Raiju Hantu Goryo Obake

0개의 댓글