얼마 전 신규로 SSL VPN 용도로 장비를 구축했던 고객사 담당자님께서 Windows 특정 PC 인터넷 불가로 인해 문의를 주셨다. SSL VPN 그룹은 하나로 관리되고 non-split 구성이었다. (모든 인터넷 트래픽이 VPN으로 향함)

 

SSL VPN의 경우 다양한 사용자 PC 환경이 존재하고 충돌될 수 있는 프로그램도 (타 VPN 프로그램) 존재하기에 사용자 PC부터 방화벽까지 모든 구간을 확인해야 하므로 꽤나 번거롭고 실제로 이슈가 간헐적으로 발생한다.

(심지어 장애 시 업무 불가이기 때문에 꽤나 민감한 문제다)

 

심지어 책임 소재도 애매한데, 다른 사용자가 정상이라면 문제가 발생된 사용자의 환경 문제로 치부할 수 있어 정말 발생될 때마다 머리가 지끈거리는 문제라고 볼 수 있겠다.

 

사용자의 현상을 정리하면 아래와 같다.

1. SSL VPN 연결 시 인터넷 통신 불가

2. FortiClient를 통해 SSL VPN 연결은 정상

3. 테더링으로 연결 후 SSL VPN 사용 시에는 정상

 

장비 접속 전 예상되는 원인을 머리 속으로 정리했다.

1. Windows와 FortiClient 간 호환성 이슈

1. 해당 이슈로 라우팅 테이블을 정상적으로 받아오지 못함 (아직 해당 case는 본 적 없다)

2. 사용자 PC 내 FortiClient의 가상 인터페이스로 IP 할당이 되지 않음 (윈도우 KB2693643 업데이트 이슈)

https://community.fortinet.com/t5/FortiClient/Troubleshooting-Tip-VPN-SSL-connected-but-no-IP-address-in/ta-p/248143 

-> 해당 이슈일 경우 사용자 PC 환경은 동일하여 테더링으로 연결했을 때에도 증상이 동일했어야 한다. 그러므로 제외.

 

이외에도 정말 수많은 것이 떠오르기에 나중에 따로 정리하겠다..

2. 모종의 사유로 인한 FortiGate에서 패킷을 전달하지 않음

해당 이유도 테더링 시 정상이었기에 생각하기 어렵다.

3. 그럼 뭘까?

문제가 되는 사용자분께 접속 테스트를 요청드린 뒤, 무적의 패킷 스니핑으로 원인을 분석했다.

트래픽은 FortiGate로 정상적으로 도달했고, 몇몇 패킷도 정상 통과함을 확인했다.

 

다만 사용자 PC의 DNS 서버가 사설 IP로 설정되어 있는 점을 확인하였다.

(추측해보면 이 DNS 서버는 내부 DNS고, 어느정도 네트워크가 구성된 공간에서 원격 근무 중이라고 유추할 수 있다.)

 

원래 사용자의 환경으로 내부에서 진행되어야 할 DNS 통신이 FortiGate로 향하면서 발생된 문제임을 알 수 있다.

(사설 IP를 가진 내부 DNS이므로)

 

FortiGate의 SSL VPN 기본 설정은 "Same as client system DNS" 설정으로, 클라이언트의 (사용자 PC) DNS 설정을 따르도록 되어 있다. 그래서 이걸 "Specify" 옵션을 통해 ISP의 DNS 주소로 변경하도록 설정을 진행하였다.

* 위 이미지는 고객 방화벽이 아닌 사내 방화벽입니다.

 

이후 사용자 분께 다시 접속을 요청드리니 정상 접속을 확인하였다. 빠르게 해결할 수 있어 다행임에 안도하며 다시 일을 하러 가자..

 

 

FortiGate는 FortiOS 7.0 버전 이후부터 ACME (Automated Certificate Management Environment) 를 이용하여 Let's Encrypt와 연동 후 SSL 인증서를 무료로 사용할 수 있는 기능을 제공하고 있습니다. 인증서는 90일 단위로 갱신이 필요하며 FortiGate는 자동으로 갱신 처리를 진행하기에 계속 인증서를 사용할 수 있습니다.

 

Let's Encrypt란? 

무료 인증서 보급을 통해 HTTPS를 확산시키겠다는 취지로 시작된 비영리 프로젝트입니다. 

 

사용하기 위한 제약조건은 아래와 같습니다.

  1. FortiGate는 공인 IP를 가지고 있어야 하며, 그 공인 IP와 매핑된 도메인이 필요합니다. (A 레코드)
  2. ACME 인터페이스는 인터넷 구간과 연동이 될수 있어야 하며, 80 (HTTP) 또는 443 (HTTPS) 포트에 대한 VIP 설정 (NAT, 포트포워딩) 이 없어야 합니다.
  3. SAN 필드가 매핑된 도메인으로 자동으로 설정되어 편집이 불가하기에 와일드카드도 사용 불가하며 여러 개의 SAN을 따로 추가할 수 없습니다.

Let's Encrypt를 통해 인증서를 발급받고 나면 할 수 있는 내용은 아래와 같습니다.

  1. 방화벽의 웹 인증서를 사설 인증서 -> Let's Encrypt로 발급받은 공인 인증서로 변경함으로서 웹 UI 접근 시 발생되는 보안 경고창 제거 가능
  2. FortiClient를 통한 SSL VPN 접속 시, 사설 인증서 사용으로 인해 사용자 연결 단계 40%에서 표출되는 신뢰할 수 없는 인증서 팝업 제거 가능
  3. HTTPS -> HTTP 리버스 프록시 구성을 통해 내부 서버에 대한 HTTP (비암호화) 통신을 HTTPS로 암호화 가능

 

그럼, 아래 과정을 통해 Let's Encrypt를 통해 인증서를 발급받고, 실제로 활용하는 방법에 대해서 다루도록 하겠습니다.

 

1. Let's Encrypt를 통해 FortiGate에서 인증서 발급

A. GUI에서 인증서 창 활성화를 위해 System -> Feature Visibility -> Certificates, Load Balance 활성화 후 "Apply' 클릭

B. System -> Certificates -> Create/Import -> Certificate 클릭

 

C. Use Let's Encrypt 클릭

D. 아래 정보들을 적당히 입력한 후, Create 버튼을 클릭합니다.

1) Certificate name: 인증서 이름을 자유롭게 입력

2) Domain: 도메인 주소 입력 (A 레코드 등록 필요) ex) abc.co.kr

3) Email: 관리 이메일 입력 필요 (적당히 입력)

 

E. ACME 인터페이스는 외부 인터페이스 (wan) 으로 설정한 뒤 대기

F. 문제가 없을 경우 시간이 흐른 뒤 정상적으로 생성되었다는 메세지 표출

2. 발급받은 인증서를 FortiGate에 적용

1) SSL VPN에 적용

  • VPN -> SSL-VPN Settings -> Server Certificate를 발급받은 인증서로 변경 -> Apply 버튼을 눌러 적용

 

2) 웹 GUI에 적용

  • System -> Settings -> HTTPS server certificate를 발급받은 인증서로 변경 -> Apply 버튼을 눌러 적용

3. 적용 테스트

1) SSL VPN

  • FortiClient의 연결 설정 창에서 IP 대신 방화벽과 매핑한 도메인 정보를 입력한 뒤, 40%에서 보안 경고창이 표출되는지 확인

2) 관리 웹 UI 접속

  • 매핑한 도메인을 통해 ex)https://abc.co.kr 접속 시도한 후 보안 경고창이 표출되는지 확인

 

*** HTTPS (443) 포트를 포트포워딩으로 사용하고 있을 경우

HTTP (80) 또는 HTTPS (443) 포트를 ACME 데몬이 사용하는데, 외부 HTTPS (443) 포트에 대한 VIP 객체가 있을 경우 즉시 HTTP (80) 포트로 ACME 데몬이 시도하게 하기 위해 아래 설정을 진행합니다.

 

A. System -> Settings -> Telnet port를 443으로 변경 

 

위 과정을 거치게 되면 ACME 데몬은 HTTPS (443) 포트 대신 HTTP (80) 포트로 즉시 시도하게 됩니다.

참고로 텔넷 포트로 설정한 이유는 보안 상의 이유로 잘 쓰지 않는 프로토콜이기 때문입니다.

 

참고 링크

https://docs.fortinet.com/document/fortigate/7.0.0/new-features/822087/acme-certificate-support

https://community.fortinet.com/t5/FortiGate/Technical-Tip-Let-s-Encrypt-failing-to-provision-due-to-VIP/ta-p/265830

어제.. 일요일 방화벽 교체 작업 진행 중 DHCP 관련 처음 보는 증상이 발생하여 처리 내역을 공유합니다.

 

1. 작업 내역

- 노후화 방화벽 교체 작업

# 기존: FG-100D (v5.6.13) -> 신규: FG-100F (v7.2.10)

 

2. 증상

- 방화벽 교체 (FG-100D -> FG-100F) 이후 특정 포트에서 DHCP IP 할당 불가 이슈 발생.

 

3. 확인 내역

1) port 67로 패킷 스니핑하여 DHCP Discover 패킷에 대해 정상적으로 방화벽이 응답을 주는지 확인

dia sni pack any 'port 67' 4

 

50.424415 internal in 0.0.0.0.68 -> 255.255.255.255.67: udp 300

 

위 패킷만 확인되고, 방화벽에서의 응답 패킷이 확인되지 않음.

 

2) DHCP 설정 이상 없고 임대할 IP가 충분함에도 방화벽이 응답을 주지 않는걸로 파악, dhcps debug 진행

dia debug application dhcps -1
dia debug enable

 

[debug]locate_network prhtype(1) pihtype(1)

[warn]Can't locate subnet in shared network of packet and packet is not a DHCPREQUEST and htype(1) != intf htype(1)..dropping

[debug]locate_network prhtype(1) pihtype(1)

 

??? 이게 뭐지. 방화벽에서 dropping 하는 Debug를 확인. 해당 내역 확인 결과 언제 설정된건지 모를 DHCP vci 패턴 매칭 설정으로 인한 이슈로 확인됨.

 

config system dhcp server
edit 2
    set dns-service default
    set ntp-service default
    set default-gateway 192.168.0.1
    set netmask 255.255.255.0
    set interface "internal"
    config ip-range
    	edit 1
        	set start-ip 192.168.0.2
            set end-ip 192.168.0.254
        next
    end
 set timezone-option default
 set vci-match enable   --> 문제의 Config 부분
 set vci-string "FortiSwitch" "FortiExtender" --> 문제의 Config 부분
 next

 

config system dhcp server

edit 2

set vci-match disable

end

 

명령어 입력 이후 정상 IP 할당 확인됨.

 

분명 Config 그대로 마이그레이션했는데 왜 이게 포함되었을까?

- 기존 장비 Config 확인 시에 해당 Config는 확인되지 않음.

- 펌웨어 버전도 v7.2.10 그대로 올렸기에 업그레이드 과정도 없었음

- 기존 장비 Config를 부분마다 스크립트 업로드로 올렸기에 이상하게 넣었을 리도 없음

- 다른 포트는 안들어가있으니 default로 넣어버리거나 하는 건 아닌 듯..

 

아무튼 저게 왜 들어갔는지는 의문이나 빠르게 해결 완료.

 


내용 추가 (24.10.16)

 

곰곰히 생각해보니 문제의 vci Config는 장비에 Default로 포함된 Fortiswitch 연동 관련 DHCP 컨피그입니다.

고객사의 DHCP ID와 Default 설정으로 된 FortiSwitch 연동을 위한 ID가 겹치면서 설정이 덮어씌워지며 발생된 증상으로 보입니다.

 

따라서, DHCP 서버 설정 관련하여 마이그레이션을 할 때, 모든 Default DHCP Server 설정을 지우고서 마이그레이션 하시는 것이 좋을 것 같습니다.

 

 

 

참고 링크

https://community.fortinet.com/t5/FortiGate/Technical-Tip-Devices-are-unable-to-get-an-IP-address-from-DHCP/ta-p/230320

 

Devices are unable to get an IP address from DHCP server

This article gives information about the vci-match enable/disable option.ScopeFortiGate.Solution Connected devices are not able to get an IP address from DHCP server configured on FortiGate's interface and get the following error. SC-FG100F # [debug]locate

community.fortinet.com

https://docs.fortinet.com/document/fortigate/7.2.2/administration-guide/59285/vci-pattern-matching-for-dhcp-assignment

어느 정도 FortiGate 장비를 다뤄 보신 분은 잘 아시겠지만, 혹시라도 막히시는 분이 계실 수도 있을 것 같아, 마침 작업 할일이 생겨 변환 방법을 간단히 정리합니다.

 

1. 장비에 로그인 이후, 우측 상단의 >_ 아이콘을 클릭하여 CLI 콘솔을 엽니다. (또는 SSH, 콘솔 케이블 통해 접근)

 

2. 아래 명령어를 순차적으로 입력합니다.

con sys interface
edit fortilink
set fortilink disable
end

con sys settings
set opmode transparent
set manageip <IP/서브넷> ex) 192.168.1.99/24
end

 

3. 정상적으로 모드 변경이 확인됩니다.

 

* 주의사항

위 fortilink disable 과정을 거치지 않으면 아래 에러 메세지가 발생하니 꼭 해당 과정을 거치도록 합니다.

Cannot Change to Transparent mode because this vdom contains managed switches and switchctl-vlans.

Please clear managed-switches, disable fortilink and retry.

node_check_object fail! for opmode transparent

 

value parse error before 'transparent'

Command fail. Retrun code -7610

+ Recent posts