본문 바로가기

IT Lab/코드 크래프트

[FortiGate] 특정 서비스 포트 Idle Timeout(세션 만료) 개별 설정 및 글로벌 기본값 가이드

728x90
반응형

[FortiGate] 특정 서비스 포트 Idle Timeout(세션 만료) 개별 설정 및 글로벌 기본값 가이드

네트워크 보안 장비를 운영하다 보면 특정 애플리케이션이나 DB 연결 세션이 자꾸 끊어지거나, 반대로 사용하지 않는 세션이 너무 오래 남아 방화벽 리소스를 낭비하는 상황을 겪게 됩니다.

FortiGate 방화벽은 기본적으로 전체 시스템에 적용되는 글로벌 세션 타임아웃 값을 가지고 있지만, 특정 서비스(포트)나 방화벽 정책(Policy) 단위로 타임아웃을 개별 설정할 수 있는 강력한 기능을 제공합니다.

본 가이드에서는 FortiGate 방화벽에서 서비스 포트별 Idle Timeout을 설정하는 방법과 글로벌 기본값, 그리고 적용 우선순위에 대해 디테일하게 정리합니다.

fortigate idle timeout

 


1. FortiGate의 TCP Global Default Timeout 개요

별도의 설정을 하지 않았을 때 시스템 전체에 적용되는 기본값(Default)을 이해하는 것이 중요합니다.

FortiGate 방화벽에서 TCP 세션이 정상적으로 연결된 상태(ESTABLISHED)에서 데이터 교환(트래픽)이 없을 때 세션을 유지하는 글로벌 기본 타임아웃은 3,600초 (1시간)입니다.

즉, 1시간 동안 해당 포트로 아무런 패킷이 오가지 않으면 방화벽은 세션이 만료(Idle Timeout)된 것으로 간주하고 보안 및 리소스 확보를 위해 해당 세션을 강제로 종료(Drop)합니다.

 

💡 참고: TCP 세션 상태별 글로벌 타이머

단순히 연결된 상태뿐만 아니라, TCP의 3-Way Handshake 가동 및 종료 단계별로도 다음과 같은 글로벌 타이머가 작동합니다. (CLI 명령어 config system session-ttl에서 확인 가능)

  • tcp-timeout (ESTABLISHED): 3,600초 (1시간) — 정상 연결 후 대기 시간
  • tcp-halfopen-timer: 10초 — SYN 패킷만 보내고 응답(SYN-ACK)이 없는 상태
  • tcp-halfclose-timer: 120초 (2분) — 한쪽에서 FIN을 보내고 반대쪽 종료를 대기하는 상태
  • tcp-timewait-timer: 1초 — 양쪽 모두 종료 후 네트워크에 남아있을지 모르는 잔여 패킷을 위해 대기하는 시간

2. 특정 서비스 포트별 Idle Timeout 설정 방법

특정 장비(예: 내부 ERP, DB 서버, 장시간 유지가 필요한 데몬 프로그램 등)가 1시간 이상 트래픽이 없어도 세션을 유지해야 한다면, 아래의 두 가지 방법 중 하나로 타임아웃(Session TTL)을 개별 지정할 수 있습니다.

 

방법 A. 웹 관리자 페이지(GUI)에서 설정하기

가장 직관적인 방법으로, 해당 포트를 사용하는 '서비스 객체'의 속성을 변경하는 방식입니다.

  1. FortiGate GUI 로그인 후 좌측 메뉴에서 Policy & Objects > Services로 이동합니다.
  2. 타임아웃을 설정할 서비스를 선택하여 Edit(편집)하거나, 우측 상단의 Create New(새로 만들기) > Service를 클릭합니다.
  3. 서비스의 이름과 프로토콜/포트(예: TCP 8080)를 지정합니다.
  4. 설정 화면 하단(또는 Advanced Options)에서 Session TTL 항목을 찾습니다.
  5. 기본값은 Default로 되어 있으며, 이를 Specify(지정)로 변경합니다.
  6. 원하는 Idle Timeout 시간을 초(Seconds) 단위로 입력합니다. (예: 2시간 유지를 원하면 7200 입력)
  7. OK를 눌러 저장합니다.
  8. [중요] 변경하거나 생성한 서비스 객체를 실제 트래픽이 통과하는 방화벽 정책(Firewall Policy)의 서비스 항목에 적용해야만 최종 동작합니다.

방법 B. CLI(콘솔) 명령어로 설정하기

텍스트 기반의 CLI 환경이 편하거나, 대량의 스크립트 적용이 필요할 때는 아래 명령어를 사용합니다.

# 1. 커스텀 서비스 설정 메뉴 진입
config firewall service custom

    # 2. 타임아웃을 적용할 서비스 이름 입력 (기존 편집 또는 신규 생성)
    edit "My_Custom_Service_8080"

        # 3. 서비스 프로토콜 및 포트 지정 (예: TCP 8080번 포트)
        set tcp-portrange 8080

        # 4. Idle Timeout (Session TTL)을 초 단위로 지정 (예: 2시간 = 7200초)
        set session-ttl 7200

    next
end

참고: 만약 다시 글로벌 기본값으로 되돌리고 싶다면 set session-ttl 0으로 설정하면 됩니다. (0 = 글로벌 기본값 자동 추종)


3. 엔지니어가 반드시 알아야 할 핵심 주의사항 (우선순위)

FortiGate 방화벽은 세션 타임아웃(TTL)을 판단할 때 여러 단계의 설정을 참조합니다. 이때 적용되는 우선순위(Priority)를 반드시 숙지해야 트러블슈팅 시 혼선을 줄일 수 있습니다.

 

 

세션 타임아웃 적용 우선순위:

1순위: 방화벽 정책 단위 타임아웃 (config firewall policyset session-ttl)

2순위: 서비스 객체 단위 타임아웃 (config firewall service customset session-ttl)

3순위: 시스템 글로벌 타임아웃 (config system session-ttl)

 

 

즉, 서비스 객체(Service Object)에 아무리 타임아웃을 7,200초로 늘려놓았어도, 해당 트래픽이 통과하는 방화벽 정책(Policy) 자체에 별도의 타임아웃 값이 강제로 지정되어 있다면 정책의 설정이 최우선하게 됩니다.

따라서 특정 포트의 타임아웃이 의도대로 동작하지 않을 때는 서비스 객체뿐만 아니라 매핑된 방화벽 정책의 설정도 함께 점검해 보아야 합니다.

 


4. 요약 및 핵심 체크리스트

  • 글로벌 TCP 기본 타임아웃: 3,600초 (1시간)
  • 설정 단위: 항상 초(Seconds) 단위로 입력
  • 되돌리기: session-ttl 값을 0으로 주면 글로벌 기본값을 따름
  • 최종 점검: 서비스 객체를 변경한 후에는 반드시 실제 방화벽 정책(Policy)에 매핑되어 있는지 확인

 

 

 

읽어주셔서 감사합니다
티스토리 댓글과 공감은 로그인이 필요 없습니다.
로그인하시면 구독 가능합니다.

 

 

728x90
반응형