상용 NGFW HW 아키텍처

Fortinet NP7/CP9/SoC5, Palo Alto SP3 FPGA, Check Point SecureXL/Maestro, Juniper Express Path 상용 NGFW 하드웨어 아키텍처 비교, SSL Inspection 오프로드 분류, 암호화 오프로드 아키텍처 3분류, 하드웨어 이벤트 스케줄러(DLB/SSO), Linux 커널 기반 NGFW, 벤더별 TLS 핸드셰이크·암호화·성능 비교, 배포 아키텍처 패턴, HA 구성, TLS 1.3/ECH 대응, PQC 영향, RFC 9411 성능 측정 방법론

전제 조건: NGFW HW 오프로드 문서의 오프로드 아키텍처 3대 유형과 데이터 플레인 개념을 먼저 이해하세요.

상용 NGFW는 암호화·DPI 가속을 위해 크게 두 가지 하드웨어 처리 모델을 사용합니다:

구분인라인(Inline) 처리룩어사이드(Lookaside) 처리
패킷 경로패킷이 전용 HW를 통과하며 처리 (NIC → ASIC/FPGA → NIC)패킷을 별도 HW 엔진으로 보내고 결과를 돌려받음 (CPU ↔ 코프로세서)
지연최소 — 데이터 경로에 HW가 직접 위치복사/전송 오버헤드 발생 — PCIe 왕복
적용 예세션 오프로드, NAT rewrite, IPSec inline cryptoSSL/TLS 가속, AV 패턴 매칭, 압축
장점라인레이트 처리, CPU bypass 가능범용 CPU와 독립적 확장, 유연한 알고리즘 지원
단점ASIC/FPGA 설계 복잡, 새 프로토콜 지원 느림PCIe 대역폭 병목, 배치 처리 필요

대부분의 상용 NGFW는 두 모델을 혼합(Hybrid)하여 사용합니다. 다만 실무에서는 L4 세션 전달용 fast pathSSL Inspection용 복호화 경로를 분리해서 봐야 합니다. 같은 장비라도 세션 포워딩은 inline인데, SSL/TLS 검사는 CPU중심 lookaside 또는 SoC중심 lookaside일 수 있습니다. 아래 표는 공개 자료 기준으로 이를 정리한 것입니다:

기능FortinetPalo AltoCheck PointJuniperLinux NGFW
세션 오프로드Inline (NP7/NP6 계열)Inline (SP3 dataplane fast path)Inline (SecureXL 커널)Inline (NP Express Path)Inline (eSwitch FDB)
NAT RewriteInline (NP7)Inline (SP3 세션 경로)Inline (SecureXL)Inline (NP)Inline (eSwitch / flowtable)
IPSec 데이터 경로Inline NP + crypto 보조 경로주로 CPU중심 lookaside주로 CPU중심 lookasideLookaside (SPC3 카드)Inline (NIC crypto) / Lookaside (QAT)
SSL/TLS Inspection보안 프로세서/SoC inspection pathCPU중심 lookaside (SP3 내부 통합)CPU중심 lookasideLookaside (SPC3 SSL Proxy)프록시 + kTLS/QAT 혼합
평문 DPI / App-IDCPU + 콘텐츠 가속기SP3 single-pass CPU dataplaneCoreXL FW Instanceflowd (CPU)Suricata / nDPI
처리 모델 요약Inline NP + inspection용 보안 프로세서/SoCInline 세션 fast path + CPU중심 decrypt/DPISW inline fast path + CPU중심 decryptInline NP + Lookaside SPC3Inline SmartNIC + userspace lookaside
Inline vs Lookaside 핵심 판별법: 패킷이 해당 HW를 반드시 통과해야 전달되면 inline, CPU가 패킷 데이터를 별도 엔진에 복사·위임하고 결과를 받으면 lookaside입니다. Inline은 라인레이트에 유리하고, lookaside는 CPU와 독립적으로 확장할 수 있습니다. 동일 벤더라도 기능에 따라 inline과 lookaside를 혼합하는 것이 일반적입니다.
공개 자료 해석 주의: Fortinet, Palo Alto Networks, Check Point, Juniper 모두 내부 버스 구성과 개별 암호화 엔진 배치를 전부 공개하지는 않습니다. 이 절의 분류는 공개된 하드웨어 가속 문서, 데이터시트, 운영 가이드에서 드러나는 제어면/데이터면 계약을 기준으로 한 해석이며, 특정 보드 리비전이나 모델군에서는 구현이 달라질 수 있습니다.

벤더별 SSL Inspection 오프로드 분류

SSL/TLS Inspection은 단순히 "암호화 가속" 하나로 끝나지 않습니다. 실제로는 ① TLS 핸드셰이크와 키 교환, ② 레코드 계층 AES-GCM/ChaCha20 암·복호화, ③ 평문 DPI와 정책 엔진, ④ 인증서/개인키 보관이 서로 다른 자원에 배치됩니다. 벤더별 차이는 바로 이 네 단계가 어디서 실행되는지에 있습니다.

벤더TLS 핸드셰이크/키 교환TLS 레코드 암·복호화평문 DPI 위치공개 자료로 읽히는 분류실무적 의미
Fortinet보안 프로세서 또는 SoC inspection 경로가 보조보안 프로세서/inspection 엔진이 보조CPU + 콘텐츠 가속기고성능 chassis는 inline NP + SoC/보안 프로세서 lookaside, 브랜치 SoC 장비는 SoC중심 hybridDeep Inspection 세션은 NP fast path에서 빠지고 inspection 경로로 고정됩니다.
Palo Altodataplane CPU 자원 중심dataplane CPU 자원 중심SP3 single-pass CPU dataplaneinline 세션 fast path + CPU중심 lookaside전용 SSL ASIC보다 dataplane 코어 수와 메모리 구조가 Decryption 처리량을 좌우합니다.
Check PointCoreXL CPU / OpenSSL 경로CoreXL CPU / AES-NICoreXL FW InstanceSW inline fast path + CPU중심 lookasideSecureXL은 비암호화 fast path에 효과적이지만 HTTPS Inspection은 Firewall Path를 강제합니다.
JuniperSPC3 서비스 오프로드 카드SPC3 서비스 오프로드 카드flowd (CPU)inline NP + 카드형 lookaside슬롯 기반 확장으로 SSL CPS를 늘릴 수 있지만, 검사 세션은 Express Path에 남지 않습니다.
Linux NGFW프록시 프로세스 + 선택적 QATQAT lookaside 또는 NIC kTLSSuricata / nDPI / 프록시 프로세스구성 가능한 hybrid표준 커널 인터페이스는 풍부하지만 상용 장비처럼 단일 통합 inspection ASIC은 없습니다.
벤더별 SSL Inspection 경로 분해: 세션 fast path와 inspection 경로는 분리해서 봐야 합니다 벤더 세션 fast path 핸드셰이크 / 인증서 레코드 암·복호화 평문 DPI 분류 Fortinet 모델군별 차이 NP7 / NP6 inline 세션 전달 보안 프로세서 / SoC 키 교환·MITM 보조 inspection crypto path 레코드 암·복호화 CPU + 콘텐츠 가속기 App Control / AV / IPS SoC/보안 hybrid Palo Alto SP3 dataplane fast path 세션·NAT inline dataplane CPU 키 교환·인증서 dataplane CPU AES-NI / crypto lib SP3 single-pass App-ID / IPS / AV CPU centric Check Point SecureXL / CoreXL SecureXL 비암호화 fast path CoreXL CPU 핸드셰이크 CoreXL CPU 레코드 복호화 Firewall Path IPS / HTTPS Inspection CPU centric Juniper NP + SPC3 NP / Express Path 세션 전달 SPC3 TLS 핸드셰이크 SPC3 레코드 암·복호화 flowd 평문 보안 검사 카드형 lookaside Linux 구성형 스택 eSwitch / flowtable EST fast path 프록시 + OpenSSL / QAT 키 교환·인증서 NIC kTLS / QAT 레코드 처리 Suricata / nDPI 평문 DPI 구성형 hybrid 핵심 관찰: SSL Inspection 세션은 모든 벤더에서 세션 fast path와 다른 경로를 타며, 이 경로가 곧 실제 Decryption 처리량 상한을 결정합니다

암호화 오프로드 아키텍처 3분류

앞선 표에서 lookaside를 단일 카테고리로 분류했지만, 실제 구현을 살펴보면 lookaside 방식은 가속기의 물리적 위치와 버스 토폴로지에 따라 크게 두 가지로 나뉩니다. CPU중심 룩어사이드(CPU-Centric Lookaside)는 PCIe 카드 형태의 외장 가속기를, SoC중심 룩어사이드(SoC-Centric Lookaside)는 SoC 다이 내장 크립토 엔진을 사용합니다. 여기에 데이터 경로 자체에 암호화를 삽입하는 인라인(Inline) 방식까지 포함하면, 암호화 오프로드는 3분류로 정리됩니다.

각 아키텍처의 핵심 차이는 패킷 데이터가 암호화 엔진에 도달하는 경로결과가 반환되는 지연 시간입니다. 기존 전용 크립토 가속기 섹션의 HW 스펙표와 함께 참조하면 전체 그림을 파악할 수 있습니다.

CPU중심 룩어사이드(CPU-Centric Lookaside)

CPU중심 룩어사이드는 CPU가 호스트 메모리에 있는 패킷 데이터를 PCIe 버스를 통해 외장 가속기 카드에 전송하고, 가속기가 처리한 결과를 다시 PCIe DMA로 돌려받는 모델입니다. CPU가 submission ring에 작업을 큐잉하면, 가속기가 비동기로 처리한 뒤 completion ring을 통해 완료를 통보합니다.

호스트 시스템 (Host) CPU crypto API 호출 호스트 메모리 패킷 버퍼 (DMA 영역) Submission Ring 작업 디스크립터 큐 Completion Ring 완료 통보 큐 PCIe Bus (Gen4/5 x16) PCIe 가속기 카드 AES-GCM 엔진 대칭키 처리 RSA/ECC 엔진 비대칭키 처리 내부 SRAM + DMA 컨트롤러 PCIe 인터페이스 DMA Req DMA Resp ① 작업 제출 ④ 완료 수신 ② DMA 전송 ③ HW 처리

대표 하드웨어:

커널 crypto API에 등록된 가속기의 우선순위 확인:

# 등록된 암호화 알고리즘과 우선순위 확인
cat /proc/crypto | grep -A4 "name.*gcm(aes)"
# 출력 예시: driver = qat_aes_gcm, priority = 4001
# 우선순위가 높을수록 먼저 선택됨 (SW fallback은 보통 100~200)

# QAT 디바이스 상태 확인
cat /sys/kernel/debug/qat_4xxx_0000:6b:00.0/fw_counters
/* CPU중심 룩어사이드: 비동기 콜백 패턴 */
struct aead_request *req = aead_request_alloc(tfm, GFP_ATOMIC);
aead_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
                          crypto_done_callback, &result);
aead_request_set_crypt(req, src_sg, dst_sg, payload_len, iv);
aead_request_set_ad(req, assoclen);

ret = crypto_aead_encrypt(req);
if (ret == -EINPROGRESS || ret == -EBUSY) {
    /* 가속기가 비동기 처리 중 — completion 대기 */
    wait_for_completion(&result.completion);
    ret = result.err;
}
/* QAT: PCIe DMA 왕복 지연 ~10-50μs 포함 */
CPU중심 룩어사이드 장단점
장점: ① PCIe 슬롯으로 독립 확장 가능 — CPU 교체 없이 가속 능력 증대 ② SR-IOV로 VM별 격리된 VF 제공 — 클라우드/가상화 환경에 유리 ③ 대용량 RSA/ECDHE 핸드셰이크 처리에서 CPU 부하 90%+ 절감
단점: ① PCIe 왕복 지연(~10-50μs)이 패킷당 추가 — 소형 패킷 다수 시 병목 ② DMA 매핑/해제 오버헤드 — dma_map_single() 호출 비용 ③ 별도 전원·냉각·슬롯 필요 — 임베디드/엣지에 부적합

SoC중심 룩어사이드(SoC-Centric Lookaside)

SoC중심 룩어사이드는 크립토 엔진이 SoC 다이 내부에 통합되어 있으며, CPU와 내부 버스(AXI/AHB/ACE)로 직접 연결됩니다. PCIe를 거치지 않으므로 DMA 왕복 지연이 크게 줄어들고, 별도 전원·슬롯이 필요 없어 임베디드·네트워크 장비에 널리 사용됩니다. CPU가 Job Ring(또는 Command Ring)에 작업을 큐잉하면, 내장 크립토 엔진이 내부 버스를 통해 메모리에서 직접 데이터를 읽어 처리합니다.

SoC 다이 (System-on-Chip) CPU 클러스터 ARM Cortex-A72 × 4~16 또는 MIPS64 / OCTEON TX2 공유 메모리 L3 캐시 + DDR 컨트롤러 Job Ring 디스크립터 저장 크립토 엔진 CAAM / OCTEON CPT AES·SHA·RSA·ECC HW 코어 내부 인터커넥트 (AXI / ACE-Lite / AMBA) Job Ring (입력) 작업 디스크립터 큐 Job Ring (출력) 완료 디스크립터 큐 네트워크 포트 SoC 내장 GbE / 10GbE ① 작업 제출 ② HW 처리 ③ 완료 내부 버스 지연: ~1-5μs (PCIe 대비 5-10배 짧음)

대표 하드웨어:

Device Tree 바인딩 예시 (NXP CAAM):

/* NXP Layerscape SoC — CAAM Device Tree 바인딩 */
crypto@1700000 {
    compatible = "fsl,sec-v5.4", "fsl,sec-v5.0",
                 "fsl,sec-v4.0";
    reg = <0x0 0x1700000 0x0 0x100000>;
    interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
    #address-cells = <1>;
    #size-cells = <1>;
    ranges = <0x0 0x0 0x1700000 0x100000>;

    /* Job Ring 0 */
    jr0: jr@10000 {
        compatible = "fsl,sec-v5.4-job-ring",
                     "fsl,sec-v4.0-job-ring";
        reg = <0x10000 0x10000>;
        interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
    };
    /* Job Ring 1 */
    jr1: jr@20000 {
        compatible = "fsl,sec-v5.4-job-ring";
        reg = <0x20000 0x10000>;
        interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
    };
};
SoC중심 룩어사이드 장단점
장점: ① 초저지연(1-5μs) — PCIe 왕복 불필요, 내부 버스 직접 접근 ② 전력 효율 — 별도 PCIe 카드 전원 불필요, 임베디드/엣지에 최적 ③ BOM 절감 — SoC 가격에 포함, 추가 부품 불필요
단점: ① 확장 불가 — SoC에 고정된 처리량이 상한, HW 교체 없이 증설 불가 ② 처리량 한계 — 서버급 가속기(100-200 Gbps) 대비 1-20 Gbps 수준 ③ SoC 벤더 종속 — 드라이버와 DT 바인딩이 벤더별로 상이

인라인 암호화(Inline Crypto)

인라인 암호화는 가속기가 네트워크 데이터 경로(data path) 자체에 위치하여, 패킷이 NIC/SmartNIC을 통과하는 과정에서 암호화·복호화가 수행됩니다. CPU는 암호 키 설정과 SA(Security Association) 구성만 담당하고, 실제 패킷 데이터에는 전혀 관여하지 않습니다. IPSec, MACsec, kTLS(커널 TLS) 3가지 프로토콜이 인라인 오프로드의 대표적 사례입니다.

Wire In NIC / SmartNIC (Inline Crypto Engine) IPSec 경로 ESP 암호화/복호화 + Anti-replay — xfrm offload 200 Gbps MACsec 경로 IEEE 802.1AE L2 암호화 — SecTAG + ICV 처리 라인레이트 kTLS 경로 TLS 레코드 암호화 — sendfile() zero-copy 지원 100 Gbps 컨트롤 플레인(Control Plane) SA/키 설정만 CPU에서 수행 — 데이터 경로 미관여 Wire Out 호스트 CPU 키 교환·SA 관리만 키·SA 설정 패킷 데이터가 호스트 메모리를 거치지 않음 → Zero-copy, CPU 부하 0%

대표 하드웨어:

인라인 IPSec 오프로드 설정 확인(상세는 kTLS 오프로드 섹션 참조):

# NIC의 inline crypto 기능 확인
ethtool -k eth0 | grep -E "esp-hw-offload|tls-hw"
# esp-hw-offload: on        ← IPSec inline 지원
# tls-hw-tx-offload: on     ← kTLS TX inline 지원
# tls-hw-rx-offload: on     ← kTLS RX inline 지원

# xfrm (IPSec) offload 설정 — SA에 offload 플래그 추가
ip xfrm state add src 10.0.0.1 dst 10.0.0.2 \
    proto esp spi 0x100 reqid 1 mode tunnel \
    aead "rfc4106(gcm(aes))" 0x$(xxd -l 20 -p /dev/urandom) 128 \
    offload dev eth0 dir out    # ← inline offload 핵심 옵션

# offload 상태 확인
ip xfrm state show | grep -A2 offload
인라인 암호화 장단점
장점: ① Zero-copy — 패킷 데이터가 호스트 메모리를 거치지 않아 CPU 부하 0% ② 라인레이트 — NIC ASIC이 와이어 속도로 처리, 100-400 Gbps 가능 ③ 극소 지연(~1μs 이하) — 데이터 경로에 직접 삽입
단점: ① 프로토콜 고정 — NIC 펌웨어가 지원하는 프로토콜(IPSec/MACsec/kTLS)만 가능 ② SA 수 제한 — NIC TCAM/메모리에 따라 SA 수천~수만 개 상한 ③ SSL Inspection 불가 — TLS 핸드셰이크·DPI는 인라인으로 처리할 수 없음 (lookaside 필수)

3종 아키텍처 종합 비교

CPU중심 룩어사이드 CPU PCIe Bus PCIe 가속기 QAT / NITROX 지연: 10-50μs 처리량: 100-200 Gbps 확장: PCIe 슬롯 추가 SoC중심 룩어사이드 CPU AXI / AMBA 내장 크립토 CAAM / OCTEON 지연: 1-5μs 처리량: 1-100 Gbps 확장: SoC 교체 필요 인라인 암호화 CPU (미관여) NIC Inline Engine ConnectX-7 / E810 IPSec · MACsec · kTLS 데이터 경로 직접 처리 지연: <1μs 처리량: 라인레이트 확장: NIC 교체/추가 Wire Wire 지연 시간 스펙트럼 <1μs 1-5μs 10-50μs 50-200μs (SW) Inline SoC Lookaside CPU Lookaside SW Fallback 빠름 ← → 느림
항목CPU중심 룩어사이드SoC중심 룩어사이드인라인 암호화
가속기 위치PCIe 슬롯 (외장)SoC 다이 내부NIC/SmartNIC 데이터 경로
버스PCIe Gen4/5AXI / AMBA / ACEN/A (와이어 직접)
지연 시간10-50μs1-5μs<1μs
대칭키 처리량100-200 Gbps1-100 Gbps라인레이트 (100-400 Gbps)
CPU 오버헤드중간 (DMA 매핑 + 콜백)낮음 (Job Ring 관리)거의 없음 (SA 설정만)
프로토콜 유연성높음 (모든 crypto API 알고리즘)중간 (SoC 지원 알고리즘)낮음 (IPSec/MACsec/kTLS 고정)
확장성PCIe 슬롯 추가SoC 교체 필요NIC 교체/추가
대표 HWIntel QAT 8970/4xxx, NITROX VNXP CAAM, OCTEON CPT, CryptoCellConnectX-6 Dx/7, E810, Pensando DSC
주요 Linux 드라이버qat_4xxx, nitroxcaam, octeontx2-cpt, ccreemlx5_core, ice
주요 용도SSL 프록시, HSM, 대량 핸드셰이크임베디드 라우터, CPE, IoT 게이트웨이데이터센터 IPSec VPN, CDN kTLS

하드웨어별 아키텍처 분류 상세:

하드웨어아키텍처 분류버스대칭키 처리량RSA-2048 ops/sLinux 드라이버
Intel QAT 8970CPU중심 LookasidePCIe Gen3 x16200 Gbps140Kqat_c62x
Intel QAT 4xxx (SPR 내장)CPU중심 LookasidePCIe 도메인100 Gbps100Kqat_4xxx
Marvell NITROX VCPU중심 LookasidePCIe Gen3 x16100 Gbps100Knitrox
NXP CAAMSoC중심 LookasideAXI (SoC 내부)10-20 Gbps10Kcaam
Marvell OCTEON CPTSoC중심 LookasideAMBA (SoC 내부)100 Gbps50Kocteontx2-cpt
Broadcom SPUSoC중심 LookasideAXI (SoC 내부)10 Gbps10Kbcm_crypto_spu
ARM CryptoCellSoC중심 LookasideAHB (SoC 내부)1-5 Gbps5Kccree
NVIDIA ConnectX-7InlineN/A (와이어)400 GbpsN/Amlx5_core
Intel E810InlineN/A (와이어)100 GbpsN/Aice
AMD Pensando DSC-200InlineN/A (와이어)200 GbpsN/Aionic

리눅스 커널 Crypto API 매핑

리눅스 커널의 다양한 암호화 서브시스템은 3종 아키텍처를 각각 다른 경로로 활용합니다. 아래 표는 주요 서브시스템별 매핑을 보여줍니다:

서브시스템CPU중심 LookasideSoC중심 LookasideInline
crypto API
/proc/crypto
qat_aes_gcm (pri=4001)
비동기 aead/skcipher
caam-aes-gcm (pri=3000)
비동기 Job Ring
미사용 (데이터 경로 직접)
xfrm (IPSec)
ip xfrm
crypto API 경유
SW ESP + HW 암호화
crypto API 경유
SW ESP + HW 암호화
xfrm_offload
NIC이 ESP 전체 처리
kTLS
setsockopt(SOL_TLS)
미사용 (SW kTLS만)미사용 (SW kTLS만)tls_device_offload
NIC TX/RX 오프로드
MACsec
ip macsec
미사용미사용macsec_offload
NIC L2 암호화
dm-crypt
디스크 암호화
crypto API 경유crypto API 경유미사용

커널 crypto API의 우선순위 기반 자동 선택(fallback chain):

# /proc/crypto에서 동일 알고리즘의 우선순위 확인
# 우선순위가 높은 드라이버가 자동 선택됨
$ grep -B1 -A5 "gcm(aes)" /proc/crypto

name         : gcm(aes)
driver       : qat_aes_gcm           # ← QAT 가속기 (CPU중심 Lookaside)
priority     : 4001                    # ← 최우선
async        : yes

name         : gcm(aes)
driver       : caam-gcm-aes           # ← CAAM (SoC중심 Lookaside)
priority     : 3000
async        : yes

name         : gcm(aes)
driver       : generic-gcm-aesni      # ← CPU AES-NI (SW fallback)
priority     : 400
async        : no

# Fallback chain: QAT(4001) → CAAM(3000) → AES-NI(400) → generic(100)
# 가속기 장애 시 자동으로 다음 우선순위 드라이버로 전환

암호화 완료 모델: 동기·비동기·폴링

커널 crypto API에서 암호화 요청이 HW 가속기에 제출된 뒤 결과를 수신하는 방식은 크게 3가지로 나뉩니다: 동기(Synchronous), 비동기 인터럽트(Asynchronous Interrupt), 비동기 폴링(Asynchronous Polling). 각 모델은 지연 시간, CPU 활용률, 처리량 특성이 근본적으로 다르며, NGFW의 성능 프로파일을 결정하는 핵심 요소입니다.

동기 처리(Synchronous)

동기 모델에서 CPU는 암호화 함수를 호출한 뒤 결과가 반환될 때까지 블로킹됩니다. CPU 자체의 AES-NI/ARMv8-CE 명령어로 처리하는 경우가 대표적이며, 함수 호출과 반환이 동일 컨텍스트에서 완료됩니다.

/* 동기(Synchronous) 처리 — CPU 명령어(AES-NI) 직접 실행 */
struct skcipher_request *req = skcipher_request_alloc(tfm, GFP_KERNEL);
skcipher_request_set_crypt(req, src_sg, dst_sg, len, iv);

/* 콜백 없이 직접 호출 — 반환 시 이미 완료 */
ret = crypto_skcipher_encrypt(req);
/* ret == 0: 즉시 완료 (동기)
 * CPU AES-NI의 경우 /proc/crypto에서 async: no 표시 */

if (ret == 0) {
    /* 암호화 완료 — 결과가 dst_sg에 이미 기록됨 */
    process_encrypted_packet(dst_sg);
}
skcipher_request_free(req);
동기 모델의 특성: CPU가 암호화 연산을 직접 실행하므로 함수 호출 오버헤드 최소(DMA 매핑·인터럽트 없음)이지만, 연산 동안 해당 CPU 코어가 100% 점유됩니다. /proc/crypto에서 async: no로 표시되는 알고리즘이 이에 해당합니다. 소형 패킷(64-256B)에서는 HW 가속기의 DMA 셋업 오버헤드보다 빠를 수 있습니다.
비동기 인터럽트 처리(Asynchronous Interrupt-Driven)

비동기 인터럽트 모델은 커널 crypto API에서 가장 일반적인 HW 가속기 활용 패턴입니다. CPU가 요청을 가속기의 submission ring에 큐잉하면 즉시 반환되고, 가속기가 처리를 완료하면 인터럽트(IRQ)를 발생시켜 등록된 콜백 함수를 호출합니다.

암호화 완료 모델 3종 타임라인 비교 요청 제출 HW 처리 중 완료 ① 동기 (AES-NI) CPU 블로킹 (AES-NI 명령어 실행) ret = 0 ② 비동기 (인터럽트) 제출+DMA CPU 해방 (다른 패킷 처리 가능) -EINPROGRESS 가속기 HW 처리 (DMA → 암호화 → DMA) IRQ 콜백 완료 통보 ③ 비동기 (폴링) 제출+DMA -EINPROGRESS P P P P 가속기 HW 처리 완료! 처리 완료 P = completion ring 확인 (인터럽트 없음) 패킷당 지연 동기: 높음 (CPU 점유) 비동기IRQ: 중간 (IRQ 지연) 폴링: 최소 (즉시 감지) 처리량 (높을수록 좋음) 동기 비동기IRQ 폴링 CPU 오버헤드 동기: 100% (블로킹) IRQ: 최소 (콜백만) 폴링: 중간 (주기적 확인) 최적 시나리오 동기: 소형 패킷, SW 전용, 단순 암호화 IRQ: 범용 HW 가속, 대용량 배치 처리 폴링: 초저지연 NGFW, DPDK 연동

커널 crypto API에서 비동기 요청의 반환값 의미와 콜백 처리 흐름:

/*
 * crypto API 반환값 — 완료 모델을 결정하는 핵심
 *
 *  0            : 동기 완료 — 결과가 이미 준비됨
 * -EINPROGRESS  : 비동기 처리 시작됨 — 콜백으로 완료 통보 예정
 * -EBUSY        : 백로그(backlog) 큐에 진입 — 큐 공간 확보 후 처리 예정
 * -ENOSPC       : 큐 가득 참(백로그 미허용 시) — 호출자가 재시도해야 함
 * 기타 음수     : 오류 (키 설정 오류, 메모리 부족 등)
 */

/* ── 비동기 콜백 구조체 ── */
struct crypto_async_result {
    struct completion completion;   /* wait_for_completion() 대상 */
    int err;                        /* 콜백에서 설정되는 최종 에러 코드 */
};

/* ── 콜백 함수 — 가속기 인터럽트 핸들러에서 호출됨 ── */
static void crypto_op_complete(void *data, int err)
{
    struct crypto_async_result *result = data;
    /*
     * err == 0        : 암호화 성공
     * err == -EINPROGRESS : 백로그에서 꺼내어 처리 시작
     *                       (CRYPTO_TFM_REQ_MAY_BACKLOG 설정 시)
     * err < 0 (기타)  : HW 오류
     */
    if (err == -EINPROGRESS)
        return;  /* 아직 완료 아님 — 실제 완료 시 다시 호출됨 */

    result->err = err;
    complete(&result->completion);  /* 대기 중인 스레드 깨움 */
}

/* ── 요청 제출 — CRYPTO_TFM_REQ_MAY_BACKLOG 플래그 상세 ── */
struct aead_request *req = aead_request_alloc(tfm, GFP_ATOMIC);
aead_request_set_callback(req,
    CRYPTO_TFM_REQ_MAY_BACKLOG |   /* 큐 가득 차도 백로그 허용 */
    CRYPTO_TFM_REQ_MAY_SLEEP,      /* 콜백에서 sleep 가능 (프로세스 컨텍스트) */
    crypto_op_complete, &result);
aead_request_set_crypt(req, src_sg, dst_sg, payload_len, iv);
aead_request_set_ad(req, assoclen);

ret = crypto_aead_encrypt(req);
switch (ret) {
case 0:
    /* 동기 완료 — SW fallback이 선택된 경우 또는
     * 가속기가 즉시 처리 완료한 경우 */
    process_result(req);
    break;

case -EINPROGRESS:
    /* 비동기 처리 시작 — 가속기가 DMA로 데이터 전송 중
     * 완료 시 crypto_op_complete() 콜백 호출됨 */
    break;

case -EBUSY:
    /* 가속기 큐 가득 참 + 백로그에 진입
     * CRYPTO_TFM_REQ_MAY_BACKLOG 덕분에 거부되지 않음
     * 콜백이 두 번 호출됨:
     *   1차: err=-EINPROGRESS (백로그→실제 큐 이동 시)
     *   2차: err=0 (처리 완료 시) */
    break;

default:
    /* 오류 — 키 미설정, 메모리 부족, HW 장애 등 */
    pr_err("crypto op failed: %d\n", ret);
    break;
}

백로그(Backlog) 큐 동작 상세:

┌─────────────────────────────────────────────────────────┐
│              가속기 Submission Ring (크기: 512)            │
│  [req1] [req2] [req3] ... [req510] [req511] [req512]    │
│  ← 가득 참 (new request 도착)                            │
└─────────────────────────────────────────────────────────┘
                         │
    ┌────────────────────┼────────────────────┐
    │ MAY_BACKLOG 미설정  │  MAY_BACKLOG 설정   │
    ▼                    │                    ▼
 -ENOSPC 반환            │              -EBUSY 반환
 (호출자가 재시도)        │         (백로그 큐에 진입)
                         │                    │
                         │    ┌───────────────┘
                         │    ▼
                         │  Backlog Queue
                         │  [req513] [req514] ...
                         │    │
                         │    │  Ring 슬롯 빌 때
                         │    ▼
                         │  콜백(err=-EINPROGRESS)
                         │  → 실제 큐로 이동
                         │    │
                         │    │  HW 처리 완료
                         │    ▼
                         │  콜백(err=0)
                         │  → 최종 완료
                         └────────────────────
비동기 폴링 처리(Asynchronous Polling)

비동기 폴링 모델에서는 인터럽트 대신 CPU가 주기적으로 completion ring(또는 상태 레지스터)을 직접 확인합니다. 인터럽트 발생·처리·컨텍스트 전환 오버헤드를 제거하여 초저지연을 달성할 수 있지만, 폴링 동안 CPU 사이클을 소모합니다.

커널 6.0+에서 도입된 crypto_engine 폴링 모드와 DPDK 환경의 busy-polling이 대표적입니다:

인터럽트 방식 — 완료 감지 타이밍 상세 CPU 요청 제출 다른 작업 수행 가능 (CPU 해방) HW DMA↓ 암호화 연산 DMA↑ IRQ ISR softirq 콜백 실행 ~2-5μs 오버헤드 총 지연: HW 처리 시간 + IRQ 오버헤드 + 콜백 실행 폴링 방식 — 완료 감지 타이밍 상세 CPU 요청 제출 P₁ P₂ P₃ P₄ Hit! 결과 처리 HW DMA↓ 암호화 연산 DMA↑ CQ 기록 IRQ 없음! 폴링 사이클 (간격: ~1-10μs) 총 지연: HW 처리 시간 + 최대 1 폴링 간격 (IRQ 오버헤드 제거) 완료 감지 지연 비교 인터럽트: HW 처리 IRQ 지연 콜백 → 총 ~15-55μs 폴링: HW 처리 poll → 총 ~11-15μs 폴링으로 IRQ 대비 30-70% 지연 감소

커널 crypto_engine 폴링 모드 — 커널 6.0+에서 struct crypto_engine은 가속기 드라이버에 폴링 기반 완료 처리를 지원합니다:

/*
 * crypto_engine 폴링 모드 (커널 6.0+)
 * drivers/crypto/crypto_engine.c
 *
 * 기본 인터럽트 모드 대비 폴링 모드 전환 조건:
 * 1. 고처리량 시나리오 (인터럽트 스톰 방지)
 * 2. 초저지연 요구 (IRQ 컨텍스트 전환 제거)
 */

/* ── 드라이버에서 폴링 모드 지원 등록 ── */
struct crypto_engine *engine;
engine = crypto_engine_alloc_init(dev, true);  /* rt=true: 실시간 우선순위 */

/* 폴링 기반 완료 처리 — 전용 kthread가 CQ를 확인 */
static int hw_accel_poll_completions(struct crypto_engine *engine)
{
    struct hw_completion_ring *cq = engine->priv;
    int completed = 0;

    /* completion ring의 유효한 엔트리를 순회 */
    while (cq->head != cq->tail) {
        struct crypto_async_request *req;
        struct hw_cq_entry *entry = &cq->entries[cq->head];

        /* 완료 여부 확인 (HW가 done 비트 설정) */
        if (!(READ_ONCE(entry->flags) & HW_CQ_DONE))
            break;

        req = entry->async_req;
        /* DMA 매핑 해제 */
        dma_unmap_sg(dev, req->src, sg_nents(req->src),
                     DMA_BIDIRECTIONAL);

        /* 콜백 호출 — 인터럽트 컨텍스트가 아닌
         * kthread 컨텍스트에서 실행 */
        crypto_finalize_request(engine, req, 0);

        cq->head = (cq->head + 1) % cq->ring_size;
        completed++;
    }
    return completed;
}

/*
 * 인터럽트 vs 폴링 전환 (적응형 모드)
 * 처리량이 임계치를 초과하면 자동으로 폴링 전환
 */
static irqreturn_t hw_accel_irq_handler(int irq, void *data)
{
    struct hw_accel_dev *hdev = data;

    if (hdev->completions_per_sec > POLL_THRESHOLD) {
        /* 고처리량 → 인터럽트 비활성화 + 폴링 모드 전환 */
        disable_irq_nosync(irq);
        hdev->polling = true;
        /* kthread가 폴링 루프 시작 */
        wake_up_process(hdev->poll_thread);
        return IRQ_HANDLED;
    }
    /* 일반 모드 — 인터럽트 기반 완료 */
    return hw_accel_process_irq(hdev);
}

DPDK / 유저스페이스 busy-polling — NGFW에서 DPDK 기반 데이터 플레인(VPP, Suricata AF_XDP)을 사용할 경우:

/*
 * DPDK cryptodev 폴링 모드 — 유저스페이스 busy-polling
 * rte_cryptodev_dequeue_burst()로 완료된 작업 수집
 */

/* 1. 암호화 요청 배치 제출 (enqueue) */
uint16_t enqueued = rte_cryptodev_enqueue_burst(
    cdev_id,        /* crypto device ID */
    qp_id,          /* queue pair */
    crypto_ops,     /* 요청 배열 */
    nb_ops          /* 배치 크기 (32-256) */
);

/* 2. busy-polling으로 완료 수집 (dequeue) */
uint16_t dequeued;
do {
    dequeued = rte_cryptodev_dequeue_burst(
        cdev_id, qp_id,
        completed_ops,  /* 완료된 요청 배열 */
        MAX_BURST       /* 최대 수집 수 */
    );
    /*
     * dequeued == 0: 아직 완료된 작업 없음 → 재폴링
     * 인터럽트·컨텍스트 전환 없이 즉시 재확인
     * → 지연 최소화, 단 CPU 100% 사용
     */
} while (dequeued == 0);

/* 3. 완료된 작업 처리 */
for (int i = 0; i < dequeued; i++) {
    if (completed_ops[i]->status ==
        RTE_CRYPTO_OP_STATUS_SUCCESS) {
        /* 암호화 완료 — 다음 파이프라인 단계로 전달 */
        forward_packet(completed_ops[i]->sym->m_dst);
    }
}
완료 모델 종합 비교
항목동기(Synchronous)비동기 인터럽트(Async IRQ)비동기 폴링(Async Polling)
완료 감지 방식함수 반환 (ret == 0)IRQ → softirq → 콜백CPU가 completion ring 직접 확인
반환값0 (즉시 완료)-EINPROGRESS-EINPROGRESS
CPU 동작블로킹 (연산 직접 수행)해방 (콜백 대기)폴링 루프 (주기적 확인)
패킷당 지연~0.5-2μs (AES-NI)
~5-20μs (SW SHA)
HW처리 + IRQ 2-5μsHW처리 + 최대 1 폴링간격
초당 처리량CPU 코어 × 클럭 한계높음 (CPU 병렬 활용)최고 (IRQ 제거 + 배치)
CPU 오버헤드100% (코어 점유)최소 (콜백 시만)중간 (폴링 사이클)
인터럽트 부하없음높음 (요청당 1회)없음
배치 처리불가가능 (NAPI식 coalescing)최적 (burst dequeue)
컨텍스트호출자 컨텍스트softirq / taskletkthread / 유저스페이스
/proc/crypto 표시async: noasync: yesasync: yes
대표 드라이버aesni-intel, ghash-clmulniqat_4xxx, caam, nitroxDPDK cryptodev, QAT UIO
최적 시나리오소형 패킷, 단순 대칭키
SW 전용 환경
범용 HW 가속
SSL Inspection 핸드셰이크
초저지연 NGFW
DPDK/VPP 데이터 플레인
적응형 인터럽트 병합과 하이브리드 폴링

실무 NGFW에서는 순수 인터럽트나 순수 폴링이 아닌, 트래픽 부하에 따라 동적으로 전환하는 적응형(adaptive) 모델을 사용합니다. 리눅스 커널 NAPI(New API)가 네트워크 드라이버에서 사용하는 것과 동일한 원리입니다:

                     트래픽 부하
        낮음 ◀──────────────────────────▶ 높음
        ┌───────────┬───────────┬──────────────┐
 완료   │ 인터럽트   │ 인터럽트   │    폴링      │
 감지   │ (즉시)     │ (병합)    │ (busy-poll)  │
 방식   │           │           │              │
        ├───────────┼───────────┼──────────────┤
 IRQ    │ 요청당     │ N개 묶음  │   비활성화    │
 빈도   │ 1회       │ (coalesce)│   (0회)      │
        ├───────────┼───────────┼──────────────┤
 CPU    │ 최소       │ 낮음      │   전용 코어   │
 사용   │           │           │   100%       │
        ├───────────┼───────────┼──────────────┤
 지연   │ ~5μs      │ ~10-30μs  │   <1μs       │
        │           │ (병합     │   (즉시      │
        │           │  대기시간) │    감지)     │
        └───────────┴───────────┴──────────────┘

        ◀─ 유휴 시    적응형 전환 ──────▶ 포화 시
/*
 * 적응형 인터럽트/폴링 전환 — NAPI식 crypto 완료 처리
 * 고처리량 시 인터럽트 스톰을 방지하고 배치 처리 효율 극대화
 */
#define POLL_BUDGET      64    /* 한 번의 폴링에서 최대 처리 수 */
#define IRQ_TO_POLL_THRESH  1000  /* IRQ/초 임계치 → 폴링 전환 */
#define POLL_TO_IRQ_THRESH  100   /* 폴링 공회전 → IRQ 복귀 */

/* ── 인터럽트 핸들러: 고부하 감지 시 폴링 전환 ── */
static irqreturn_t crypto_irq_handler(int irq, void *data)
{
    struct crypto_hw_queue *q = data;

    q->irq_count++;

    if (q->irq_count > IRQ_TO_POLL_THRESH) {
        /* 인터럽트 빈도 과다 → 폴링 모드 전환 */
        disable_irq_nosync(irq);
        q->mode = CRYPTO_MODE_POLL;
        napi_schedule(&q->napi);   /* 폴링 스케줄링 */
        return IRQ_HANDLED;
    }

    /* 일반 모드: 개별 완료 처리 */
    crypto_process_completions(q, 1);
    return IRQ_HANDLED;
}

/* ── NAPI식 폴링 핸들러 ── */
static int crypto_napi_poll(struct napi_struct *napi, int budget)
{
    struct crypto_hw_queue *q =
        container_of(napi, struct crypto_hw_queue, napi);
    int completed = 0;

    /* completion ring에서 완료된 항목 배치 수집 */
    completed = crypto_poll_completions(q, budget);

    if (completed < budget) {
        /*
         * 배치 미달 → 트래픽 감소 감지
         * 폴링 종료 + 인터럽트 복원
         */
        q->idle_polls++;
        if (q->idle_polls > POLL_TO_IRQ_THRESH) {
            napi_complete(napi);
            q->mode = CRYPTO_MODE_IRQ;
            q->irq_count = 0;
            q->idle_polls = 0;
            enable_irq(q->irq_num);  /* 인터럽트 복원 */
        }
    } else {
        q->idle_polls = 0;  /* 배치 꽉 참 → 계속 폴링 */
    }
    return completed;
}

인터럽트 병합(Interrupt Coalescing) 설정 — QAT 가속기 예시:

# QAT 인터럽트 병합 설정
# /etc/sysconfig/qat 또는 sysfs 경로

# 병합 타이머: N μs 동안 완료를 모아서 단일 IRQ 발생
echo 10 > /sys/kernel/debug/qat_4xxx_0000:6b:00.0/irq_coal_timer_ns
# 10μs 간격 → 초당 최대 100K IRQ (vs 병합 없이 수백만)

# 병합 카운트: N개 완료마다 IRQ 1회
echo 32 > /sys/kernel/debug/qat_4xxx_0000:6b:00.0/irq_coal_count
# 32개 완료 묶음 → IRQ 횟수 1/32로 감소

# 현재 모드 확인
cat /sys/kernel/debug/qat_4xxx_0000:6b:00.0/irq_mode
# adaptive / timer / count / poll

# ethtool로 NIC crypto 인터럽트 병합 설정 (ConnectX-7)
ethtool -C eth0 rx-usecs 10 tx-usecs 10
# 10μs 간격으로 RX/TX 인터럽트 병합
NGFW 시나리오별 완료 모델 선택 가이드
① SSL Inspection 프록시: 비동기 인터럽트 — RSA/ECDHE 핸드셰이크는 연산 시간이 길어(~ms) 폴링의 CPU 낭비가 큼. QAT의 인터럽트 병합(32개 묶음)으로 IRQ 부하를 제어하면서 CPU를 DPI에 할당.
② IPSec VPN 게이트웨이(100G+): 인라인(NIC 직접 처리)이 이상적이나, lookaside 사용 시 비동기 폴링 — 소형 ESP 패킷 대량 처리에서 IRQ 스톰 방지와 초저지연 달성.
③ DPDK/VPP 데이터 플레인: busy-polling 전용 — 전용 CPU 코어에서 rte_cryptodev_dequeue_burst() 무한 루프. IRQ 완전 비활성화로 최대 처리량.
④ 임베디드 CPE(1-10G): 비동기 인터럽트 — 전력 제약으로 폴링의 CPU 100% 점유 불가. SoC CAAM Job Ring 인터럽트가 최적.
⑤ 적응형 NGFW: 인터럽트 + 폴링 자동 전환 — 유휴 시 인터럽트(전력 절약), 포화 시 폴링(최대 성능). ethtool -C adaptive 모드 활성화.

아키텍처 선택 가이드

시나리오별로 최적의 암호화 오프로드 아키텍처를 선택하는 기준:

시나리오추천 아키텍처근거
데이터센터 IPSec VPN
사이트 간 100G+ 터널
인라인 (ConnectX-7, E810)라인레이트 ESP 처리, CPU 부하 0%, SA 수 충분
SSL/TLS 프록시 (NGFW)
수만 CPS 핸드셰이크
CPU중심 Lookaside (QAT)RSA/ECDHE 비대칭 연산 대량 처리, SR-IOV 멀티테넌트
CDN / 웹서버 kTLS
sendfile() 대량 전송
인라인 (ConnectX-6 Dx)TLS 레코드 zero-copy TX, sendfile() 성능 극대화
임베디드 라우터 / CPE
1-10G IPSec, 저전력
SoC중심 Lookaside (CAAM)추가 HW 불필요, 저전력, BOM 최소화
IoT 게이트웨이
TLS 종단, 저전력
SoC중심 Lookaside (CryptoCell)TrustZone 연동 키 보호, mW급 전력
클라우드 VM 암호화
VM별 격리 필요
CPU중심 Lookaside (QAT VF)SR-IOV VF per VM, 격리된 crypto 인스턴스
MACsec L2 보안
DC 패브릭 암호화
인라인 (ConnectX-7)L2 와이어스피드 암호화, NIC에서 완전 처리
디스크 암호화 (dm-crypt)CPU중심 or SoC중심 Lookasidecrypto API 경유, 블록 단위 비동기 처리
하이브리드 전략: 실무에서는 단일 아키텍처만 사용하는 경우가 드뭅니다. 예를 들어 NGFW 어플라이언스에서 IPSec bulk 암호화는 인라인(NIC), SSL Inspection 핸드셰이크는 CPU중심 룩어사이드(QAT), SoC 내장 엔진은 관리 플레인 TLS로 3종을 동시에 활용하는 것이 일반적입니다. 관련 HW 스펙 상세는 전용 크립토 가속기 섹션, kTLS 오프로드 상세는 kTLS HW 오프로드 섹션을 참조하세요.

하드웨어 이벤트 스케줄러 (Intel DLB / Marvell SSO)

NGFW 데이터 플레인에서 수백만 플로우를 다수의 CPU 코어에 효율적으로 분배하는 것은 핵심 과제입니다. RSS(Receive Side Scaling)는 해시 기반 정적 분배만 가능하여 코어 간 부하 불균형이 발생하고, 소프트웨어 큐 관리는 락 경합과 캐시 바운싱 오버헤드를 유발합니다. 하드웨어 이벤트 스케줄러(Hardware Event Scheduler)는 이 문제를 전용 ASIC/SoC 블록으로 해결합니다.

대표적인 HW 이벤트 스케줄러로 Intel의 DLB(Dynamic Load Balancer)와 Marvell의 SSO(Schedule/Synchronize/Order)가 있으며, 둘 다 원자적 플로우 스케줄링, 순서 보장, 동적 부하 분산을 하드웨어 수준에서 제공합니다.

이벤트 스케줄러 핵심 개념

HW 이벤트 스케줄러는 패킷을 직접 전달하지 않고, 이벤트(Event) 단위로 작업을 추상화합니다. 하나의 이벤트는 패킷 도착, 타이머 만료, 크립토 완료 등 다양한 소스에서 발생하며, 스케줄러가 이를 워커 코어(Worker Core)에 분배합니다.

하드웨어 이벤트 스케줄러 아키텍처 개요 이벤트 소스 NIC RX 패킷 수신 이벤트 Crypto 완료 암복호화 완료 Timer 세션 타임아웃 SW 이벤트 파이프라인 단계 전달 HW 이벤트 스케줄러 Intel DLB / Marvell SSO Atomic 큐 Ordered 큐 Parallel 큐 스케줄링 로직 플로우 해시 매칭 부하 균형 분배 순서 보장 (reorder) 원자성 보장 (lock-free) Atomic: 동일 플로우 → 동일 코어 (lock-free) Ordered: 병렬 처리 후 원래 순서로 재정렬 워커 코어 Core 0: 방화벽 룰 conntrack + ACL Core 1: IPS/DPI Suricata 시그니처 Core 2: 암호화 SSL/TLS 복호화 Core 3: NAT/QoS NAT rewrite + 큐잉 Core N: 동적 할당 부하에 따라 확장 3종 스케줄링 모드 비교 Atomic (원자적) 동일 flow_id → 동일 코어 한 번에 하나만 처리 (lock-free) 용도: conntrack, NAT 상태 갱신 세션별 순서 보장 필수 시 락 경합 제거 ✓ Ordered (순서 보장) 여러 코어에서 병렬 처리 출력 시 원래 순서로 재정렬 용도: IPSec ESP 암복호화 패킷 순서 유지 + 병렬 처리 HW 재정렬 버퍼 ✓ Parallel (병렬) 순서·원자성 제약 없음 최대 처리량 (fan-out) 용도: 무상태 패턴 매칭 AV 스캔, 로깅, 통계 수집 최대 병렬성 ✓

3종 스케줄링 모드가 NGFW 파이프라인에서 각각 다른 단계에 적용됩니다:

스케줄링 모드동작 방식NGFW 적용 단계핵심 보장
Atomic동일 flow_id의 이벤트가 동시에 하나의 코어에서만 처리됨. 다른 코어는 해당 플로우를 볼 수 없음conntrack 갱신, NAT 상태 변경, 세션 테이블 writeLock-free 상호 배제
Ordered여러 코어에서 병렬 처리하되, 출력 시 입력 순서대로 HW가 재정렬IPSec ESP 암복호화, TCP 스트림 재조립, QoS 큐잉패킷 순서 보장 + 병렬 처리
Parallel순서·원자성 제약 없이 가용한 코어에 즉시 분배IPS 시그니처 매칭, AV 스캔, 로깅, 미러링최대 처리량

Intel DLB (Dynamic Load Balancer)

Intel DLB(이전 명칭 HQM — Hardware Queue Manager)는 4th Gen Xeon(SPR) 이후 CPU에 내장된 하드웨어 이벤트 스케줄러입니다. PCIe 디바이스로도 출시되었으며(DLB 2.0/2.5), DPDK eventdev 라이브러리를 통해 VPP, DPDK 기반 NGFW, Open vSwitch 등에서 활용됩니다.

Intel DLB 2.5 내부 아키텍처 Producer NIC RX Core DPDK rte_eth_rx Crypto 완료 QAT dequeue Timer 이벤트 세션 만료 DLB 2.5 HW Engine Credit 관리기 흐름 제어 (배압) Directed Port/Queue LB QID (Queue ID) QID 0: Atomic (FW) QID 1: Ordered (Crypto) QID 2: Parallel (IPS) 최대 128 QID 스케줄링 엔진 • 플로우 해시 → 코어 매핑 • Atomic lock 관리 • Reorder 버퍼 (Ordered) • Credit 기반 배압 (backpressure) • 부하 균형 (WRR 가중치) CQ (Consumer Queue) — 워커별 1개 CQ 0 CQ 1 CQ 2 CQ 3 CQ 인터럽트 또는 폴링으로 이벤트 수신 (최대 64 CQ) Consumer (Worker) Worker Core 0-N DPDK eventdev poll DLB 2.5: 96 QID × 64 CQ, 4K 플로우 추적, ~200ns 스케줄링 지연

DLB 핵심 사양:

항목DLB 1.0 (PCIe)DLB 2.0 (SPR 내장)DLB 2.5 (EMR/GNR)
QID (Queue ID)326496
CQ (Consumer Queue)646464
Directed Port646496
플로우 추적2K4K4K
스케줄링 지연~300ns~200ns~200ns
이벤트 처리량~200M events/s~400M events/s~500M events/s
Credit 풀8K8K16K
Linux 드라이버dlb (out-of-tree)dlb2 (커널 5.18+)dlb2 (커널 6.2+)
SR-IOV VF161616

DLB의 핵심 구성 요소:

DPDK eventdev를 통한 DLB 설정과 NGFW 파이프라인 구성:

/*
 * DPDK eventdev API로 DLB 기반 NGFW 파이프라인 구성
 * rte_event_dev → rte_event_queue → rte_event_port 매핑
 */
#include <rte_eventdev.h>
#include <rte_event_eth_rx_adapter.h>
#include <rte_event_crypto_adapter.h>

/* 1. DLB eventdev 초기화 */
struct rte_event_dev_config dev_conf = {
    .nb_event_queues = 4,        /* QID 4개 (FW/IPS/Crypto/TX) */
    .nb_event_ports = 8,         /* 워커 코어 8개 */
    .nb_events_limit = 4096,     /* 최대 동시 이벤트 수 */
    .nb_event_queue_flows = 1024,/* 플로우 해시 엔트리 수 */
    .nb_event_port_dequeue_depth = 32,
    .nb_event_port_enqueue_depth = 32,
};
rte_event_dev_configure(evdev_id, &dev_conf);

/* 2. 파이프라인 단계별 QID 설정 */
struct rte_event_queue_conf q_conf;

/* QID 0: 방화벽 (Atomic — conntrack 상태 보호) */
q_conf.schedule_type = RTE_SCHED_TYPE_ATOMIC;
q_conf.priority = RTE_EVENT_DEV_PRIORITY_HIGHEST;
q_conf.nb_atomic_flows = 1024;   /* 동시 추적 플로우 수 */
rte_event_queue_setup(evdev_id, 0, &q_conf);

/* QID 1: IPSec 암복호화 (Ordered — 순서 보장 + 병렬) */
q_conf.schedule_type = RTE_SCHED_TYPE_ORDERED;
q_conf.priority = RTE_EVENT_DEV_PRIORITY_NORMAL;
rte_event_queue_setup(evdev_id, 1, &q_conf);

/* QID 2: IPS/DPI (Parallel — 최대 처리량) */
q_conf.schedule_type = RTE_SCHED_TYPE_PARALLEL;
rte_event_queue_setup(evdev_id, 2, &q_conf);

/* QID 3: TX (Directed — 특정 TX 코어로 직접 전달) */
/* Directed는 별도 API로 설정 */

/* 3. 워커 포트 설정 — 각 코어에 CQ 바인딩 */
struct rte_event_port_conf p_conf = {
    .dequeue_depth = 32,
    .enqueue_depth = 32,
    .new_event_threshold = 128,  /* credit 기반 배압 임계치 */
};
for (int i = 0; i < 8; i++) {
    rte_event_port_setup(evdev_id, i, &p_conf);
    /* 포트 i → QID 0,1,2 매핑 (어떤 단계든 처리 가능) */
    rte_event_port_link(evdev_id, i, queues, priorities, 3);
}

/* 4. NIC RX → DLB 이벤트 어댑터 연결 */
rte_event_eth_rx_adapter_create(rx_adapter_id, evdev_id, &p_conf);
rte_event_eth_rx_adapter_queue_add(rx_adapter_id,
    eth_port_id, -1, /* 모든 RX 큐 */
    &(struct rte_event_eth_rx_adapter_queue_conf){
        .ev.queue_id = 0,    /* 첫 단계: FW QID */
        .ev.sched_type = RTE_SCHED_TYPE_ATOMIC,
        .ev.flow_id = 0,     /* RSS 해시를 flow_id로 사용 */
    });
rte_event_eth_rx_adapter_start(rx_adapter_id);

/* 5. 워커 루프 — 이벤트 수신·처리·전달 */
static void worker_loop(uint8_t port_id)
{
    struct rte_event events[32];
    while (!quit) {
        uint16_t nb = rte_event_dequeue_burst(
            evdev_id, port_id, events, 32, 0 /* no wait */);

        for (int i = 0; i < nb; i++) {
            struct rte_mbuf *pkt = events[i].mbuf;
            uint8_t cur_qid = events[i].queue_id;

            switch (cur_qid) {
            case 0: /* 방화벽 단계 — Atomic */
                if (firewall_check(pkt) == FW_PASS) {
                    /* 다음 단계(Crypto)로 전달 */
                    events[i].queue_id = 1;
                    events[i].op = RTE_EVENT_OP_FORWARD;
                } else {
                    rte_pktmbuf_free(pkt);
                    events[i].op = RTE_EVENT_OP_RELEASE;
                }
                break;

            case 1: /* IPSec 단계 — Ordered */
                ipsec_process(pkt);
                events[i].queue_id = 2;
                events[i].op = RTE_EVENT_OP_FORWARD;
                /* DLB가 자동으로 원래 순서 복원 */
                break;

            case 2: /* IPS/DPI 단계 — Parallel */
                ips_inspect(pkt);
                /* TX로 직접 전송 */
                rte_eth_tx_burst(tx_port, 0, &pkt, 1);
                events[i].op = RTE_EVENT_OP_RELEASE;
                break;
            }
        }
        rte_event_enqueue_burst(evdev_id, port_id, events, nb);
    }
}
# DLB 디바이스 확인
lspci | grep -i "dynamic load balancer"
# 6b:00.0 System peripheral: Intel Corporation
#         Dynamic Load Balancer (DLB) [8086:2710]

# 커널 드라이버 로드
modprobe dlb2
ls /dev/dlb*    # /dev/dlb0, /dev/dlb1, ...

# sysfs에서 DLB 리소스 확인
cat /sys/class/dlb2/dlb0/total_resources
# num_sched_domains: 32
# num_ldb_queues: 96
# num_ldb_ports: 64
# num_dir_ports: 96
# num_ldb_credits: 16384

# DPDK에서 DLB eventdev 바인딩
dpdk-devbind.py -b vfio-pci 0000:6b:00.0
# EAL 파라미터
--vdev=event_dlb2 --allow=0000:6b:00.0

Marvell OCTEON SSO (Schedule/Synchronize/Order)

Marvell OCTEON SSO는 OCTEON TX2/CN10K SoC에 내장된 하드웨어 이벤트 스케줄러입니다. Intel DLB와 유사한 기능을 제공하지만, SoC 내부의 모든 HW 가속기(크립토, 정규식, 압축)와 내부 버스로 직접 연동되는 것이 핵심 차이입니다. 패킷이 NIC에서 수신되면 SSO를 거쳐 CPU 코어에 분배되고, 크립토 처리 완료 후 다시 SSO로 돌아와 다음 단계 코어로 전달됩니다.

OCTEON CN10K SoC RPM 네트워크 포트 25/50/100G RX → WQE 생성 패킷 수신 시 자동으로 SSO에 이벤트 제출 WQE SSO (Schedule / Synchronize / Order) SSOW (Workslot) 코어별 1개 할당 GET_WORK / ADD_WORK SWTAG (모드 전환) GWS (Group/Queue) 최대 256 그룹 그룹별 스케줄 타입 8단계 우선순위 태그 기반 스케줄링 엔진 tag = {flow_hash, sched_type} → 코어 결정, lock-free 보장 Atomic Ordered Untagged CPU 클러스터 ARM Neoverse N2 × 24 Core 0 Core 1 Core 2 Core 3 … × 24 각 코어에 SSOW 1개 MMIO GET_WORK 폴링 이벤트 SoC 내장 HW 가속기 (SSO 직접 연동) CPT (Crypto) AES/SHA/RSA 완료 → SSO 이벤트 REE (RegEx) IPS 시그니처 매칭 완료 → SSO 이벤트 ZIP (압축) deflate/zlib 완료 → SSO 이벤트 TIM (Timer) HW 타이머 휠 만료 → SSO 이벤트 NIX TX 패킷 송신 SSO에서 직접 TX SSO 핵심 차별점: 모든 HW 가속기 완료가 자동으로 SSO 이벤트로 변환 CPU가 가속기 완료를 폴링할 필요 없음 → 완전한 이벤트 드리븐 파이프라인

SSO 핵심 사양 (CN10K 기준):

항목OCTEON TX2 (CN96xx)CN10K (CN106xx)
SSO 그룹 (큐)256256
SSOW (Workslot)코어당 1개 (최대 36)코어당 1개 (최대 24)
스케줄링 모드Atomic, Ordered, UntaggedAtomic, Ordered, Untagged
태그 비트32-bit32-bit
우선순위 레벨88
이벤트 처리량~300M events/s~500M events/s
HW 가속기 연동CPT, ZIP, TIM, REECPT, ZIP, TIM, REE, ML(추론)
Linux 드라이버octeontx2-ssopf (커널 5.14+)octeontx2-ssopf (커널 6.1+)
DPDK eventdev 지원event_octeontx2event_cnxk

SSO의 DLB 대비 핵심 차별점:

SSO를 활용한 NGFW 이벤트 드리븐 파이프라인:

/*
 * OCTEON CN10K SSO 기반 NGFW 파이프라인
 * DPDK eventdev API (event_cnxk 드라이버)
 *
 * 파이프라인: NIC RX → [SSO] → FW(Atomic) → [SSO] →
 *            CPT(Crypto) → [SSO] → IPS(Ordered) → TX
 */

/* 1. SSO 이벤트 수신 — MMIO GET_WORK */
static void sso_worker_loop(uint8_t port_id)
{
    struct rte_event ev;
    while (!quit) {
        /* SSO에서 이벤트 수신 (HW 폴링, ~10ns 지연) */
        if (rte_event_dequeue_burst(evdev_id, port_id,
                                     &ev, 1, 0) == 0)
            continue;

        struct rte_mbuf *pkt = ev.mbuf;
        uint32_t tag = ev.flow_id;  /* 플로우 해시 */

        switch (ev.queue_id) {
        case SSO_GRP_FIREWALL:  /* Atomic 모드 */
            /*
             * 동일 tag(flow)의 이벤트는 이 코어에서만 처리됨
             * → conntrack 조회/갱신에 락 불필요!
             */
            if (conntrack_lookup(tag, pkt) == CT_NEW) {
                conntrack_insert(tag, pkt);  /* lock-free */
            }
            if (!acl_check(pkt)) {
                rte_pktmbuf_free(pkt);
                ev.op = RTE_EVENT_OP_RELEASE;
                break;
            }

            /* IPSec 필요 시 → CPT(크립토)로 전달 */
            if (needs_ipsec(pkt)) {
                /*
                 * SSO → CPT 직접 전달 (CPU 미개입)
                 * CPT 완료 시 자동으로 SSO 이벤트 재생성
                 * → SSO_GRP_POST_CRYPTO 그룹으로 도착
                 */
                submit_to_cpt(pkt, SSO_GRP_POST_CRYPTO);
                ev.op = RTE_EVENT_OP_RELEASE;
            } else {
                ev.queue_id = SSO_GRP_IPS;
                ev.op = RTE_EVENT_OP_FORWARD;
                /* SWTAG: Atomic → Ordered 전환 */
                ev.sched_type = RTE_SCHED_TYPE_ORDERED;
            }
            break;

        case SSO_GRP_POST_CRYPTO:  /* CPT 완료 이벤트 */
            /*
             * CPU가 CPT를 폴링하지 않음!
             * HW가 암호화 완료 → SSO에 이벤트 자동 생성
             */
            ev.queue_id = SSO_GRP_IPS;
            ev.sched_type = RTE_SCHED_TYPE_ORDERED;
            ev.op = RTE_EVENT_OP_FORWARD;
            break;

        case SSO_GRP_IPS:  /* Ordered 모드 */
            ips_pattern_match(pkt);
            /* NIX TX로 직접 전송 — 순서 자동 보장 */
            ev.queue_id = SSO_GRP_TX;
            ev.op = RTE_EVENT_OP_FORWARD;
            break;
        }

        rte_event_enqueue_burst(evdev_id, port_id, &ev, 1);
    }
}

/* 2. HW 타이머를 이용한 세션 타임아웃 */
static void setup_session_timeout(uint32_t flow_tag,
                                   uint64_t timeout_ns)
{
    /*
     * OCTEON TIM(Timer Wheel)에 타이머 등록
     * 만료 시 SSO 이벤트로 자동 변환 → CPU 인터럽트 불필요
     */
    struct rte_event_timer tim = {
        .ev.queue_id = SSO_GRP_TIMEOUT,
        .ev.sched_type = RTE_SCHED_TYPE_ATOMIC,
        .ev.flow_id = flow_tag,
        .timeout_ticks = timeout_ns / tim_tick_ns,
        .state = RTE_EVENT_TIMER_ARMED,
    };
    rte_event_timer_arm_burst(timer_adapter_id, &tim, 1);
    /* timeout_ns 후 SSO_GRP_TIMEOUT에 이벤트 도착 */
}

DLB vs SSO 종합 비교

항목Intel DLB 2.5Marvell OCTEON SSO (CN10K)
위치Xeon CPU 내장 / PCIe 카드OCTEON SoC 내장 (ARM 기반)
스케줄링 모드Atomic, Ordered, Parallel, DirectedAtomic, Ordered, Untagged
큐 수96 QID256 그룹
워커 포트64 CQ코어당 1 SSOW (최대 24)
스케줄링 지연~200ns~50-100ns (SoC 내부)
이벤트 처리량~500M events/s~500M events/s
HW 가속기 연동CPU가 중개 필요 (SW enqueue)CPT/REE/ZIP/TIM 직접 연동 (HW 자동)
타이머SW 관리TIM HW 타이머 휠 (자동 SSO 이벤트)
태그 전환 (SWTAG)미지원 (이벤트 재제출)HW SWTAG (런타임 모드 변경)
WQESW 정의 이벤트 구조HW 정의 WQE (NIC 자동 생성)
SR-IOV16 VFSoC 내장 (가상화 제한적)
Credit 기반 배압지원 (16K credit)XAQ(External Admission Queue) 기반
DPDK 드라이버event_dlb2event_cnxk
커널 드라이버dlb2 (5.18+)octeontx2-ssopf (5.14+)
주요 타겟x86 서버, 클라우드 NGFW, 5G UPF네트워크 어플라이언스, 임베디드 DPI

NGFW 파이프라인에서의 이벤트 스케줄러 활용

기존 NGFW 데이터 플레인은 run-to-completion(단일 코어가 패킷을 끝까지 처리) 또는 SW 파이프라인(SW 큐로 단계 간 전달) 모델을 사용합니다. HW 이벤트 스케줄러는 이를 HW 파이프라인으로 대체하여 락 경합·캐시 미스·부하 불균형을 제거합니다.

처리 모델Run-to-CompletionSW 파이프라인HW 이벤트 파이프라인
코어 간 전달없음 (단일 코어)SW ring (rte_ring)DLB QID / SSO 그룹
플로우 친화성RSS 해시 고정SW 해시 + 락HW Atomic 태그
순서 보장자동 (단일 코어)SW 시퀀스 넘버HW Ordered 모드
부하 분산정적 (RSS)SW 동적 (lock 경합)HW 동적 (lock-free)
코어 추가 시RSS 재설정 필요큐 추가 + 재분배CQ/SSOW 추가만
캐시 효율최적 (단일 코어)낮음 (코어 간 데이터 이동)중간 (HW 최적화 분배)
가속기 연동동기 대기 or 콜백콜백 + SW enqueueHW 자동 이벤트 (SSO)
지연 시간최소 (단일 경로)중간 (SW 큐 지연)낮음 (~200ns/단계)
최대 처리량코어 수 × 단일 성능중간 (락 병목)최고 (lock-free 확장)
복잡도낮음중간높음 (HW 구성)

 NGFW 이벤트 드리븐 파이프라인 예시 (DLB/SSO 공통)

 ┌──────────┐     ┌─────────┐     ┌──────────┐     ┌─────────┐
 │  NIC RX  │────▶│  HW     │────▶│  Stage 1 │────▶│  HW     │
 │ (패킷    │     │  Event  │     │ conntrack│     │  Event  │
 │  수신)   │     │  Sched  │     │ + ACL    │     │  Sched  │
 └──────────┘     │ [Atomic]│     │ (lock-   │     │[Ordered]│
                  └─────────┘     │  free)   │     └────┬────┘
                                  └──────────┘          │
                  ┌─────────────────────────────────────┘
                  │
                  ▼
 ┌──────────┐     ┌─────────┐     ┌──────────┐     ┌─────────┐
 │ Stage 2  │────▶│  HW     │────▶│  Stage 3 │────▶│  NIC TX │
 │ IPSec    │     │  Event  │     │  IPS/DPI │     │ (패킷   │
 │ 암복호화 │     │  Sched  │     │ 시그니처 │     │  송신)  │
 │ (QAT/CPT)│     │[Parallel│     │  매칭    │     └─────────┘
 └──────────┘     │ or Auto]│     └──────────┘
   ↑ HW 완료 시   └─────────┘      순서 복원은
   SSO: 자동 이벤트                  HW reorder 버퍼가
   DLB: SW re-enqueue              자동 처리
HW 이벤트 스케줄러 도입 시 고려사항
① 적합한 시나리오: 다수 코어(8+)에서 수백만 플로우를 처리하는 고성능 NGFW. RSS만으로 부하 균형이 어렵고, 플로우별 상태(conntrack/NAT)에 동시 접근이 빈번한 환경에서 효과가 극대화됩니다.
② 부적합한 시나리오: 4코어 이하 임베디드 장비에서는 run-to-completion이 더 효율적입니다. HW 이벤트 스케줄러의 ~200ns 단계 지연이 오히려 오버헤드가 될 수 있습니다.
③ DPDK eventdev 생태계: DLB와 SSO 모두 rte_eventdev API를 통해 추상화되므로, 애플리케이션 코드를 변경하지 않고 HW 백엔드만 교체할 수 있습니다. event_sw(SW eventdev)로 개발 후 HW로 전환하는 전략이 일반적입니다.
④ 관련 기술: NIC RSS/RPS와 상호 보완적입니다. RSS가 NIC 수준의 정적 분배라면, DLB/SSO는 파이프라인 단계 간 동적 재분배를 담당합니다. 두 기술을 결합하면 NIC→SSO→코어 3단계 부하 분산이 가능합니다.

Fortinet NP7 / CP9 / SoC5 계열

Fortinet FortiGate는 제품군에 따라 구현이 다르지만, 공개 자료 기준으로 보면 세션 전달용 Network Processor검사용 보안/콘텐츠 프로세서를 결합한 하이브리드 구조입니다. 고성능 chassis/데이터센터 계열은 NP7 계열이 inline fast path를 맡고, SSL Inspection과 콘텐츠 검사는 별도 inspection 경로가 담당합니다. 브랜치 SoC 장비는 SoC5(문서상 SP5/NP7Lite 언급 포함)처럼 동일 SoC 내부에 해당 기능이 더 밀집되어 있어 SoC중심 lookaside에 가까운 하이브리드로 보는 편이 정확합니다:

NP7 세션 오프로드 프로세스(Process)

FortiGate에서 세션이 NP7으로 오프로드되는 과정:

  1. 첫 패킷: CPU(IPS Engine)가 수신 → conntrack + UTM(IPS/AV/App Control) 전체 검사
  2. 세션 수립: 검사 통과 시 CPU가 ISF(Iterate Session Filter)에 오프로드 결정 쿼리
  3. NP7 등록: session_offload_add() → NP7 Session Table에 5-tuple + NAT 정보 + QoS 태그 기록
  4. 후속 패킷: NP7 ASIC이 Session Table lookup → NAT rewrite → QoS → forwarding (CPU bypass)
  5. 세션 종료: TCP FIN/RST → NP7이 CPU에 알림 → Session Table 삭제 → 통계 동기화
FortiGate 구성 요소처리 방식역할성능
NP7 ASICInlineL2~L4 세션 오프로드, NAT, IPSec, VXLAN, QoS200Gbps (단일 칩)
보안 프로세서 / SoC inspection pathLookaside 또는 SoC 내부 경로SSL/TLS 프록시, inspection용 암·복호화SSL 검사 시 CPU 부하 감소
CP9 / CP10 (Content Processor)LookasideAV 시그니처, IPS 패턴 매칭 보조CPU DPI 성능 향상
CPU (FortiOS)제어 플레인정책 결정, App Control, DLP, 관리모델별 차이
# FortiGate 진단 명령
diagnose npu np7 session-stats         # NP7 오프로드 세션 통계
diagnose npu np7 sse-stats all         # Session Search Engine 통계
diagnose npu np7 port-list             # NP7 포트 매핑 확인
diagnose sys session filter dport 443  # 특정 포트 세션 확인
get system performance firewall statistics # 전체 성능 통계

# NP7 오프로드 비율 확인
diagnose npu np7 session-stats
# 출력 예:
# NP7 offload sessions: 1,234,567
# CPU sessions: 12,345
# Offload ratio: 99.0%

# 특정 세션의 오프로드 상태 확인
diagnose sys session filter src 10.0.0.1
diagnose sys session list
# 출력에서 npu_state=offloaded 확인
FortiGate 오프로드 제외 조건: UTM(AV/IPS/DLP/App Control)이 활성화된 정책의 세션은 첫 패킷 검사 이후에만 오프로드됩니다. 단, SSL 딥 인스펙션이 적용된 세션은 전용 inspection 경로가 전 구간 복호화/암호화를 수행하므로, NP7 수준의 세션 오프로드는 불가합니다. 이 경우 보안 프로세서/SoC inspection 경로의 처리 능력이 병목 해소의 핵심입니다.
Fortinet 참고 문서:

Fortinet 보안 프로세서/SoC inspection 경로

Fortinet 공개 자료는 제품군에 따라 CP9/CP10, SoC5, 보안 프로세서 등 서로 다른 명칭을 사용합니다. 공통점은 세션 전달용 NP fast path와 별도의 inspection 암호화 경로가 존재하는 점입니다. CPU가 TLS 정책과 평문 검사를 총괄하되, 핸드셰이크와 레코드 암·복호화의 상당 부분을 이 inspection 경로가 보조합니다.

inspection 경로 기능처리 내용성능 효과비고
TLS 핸드셰이크 가속RSA-2048/4096, ECDHE P-256/P-384 키 교환CPU 대비 CPS 10~20배 향상TLS 1.2/1.3 모두 지원
대칭키 암·복호화AES-128/256-GCM, AES-CBC, ChaCha20-Poly1305CPU 대비 처리량 5~10배SSL Inspection의 레코드 계층
인증서 동적 생성MITM 프록시용 서버 인증서 실시간 서명CA 서명 연산 HW 가속FortiGate SSL Inspection 핵심
TLS 세션 재개Session ID / Session Ticket 캐시 관리재연결 시 핸드셰이크 생략SP5 내부 세션 캐시
IPSec 암호화ESP AES-GCM encap/decapNP7과 협업 (NP7 = ESP 헤더, SP5 = crypto)VPN 트래픽 처리

Fortinet SSL Deep Inspection 파이프라인

FortiGate가 SSL Deep Inspection(SSL 딥 인스펙션)을 수행할 때의 내부 패킷 흐름입니다:

  1. 클라이언트 → FortiGate TLS 핸드셰이크: inspection 경로가 ECDHE/RSA 키 교환을 보조하고, FortiGate의 CA 인증서로 서버 인증서를 동적 생성하여 클라이언트에 제공합니다.
  2. FortiGate → 서버 TLS 핸드셰이크: inspection 경로가 실제 서버와 별도의 TLS 세션을 수립하고 서버 인증서를 검증합니다.
  3. 데이터 복호화: inspection 경로가 클라이언트 TLS 세션의 레코드를 하드웨어에서 복호화하고, 평문을 CPU(IPS 엔진)에 전달합니다.
  4. DPI/IPS 검사: CPU + CP 계열 가속기가 평문에 대해 App Control, IPS 시그니처 매칭, AV 스캔, DLP를 수행합니다.
  5. 재암호화: inspection 경로가 서버 TLS 세션용 레코드로 재암호화하고, 이후 패킷이 NP로 전달됩니다.
Fortinet SSL Inspection의 성능 특성:
  • SSL Inspection 활성 시 세션은 NP7 session offload 대상에서 제외됩니다. 모든 패킷이 inspection 경로를 통과해야 하기 때문입니다.
  • FortiGate 7081F 기준: FW 처리량 700Gbps → SSL Inspection 시 35Gbps로 감소 (1/20 수준)
  • 병목은 주로 CPS(TLS 핸드셰이크/초)와 inspection 엔진의 레코드 처리 능력입니다. 모델별로 수치 차이가 큽니다.
  • TLS 1.3 vs 1.2: TLS 1.3은 핸드셰이크가 1-RTT로 줄어 CPS가 약 20% 향상되지만, PFS 필수로 키 교환 연산 비용은 동일
  • 세션 캐시(Session Resumption)를 활용하면 재연결 시 핸드셰이크 비용을 크게 줄일 수 있습니다.
# FortiGate SSL Inspection 진단 명령
diagnose sys session filter proto 6 dport 443
diagnose sys session list
# 출력에서 확인할 항목:
# npu_state=0 (SSL Inspection 세션은 offload 안 됨)
# ssl_action=deep-inspection
# ssl_cipher=ECDHE-RSA-AES256-GCM-SHA384

# SP5 처리 통계
diagnose hardware deviceinfo nic sp5
# SP5 crypto throughput:
#   Encrypt: 18.5 Gbps
#   Decrypt: 19.2 Gbps
#   Handshake: 95,000 TPS

# SSL Inspection 통계
get system performance firewall statistics
# ssl_proxy_sessions: 45,678
# ssl_proxy_bandwidth: 12.3 Gbps

# SSL Inspection 정책 설정
config firewall ssl-ssh-profile
  edit "deep-inspect"
    set ssl-anomaly-log enable
    config https
      set ports 443
      set status deep-inspection
      set cert-validation-timeout 30
    end
  next
end

# NP7 + SP5 협업 확인
diagnose npu np7 session-stats
# ssl_sessions_to_sp5: 45,678 (SP5로 전달된 SSL 세션)
# non_ssl_offloaded: 1,189,000 (NP7 오프로드된 비-SSL 세션)

NP7의 IPSec 암호화 처리 상세

NP7은 IPSec VPN 트래픽에 대해 ESP 패킷의 전체 처리(캡슐화 + 암호화 + 포워딩)를 하드웨어에서 수행합니다:

IPSec 기능NP7 역할SP5 역할CPU 역할
IKE 핸드셰이크-DH 키 교환 가속IKE daemon (iked)
ESP 캡슐화/디캡슐화HW 처리--
AES-GCM 암·복호화HW 처리 (내장 crypto)폴백 시 보조-
Anti-replay 검사HW 시퀀스 윈도우--
SA 관리SA 테이블 (최대 ~50K SA)-SA 라이프사이클
터널 모드 포워딩decap → session lookup → encap--
NAT-T (UDP 4500)HW 처리--
Fortinet FortiGate — NP7/SP5/CP9 암호화 트래픽 파이프라인 SSL Deep Inspection 경로 (HTTPS 트래픽) Client TLS NP7 세션 분류 SSL? SP5 TLS Decrypt 평문 CPU (FortiOS) App-ID / IPS CP9 AV/DLP 매칭 SP5 TLS Re-Encrypt NP7 전달 Server IPSec VPN 경로 (오프로드 가능) Remote ESP NP7 (IPSec Engine) ESP Decap + AES-GCM Decrypt + Session Lookup 평문 CPU (첫 패킷만) NP7 Session Offload EST → NP7 직접: Decrypt → Forward → Encrypt Internal 비-암호화 트래픽 경로 (최고 성능) Source NP7 (첫 패킷→CPU) EST → NP7 Session Offload (CPU bypass) NP7 200Gbps 라인레이트 Dest FortiGate 7081F — 트래픽 유형별 성능 비교 FW (비암호화): 700 Gbps NP7 session offload IPSec VPN: 200 Gbps NP7 crypto offload NGFW (DPI): 60 Gbps CPU + CP9 SSL Inspection: 35 Gbps SP5 + CPU + CP9 SSL Inspection 활성화 시 처리량이 FW의 1/20로 감소 → SP5 가속이 핵심

Palo Alto Networks SP3

Palo Alto Networks의 공개 자료는 SP3(Single-Pass Parallel Processing)의 핵심을 분리된 control plane/data plane, 병렬 처리 하드웨어, single-pass 소프트웨어로 설명합니다. 따라서 세션 fast path는 장비 내부 dataplane hardware가 inline으로 처리하지만, SSL/TLS 복호화와 평문 검사는 Fortinet이나 Juniper처럼 분리된 전용 SSL ASIC보다 dataplane CPU 자원에 밀착된 CPU중심 lookaside로 해석하는 편이 정확합니다. 다시 말해, 세션 분류는 inline이고 decryption은 SP3 파이프라인 안에서 CPU가 소화합니다:

공개 자료 해석 주의: Palo Alto Networks는 Fortinet이나 Juniper처럼 독립된 SSL ASIC 명칭을 전면에 내세우지 않습니다. 아래 그림의 FE FPGA 표기는 공개 백서의 "parallel processing hardware"와 fast path session engine을 이해하기 쉽게 단순화한 개념도이며, 실제 제품 내부 구현은 모델군에 따라 달라질 수 있습니다.

Single-Pass 아키텍처 상세

Palo Alto의 핵심 차별점은 Single-Pass Parallel Processing (SP3) 아키텍처입니다:

전통적 방화벽Palo Alto SP3
패킷이 FW → IPS → AV → URL 순서로 직렬 통과FW, App-ID, IPS, AV, URL이 단일 패스에서 병렬 처리
각 엔진마다 패킷 복사/버퍼(Buffer)링스트림 기반 처리 (패킷 복사 최소화)
지연 = 각 엔진 지연의 합지연 = 가장 느린 엔진의 지연
엔진 추가 시 성능 선형 감소엔진 추가 시 성능 영향 최소

FE FPGA의 역할: FPGA는 패킷 분류(5-tuple lookup), 세션 테이블 검색, 디캡슐레이션, NAT rewrite를 수행합니다. CPU는 App-ID 엔진만 실행하므로, FPGA가 처리할 수 있는 세션(이미 분류된 ESTABLISHED)은 CPU를 완전히 bypass합니다.

Palo Alto SSL 복호화 아키텍처

Palo Alto는 전용 크립토 ASIC 없이 범용 CPU 코어에서 SSL 복호화를 수행합니다. SP3 아키텍처의 핵심은 SSL 복호화를 Single-Pass 파이프라인의 일부로 통합하여, 별도의 프록시 단계 없이 인라인(Inline)에서 처리하는 것입니다.

SSL 처리 단계처리 위치특성
TLS 핸드셰이크 (RSA/ECDHE)CPU 코어 (멀티스레드)CPS 병목. PA-5440 기준 ~15K SSL CPS
TLS 레코드 복호화 (AES-GCM)CPU 코어 (AES-NI)코어당 ~4 Gbps. PA-5440: 총 12 Gbps SSL
인증서 검증CPU 코어OCSP/CRL 확인, 인증서 체인 검증
Forward Trust CA 서명CPU 코어MITM용 인증서 동적 생성 (RSA/ECDSA)
App-ID (복호화 후)CPU 코어 (SP3 병렬)평문에 대해 App-ID + IPS + URL 동시 실행
TLS 재암호화CPU 코어 (AES-NI)서버 세션의 레코드 암호화

Palo Alto의 접근법은 Fortinet(SP5 전용 칩)과 대조적입니다. 장점: 범용 CPU로 유연한 TLS 버전/cipher suite 지원 (TLS 1.3 초기 지원이 빨랐음). 단점: 전용 칩 대비 SSL 처리량이 낮고, SSL 활성화 시 CPU 부하가 크게 증가합니다.

Palo Alto SSL 복호화 성능 특성:
  • PA-5440 기준: FW 75 Gbps → SSL 복호화 활성 시 12 Gbps (1/6 수준)
  • SSL Forward Proxy + Full Threat Prevention 시 더 감소 (TLS 핸드셰이크 + DPI + AV 복합)
  • SSL Inbound Inspection(서버 키 보유)은 Forward Proxy 대비 ~30% 빠름 (인증서 생성 불필요)
  • Hardware Security Module(HSM) 연동: FIPS 140-2 준수 환경에서 SafeNet HSM으로 CA 개인키 보호
  • TLS 1.3 0-RTT 복호화: PAN-OS 11.0+에서 지원하지만 CPU 부담 증가
# Palo Alto SSL 복호화 진단 명령
show counter global filter delta yes | match ssl
# ssl_proxy_session_new: 연결/초 (CPS)
# ssl_proxy_session_active: 현재 활성 SSL 세션
# ssl_decrypt_success: 복호화 성공 패킷
# ssl_decrypt_fail: 복호화 실패 (cipher 미지원 등)
# ssl_cert_verify_fail: 인증서 검증 실패

show session all filter ssl-decrypt yes
# SSL 복호화 중인 세션 목록

show system resources
# CPU 사용률 확인 → SSL 활성 시 증가폭

# SSL 복호화 정책 설정 (PAN-OS)
set rulebase decryption rules "decrypt-outbound" {
    from any; to any;
    source any; destination any;
    service any; action decrypt;
    type { ssl-forward-proxy { }; };
    profile "default";
}

# SSL 복호화 프로파일
set profiles decryption "strict" {
    ssl-forward-proxy {
        block-expired-certificate yes;
        block-untrusted-issuer yes;
        block-unsupported-version yes;
        block-unsupported-cipher yes;
        min-version tls1-2;
    };
}
# Palo Alto CLI 진단 명령
show running resource-monitor           # CPU/메모리/세션 사용률
show session all filter state active    # 활성 세션 목록
show session info                       # 세션 통계 (CPS, CC)
show counter global filter delta yes \
  packet-filter yes                     # 실시간 카운터
debug dataplane packet-diag set filter \
  match src 10.0.0.1                    # 특정 IP 패킷 추적
Palo Alto 참고 문서:
Palo Alto Networks — SP3 Single-Pass Parallel Processing 아키텍처 SP3 Single-Pass 파이프라인 (첫 패킷 + NEW 세션) Packet In FE FPGA 5-tuple Lookup Session Table NAT Rewrite NEW CPU — Single-Pass 병렬 처리 App-ID IPS URL Filter AV DLP 모든 엔진이 동일 패킷에 대해 동시 실행 (Single-Pass) 허용 FE FPGA 세션 설치 Packet Out ESTABLISHED 세션 — FPGA Fast Path (CPU bypass) Packet In FE FPGA — Session Hit NAT Rewrite + QoS + Forward CPU bypass — FPGA 직접 전달 (라인레이트) Packet Out SSL Decryption 경로 (CPU-only, AES-NI) Client TLS FE FPGA SSL 태깅 CPU (AES-NI) TLS Decrypt + DPI Single-Pass App-ID/IPS/AV CPU (AES-NI) TLS Re-Encrypt Server PA-5440 — 트래픽 유형별 처리량 비교 FW: 75 Gbps FPGA fast path Threat: 38 Gbps App-ID + IPS + AV SSL Decrypt: 12 Gbps CPU AES-NI only IPSec VPN: 36 Gbps CPU crypto SSL Decryption은 전용 HW 가속 없이 CPU(AES-NI)에 의존 → FW의 1/6 수준으로 감소 Single-Pass: 한 번의 패킷 스캔으로 모든 보안 기능 동시 실행 → Multi-Pass 대비 지연 최소화

Check Point SecureXL / Maestro

Check Point는 순수 소프트웨어 기반(Inline 커널 가속) 아키텍처를 사용합니다. 전용 ASIC/FPGA 없이 범용 x86 CPU만으로 모든 처리를 수행하며, 커널 레벨 inline 가속(SecureXL)으로 성능을 확보합니다. SSL/IPSec 암·복호화도 CPU에서 수행(lookaside 코프로세서 없음)하므로, HTTPS Inspection 성능이 상대적으로 제한됩니다:

Quantum Lightspeed 해석: 최근 Check Point는 Lightspeed/가속 카드로 L4 방화벽 fast path를 강화하고 있지만, 공개 자료 기준으로 이는 방화벽·세션 전달 가속에 가깝습니다. 범용 HTTPS Inspection 레코드 경로를 전용 ASIC이 대신하는 구조로 보기에는 정보가 부족하므로, 이 문서에서는 SSL Inspection을 계속 CPU중심으로 분류합니다.

SecureXL 처리 경로 상세

SecureXL은 3가지 처리 경로(Accelerated Path, Medium Path, Firewall Path)로 패킷을 분류합니다:

경로처리 위치대상 트래픽성능 영향
Accelerated Path커널 (SecureXL)Accept Template에 등록된 ESTABLISHED 세션최고 성능
Medium Path커널 (SecureXL + SXL 엔진)NAT, VPN 적용 필요한 세션Accelerated의 60~80%
Firewall Path유저스페이스 (fwd daemon)NEW 연결, IPS/DLP/App Control 검사가장 느림

Accept Template은 Linux conntrack의 ESTABLISHED + flowtable 개념과 유사합니다. conntrack이 세션 상태를 추적하고, Accept Template이 검사가 완료된 세션의 5-tuple을 커널 가속 테이블에 등록합니다. Drop Template은 이미 DROP 판정이 난 소스 IP/포트를 캐시하여, 동일한 악성 트래픽이 재전송(Retransmission)될 때 CPU까지 가지 않고 즉시 DROP합니다.

CoreXL / SND 아키텍처

Check Point의 멀티코어 아키텍처는 Linux의 RSS/RPS와 유사하지만 보안에 최적화되어 있습니다:

# Check Point 진단 명령 (Gaia OS)
fwaccel stat                            # SecureXL 가속 통계
fwaccel stats -s                        # 경로별 패킷/바이트 통계
fwaccel conns                           # Accept Template 연결 수
fw ctl multik stat                      # CoreXL 인스턴스별 통계
cpview                                  # 실시간 성능 모니터 (TUI)

# SecureXL 비활성화/활성화 (성능 비교 테스트)
fwaccel off     # 가속 비활성화 → 전체 Firewall Path
fwaccel on      # 가속 재활성화

# 특정 세션의 처리 경로 확인
fw ctl zdebug + drop    # 디버그 로그
Check Point 참고 문서:

Check Point HTTPS Inspection 아키텍처

Check Point는 Fortinet(SP5 전용 칩)이나 전용 크립토 ASIC 없이 순수 소프트웨어 기반의 HTTPS Inspection을 수행합니다. CoreXL의 멀티코어 병렬 처리와 SecureXL의 가속 경로를 조합하여 성능을 최적화합니다.

HTTPS Inspection 단계처리 위치가속 방법
TLS 핸드셰이크CoreXL FW 인스턴스 (CPU)OpenSSL AES-NI, 멀티코어 분산
인증서 동적 생성CoreXL FW 인스턴스 (CPU)인증서 캐시 (동일 서버 재사용)
TLS 레코드 복호화CoreXL FW 인스턴스 (CPU)AES-NI + SSL 세션 재사용
DPI/IPS 검사CoreXL FW 인스턴스 + SandBlastCoreXL 병렬 처리
TLS 재암호화CoreXL FW 인스턴스 (CPU)AES-NI

SecureXL과 HTTPS Inspection의 관계: HTTPS Inspection이 활성화되면 해당 세션은 Firewall Path(가장 느린 경로)에서 처리됩니다. Accelerated Path로 승격될 수 없으므로, HTTPS Inspection 비율이 높을수록 SecureXL 가속 효과가 감소합니다.

# Check Point HTTPS Inspection 진단
fwaccel stat
# Accelerated Conns: 1,200,000
# HTTPS Inspect Conns: 45,000 (Firewall Path)
# → HTTPS Inspection 세션은 Accelerated Path 불가

# HTTPS Inspection 통계
cpstat -f https_inspection fw
# Total inspected connections: 45,000
# Bypassed connections: 5,000 (bypass 규칙 적용)
# Certificate cache hit ratio: 85%

# CoreXL 인스턴스별 SSL 부하 분포
fw ctl multik stat
# 각 CoreXL 인스턴스의 CPU 사용률 확인
# HTTPS Inspection 활성 시 불균형 주의

# HTTPS Inspection 바이패스 규칙 (성능 최적화)
# SmartConsole → Security Policies → HTTPS Inspection
# 금융/의료 사이트, Windows Update 등 → Bypass 권장
Check Point Maestro와 HTTPS Inspection 확장: 단일 게이트웨이의 HTTPS Inspection 처리량이 부족한 경우, Maestro HyperScale로 여러 게이트웨이를 클러스터링하여 수평 확장할 수 있습니다. Maestro Orchestrator가 SSL 세션을 게이트웨이 간에 분배하되, 동일 TLS 세션의 모든 패킷은 같은 게이트웨이로 고정(session affinity)됩니다.
Check Point — SecureXL / CoreXL / Maestro HyperScale 아키텍처 패킷 처리 3-Path 분류 Packet In SND Secure Network Distributor RSS + 경로 분류 Accept Template Hit Accelerated Path (SecureXL) 커널 레벨 direct forward — CPU bypass 라인레이트 전달 Packet Out Template Miss Medium Path SecureXL 부분 처리 + CoreXL 정책 검사 HTTPS/복합 Firewall Path (Full Inspection) CoreXL FW Instance 전체 검사 (HTTPS Inspection 포함) CoreXL 멀티코어 분배 구조 SND Core 패킷 분배 CoreXL FW #0 CoreXL FW #1 CoreXL FW #N SecureXL 캐시 Accept Template Drop Template 설치 HTTPS Inspection SSL Decrypt → 검사 → Re-Encrypt 항상 Firewall Path 강제 SecureXL bypass 불가 Maestro HyperScale — 수평 확장 클러스터 Orchestrator 세션 분배 + Affinity 동일 TLS → 동일 GW Security GW #1 Security GW #2 Security GW #N 최대 52개 GW 클러스터링 Quantum 28000 — 경로별 처리량 FW: 64 Gbps SecureXL 가속 Threat: 15 Gbps CoreXL 전체 검사 SSL: 7 Gbps HTTPS Inspection HTTPS Inspection 시 SecureXL bypass 불가 → FW 대비 1/9 수준 SecureXL Accept Template 적중률이 높을수록 전체 성능 향상 — HTTPS 비율 증가 시 Firewall Path 부하 급증

Juniper Express Path

Juniper SRX 시리즈의 Express Path는 세션의 첫 패킷만 flow daemon이 처리하고, 이후 패킷은 NPU(Network Processing Unit)에서 직접 전달합니다. Inline NP + Lookaside SPC3 하이브리드 모델로, 패킷 전달은 NP가 데이터 경로에서 inline 처리하고, IPSec/SSL 암호화는 별도 SPC3 카드에 위임(lookaside)합니다:

Express Path 동작 원리

Juniper SRX의 패킷 처리 아키텍처:

  1. NP (Network Processor): 모든 패킷의 1차 수신. 세션 테이블에서 lookup
  2. Express Path 히트: 기존 세션 매칭 → NP에서 직접 forwarding + NAT rewrite (flowd bypass)
  3. Express Path 미스: 새 세션 → flowd(flow daemon)로 전달 → 정책 평가 + IPS/AppID
  4. 세션 설치: flowd가 정책 통과 시 세션을 NP Express Path 테이블에 등록
# Juniper SRX 진단 명령
show security flow statistics           # 플로우 통계 (Express Path 비율)
show security monitoring fpc 0          # FPC별 세션/처리량
show security flow session              # 세션 테이블
show security flow session summary      # 세션 요약 (활성/최대)

# Express Path 상태 확인
show pfe statistics traffic
# express-path-packets, slow-path-packets 비교

# Services Offload Engine 상태
show chassis fpc pic-status

SPC3 (Services Processing Card) 암호화 가속

Juniper SRX 5000 시리즈는 SPC3 카드를 통해 IPSec과 SSL 처리를 전용 하드웨어에서 가속합니다. SPC3는 NP(Network Processor)와 별도의 크립토 엔진을 내장하고 있어, 암·복호화 연산을 NP에서 분리하여 처리합니다.

SPC3 기능처리 방식처리 내용성능
IPSec 가속LookasideESP AES-GCM 암·복호화, SA 관리카드당 ~50 Gbps IPSec
SSL ProxyLookasideTLS 핸드셰이크 + 레코드 암·복호화카드당 ~10K SSL CPS
Express Path 통합Inline (NP)IPSec 복호화 후 inner 패킷 Express Path 등록EST 세션: NP 직접 전달
NATInline (NP)NAT rewrite + conntrackExpress Path 연계
# Juniper SRX SPC3 암호화 관련 진단
show security ipsec statistics
# ESP 암·복호화 패킷/바이트 통계

show security ipsec sa
# SA 목록 + 하드웨어 가속 여부

show services ssl proxy statistics
# SSL Proxy 세션 수, CPS, 처리량

show chassis fpc 0 pic 0
# SPC3 카드 상태 + 크립토 엔진 사용률

# SPC3 IPSec 오프로드 설정
set security ipsec vpn site-a {
    ike {
        gateway gw-site-a;
        ipsec-policy ipsec-pol;
    }
    establish-tunnels immediately;
}
# SPC3가 자동으로 IPSec 처리를 하드웨어에서 수행

SPC3 SSL Forward Proxy 핸드셰이크 처리

Juniper SRX의 SSL Forward Proxy는 SPC3 카드에서 TLS 핸드셰이크와 레코드 암·복호화를 전담합니다. flowd(Flow Daemon)는 평문 DPI만 수행하므로, 암호화 연산 부하가 CPU에 집중되지 않습니다.

TLS 핸드셰이크 단계처리 위치상세 동작
1. ClientHello 수신NP → SPC3NP가 TCP 443 패킷을 SPC3로 전달. SPC3가 SNI 추출 + 정책 매칭
2. 서버측 TLS 세션 수립SPC3 (Lookaside)SPC3가 실제 서버에 ClientHello 전송 → ServerHello/Certificate 수신. ECDHE/RSA 키 교환을 SPC3 크립토 엔진에서 수행
3. 서버 인증서 검증SPC3 + flowdSPC3가 인증서 체인 검증. OCSP/CRL 확인은 flowd 경유 (네트워크 I/O)
4. MITM 인증서 생성SPC3 (Lookaside)서버 인증서의 CN/SAN을 복제하여 SRX CA로 서명한 대체 인증서 생성. 인증서 캐시에 저장
5. 클라이언트측 TLS 세션 수립SPC3 (Lookaside)생성된 MITM 인증서로 클라이언트에 ServerHello 응답. 클라이언트와 별도 TLS 세션 수립
6. 데이터 복호화 (클라이언트→서버)SPC3 (Lookaside)클라이언트 TLS 세션의 레코드를 AES-GCM 복호화 → 평문을 flowd에 전달
7. DPI 검사flowd (CPU, Inline)평문에 대해 AppID + IPS + UTM 수행. Single-pass 아님 — 순차 처리
8. 재암호화 (서버 세션)SPC3 (Lookaside)검사 완료된 평문을 서버 TLS 세션으로 AES-GCM 재암호화 → NP로 전달
9. TLS 세션 재개 (Session Resumption)SPC3TLS Session ID / Ticket 캐시. 재연결 시 핸드셰이크 생략 → CPS 부담 경감
Juniper SSL Proxy 성능 특성:
  • SSL Proxy 세션은 Express Path 대상에서 제외됨 — 모든 패킷이 SPC3 → flowd → SPC3 경로를 통과해야 하므로
  • SPC3 카드당 ~10K SSL CPS (TLS 1.2 RSA-2048 기준). TLS 1.3 ECDHE는 ~15K CPS
  • TLS 1.3 vs 1.2: 1.3은 1-RTT 핸드셰이크로 지연 감소하지만, PFS 필수(ECDHE)로 SPC3 키 교환 부하는 유사
  • SPC3 카드 추가 장착으로 SSL CPS를 선형 확장 가능 (SRX5800: 최대 SPC3 ×4)
  • 인증서 캐시 적중률이 높을수록 MITM 인증서 생성 부하 감소 (일반적으로 80~90% 적중)
Juniper SRX — SPC3 SSL Forward Proxy TLS 핸드셰이크 흐름 Client SPC3 Crypto flowd (CPU) Server ① ClientHello (SNI: example.com) ② SPC3 → 서버에 ClientHello 전달 ③ ServerHello + Certificate + KeyExchange ④ ECDHE 키 교환 (HW 가속) ⑤ Finished — 서버측 TLS 세션 수립 완료 ⑥ MITM 인증서 생성 SRX CA 서명 (캐시 확인) ⑦ ServerHello + MITM Certificate ⑧ ECDHE KeyExchange + Finished ⑨ 클라이언트측 TLS 세션 수립 데이터 전송 단계 (TLS 레코드) ⑩ TLS 레코드 (암호화) AES-GCM 복호화 (HW) ⑪ 평문 전달 ⑫ AppID + IPS + UTM ⑬ 검사 완료 AES-GCM 재암호화 (HW) ⑭ TLS 레코드 (서버 세션으로 재암호화) SPC3 크립토 엔진이 핸드셰이크(ECDHE) + 레코드(AES-GCM) 모두 HW 가속 — flowd는 평문 DPI만 담당
Juniper 참고 문서:
Juniper SRX — Express Path + SPC3 아키텍처 Express Path — 세션 히트/미스 분기 Packet In NP (NPU) Session Table Lookup Express Path 판정 Session Hit Express Path — NP 직접 전달 flowd bypass, 라인레이트 forwarding CPU bypass Packet Out Session Miss flowd Flow Daemon 정책 평가 IPS / AppID / UTM 허용 세션 설치 → Express Path 등록 SPC3 카드 — IPSec / SSL Proxy 처리 ESP In ESP NP (인입) SPC3 Crypto Engine AES-GCM Decrypt + ESP Decap 평문 Express Path 내부 전달 SPC3 Crypto AES-GCM Encrypt + ESP Encap ESP Out SSL Proxy 경로 (SPC3 + flowd) Client TLS NP SPC3 SSL Proxy TLS Decrypt flowd (DPI) AppID + IPS + UTM SPC3 SSL Proxy TLS Re-Encrypt Server SRX5800 + SPC3 — 처리 경로별 성능 Express Path: 2 Tbps NP 직접 forwarding flowd: 모델별 차이 정책+DPI CPU 처리 IPSec: ~50 Gbps/SPC3 SPC3 crypto engine SSL Proxy: SPC3+CPU TLS 복호화 부하 Express Path Hit 세션은 NP에서 라인레이트 처리 — flowd/SPC3 경유 시 처리량 감소 SPC3 카드 추가 장착으로 IPSec/SSL 처리량 선형 확장 가능

Linux 커널 기반 NGFW

Linux 커널과 오픈소스 도구를 조합하여 NGFW를 구축하는 접근법입니다. Inline SmartNIC + Lookaside SW 하이브리드 모델로, EST 세션은 SmartNIC eSwitch가 inline 처리(라인레이트)하고, DPI는 NFQUEUE를 통해 유저스페이스 Suricata에 위임(lookaside)합니다. 암호화는 NIC inline crypto 또는 QAT lookaside를 선택할 수 있습니다:

Linux NGFW 스택 구성

Linux 커널 기반 NGFW를 상용 수준으로 구축하기 위한 전체 스택:

계층구성 요소처리 방식역할대안
HW Fast PatheSwitch FDB (mlx5/ice)InlineEST 세션 라인레이트 전달OVS-DPDK TC offload
SW Fast Pathnf_flowtableInline (커널)HW 미지원 EST 세션 가속VPP session table
Stateful FWnftables + nf_conntrackInline (커널)ACL, NAT, 세션 추적iptables (레거시)
DPI / IPSSuricata (NFQUEUE mode)Lookaside시그니처 기반 탐지/차단nDPI, Snort 3
App-IDnDPI 라이브러리LookasideL7 프로토콜 분류Suricata App-Layer
SSL 검사mitmproxy / Suricata TLSLookasideSSL/TLS 프록시SSLsplit
DDoS Pre-filterXDP BPFInlineL3/L4 사전 필터tc-bpf
QoSTC qdisc (HTB/fq_codel)Inline (커널)대역폭 제어, 우선순위(Priority)CAKE
VPNStrongSwan (xfrm) + WireGuardInline (NIC) / Lookaside (QAT)사이트 간/원격 접속 VPNLibreswan
HAconntrackd + Keepalived제어 플레인세션 동기화 + VIP failoverPacemaker
관리nftables API + Prometheus제어 플레인정책 관리 + 모니터링Firewalld

VPP 기반 NGFW 데이터 플레인

FD.io VPP를 사용하면 커널 Netfilter 대신 유저스페이스에서 패킷 처리하여 더 높은 성능을 달성합니다:

# VPP 기반 NGFW 설정 예시
# /etc/vpp/startup.conf
dpdk {
  dev 0000:03:00.0 { name eth0 }
  dev 0000:03:00.1 { name eth1 }
}

# VPP CLI에서 ACL + session 설정
vppctl acl-plugin acl add permit+reflect \
  src 10.0.0.0/8 dst 0.0.0.0/0 proto tcp
vppctl set acl-plugin interface eth0 input acl 0

# 새 세션만 TAP으로 전달 (DPI)
vppctl create tap id 0
vppctl set interface state tap0 up

Linux NGFW SSL/TLS 검사 아키텍처

Linux 기반 NGFW에서 SSL/TLS 검사는 여러 오픈소스 컴포넌트를 조합하여 구현합니다. 상용 NGFW와 달리 단일 통합 솔루션이 아닌 계층별 독립 도구의 조합이며, 각 계층에서 inline/lookaside HW 가속을 선택적으로 적용할 수 있습니다.

TLS 처리 단계구현 도구처리 방식HW 가속
TLS 핸드셰이크 (ECDHE/RSA)mitmproxy / SSLsplit / Squid SSL BumpLookaside (유저스페이스 프록시)QAT (Intel QuickAssist) — 비대칭키 가속
MITM 인증서 생성OpenSSL (CA 서명)CPUQAT RSA 서명 가속
TLS 레코드 복호화 (AES-GCM)kTLS + NIC offload / QATInline (NIC) 또는 Lookaside (QAT)NIC inline crypto (ConnectX-7), QAT
DPI / IPS 검사Suricata (NFQUEUE)Lookaside (유저스페이스)AF_XDP, 멀티스레드
TLS 재암호화kTLS TX offload / QATInline (NIC) 또는 Lookaside (QAT)NIC inline crypto, QAT
Session ResumptionOpenSSL Session Cache / RedisCPU + 메모리-

SSL 검사 아키텍처 선택지

Linux NGFW에서 SSL/TLS 트래픽을 검사하는 대표적인 3가지 아키텍처입니다:

아키텍처구조장점단점처리량
NFQUEUE + mitmproxynftables → NFQUEUE → mitmproxy(TLS 프록시) → Suricata(DPI)구현 단순, Python 확장성능 낮음, CPS 제한~1-3 Gbps
Squid SSL Bump + ICAP투명 프록시 Squid → SSL Bump → ICAP → Suricata프록시 캐시, URL 필터링 통합TCP 프록시 오버헤드~3-8 Gbps
kTLS + QAT + SuricatakTLS NIC offload + QAT 핸드셰이크 → 커널 평문 → NFQUEUE DPIHW 가속, 최고 성능구성 복잡, NIC/QAT 의존~10-20 Gbps
Linux SSL 검사의 한계와 상용 대비 차이:
  • CPS 병목: 상용 NGFW(SP5, SPC3)는 전용 ASIC으로 50K~200K CPS를 달성하지만, Linux는 CPU+QAT로 ~10K~30K CPS 수준
  • 통합도: 상용은 핸드셰이크→복호화→DPI→재암호화가 단일 파이프라인이지만, Linux는 프록시(mitmproxy/Squid)와 DPI(Suricata)가 별도 프로세스
  • TLS 1.3 ECH: SNI가 암호화되면 mitmproxy/Squid의 SNI 기반 정책 적용이 불가 → IP/DNS 기반 우회 필요
  • 세션 오프로드 불가: SSL 검사 세션은 flowtable/eSwitch HW offload 대상에서 제외됨 (모든 패킷이 프록시를 통과해야 하므로)
Linux NGFW — SSL/TLS 검사 파이프라인 (3가지 아키텍처) ① NFQUEUE + mitmproxy (단순 구성, ~1-3 Gbps) Client nftables NFQUEUE → 유저스페이스 mitmproxy TLS Decrypt → DPI → Re-Encrypt Suricata 평문 IPS/IDS Server ② Squid SSL Bump + ICAP (프록시 통합, ~3-8 Gbps) Client TPROXY 투명 리다이렉트 Squid (SSL Bump) TLS Decrypt + MITM 인증서 + URL 필터 + 캐시 ICAP Suricata ICAP 서버 (DPI) Server ③ kTLS + QAT + Suricata (최고 성능, ~10-20 Gbps) Client QAT TLS 핸드셰이크 HW 가속 kTLS (NIC RX) AES-GCM HW 복호화 평문 nf_conntrack Suricata DPI NFQUEUE 평문 검사 kTLS (NIC TX) AES-GCM HW 재암호화 Server TLS 핸드셰이크 단계별 HW 가속 매핑 단계 CPU (SW) QAT 가속 NIC Inline ECDHE 키 교환 ~10K ops/s/core ~100-200K ops/s 미지원 RSA CA 서명 ~5K ops/s/core ~50-100K ops/s 미지원 AES-GCM 레코드 2-8 Gbps/core 100-200 Gbps 라인레이트 Session Ticket OpenSSL 캐시 미지원 미지원 QAT: 핸드셰이크(비대칭키) 가속 핵심 | NIC kTLS: 레코드(대칭키) 인라인 가속 핵심
Linux NGFW 참고 문서:
Linux 커널 기반 NGFW — 전체 스택 아키텍처 HW Layer Kernel Layer Userspace SmartNIC HW (eSwitch FDB + Inline Crypto) eSwitch FDB CT Offload IPSec Inline kTLS NIC QAT Accel EST 세션 HW offload → 라인레이트 200Gbps+ (ConnectX-7, BlueField-3) Linux Kernel — 네트워크 스택 XDP 초기 필터링 TC flower HW offload 규칙 nf_flowtable SW Fast Path (conntrack) Hit SW Fast Forward CPU 전달 Miss nftables 정책 평가 + conntrack NFQUEUE → 유저스페이스 xfrm (IPSec) + NIC inline crypto kTLS NIC offload + QAT flowtable Hit → SW fast path | Miss → nftables Slow Path → NFQUEUE DPI Userspace DPI — Suricata (NFQUEUE inline) IPS/IDS App-Layer Protocol File/TLS Logging VPP (대안) DPDK 기반 유저스페이스 FW Netfilter 대체 Linux NGFW — 경로별 처리량 (ConnectX-7 / BlueField-3 기준) HW Offload: 200 Gbps eSwitch FDB 라인레이트 SW Fast Path: 40 Gbps nf_flowtable CPU DPI: 10-20 Gbps NFQUEUE + Suricata IPSec: NIC inline xfrm + HW crypto kTLS: NIC+QAT SSL offload EST 세션은 eSwitch HW offload로 라인레이트 처리 — 새 세션만 커널/유저스페이스 DPI 경유 SmartNIC CT offload + nf_flowtable + Suricata = 상용 NGFW 수준의 오픈소스 스택

벤더별 SSL/TLS 핸드셰이크 처리 비교

모든 NGFW의 SSL/TLS Inspection은 MITM(Man-in-the-Middle) TLS Proxy 방식입니다. 클라이언트와 서버 사이에 두 개의 독립된 TLS 세션을 수립하고, NGFW가 중간에서 복호화 → DPI → 재암호화를 수행합니다. 벤더 간 차이는 각 TLS 핸드셰이크 단계의 처리 위치(CPU vs 전용 HW)처리 방식(inline vs lookaside)에 있습니다.

TLS 핸드셰이크 단계별 벤더 비교

TLS 핸드셰이크 단계FortinetPalo AltoCheck PointJuniperLinux
ClientHello 수신 + SNI 추출NP7 → CPU 분류FE FPGA → CPU 분류SND → CoreXL 분류NP → SPC3 분류nftables → 프록시 분류
서버측 TLS 세션 수립SP5 (HW)CPU (AES-NI)CPU (OpenSSL)SPC3 (HW)CPU / QAT 가속
ECDHE 키 교환SP5 ASIC — CPS 10~20× 향상CPU 멀티스레드 — ~15K CPSCPU AES-NI — 코어 수 의존SPC3 크립토 엔진 — ~15K CPS/카드CPU ~10K/core / QAT ~200K
RSA CA 서명 (MITM 인증서)SP5 ASIC — HW RSA 가속CPU — RSA 연산CPU — 인증서 캐시로 보완SPC3 — HW RSA 가속CPU / QAT RSA 가속
인증서 캐시 / Session ResumptionSP5 내부 캐시CPU 메모리 캐시CoreXL 인스턴스 캐시SPC3 인증서 캐시OpenSSL Session Cache
클라이언트측 TLS 세션 수립SP5 (HW)CPU (AES-NI)CPU (OpenSSL)SPC3 (HW)CPU / QAT
AES-GCM 레코드 복호화SP5 ASIC — 5~10× CPU 대비CPU AES-NI — ~4Gbps/coreCPU AES-NISPC3 — HW AES 가속kTLS NIC RX — 라인레이트
DPI / IPS 검사 (평문)CPU + CP9 (Lookaside)CPU SP3 Single-PassCoreXL FW Instanceflowd (CPU)Suricata (NFQUEUE)
AES-GCM 레코드 재암호화SP5 ASICCPU AES-NICPU AES-NISPC3kTLS NIC TX — 라인레이트
세션 오프로드 가능 여부불가 (SP5 전구간 통과 필수)불가 (CPU 전구간 통과 필수)불가 (Firewall Path 강제)불가 (SPC3 전구간 통과 필수)불가 (프록시 전구간 통과 필수)

SSL/TLS 처리 성능 비교

지표Fortinet 7081FPA-5440CP Quantum 28000Juniper SRX5800Linux (ConnectX-7 + QAT)
FW (비암호화)700 Gbps75 Gbps64 Gbps~2 Tbps (EP)200 Gbps (HW offload)
SSL Inspection 처리량35 Gbps12 Gbps7 GbpsSPC3 카드 수 의존10~20 Gbps (kTLS+QAT)
SSL CPS50K~200K (SP5)~15K (CPU)모델별 차이~10K/SPC3 카드~10-30K (QAT)
FW 대비 SSL 감소율1/201/61/9모델별1/10~1/20
핸드셰이크 HW 가속SP5 (전용 ASIC)없음 (CPU only)없음 (CPU only)SPC3 (전용 카드)QAT (선택)
레코드 HW 가속SP5 (전용 ASIC)없음 (AES-NI only)없음 (AES-NI only)SPC3 (전용 카드)NIC kTLS (선택)
TLS 1.3 지원FortiOS 7.0+PAN-OS 10.0+R81.20+Junos 21.4+OpenSSL 1.1.1+
공통 원칙: 모든 벤더에서 SSL/TLS Inspection 세션은 HW 세션 오프로드(Fast Path) 대상에서 제외됩니다. 매 패킷마다 복호화 → 검사 → 재암호화가 필요하므로 ASIC/FPGA bypass가 불가능합니다. 따라서 SSL Inspection 활성화 비율이 높을수록 전체 NGFW 처리량이 급감합니다. 이를 완화하는 전략은: (1) SSL Inspection 바이패스 정책 (신뢰 사이트, Windows Update, CDN 등 제외), (2) Session Resumption (핸드셰이크 비용 절감), (3) HW 가속 확장 (SP5/SPC3 추가, QAT 카드 증설)입니다.
NGFW TLS MITM Proxy — 핸드셰이크 단계별 HW 가속 비교 TLS MITM Proxy 공통 구조 (모든 벤더 동일) Client TLS① TLS Decrypt 클라이언트측 세션 평문 DPI / IPS / App-ID 평문에 대한 보안 검사 평문 TLS Encrypt 서버측 세션 TLS② Server TLS① = Client↔NGFW 세션 (MITM 인증서) | TLS② = NGFW↔Server 세션 (진짜 인증서) 벤더별 TLS 핸드셰이크 처리 엔진 단계 Fortinet Palo Alto Check Point Juniper Linux ECDHE 키 교환 SP5 ASIC CPU only CPU only SPC3 HW CPU / QAT RSA CA 서명 SP5 ASIC CPU only CPU + 캐시 SPC3 HW CPU / QAT AES-GCM 복호화 SP5 ASIC CPU AES-NI CPU AES-NI SPC3 HW kTLS NIC DPI / IPS 검사 CPU + CP9 SP3 Single-Pass CoreXL FW flowd CPU Suricata AES-GCM 재암호화 SP5 ASIC CPU AES-NI CPU AES-NI SPC3 HW kTLS NIC 세션 오프로드 불가 불가 불가 불가 불가 범례 전용 HW ASIC 가속 전용 HW 카드 가속 CPU (AES-NI / SW) CPU only (HW 없음) 아키텍처 고유 최적화 TLS 1.2 vs 1.3 핸드셰이크 차이와 NGFW 영향 TLS 1.2 — 2-RTT 핸드셰이크 ClientHello → ServerHello+Cert → KeyExchange → Finished NGFW: SNI 평문 노출 → 정책 적용 가능, 2-RTT 지연 TLS 1.3 — 1-RTT (+ 0-RTT 가능) ClientHello+KeyShare → ServerHello+Cert+Finished (1-RTT) NGFW: PFS 필수(ECDHE 매회), ECH 시 SNI 암호화 → 정책 적용 난이도↑ TLS 1.3은 핸드셰이크 RTT 감소 → CPS 소폭 향상 | ECH 활성화 시 SNI 기반 복호화 정책 적용 불가
상용 NGFW 아키텍처 비교 Fortinet NP7 ASIC SP5 Crypto CP9 DPI CPU (FW) 전용 ASIC 기반 Palo Alto FE FPGA NPC Card CPU (Single-Pass App-ID/IPS) FPGA + CPU 병렬 Check Point SecureXL CoreXL Maestro HyperScale 순수 SW 가속 Linux NGFW eSwitch HW flowtable NFQUEUE nftables SmartNIC + 커널 아래 테이블에서 상세 비교 →
특성Fortinet (NP7)Palo Alto (FPGA)Check PointJuniper SRXLinux SmartNIC
Fast Path 방식ASIC session tableFPGA forwarding engineSecureXL Accept TemplateExpress Path NPUeSwitch FDB + flowtable
Fast Path 처리량200Gbps+모델 의존 (100Gbps)SW 기반 (제한적)NPU 의존NIC 라인레이트
DPI 방식CPU + CP9 보조CPU (Single-Pass)CPU (CoreXL)CPU (flowd)NFQUEUE + Suricata
IPSec 가속NP7 내장FPGA/CPUSWServices EngineNIC inline crypto
SSL/TLS 가속SP5 전용 칩CPUCPUCPUkTLS + CPU
NAT 오프로드NP7 HWFPGA HWSecureXL SWNPUflowtable/eSwitch
세션 테이블 크기수천만수백만수백만수백만NIC 의존 (수만~수십만 HW)
수평 확장HA clusterHA clusterMaestroChassis cluster커널 네임스페이스(Namespace)/VRF
커스터마이즈제한적 (벤더 종속)제한적중간제한적완전 자유
라이선스 비용높음매우 높음높음높음하드웨어 비용만

상용 NGFW 암호화 처리 비교

암·복호화 트래픽 관점에서 각 벤더의 아키텍처를 비교합니다. SSL/TLS Inspection과 IPSec VPN 처리는 NGFW 성능에서 가장 큰 차이를 만드는 영역입니다.

암호화 특성Fortinet (NP7+SP5)Palo Alto (FPGA+CPU)Check Point (SW)Juniper SRX (SPC3)Linux (SmartNIC+QAT)
SSL Inspection 가속 방식SP5 전용 ASICCPU (AES-NI)CPU (CoreXL + AES-NI)SPC3 크립토 엔진kTLS NIC + Intel QAT
TLS 핸드셰이크 가속SP5 HW (RSA/ECDHE)CPU 멀티코어CPU 멀티코어SPC3 HWQAT/NITROX ASIC
TLS 레코드 암·복호화SP5 HW (AES-GCM)CPU (AES-NI)CPU (AES-NI)SPC3 HWkTLS NIC inline
SSL Inspection 처리량35 Gbps (7081F)12 Gbps (PA-5440)7 Gbps (28000)SPC3 카드 수 의존3~8 Gbps (kTLS+CPU)
SSL CPS~200K (SP5)~15K (CPU)~10K (CoreXL)~10K (SPC3)~100K (QAT)
IPSec 가속 방식NP7 내장 cryptoFPGA + CPUCPU (AES-NI)SPC3 전용 엔진NIC inline crypto
IPSec 처리량200 Gbps (NP7)모델 의존SW 기반 (제한적)~50 Gbps/SPC3NIC 라인레이트
지원 cipher suiteAES-GCM, ChaCha20AES-GCM, ChaCha20AES-GCM, ChaCha20AES-GCMAES-GCM (NIC 의존)
TLS 1.3 지원지원지원 (초기 지원)지원 (R81.20+)지원 (22.x+)지원 (커널 5.3+)
FIPS 140-2/3인증인증인증인증QAT FIPS 모드 가능
EST 세션 crypto offloadNP7 (IPSec), SP5 (SSL)제한적불가 (Firewall Path)SPC3 (IPSec)NIC full offload (IPSec)
벤더별 암호화 아키텍처 핵심 차이:
  • Fortinet: 전용 ASIC(SP5)으로 SSL 처리 → 최고의 SSL Inspection 성능. 단, 벤더 칩에 종속
  • Palo Alto: 범용 CPU + SP3 파이프라인 → 유연한 cipher 지원, 빠른 TLS 표준 대응. 단, SSL 처리량 제한적
  • Check Point: 순수 SW → Maestro로 수평 확장 가능. 단, 단일 장비 SSL 성능 가장 낮음
  • Juniper: SPC3 카드로 모듈식 확장 → 필요한 만큼 카드 추가. IPSec에 강점
  • Linux: QAT(핸드셰이크) + kTLS NIC(레코드) + IPSec full offload 조합 → 가장 유연하지만 통합 복잡
상용 NGFW — 암호화 처리 아키텍처 비교 (SSL Inspection 관점) Fortinet SP5: TLS Handshake HW SP5: AES-GCM HW NP7: IPSec Full HW CPU: DPI/App-ID만 SSL: 35 Gbps Palo Alto CPU: TLS Handshake CPU: AES-GCM (AES-NI) FPGA: Session FWD CPU: DPI (Single-Pass) SSL: 12 Gbps Check Point CPU: TLS Handshake CPU: AES-GCM (AES-NI) CPU: SecureXL+CoreXL CPU: DPI (Firewall Path) SSL: 7 Gbps Linux SmartNIC QAT: TLS Handshake HW kTLS NIC: AES-GCM HW NIC: IPSec Full Offload CPU: DPI (Suricata) SSL: 3~8 Gbps Juniper SRX SPC3: TLS Handshake SPC3: AES-GCM HW SPC3: IPSec HW CPU: DPI (flowd) SSL: SPC3 의존 암호화 오프로드 전략의 핵심 인사이트 전용 ASIC (Fortinet SP5) → 최고 SSL 성능, 최저 유연성 | 범용 CPU (Palo Alto/CP) → 최고 유연성, 최저 SSL 성능 모듈식 카드 (Juniper SPC3) → 필요 시 확장 | SmartNIC+QAT (Linux) → 구성요소 자유 조합, 통합 복잡도 높음 공통점: 모든 벤더에서 SSL Inspection 활성화 시 FW 처리량의 1/5~1/20로 감소 → 암호화 오프로드가 NGFW 성능의 핵심

NGFW 배포 아키텍처 패턴

NGFW를 네트워크에 배치하는 방식에 따라 가시성, 성능 영향, 장애 복원력이 달라집니다. 배포 모드는 크게 4가지로 분류되며, 각 모드에서 HW 오프로드의 적용 범위가 다릅니다.

배포 모드네트워크 위치동작 방식장점단점HW 오프로드 적용
인라인 브릿지(L2 Transparent)두 세그먼트 사이 직렬 삽입L2 브릿지로 동작하며 모든 트래픽 검사·차단IP 주소 변경 불필요, 기존 네트워크 토폴로지 유지NGFW 장애 시 통신 단절 (bypass 모듈 필요)eSwitch FDB, flowtable 전체 활용
인라인 라우팅(L3 Gateway)라우터/게이트웨이 위치L3 라우팅 + NAT + 정책 적용NAT/VPN/QoS 통합, 가장 일반적인 배포라우팅 설정 변경 필요, 지연 추가eSwitch FDB, flowtable, NIC inline crypto
TAP/미러(Out-of-Band)스위치 미러 포트에 연결트래픽 복사본만 수신하여 검사 (IDS 모드)네트워크에 영향 없음, 장애 무관차단 불가 (탐지만), 미러 대역폭 제한제한적 (NIC RX만 사용)
투명 프록시(TPROXY)인라인이지만 프록시로 동작TCP 세션을 가로채어 L7 프록시 처리 후 재전달SSL Inspection 최적, 세밀한 L7 제어UDP/비TCP 처리 제한, CPU 집약적QAT(핸드셰이크), kTLS(레코드)

인라인 배포의 장애 대응: HW 바이패스

인라인 브릿지/라우팅 배포에서 NGFW 장애 시 네트워크 단절을 방지하기 위해 HW 바이패스(Hardware Bypass) 모듈을 사용합니다. 바이패스는 전기·광학 수준에서 패킷을 NGFW를 우회하여 직접 전달합니다.

바이패스 유형동작 원리전환 시간적용 환경
전기 바이패스(Copper Bypass)릴레이 스위치가 NIC 포트 쌍을 직접 연결~10ms1G/10G 구리 환경
광 바이패스(Optical Bypass)MEMS 스위치가 광 경로를 전환~50ms10G/40G/100G 광 환경
NIC 내장 바이패스SmartNIC 펌웨어가 eSwitch를 바이패스 모드로 전환~1msSmartNIC/DPU 배포
Watchdog 타이머호스트 OS/프로세스 모니터링 → 응답 없으면 자동 바이패스설정 의존 (1~30초)모든 인라인 배포
# SmartNIC 바이패스 모드 설정 (Silicom 예시)
# Watchdog 타이머 설정 — 5초 무응답 시 자동 바이패스
bpctl_util eth0 set_bypass_wd 5000   # 5000ms = 5초

# 바이패스 상태 확인
bpctl_util eth0 get_bypass
# bypass: off (normal mode)

# 수동 바이패스 전환 (유지보수 시)
bpctl_util eth0 set_bypass on

# Intel E810 NIC 바이패스 (ice 드라이버)
ethtool --set-priv-flags eth0 bypass on

고가용성(HA) 아키텍처

NGFW의 HA 구성은 세션 동기화가 핵심입니다. 장애 발생 시 기존 세션이 끊기지 않으려면 Active 장비의 conntrack 테이블을 Standby 장비에 실시간 복제해야 합니다.

HA 모드상용 NGFWLinux NGFW세션 동기화Failover 시간
Active-StandbyFortiGate HA, PA HA (A/P)Keepalived VRRP + conntrackd전체 세션 테이블 복제~1-3초
Active-ActiveFortiGate HA (A/A), PA HA (A/A)Keepalived + conntrackd multicast세션 소유권 분산 + 동기화~0.5-1초
클러스터Check Point Maestro, FortiGate ClusterLinux IPVS + conntrackd클러스터 멤버 간 분산~0.1-0.5초
# Linux NGFW HA 구성 — conntrackd + Keepalived

# 1. conntrackd — 세션 테이블 실시간 동기화
# /etc/conntrackd/conntrackd.conf
Sync {
    Mode FTFW {                    # Fault Tolerant FW 모드
        ResendQueueSize 131072
        ACKWindowSize 300
    }
    Multicast {
        IPv4_address 225.0.0.50
        Group 3780
        IPv4_interface 192.168.100.1
        Interface eth2              # 전용 동기화 인터페이스
    }
}
General {
    HashSize 32768
    HashLimit 131072
    Syslog on
    LockFile /var/lock/conntrack.lock
    UNIX { Path /var/run/conntrackd.ctl }
    Filter From Userspace {
        Protocol Accept {
            TCP SCTP DCCP
        }
        Address Ignore {
            IPv4_address 127.0.0.1
            IPv4_address 192.168.100.0/24  # 동기화 서브넷 제외
        }
    }
}

# 2. Keepalived — VIP failover
# /etc/keepalived/keepalived.conf
vrrp_instance NGFW_HA {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass ngfw_ha_secret
    }
    virtual_ipaddress {
        10.0.0.1/24       # 게이트웨이 VIP
    }
    notify_master "/etc/conntrackd/primary-backup.sh primary"
    notify_backup "/etc/conntrackd/primary-backup.sh backup"
    notify_fault  "/etc/conntrackd/primary-backup.sh fault"
}

# 3. failover 스크립트 — primary-backup.sh
# primary 승격 시 conntrackd에서 세션 테이블 bulk 로드
# conntrackd -C /etc/conntrackd/conntrackd.conf -c
# conntrackd -C /etc/conntrackd/conntrackd.conf -B
HW 오프로드와 HA의 상호작용: SmartNIC eSwitch FDB에 오프로드된 세션은 커널 conntrack 테이블에도 동기화되어야 합니다. nf_flowtableoffload timeout이 만료되면 세션이 커널로 복귀하며, 이 시점에서 conntrackd가 동기화합니다. HW offload 세션의 failover는 NIC FDB 테이블 재구축이 추가되므로, SW-only 대비 ~1-2초 추가 지연이 발생할 수 있습니다.

TLS 1.3/ECH와 SSL Inspection의 미래

TLS 1.3과 ECH(Encrypted Client Hello)의 확산은 NGFW SSL Inspection에 근본적인 도전을 제기합니다. 기존 SSL Inspection의 핵심 가정 — ClientHello에서 SNI를 읽을 수 있고, MITM 프록시를 통해 복호화할 수 있습니다 — 이 흔들리고 있습니다.

TLS 1.3이 NGFW에 미치는 영향

TLS 1.3 변경점NGFW에 미치는 영향대응 방안
1-RTT 핸드셰이크CPS 약 20% 향상 (RTT 감소). MITM 프록시의 핸드셰이크 복잡도 증가전용 ASIC(SP5, SPC3)의 TLS 1.3 지원 업데이트
0-RTT (Early Data)첫 패킷에 애플리케이션 데이터 포함 → 정책 적용 전 데이터 전달 위험0-RTT 차단 정책 또는 재전송 공격(Replay Attack) 방어
PFS 필수 (ECDHE only)RSA 정적 키 기반 Inbound Inspection 불가 → 반드시 MITM 프록시 필요모든 벤더가 Forward Proxy 방식으로 전환
인증서 암호화ServerHello 이후 인증서가 암호화됨 → 패시브 모니터링에서 서버 식별 불가MITM 프록시는 영향 없음 (프록시가 직접 서버와 핸드셰이크)
HelloRetryRequestNGFW가 지원하지 않는 key share 시 추가 RTT 발생NGFW의 지원 curve 목록 최신 유지 (X25519, P-256)

ECH(Encrypted Client Hello)의 도전

ECH는 TLS ClientHello의 SNI 필드를 암호화하여 중간자(NGFW 포함)가 접속 대상 서버를 식별하지 못하게 합니다. 이는 SNI 기반 SSL Inspection 정책의 핵심 전제를 무력화합니다.

기존 SSL InspectionECH 적용 후
ClientHello의 server_name 확장에서 SNI 추출외부 ClientHello(ClientHelloOuter)에는 프론팅 도메인만 노출, 실제 SNI는 암호화
SNI 기반 정책: "banking.com → 바이패스, sns.com → 검사"실제 대상 서버를 알 수 없으므로 SNI 기반 정책 무효화
MITM 프록시가 서버에 직접 연결 시 SNI 전달ECH 키가 없으면 MITM 프록시도 실제 SNI를 복호화할 수 없음

NGFW 벤더별 ECH 대응 전략:

대응 전략동작 방식장점한계
ECH 차단ECH 확장이 포함된 ClientHello를 DROP 또는 ECH 없이 재시도 유도구현 단순, 즉시 적용 가능사용자 경험 저하, ECH 필수 서비스 접속 불가
DNS 기반 정책DNS 쿼리를 모니터링하여 도메인→IP 매핑 캐시 → IP 기반 정책 적용SNI 없이도 도메인 식별 가능CDN/공유 IP에서 정확도 저하, DoH/DoT 우회 가능
엔드포인트 에이전트엔드포인트에 에이전트를 설치하여 프로세스/URL 수준 가시성 확보TLS 계층 우회, 정확한 대상 식별BYOD 환경 적용 어려움, 에이전트 관리 부담
SASE/SSE 통합클라이언트 트래픽을 클라우드 보안 게이트웨이로 터널링네트워크 경로에 관계없이 검사 가능지연 증가, 클라우드 의존성
ECH 확산 일정과 영향 범위:
  • Cloudflare: 2024년부터 전체 고객 도메인에 ECH 기본 활성화. CDN 뒤의 모든 사이트가 ECH 대상
  • Firefox: ECH 기본 활성화 (about:config network.dns.echconfig.enabled)
  • Chrome: ECH 지원 (DNS HTTPS 레코드 기반 자동 활성화)
  • ECH가 보편화되면 SNI 기반 SSL Inspection은 사실상 무력화됩니다. NGFW 벤더들은 DNS 가시성(DoH 복호화), 엔드포인트 통합, SASE 전환을 병행하는 방향으로 전략을 전환하고 있습니다
  • 기업 환경에서는 내부 DNS 서버에서 ECH HTTPS 레코드를 제거하여 ECH 협상을 차단하는 단기 대응이 가능합니다

포스트 양자(PQC) 암호화와 NGFW

NIST가 표준화한 포스트 양자 암호화 알고리즘(ML-KEM, ML-DSA)이 TLS에 도입되면, NGFW의 SSL Inspection 성능에 직접적인 영향을 미칩니다.

항목ECDHE P-256 (현행)ML-KEM-768 (PQC)NGFW 영향
키 교환 크기~130 bytes~2,400 bytes (캡슐화 키 + 암호문)핸드셰이크 패킷 크기 ~18배 증가 → NIC 버퍼/MTU 압박
키 교환 연산~0.1ms (CPU)~0.3ms (CPU, lattice 연산)CPS ~30% 감소 (SW 기반). 전용 ASIC 미지원 시 병목 심화
하이브리드 모드-ECDHE + ML-KEM 이중 키 교환핸드셰이크 크기·연산 모두 증가. 현행 전환기의 기본 모드
HW 가속 지원QAT, SP5, SPC3 모두 지원2026년 기준 전용 ASIC 미출시SW fallback 필수 → ASIC 기반 벤더의 CPS 우위 일시적 감소
PQC 전환이 NGFW 아키텍처에 미치는 의미: 현재 Fortinet SP5, Juniper SPC3 등 전용 ASIC의 CPS 우위는 RSA/ECDHE 가속에 기반합니다. PQC 알고리즘(ML-KEM)은 기존 ASIC에서 가속할 수 없으므로, PQC 전환기에는 범용 CPU 기반 NGFW와 전용 ASIC 기반 NGFW의 성능 격차가 일시적으로 축소될 수 있습니다. 장기적으로 PQC ASIC이 등장하면 다시 격차가 벌어질 것으로 예상됩니다.

상용 vs Linux NGFW 선택 기준

상용 NGFW와 Linux 기반 NGFW는 하드웨어 아키텍처뿐 아니라 운영 모델, 비용 구조, 조직 역량 요구사항이 근본적으로 다릅니다. 아래 표는 실무에서 선택 시 고려해야 할 핵심 차원을 정리합니다.

평가 차원상용 NGFWLinux NGFW판단 기준
초기 도입 비용높음 (장비+라이선스+지원 계약)낮음 (범용 서버+SmartNIC+OSS)3년 TCO로 비교. 상용은 HW 교체 주기(5~7년), Linux는 NIC 세대 교체 비용 고려
운영 인력 요구보안 운영자 (GUI/CLI 중심)커널·네트워크·보안 엔지니어 (코드 수준)nftables/Suricata/kTLS 직접 튜닝 가능한 인력 확보 여부가 핵심
보안 인증CC EAL4+, FIPS 140-2/3, NDPP 취득 완료개별 컴포넌트별 인증 필요 (QAT FIPS 모드 등)금융·공공·국방 규제 환경에서는 사실상 상용 필수
SSL Inspection CPS전용 ASIC: 50K~200K CPSQAT+CPU: 10K~30K CPSHTTPS 트래픽 비율 80%+ 환경에서 병목 포인트
DPI/IPS 성능벤더 최적화 엔진 (ASIC 보조)Suricata/nDPI (범용 CPU)시그니처 수 1만+ 환경에서 CPU 기반 DPI의 한계
FW L4 처리량NP7: 700 Gbps, SP3: 75 GbpseSwitch FDB: 200 Gbps+ (라인레이트)L4 세션 전달은 Linux SmartNIC이 오히려 우위
프로토콜 유연성벤더 펌웨어 업데이트 의존커널/유저스페이스 코드 직접 수정QUIC, MASQUE 등 신규 프로토콜 즉시 대응 가능 여부
수평 확장Maestro 클러스터, 고가 chassisconntrackd + Keepalived + 범용 서버 추가클라우드/컨테이너 환경에서 Linux가 유연
관리 플레인통합 GUI (FortiManager, Panorama 등)Ansible/Terraform + Prometheus/Grafana 조합NOC/SOC 팀의 기존 운영 도구 체계와의 호환성
벤더 종속높음 (ASIC·OS·라이선스 묶음)없음 (표준 커널 API, NIC 교체 자유)멀티벤더 전략 또는 장기 아키텍처 자율성 필요 시
장애 대응벤더 TAC (4시간 SLA 등)내부 엔지니어 + 커뮤니티24×7 SLA 보장이 사업 요구인지 여부
위협 인텔리전스벤더 피드 포함 (FortiGuard, WildFire 등)ET Open/Pro + Abuse.ch + MISP 조합제로데이 대응 속도와 시그니처 품질

시나리오별 선택 가이드

시나리오추천근거
금융·공공 규제 환경
CC/FIPS 인증 필수
상용 NGFW개별 OSS 컴포넌트로 규제 인증을 취득하는 비용이 상용 도입 비용을 초과합니다
데이터센터 100G+ 게이트웨이
동서 트래픽 필터링
Linux NGFW (SmartNIC)eSwitch FDB HW offload로 라인레이트 L4 필터링. DPI가 필요한 세션만 선별적으로 Suricata 경유
중소기업 인터넷 경계
IT 인력 1~2명
상용 NGFWGUI 기반 관리, 벤더 지원, 올인원 UTM으로 운영 부담 최소화
통신사/CDN 인프라
커스텀 파이프라인 필수
Linux NGFW + VPP/DPDKeBPF/XDP 기반 프로그래머블 파이프라인, DPDK eventdev(DLB/SSO) 연동
클라우드 네이티브 환경
Kubernetes 마이크로서비스
Linux NGFW (eBPF)Cilium + Hubble 기반 서비스 메시 보안, Pod 단위 정책, 서비스 메시(Service Mesh) 통합
지사/원격 사무소
SD-WAN 통합 필요
상용 NGFWFortiGate SD-WAN, PA Prisma SD-WAN 등 NGFW+SD-WAN 통합 제품이 운영 효율적
보안 연구/교육 환경Linux NGFW커널 소스 수준의 분석과 실험이 가능하고, 라이선스 비용이 없습니다
하이브리드 접근법: 실무에서는 순수한 양자택일보다 하이브리드 배포가 증가하는 추세입니다. 대표적인 패턴:
  • 상용 관리 플레인 + Linux 데이터 플레인: 상용 NGFW의 정책 관리 GUI를 사용하되, 실제 데이터 플레인은 SmartNIC/eBPF 기반으로 가속 (일부 벤더가 이 모델 채택 중)
  • 인터넷 경계 = 상용 + 내부 = Linux: 규제가 적용되는 외부 경계는 인증된 상용 NGFW, 데이터센터 내부 동서 트래픽은 Linux SmartNIC 기반 필터링
  • 클라우드 = Linux + 온프레미스 = 상용: 클라우드 워크로드는 eBPF/Cilium, 온프레미스 레거시는 기존 상용 NGFW 유지

성능 비교 벤치마크 (참고 수치)

다음은 공개된 데이터시트와 독립 벤치마크(NSS Labs, RFC 9411 기반)에서 추출한 참고 수치입니다. 실제 환경에서는 정책 복잡도, 트래픽 믹스, DPI 시그니처 수에 따라 크게 달라집니다:

메트릭Fortinet 7081F (NP7)PA-5440CP 28000 (Maestro)Linux + CX-7 (200G)
FW 처리량 (L4)700 Gbps75 Gbps64 Gbps200 Gbps (HW offload)
NGFW 처리량 (DPI+IPS)60 Gbps30 Gbps15 Gbps10~20 Gbps (Suricata)
Threat Protection40 Gbps22 Gbps12 Gbps5~15 Gbps
SSL Inspection35 Gbps (SP5)12 Gbps7 Gbps3~8 Gbps (kTLS)
CPS1.5M450K300K200K~500K
동시 세션45M16M10Mconntrack_max 설정 의존

Linux NGFW의 NGFW 처리량은 Suricata DPI에 의해 제한되지만, FW 처리량(L4 stateful)에서는 SmartNIC HW offload로 상용 제품에 필적하는 성능을 달성합니다. 핵심은 오프로드 비율을 높여 DPI 부하를 최소화하는 것입니다.

벤치마크 수치 출처와 주의사항:
  • Fortinet 7081F: FortiGate 7000 Series Data Sheet 기준. FW 처리량 700Gbps는 NP7 ASIC 다중 장착 시 합산 값
  • PA-5440: PA-5400 Series Data Sheet 기준. App-ID + IPS + logging 활성화 시 30Gbps
  • CP 28000: Quantum Gateway 모델 비교 기준. Maestro 클러스터 시 수평 확장 가능
  • Linux + CX-7: NVIDIA ConnectX-7 Product Brief 기준 NIC 라인레이트. NGFW 처리량은 Suricata 멀티코어 벤치마크 참고
  • 모든 벤더 수치는 최적 조건(단순 트래픽 믹스, 최소 정책)에서의 데이터시트 값이며, 실제 환경에서는 RFC 9411 방법론에 따라 독립적으로 측정해야 합니다

NGFW 성능 측정 방법론 (RFC 9411)

RFC 9411 (Benchmarking Methodology for Network Security Device Performance)은 NGFW 성능을 표준화된 방식으로 측정하기 위한 IETF 표준입니다. 벤더 데이터시트의 수치는 대부분 최적 조건에서 측정되므로, 실제 환경 성능을 예측하려면 RFC 9411 기반 독립 벤치마크가 필수입니다.

핵심 성능 메트릭

메트릭정의측정 방법실무 의미
FW 처리량 (Throughput)L4 stateful 방화벽의 최대 양방향 처리량 (bps)UDP/TCP 혼합, 다양한 패킷 크기, EST 세션 상태데이터시트 최대값은 대형 패킷(1518B) + 단순 정책 기준. 소형 패킷(64B)에서 1/5~1/10으로 감소 가능
NGFW 처리량App-ID + IPS + URL 필터링 전체 활성 시 처리량HTTP/HTTPS 혼합 트래픽, 실 시그니처 로드FW 처리량 대비 30~60% 수준이 일반적
SSL Inspection 처리량TLS 복호화 + DPI + 재암호화 시 처리량TLS 1.2/1.3 혼합, AES-256-GCM, RSA-2048/ECDHE P-256FW 처리량의 1/5~1/20. NGFW 성능에서 가장 큰 차이를 만드는 메트릭
CPS (Connections Per Second)초당 새 TCP/TLS 연결 수립 가능 수TCP SYN → ACK → data → FIN 전체 사이클웹 트래픽 특성상 소형 연결이 다수. SSL CPS는 핸드셰이크 부하로 TCP CPS의 1/10~1/100
CC (Concurrent Connections)동시 유지 가능한 세션 수점진적 세션 누적 후 최대치 측정conntrack 테이블/ASIC 세션 메모리 크기에 의존. 메모리 포화 시 새 세션 거부
지연 시간 (Latency)패킷 입력→출력 간 추가 지연RFC 2544 기반 one-way 또는 round-trip인라인 HW offload: <10μs, SW DPI 경유: 50~500μs

트래픽 프로파일과 성능 변동

데이터시트 수치와 실제 성능의 격차는 트래픽 프로파일에 의해 결정됩니다. RFC 9411은 다양한 실 환경 트래픽 패턴을 반영한 테스트를 권고합니다.

트래픽 특성데이터시트 조건 (최적)실 환경 조건성능 영향
패킷 크기1518B (jumbo frame 포함)IMIX (64B:7, 570B:4, 1518B:1)소형 패킷 비율 ↑ → PPS 병목, 처리량 30~50% 감소
HTTPS 비율0% (비암호화 HTTP)80~90% (실 트래픽)SSL Inspection 활성 시 처리량 80~95% 감소
정책 수1~10개 단순 규칙500~5,000개 복합 규칙정책 수 ↑ → 규칙 평가 시간 증가, 10~30% 추가 감소
IPS 시그니처기본 시그니처 세트10,000~50,000개 활성시그니처 수 ↑ → 패턴 매칭 시간 비례 증가
세션 수소수 대용량 세션수백만 소형 세션 동시conntrack 메모리 압박, 해시 충돌, CPS 병목
DLP/파일 검사비활성활성 (대용량 파일 스캔)파일 버퍼링으로 지연 급증, 메모리 소모 증가
실무 벤치마크 가이드:
  • 데이터시트 수치는 상한선: 실 환경 처리량은 데이터시트의 30~60% 수준이 일반적입니다. SSL Inspection 활성 시 5~20%까지 감소할 수 있습니다
  • IMIX 기준 측정: RFC 9411의 IMIX(Internet Mix) 프로파일로 측정한 수치가 실 환경에 가장 가깝습니다
  • SSL Inspection은 반드시 별도 측정: TLS 1.2 RSA-2048, TLS 1.3 ECDHE P-256, 혼합 비율별 CPS와 처리량을 각각 측정합니다
  • 장기 안정성 테스트: 1시간 이상 지속 부하를 주어 메모리 누수, 세션 테이블 포화, CPU 서멀 스로틀링 등을 확인합니다
  • 벤치마크 도구: Cisco TRex (DPDK 기반 트래픽 생성기), BreakingPoint, Keysight CyPerf가 RFC 9411 호환 테스트를 지원합니다

참고자료

벤더 기술 문서

표준/벤치마크

다음 학습: