12ICAPICAP
ICAP(Internet Content Adaptation Protocol) 는 투명 프록시 서버를 확장하기 위해 만들어진 가볍고 HTTP를 닮은 요청·응답 프로토콜 입니다. 새 기능을 구현하는 방식을 표준화하고, 검사 작업을 별도 장비로 떼어 내어 프록시의 자원을 아껴 줍니다. 현실에서는 보통 투명 HTTP 프록시 캐시에 바이러스 검사와 콘텐츠 필터 를 붙이는 데 쓰입니다. Check Point의 Threat Prevention에서는 이 ICAP를 통해 게이트웨이를 서드파티 콘텐츠 검사 장비와 토폴로지 변경 없이 연동 합니다.
이 장은 ICAP의 원리부터, 게이트웨이를 ICAP Client 로 구성하는 전체 절차(구성 파일의 모든 파라미터, VSX 모드, 고급 커널 파라미터, Data Trickling), 그리고 게이트웨이를 ICAP Server 로 구성하는 절차(SmartConsole 설정, TLS 암호화 연결, 고급 프로세스 튜닝)까지 원문이 다루는 내용을 빠짐없이 풀어 정리합니다.
ICAP의 동작 원리
ICAP는 의미와 사용법이 HTTP/1.1 과 매우 비슷하지만, HTTP 자체도 아니고 HTTP 위에서 도는 응용 프로토콜도 아닙니다. RFC 3507로 표준화되어 있어, 서로 다른 벤더의 장비가 ICAP로 통신할 수 있습니다(자세한 사양은 ICAP Specification과 Draft RFC - ICAP Extensions를 참고하세요).
핵심은 두 역할입니다.
- ICAP Client 는 HTTP/HTTPS 메시지를 ICAP Server 로 보내 "콘텐츠 적응(content adaptation)"을 요청합니다.
- ICAP Server 는 받은 메시지에 자신의 변환 서비스를 적용하고, 보통 수정된 HTTP/HTTPS 메시지를 담아 응답을 돌려줍니다. 적응 대상은 HTTP/HTTPS 요청일 수도, 응답일 수도 있습니다.
ICAP 메시지는 TCP 안에 캡슐화 되어 전달됩니다.
ICAP 메서드
ICAP에는 세 가지 메서드가 있습니다.
| 메서드 | 설명 |
|---|---|
| REQMOD | Client Request Modification. ICAP Client가 HTTP/HTTPS 요청 을 수정하려고 쓰는 메서드입니다. |
| RESPMOD | Server Response Modification. ICAP Client가 HTTP/HTTPS 응답 을 수정하려고 쓰는 메서드입니다. |
| OPTIONS | ICAP Client가 ICAP Server로부터 설정 정보를 조회 할 때 쓰는 메서드입니다. |
ICAP 응답 코드
ICAP 응답 코드 중 HTTP의 같은 번호와 의미가 다른 것들은 다음과 같습니다.
| 분류 | 코드 | 설명 |
|---|---|---|
| 1yz 정보 코드 | 100 | ICAP preview 이후 계속 진행(Continue). |
| 2yz 성공 코드 | 204 | No Content. 수정이 필요 없음. |
206 | Partial Content(부분 콘텐츠). | |
| 4yz Client 오류 코드 | 400 | 잘못된 요청(Bad request). |
404 | ICAP 서비스를 찾을 수 없음. | |
405 | 해당 서비스에서 허용되지 않는 메서드(예: REQMOD만 지원하는 서비스에 RESPMOD 요청). | |
408 | 요청 타임아웃. ICAP Server가 ICAP Client의 요청을 기다리다 시간 초과됨. | |
418 | 잘못된 구성(Bad composition). ICAP Server가 요청에 담긴 것과 다른 캡슐화 섹션을 필요로 함. | |
| 5yz Server 오류 코드 | 500 | 서버 오류(예: "디스크 공간 부족"). |
501 | 메서드 미구현. OPTIONS 구현은 필수이므로 OPTIONS 요청에 대해서는 이 응답이 부적합함. | |
502 | Bad Gateway. ICAP 프록시 오류. | |
503 | 서비스 과부하. ICAP Server가 해당 서비스의 최대 연결 수를 초과함. ICAP Client는 앞으로 이 한도를 넘지 말아야 함. | |
505 | ICAP 버전을 서버가 지원하지 않음. |
게이트웨이가 맡을 수 있는 역할
Check Point Security Gateway는 다음 셋 중 하나로 구성할 수 있습니다.
- ICAP Client — 콘텐츠 적응을 위해 HTTP/HTTPS 메시지를 ICAP Server로 보냅니다(아래 Security Gateway를 ICAP Client로 참고).
- ICAP Server — ICAP Client로부터 받은 HTTP/HTTPS 메시지에 콘텐츠 적응을 수행합니다(아래 Security Gateway를 ICAP Server로 참고).
- ICAP Client와 ICAP Server를 동시에 맡을 수도 있습니다.
ICAP로 구성한 Check Point Security Gateway는 네트워크 토폴로지를 바꾸지 않고도 서드파티 ICAP 장비와 함께 동작 합니다.
Security Gateway를 ICAP Client로
활용 사례(Use Cases)
ICAP Client는 여러 상황에서 유용합니다.
- 콘텐츠 제공자가 인기 웹 페이지를 보여 줄 때마다 광고를 다르게 끼워 넣는 경우.
- 웹 페이지를 PDA·휴대폰 브라우저처럼 특수 기기에 맞는 형식으로 변환하는 경우.
- 방화벽이 나가는 HTTP/HTTPS 요청을 어떤 서비스로 보내, 요청 안의 URI가 허용되는지 확인 하게 하는 경우. 이때는 응답으로 돌아온 객체가 아니라 HTTP/HTTPS 요청 자체가 적응 대상입니다.
- 사용자가 캐싱 프록시를 통해 실행 파일을 내려받을 때, 프록시가 ICAP Client로서 외부 서버에 바이러스 검사를 의뢰한 뒤 캐시에 받아들이는 경우.
ICAP 판정(ICAP Decisions)
ICAP Server가 내릴 수 있는 판정은 다음과 같습니다.
| ICAP 판정 | 설명과 예시 |
|---|---|
| Block | ICAP Server가 ICAP Client에 오류를 보내거나 차단 페이지를 보냅니다. 예를 들어 Threat Emulation, Anti-Virus, URL Filtering 소프트웨어 블레이드의 Check Point UserCheck 페이지를 띄울 수 있습니다. |
| Data Modification | HTTP 콘텐츠를 수정합니다. 예를 들어 Data Loss Prevention 엔진이 메일에 첨부된 DOCX 파일을 PDF 파일로 바꿀 수 있습니다. |
| Continue / Not modified | 기본 게이트웨이나 프록시 서버가 HTTP 요청/응답을 원래 목적지로 그대로 전달 합니다. |
REQMOD(요청 수정) 모드 데이터 흐름 예시

이 흐름에 등장하는 구성 요소는 다음과 같습니다.
| 항목 | 설명 |
|---|---|
| 1 | Client 컴퓨터. |
| 2 | Proxy 서버. |
| 3 | 인터넷의 Server 컴퓨터. |
| 4 | Proxy 서버(2)에서 도는 ICAP Client 구성 요소. |
| 5 | 네트워크 어딘가의 컴퓨터에서 도는 ICAP Server 구성 요소. |
| 6 | 네트워크 어딘가의 컴퓨터에서 도는 Data Loss Prevention 구성 요소. |
동작 순서는 이렇습니다.
- A — Client 컴퓨터(1)가 Server 컴퓨터(3)로 파일 업로드를 시작합니다.
- B — ICAP Client(4)가 업로드되는 파일을 가로채 ICAP Server(5)로 보냅니다.
- C — ICAP Server(5)는 이 파일을 Data Loss Prevention(6)으로 넘겨, DLP 정책상 이 파일이 네트워크 밖으로 나가도 되는지 검사하게 합니다.
- D — Data Loss Prevention(6)이 파일에 대한 판정을 돌려줍니다.
- E — ICAP Server(5)가 ICAP Client(4)에 차단 메시지 또는 수정된 파일 중 하나를 돌려줍니다.
- F — ICAP Client(4)가 수정된 파일을 Server 컴퓨터(3)로 전달합니다.
- G — ICAP Client(4)가 차단 메시지를 Client 컴퓨터(1)로 전달합니다.
RESPMOD(응답 수정) 모드 데이터 흐름 예시

| 항목 | 설명 |
|---|---|
| 1 | Client 컴퓨터. |
| 2 | Proxy 서버. |
| 3 | 인터넷의 Server 컴퓨터. |
| 4 | Proxy 서버(2)에서 도는 ICAP Client 구성 요소. |
| 5 | 네트워크 어딘가의 컴퓨터에서 도는 ICAP Server 구성 요소. |
| 6 | 네트워크 어딘가의 컴퓨터에서 도는 Threat Emulation 구성 요소. |
동작 순서는 이렇습니다.
- A — Client 컴퓨터(1)가 Server 컴퓨터(3)에서 파일 다운로드를 시작합니다.
- B — Proxy 서버(2)가 다운로드 요청을 Server 컴퓨터(3)로 전달합니다.
- C — Server(3)가 요청한 파일을 보냅니다.
- D — ICAP Client(4)가 내려받히는 파일을 가로채 ICAP Server(5)로 보냅니다.
- E — ICAP Server(5)가 이 파일을 Threat Emulation(6)으로 넘겨 악성 여부를 검사하게 합니다.
- F — Threat Emulation(6)이 파일에 대한 판정을 돌려줍니다.
- G — ICAP Server(5)가 ICAP Client(4)에 차단 메시지 또는 수정된 파일 중 하나를 돌려줍니다.
- H — ICAP Client(4)가 차단 메시지 또는 수정된 파일을 Client 컴퓨터(1)로 전달합니다.
제약 사항(Limitations)
ICAP Client 기능
Check Point Security Gateway 또는 Cluster의 ICAP Client 기능은, ICAP Server의 응답과 상호작용해 콘텐츠를 수정하고 조건에 맞는 HTTP 연결을 차단 할 수 있게 해 줍니다. 게다가 ICAP Server의 판정을 게이트웨이·Cluster의 시행 로직에 더할 수도 있습니다(아래 시행을 위한 추가 ICAP 응답 헤더 구성 참고). 이렇게 토폴로지를 바꾸지 않고 서드파티 장비와 함께 일할 수 있습니다.
ICAP Client 기능이 지원하는 것은 다음과 같습니다.
- HTTP 요청 수정(ICAP REQMOD).
- HTTP 응답 수정(ICAP RESPMOD).
- ICAP Server로 보낼 수 있는 HTTPS 트래픽.
- 여러 ICAP Server — ICAP Client는 HTTP 메시지를 여러 ICAP Server에 동시에 보낼 수 있습니다.
- 사용자 정의 ICAP 요청 헤더 확장(X-Headers):
X-Client-IP,X-Server-IP(목적지 호스트용),X-Authenticated-User(ICAP Client가 알고 있는 경우).- 사용자 정의 ICAP 응답 헤더 확장을 쓰려면 명시적으로 구성해야 합니다(아래 시행을 위한 추가 ICAP 응답 헤더 구성 참고).
- Draft RFC - ICAP Extensions를 참고하세요.
- Data Trickling 모드.
- UserCheck.
이 ICAP Client 기능은 내부 ICAP Server와 Check Point ICAP Server를 상대로 테스트되었습니다.
ICAP Client 사용자 면책 고지
ICAP Client 기능은 HTTPS 트래픽을 복호화해 서드파티 자동화 장비로 보내 저장·규정 준수 목적으로 처리 하게 할 수 있습니다. 이 기능을 설치·사용한다는 것은, 그렇게 복호화된 데이터를 전송하는 일이 일부 국가에서는 개인정보 보호법에 저촉될 수 있으며, 해당 관할권에서 이 기능을 쓰는 것이 합법인지 판단할 책임이 사용자에게 있음을 이해한다는 뜻입니다.
이 기능을 켜는 사용자는, 모든 관련 관할권에서 ICAP 프로토콜로 HTTPS 트래픽을 복호화·전달할 법적 권리가 있으며 사용자(end user)로부터 필요한 모든 동의를 받았음을 선언하는 것입니다. 또한 데이터 보호법·규정 위반이나 이 기능의 부적절한 사용·구현과 관련된 모든 청구·요구로부터 Check Point를 면책한다는 데 동의하는 것입니다.
ICAP Client 시작하기 (Gateway 모드)
- 게이트웨이 모드에서 ICAP Client 구성
- Security Gateway의 명령줄에 접속합니다.
- Expert 모드로 로그인합니다.
- ICAP 사용자 면책 고지의 안내를 따릅니다.
[Expert@GW:0]# IcapDisclaimer.sh
면책 고지에 동의했다면 다음 단계로 넘어갑니다. 4. 기본 ICAP Client 구성 파일을 백업합니다.
cp -v $FWDIR/conf/icap_client_blade_configuration.C{,_BKP}
- ICAP Client 파라미터를 구성합니다.
vi $FWDIR/conf/icap_client_blade_configuration.C
자세한 내용은 ICAP Client 구성 파일과 ICAP Client 구성 파일 예시를 참고하세요. 6. 파일의 변경을 저장하고 편집기를 빠져나옵니다. 7. ICAP Client로 HTTPS 트래픽을 검사하려면 ① Security Gateway 객체에서 HTTPS Inspection을 켜고, ② HTTPS Inspection Rule Base를 구성해야 합니다(자세한 내용은 HTTPS Inspection 참고). 8. Security Gateway에 Access Control 정책을 설치합니다. - HTTPS Inspection을 켜고 구성했다면, SmartConsole에서 정책을 설치합니다. - HTTPS Inspection을 켜지 않았다면, SmartConsole에서 정책을 설치하거나 Security Gateway에서 다음 명령으로 로컬 정책을 가져옵니다.
fw fetch localhost
- 네트워크에 ICAP Server 가 있고 그 서버가 ICAP Client의 요청을 받을 수 있는지 확인합니다. Check Point Security Gateway를 ICAP Server로 구성하는 방법은 ICAP Server 시작하기를 참고하세요.
VSX 모드에서 ICAP Client 구성
ICAP Client 기능은 해당하는 각 Virtual System의 컨텍스트에서 구성합니다.
- VSX Gateway의 명령줄에 접속합니다.
- Expert 모드로 로그인합니다.
- 해당 Virtual System의 컨텍스트로 이동합니다.
vsenv <VSID>
- ICAP 사용자 면책 고지의 안내를 따릅니다.
동의했다면 다음 단계로 넘어갑니다. 5. 기본 ICAP Client 구성 파일을 백업합니다.
cp -v $FWDIR/conf/icap_client_blade_configuration.C{,_BKP}
- ICAP Client 파라미터를 구성합니다.
vi $FWDIR/conf/icap_client_blade_configuration.C
자세한 내용은 ICAP Client 구성 파일과 ICAP Client 구성 파일 예시를 참고하세요. 7. 파일의 변경을 저장하고 편집기를 빠져나옵니다. 8. HTTPS 트래픽을 검사하려면 ① Virtual System 객체에서 HTTPS Inspection을 켜고, ② HTTPS Inspection Rule Base를 구성합니다(HTTPS Inspection 참고). 9. Virtual System에 Access Control 정책을 설치합니다. - HTTPS Inspection을 켜고 구성했다면, SmartConsole에서 정책을 설치합니다. - 그렇지 않다면, SmartConsole에서 설치하거나 해당 Virtual System 컨텍스트에서 다음 명령으로 로컬 정책을 가져옵니다.
fw fetch localhost
ICAP Client 구성 파일
ICAP Client 구성 파일($FWDIR/conf/icap_client_blade_configuration.C)은 여러 섹션으로 나뉘고, 각 섹션 안에 해당 파라미터가 들어갑니다. 일부 파라미터는 문자열 값만 받고(반드시 큰따옴표로 감싸야 합니다), 일부는 정수 값만 받습니다.
일반 파라미터
| 파라미터 | 허용 값 | 설명 |
|---|---|---|
:enabled () | "true" / "false" | ICAP Client 기능을 켜고 끕니다. "false"=비활성화, "true"=활성화. 기본값 "false". |
:filter_http_method () | :method ("GET") 등 | 어떤 HTTP 메서드를 처리할지 정합니다. 이 섹션이 비어 있으면 HTTP 요청에 필터가 없어, 모든 HTTP 요청에서 ICAP 기능이 활성화되지 않습니다. 선택 가능한 메서드: GET, PUT, POST, CONNECT, HEAD, OPTIONS. 기본값 "GET", "PUT", "POST". |
:http_services () - :port (NUMBER) | 1~65535 정수 | HTTP 패킷을 어느 포트에서 처리할지 정합니다. SmartConsole이 기본 제공하는 HTTP 서비스(HTTP=TCP 80, HTTPS=TCP 443) 외에 HTTP 패킷을 보내는 모든 포트를 명시적으로 추가 해야 합니다. 포트 범위는 지원되지 않습니다. 여기 정의한 모든 포트에서 ICAP 필터링(HTTP 메서드)이 동작하며, 트래픽이 필터에 맞으면 해당 포트에서 ICAP 기능이 완전히 활성화됩니다. 기본값 8080. |
:inspect_html_response () | "true" / "false" | ICAP Client가 content-type이 text/html인 HTTP 응답을 보낼지 정합니다. "false"=보내지 않음, "true"=보냄. 기본값 "false". |
:user_check_interaction_name () | 최대 32자 평문 문자열 | UserCheck 차단 페이지의 이름을 정합니다. 기본값을 바꾸면 SmartConsole에서도 같은 이름을 구성해야 합니다(아래 절차 참고). 기본값 "Blocked Message - Access Control". |
:trickling_mode () | 0 / 1 / 2 / 3 | Data Trickling 모드를 정합니다(아래 ICAP Client Data Trickling 파라미터 구성 참고). 큰 파일을 올리거나 내려받을 때 HTTP 연결 타임아웃을 막기 위해, ICAP Server가 검사하는 동안 원본 HTTP 페이로드 일부를 목적지로 흘려보냅니다. 기본값 0. |
:log_level () | 0 / 1 / 2 / 3 | ICAP Client 로그 수준을 정합니다. 기본값 0. |
:user_check_interaction_name의 기본값을 바꿨다면 SmartConsole에서 이렇게 맞춰 줍니다.
- Objects 메뉴 > Object Explorer > More object types > UserCheck > New Drop 으로 들어갑니다.
- 관련된 Access Control 정책을 선택합니다.
- OK 를 누릅니다.
- ICAP Client 구성 파일에 적은 것과 똑같은 이름 을 입력합니다.
- UserCheck 차단 페이지에 표시할 새 메시지를 추가합니다.
- OK 를 누릅니다.
- Security Gateway에 Access Control 정책을 설치합니다.
:trickling_mode 값의 의미:
| 값 | 의미 |
|---|---|
0 | Data Trickling 없음. ICAP Client는 ICAP Server의 판정을 받을 때까지 항상 HTTP 연결을 붙잡고 있습니다(작은 파일 처리와 동일). |
1 | Read-only 모드. ICAP Server의 응답을 기다리지 않고 전체 HTTP 페이로드를 원래 목적지로 보냅니다. ICAP Server가 응답하면 로그 설정에 따라 로그를 남깁니다. |
2 | Trickling from the Start 모드. 전체 페이로드를 원래 목적지로 보내되 원래 속도보다 느리게 보내, ICAP Server의 판정이 페이로드 전송 완료 전에 도착하게 합니다. |
3 | Trickling at the End 모드. 마지막(고정 크기) 페이로드만 남기고 전체를 원래 목적지로 보냅니다. ICAP Server의 판정에 따라 이 마지막 조각을 보내거나 보내지 않습니다. |
:log_level 값의 의미:
| 값 | 의미 |
|---|---|
0 | 로그 없음. |
1 | 오류 로그(Alert와 함께 도착). |
2 | 정보 로그(원본 HTTP 연결에 대한 판정 포함). |
3 | 상세(Verbose) 로그(각 ICAP Server 연결의 서비스 동작 포함). |
ICAP Server 정의 파라미터 (`:icap_servers ()`)
:icap_servers () 섹션은 ICAP Client가 함께 일할 ICAP Server들을 정의합니다.
| 파라미터 | 허용 값 | 설명 |
|---|---|---|
- :name () | 최대 32자 평문 문자열 | ICAP Server 이름. 로깅에 쓰입니다. |
- :ip () | IPv4 주소(점 십진, 최대 32자) | ICAP Server의 IPv4 주소. 필수 파라미터입니다. |
- :ip6 () | IPv6 주소(최대 40자) | ICAP Server의 IPv6 주소. 선택 파라미터입니다. |
- :port () | 1~65535 정수 | ICAP Server의 포트. 기본값 1344. |
- :service () | 최대 32자 평문 문자열 | ICAP 서비스 이름. 기본값 "echo". |
- :proto () | "icap" | ICAP 프로토콜. 기본값 "icap". |
- :modification_mode () | "reqmod" / "respmod" / "both" | ICAP 수정 모드. "reqmod"=요청만, "respmod"=응답만, "both"=둘 다. 기본값 "both". |
- :transp () | "3rd_cpas" | 서드파티 연결 유형. 기본값 "3rd_cpas". |
- :failmode () | close / open | ICAP Client의 실패 모드. close=ICAP 오류 시 원본 HTTP 연결을 닫음, open=오류가 나도 연결을 열어 둠. 로그는 :log_level 값에 따릅니다. 기본값 close. |
- :timeout () | 1 ~ (2^32)-1 정수 | ICAP Client 타임아웃(초). 이 시간이 지나면 ICAP Client가 ICAP Server에 reset을 보냅니다. 기본값 61. |
- :max_conns () | 1 ~ (2^32)-1 정수 | 구성된 각 ICAP Server로 여는 최대 ICAP 연결 수. 기본값 250. |
- :user_check_action () | 0 / 1 / 2 | UserCheck 동작. 0="Block" 페이지 없음, 1=ICAP "Block" 페이지, 2=UserCheck 포털("Block" 페이지)로 리디렉션. 기본값 1. |
X-Headers 파라미터 (`:x_headers ()`)
:x_headers ()는 X-Client-IP, X-Server-IP, X-Authenticated-User 헤더를 제어합니다.
| 파라미터 | 허용 값 | 설명 |
|---|---|---|
- :x_client_ip () | "true" / "false" | X-Client-IP 헤더. "true"이면 원본 HTTP 요청의 XFF 헤더 값을(있으면) 또는 없으면 출발지 IP를 추가합니다. 기본값 "false". |
- :x_server_ip () | "true" / "false" | X-Server-IP 헤더. "true"이면 목적지 IP(프록시의 IP 또는 HTTP Hostname 해석 결과)를 추가합니다. 기본값 "false". |
- :x_authenticated_user () | "true" / "false" | X-Authenticated-User 헤더. "true"이면 Identity Awareness 소프트웨어 블레이드의 사용자 이름을 추가합니다. 기본값 "false". |
- :authentication_source () | "WinNT" / "LDAP" / "Radius" / "Local" | 사용자 인증 URI의 Auth-Scheme을 정합니다. 기본값 "Local". |
- :base64_username_encode () | "true" / "false" | X-Authenticated-User 헤더를 Base64로 인코딩할지 정합니다. "false"=인코딩 안 함, "true"=Base64 인코딩. 기본값 "true". |
네트워크 필터 규칙 파라미터
| 파라미터 | 허용 값 | 설명 |
|---|---|---|
:rules_type () | "none" / "include" / "exclude" | 네트워크 필터 규칙을 제어합니다. "none"=규칙 비활성(다른 필터 파라미터를 모두 무시, Source·Destination이 "any"와 같음), "include"=아래 IP 범위에 든 주소를 ICAP Server로 보냄, "exclude"=범위에 든 주소를 ICAP Server로 보내지 않음. 기본값 "none". |
:network_filter_rules_ip4 () | — | 출발지·목적지 IPv4 주소 필터 규칙. |
:network_filter_rules_ip6 () | — | 출발지·목적지 IPv6 주소 필터 규칙. |
각 IP4/IP6 규칙 안에는 다음이 들어갑니다(IPv6는 IPv6 주소 형식만 다를 뿐 구조가 같습니다).
| 파라미터 | 허용 값 | 설명 |
|---|---|---|
- :src_ip_ranges () | — | 출발지 주소들. 규칙마다 :src_ip_ranges ()는 하나만, 그 안에 :min_ip ()·:max_ip ()는 여러 개 둘 수 있습니다. |
- :src_ip_ranges () - :min_ip () | any / IPv4·IPv6 주소 | 출발지 주소 범위의 최솟값. any이면 모든 클라이언트의 트래픽을 처리합니다(이때 :max_ip (any)도 함께 정의). 주소 값이면 그 주소부터 시작하는 클라이언트를 처리합니다. |
- :src_ip_ranges () - :max_ip () | any / IPv4·IPv6 주소 | 출발지 주소 범위의 최댓값. any이면 모든 클라이언트 처리(이때 :min_ip (any)도 함께 정의). 주소 값이면 그 주소까지의 클라이언트를 처리합니다. |
- :dst_ip_ranges () | — | 목적지 주소들. 규칙마다 :dst_ip_ranges ()는 하나만, 그 안에 :min_ip ()·:max_ip ()는 여러 개 둘 수 있습니다. |
- :dst_ip_ranges () - :min_ip () | any / IPv4·IPv6 주소 | 목적지 주소 범위의 최솟값. 동작 방식은 출발지와 같습니다. |
- :dst_ip_ranges () - :max_ip () | any / IPv4·IPv6 주소 | 목적지 주소 범위의 최댓값. any이면 모든 서버로 가는 트래픽을 처리합니다(이때 :min_ip (any)도 함께 정의). |
네트워크 필터 규칙에는 알아 둘 규칙이 있습니다.
- 각
:network_filter_rules_ipX ()규칙은:src_ip_ranges ()를 하나만,:dst_ip_ranges ()를 하나만 가질 수 있습니다. 각 range 안에는:min_ip ()·:max_ip ()를 여러 개 둘 수 있습니다. - ICAP Client는 다음 논리 연산을 병렬로 수행합니다.
[:network_filter_rules_ip4 ()]OR[:network_filter_rules_ip6 ()][:src_ip_ranges ()]AND[:dst_ip_ranges ()]:src_ip_ranges ()안에서는[:min_ip ()]OR[:max_ip ()]:dst_ip_ranges ()안에서는[:min_ip ()]OR[:max_ip ()]
- 이 논리 연산 결과가 TRUE 이고
:rules_type ("include")이면 ICAP Client가 동작하고, 결과가 TRUE 이고:rules_type ("exclude")이면 ICAP Client가 동작하지 않습니다.
ICAP Client 구성 파일 예시
다음은 $FWDIR/conf/icap_client_blade_configuration.C의 예시입니다.
:enabled ("true")
:filter_http_method (
: (
:method ("GET")
)
: (
:method ("PUT")
)
: (
:method ("POST")
)
)
:http_services (
: (
:port (8080)
)
: (
:port (8443)
)
)
:inspect_html_response ("false")
:trickling_mode (0)
:user_check_interaction_name ("Blocked Message - Access Control")
:log_level (2)
:icap_servers (
: (
:name ("icap_server_1")
:ip ("10.1.0.20")
:ip6 ("2001:db8:6:f101::15")
:port (1344)
:service ("echo")
:proto ("icap")
:modification_mode ("both")
:transp ("3rd_cpas")
:failmode (open)
:timeout (60)
:max_conns (50)
:user_check_action (1)
:x_headers (
:x_client_ip ("false")
:x_server_ip ("false")
:x_authenticated_user ("false")
:authentication_source ("Local")
:base64_username_encode ("true")
)
)
: (
:name ("icap_server_2")
:ip ("10.1.0.30")
:ip6 ("2001:db8:6:f101::16")
:port (1344)
:service ("echo")
:proto ("icap")
:modification_mode ("respmod")
:transp ("3rd_cpas")
:failmode (close)
:timeout (120)
:max_conns (250)
:user_check_action (2)
:x_headers (
:x_client_ip ("true")
:x_server_ip ("true")
:x_authenticated_user ("true")
:authentication_source ("WinNT")
)
)
)
:rules_type ("include")
:network_filter_rules_ip4 (
: (
:src_ip_ranges (
: (
:min_ip ("10.0.0.6")
:max_ip ("10.0.0.10")
)
: (
:min_ip ("10.0.0.100")
:max_ip ("10.0.0.150")
)
)
:dst_ip_ranges (
: (
:min_ip ("10.1.0.1")
:max_ip ("10.1.255.255")
)
)
)
: (
:src_ip_ranges (
: (
:min_ip ("10.0.0.21")
:max_ip ("10.0.0.24")
)
)
:dst_ip_ranges (
: (
:min_ip ("any")
:max_ip ("any")
)
)
)
)
:network_filter_rules_ip6 (
: (
:src_ip_ranges (
: (
:min_ip ("2001:db8:5:f101::11")
:max_ip ("2001:db8:5:f101::15")
)
)
:dst_ip_ranges (
: (
:min_ip ("2001:db8:6:f101::1")
:max_ip ("2001:db8:6:f101::20")
)
)
)
)
)위 예시의 규칙은 이렇게 읽습니다. 전체는 [:network_filter_rules_ip4 ()] OR [:network_filter_rules_ip6 ()]이고, 각 규칙 안에서는 [:src_ip_ranges ()] AND [:dst_ip_ranges ()]입니다.
- IPv4 규칙:
- 출발지 IPv4가
10.0.0.6~10.0.0.10중 하나이고 목적지가10.1.0.1~10.1.255.255중 하나인 모든 트래픽. - 출발지가
10.0.0.100~10.0.0.150중 하나이고 목적지가10.1.0.1~10.1.255.255중 하나인 모든 트래픽. - 출발지가
10.0.0.21~10.0.0.24중 하나이고 목적지가 모든 IPv4 주소 인 트래픽.
- 출발지 IPv4가
- IPv6 규칙:
- 출발지 IPv6가
2001:db8:5:f101::11~2001:db8:5:f101::15중 하나이고 목적지가2001:db8:6:f101::1~2001:db8:6:f101::20중 하나인 모든 트래픽.
- 출발지 IPv6가
고급 ICAP Client 구성
ICAP Client의 고급 설정은 해당 커널 파라미터(kernel parameters) 로 합니다. 일반적인 방법은 R82 Quantum Security Gateway Guide > Working with Kernel Parameters on Security Gateway 를 참고하세요. 고급 설정으로 구성할 수 있는 것은 다음과 같습니다.
- 시행을 위한 추가 ICAP 응답 헤더
- ICAP Client가 RESPMOD에서 보내는 추가 HTTPS 상태 코드
- ICAP 연결의 연결 타임아웃
- ICAP Client Data Trickling 파라미터
시행을 위한 추가 ICAP 응답 헤더 구성
ICAP Server가 보내는 ICAP 응답 헤더에 맞춰 시행을 조정하려면 특정 HTTP 헤더를 구성할 수 있습니다. ICAP Client가 이 헤더를 받으면 Security Gateway가 조건에 맞는 HTTP 연결을 차단 합니다(Draft RFC - ICAP Extensions 참고).
기본 HTTP 응답 X-Headers
ICAP Client는 기본적으로 다음 세 가지 사용자 정의 ICAP 응답 헤더 확장을 인식합니다.
| HTTP 응답 X-Header | 설명 | 예시 |
|---|---|---|
X-Virus-ID | 콘텐츠에서 발견된 위협을 한 줄로 짧게 설명합니다. 여러 위협이 발견되면 첫 번째 것만 반환합니다. X-Infection-Found의 짧은 대안이며, 콘텐츠가 검사되어 위반이 발견된 경우에만 나타납니다. | X-Virus-ID: EICAR Test String / X-Virus-ID: Encrypted Archive |
X-Violations-Found | 요청을 처리하며 발견된 모든 정책 위반(예: 발견된 바이러스)을 자세히 설명합니다. 검사 대상이 압축 파일이면 안에 든 파일별 결과도 나열됩니다. 한 파일에서 여러 위협이 발견되면 첫 번째만 반환합니다. 첫 줄에 위반 개수, 위반당 4줄(파일명, 위협 설명, ProblemID, ResolutionID)이 이어지는 여러 줄 값입니다. | X-Violations-Found: 2 이후 위반 상세가 이어집니다. |
X-Infection-Found | ICAP 메시지 본문에서 발견된 위협을 설명합니다. 정해진 순서의 세 파라미터(TypeID, ResolutionID, ThreatDescription)를 세미콜론으로 구분한 목록입니다. | X-Infection-Found: Type=0; Resolution=1; Threat=EICAR Test String |
X-Violations-Found의 상세 항목 의미는 다음과 같습니다.
- Filename — ICAP Client가 보낸 압축 파일 안의 단일 파일을 가리킬 수 있습니다.
- ThreatDescription — 위협의 사람이 읽을 수 있는 설명(바이러스 이름이나 정책 위반 설명). 공백이 들어갈 수 있고 따옴표로 감싸지 않습니다.
- ProblemID — 정책 위반의 한 자리 정수 식별자(예: 바이러스 ID). 현재 모든 위협에 대해
0이 반환됩니다. - ResolutionID —
0: 파일을 복구하지 않음,1: 파일을 복구함,2: 위반 부분 제거(컨테이너에서 파일을 제거한 경우 등).
X-Infection-Found의 세 파라미터 의미는 다음과 같습니다.
- TypeID —
0: 바이러스 감염,1: 메일 정책 위반(예: 불법 첨부 파일 이름),2: 컨테이너 위반(예: 압축 해제에 너무 오래 걸리는 ZIP). - ResolutionID —
0: 복구 안 됨,1: RESPMOD 응답에 든 파일이 요청에 캡슐화돼 있던 감염 파일을 복구한 것,2: 컨테이너·메일 정책 위반으로 원본 파일을 차단·거부해야 함. - ThreatDescription — 위협의 사람이 읽을 수 있는 설명. 공백은 되지만, 헤더 정의가 마지막 세미콜론으로 끝나므로 세미콜론은 들어가면 안 됩니다.
추가 HTTP 응답 X-Headers
ICAP Client가 인식할 X-Header를 더 추가할 수 있습니다.
| HTTP 응답 X-Header | 설명 | 예시 |
|---|---|---|
X-Response-Info | ICAP Server가 HTTP 요청에 적용한 동작을 한 단어로 설명합니다. ICAP Server가 보내는 모든 응답 에 들어 있습니다. | X-Response-Info: Allowed / Blocked / Options |
X-Response-Desc | ICAP Server가 콘텐츠에 적용한 동작을 한 줄로 설명합니다. 모든 "blocked" 응답 에 들어 있습니다. 콘텐츠가 검사되어 위반이 발견된 경우 X-Blocked-Reason 값과 동일한 문자열이 반환됩니다. | X-Response-Desc: Infected / Encrypted Archive |
X-Include | ICAP Client가 HTTP 요청에 추가해야 할(정보가 있으면) 요청 헤더 목록입니다. HTTP Options 응답에만 나타나며, 쉼표로 구분된 ICAP 헤더 확장 필드 이름 목록입니다. | X-Include: X-Client-IP |
X-Blocked-Reason | Metadefender 전용 커스텀 헤더로, 콘텐츠의 차단 사유를 담습니다. 콘텐츠가 검사되어 위반이 발견된 경우에만 나타납니다. | X-Blocked-Reason: Infected |
X-ICAP-Profile | 적용된 워크플로 이름(사용자 프로필)을 담습니다. 파일이 검사된 경우에만 나타납니다. | X-ICAP-Profile: Proxy |
추가 HTTP 응답 X-Headers 구성하기
추가 X-Header는 다음 커널 파라미터의 값으로 추가합니다.
| 항목 | 내용 |
|---|---|
| Name | icap_unwrap_append_header_str |
| Type | String |
| Notes | 추가하는 각 HTTP 헤더 길이는 최대 80자, 최대 21개까지 추가 가능. ICAP Client는 이 HTTP 응답 상태도 사용합니다 — HTTP/1.0 403 Forbidden(RFC 3507에 따름). |
구성된 X-Header 목록 보기 — 이 파라미터에 __print__를 넣고 출력합니다.
fw ctl set str icap_unwrap_append_header_str '__print__'
dmesg | grep append_icap_unwrap_headers예시:
[Expert@GW:0]# fw ctl set str icap_unwrap_append_header_str '__print__'
[Expert@GW:0]# dmesg | grep append_icap_unwrap_headers
[fw6_0];append_icap_unwrap_headers: ==> new icap_unwrap_headers array is: [ X-Virus-ID ; X-Violations-Found ; X-Infection-Found ;]
[fw4_0];append_icap_unwrap_headers: ==> new icap_unwrap_headers array is: [ X-Virus-ID ; X-Violations-Found ; X-Infection-Found ;]
[Expert@GW:0]#탐지 전용(detect only) 모드로 임시 추가 — 이 모드에서는 ICAP Client가 조건에 맞는 HTTP 연결을 차단하지 않습니다. 파라미터에 X-Header 이름을 넣습니다.
fw ctl set str icap_unwrap_append_header_str '<Name of X-header>'
dmesg | grep append_icap_unwrap_headers예시:
[Expert@GW:0]# fw ctl set str icap_unwrap_append_header_str 'X-Response-Info'
[Expert@GW:0]# fw ctl set str icap_unwrap_append_header_str 'X-Response-Desc'
[Expert@GW:0]# fw ctl set str icap_unwrap_append_header_str '__print__'
[Expert@GW:0]# dmesg | grep append_icap_unwrap_headers
[fw6_0];append_icap_unwrap_headers: ==> new icap_unwrap_headers array is: [ X-Virus-ID ; X-Violations-Found ; X-Infection-Found ; X-Response-Info ; X-Response-Desc ;]
[fw4_0];append_icap_unwrap_headers: ==> new icap_unwrap_headers array is: [ X-Virus-ID ; X-Violations-Found ; X-Infection-Found ; X-Response-Info ; X-Response-Desc ;]
[Expert@GW:0]#구성된 X-Header를 모두 임시 삭제 — 빈 문자열 ''을 넣습니다.
fw ctl set str icap_unwrap_append_header_str ''
fw ctl set str icap_unwrap_append_header_str '__print__'
dmesg | grep append_icap_unwrap_headers기본 X-Header를 임시로 복원 — X-Virus-ID, X-Violations-Found, X-Infection-Found를 넣습니다.
fw ctl set str icap_unwrap_append_header_str 'X-Virus-ID'
fw ctl set str icap_unwrap_append_header_str 'X-Violations-Found'
fw ctl set str icap_unwrap_append_header_str 'X-Infection-Found'
dmesg | grep append_icap_unwrap_headersRESPMOD에서 ICAP Client가 보내는 추가 HTTPS 상태 코드 구성
RESPMOD로 HTTP 서버 응답을 ICAP Server에 보낼 때, ICAP Client가 보낼 HTTP 서버 상태 코드 를 구성할 수 있습니다. 기본적으로 ICAP Client는 1xx 또는 2xx 상태 코드를 보냅니다. 상태 코드는 다음 커널 파라미터의 값으로 추가합니다.
| 항목 | 내용 |
|---|---|
| Name | icap_append_status_code_str |
| Type | String |
| Notes | 각 상태 코드 길이는 1~3자. 허용 값: '<한 자리 N>'=Nyz로 시작하는 모든 코드(예: '3'이면 3yz 전송), '<두 자리 NN>'=NNz로 시작하는 모든 코드(예: '30'이면 30z), '<세 자리 NNN>'=지정한 코드 NNN(예: '304'이면 304). 최대 10개까지 추가 가능. |
구성된 서버 상태 코드 목록 보기
fw ctl set str icap_append_status_code_str '__print__'
dmesg | grep icap_client_append_status_code예시:
[Expert@GW:0]# fw ctl set str icap_append_status_code_str '__print__'
[Expert@GW:0]# dmesg | grep icap_client_append_status_code
[fw6_0];icap_client_append_status_code: ==> new 'status code' array is: [ 1 ; 2 ;]
[fw4_0];icap_client_append_status_code: ==> new 'status code' array is: [ 1 ; 2 ;]
[Expert@GW:0]#서버 상태 코드 임시 추가
fw ctl set str icap_append_status_code_str 'N'
fw ctl set str icap_append_status_code_str '__print__'
dmesg | grep icap_client_append_status_code예시:
[Expert@GW:0]# fw ctl set str icap_append_status_code_str '3'
[Expert@GW:0]# fw ctl set str icap_append_status_code_str '__print__'
[Expert@GW:0]# dmesg | grep icap_client_append_status_code
[fw6_0];icap_client_append_status_code: ==> new 'status code' array is: [ 1 ; 2 ; 3 ;]
[fw4_0];icap_client_append_status_code: ==> new 'status code' array is: [ 1 ; 2 ; 3 ;]
[Expert@GW:0]#구성된 상태 코드를 모두 임시 삭제 — 빈 문자열 ''을 넣습니다.
fw ctl set str icap_append_status_code_str ''
fw ctl set str icap_append_status_code_str '__print__'
dmesg | grep icap_client_append_status_code기본 상태 코드를 임시로 복원 — '1'과 '2'를 넣습니다.
fw ctl set str icap_append_status_code_str '1'
fw ctl set str icap_append_status_code_str '2'
fw ctl set str icap_append_status_code_str '__print__'
dmesg | grep icap_client_append_status_codeICAP 연결의 연결 타임아웃 구성
ICAP Server로의 유휴 연결과 응답 없는 세션을 풀어 주기 위해 연결 타임아웃(초)을 조정할 수 있습니다. 다음 커널 파라미터로 구성합니다.
| 항목 | 내용 |
|---|---|
| Name | icap_blade_conn_pool_timeout |
| Type | Integer |
| Notes | 기본값 300(초). ICAP Server는 ICAP Client 쪽에서 예기치 않게 트래픽이 끊기는 상황(재부팅·연결 끊김 등)에 대비해 자체 Timeout/KeepAliveTimeout 설정을 유지해야 합니다. |
현재 값 출력
fw ctl get int icap_blade_conn_pool_timeout예시:
[Expert@GW:0]# fw ctl get int icap_blade_conn_pool_timeout
icap_blade_conn_pool_timeout = 300
[Expert@GW:0]#값 임시 설정
fw ctl set int icap_blade_conn_pool_timeout <Number>또한 ICAP 요청·응답에서 ICAP Client-to-Server 연결의 재사용을 취소할 수 있습니다.
| 항목 | 내용 |
|---|---|
| Name | icap_blade_enable_reuse_opt |
| Type | Integer |
| Notes | 허용 값: 0=연결을 재사용하지 않음, 1=연결을 재사용(성공한 ICAP 요청 처리 후 연결을 닫지 않고 재사용). 기본값 1. |
ICAP Client Data Trickling 파라미터 구성
Patience 페이지는 짧은 검사 지연 동안 사용자를 달래 줍니다. 하지만 큰 객체를 검사하거나, 좁은 대역폭에서 검사하거나, 서버 부하가 높을 때 는 연결 타임아웃이 생겨 사용 경험이 나빠질 수 있습니다. 이런 타임아웃을 막으려고 Data Trickling을 허용합니다. Data Trickling 동안에는 검사 시작 즈음이나 거의 끝날 즈음에 아주 느린 속도로 데이터를 클라이언트에 보냅니다.
Trickle from the Start 모드
이 모드에서는 ICAP Client가 HTTP 응답 본문의 맨 앞부분만 조금 버퍼링 합니다. ICAP Server가 응답을 계속 검사하는 동안 ICAP Client는 HTTP Client에 초당 1바이트 만 흘려보냅니다. 검사가 끝나 객체가 깨끗하면(응답 수정이 필요 없으면) 나머지 바이트를 연결이 허용하는 최고 속도로 보냅니다. 악성으로 판정되면 연결과 남은 응답 객체를 종료합니다. 바이러스 검사 결과가 나올 때까지 HTTP Client가 받는 데이터가 아주 적기 때문에, Trickling from the Start가 더 안전한 선택입니다.
Trickle at the End 모드
이 모드에서는 ICAP Client가 마지막 16KB만 빼고 HTTP 응답을 최고 속도로 HTTP Client에 보냅니다. ICAP Server가 검사하는 동안에는 초당 1바이트만 흘려보냅니다. 검사가 끝나 객체가 깨끗하면 나머지 바이트를 최고 속도로 보냅니다. 사용자는 객체의 1%가 아니라 99%가 내려온 것을 보면 더 참을성 있게 기다리고 연결 재시작을 덜 하므로, Trickle at the End가 더 사용자 친화적 입니다. 다만 대부분의 객체가 ICAP 검사 결과 전에 전달되므로 관리자 입장에서는 덜 안전하다고 볼 수 있습니다.
Data Trickling에 관한 참고 사항
Data Trickling은 다음 커널 파라미터로 구성합니다.
| 항목 | 내용 |
|---|---|
| Name | icap_blade_trickling_bytes_ps |
| Description | Trickling from the Start가 동작할 때 원본 HTTP 목적지로 초당 몇 바이트 를 보낼지 정합니다. HTTP Client는 아주 느린 업·다운로드 진행을 보게 됩니다. |
| Type / Default | Integer / 10 |
| Notes·예시 | 설정값은 ICAP 연결의 바이트 전송률보다 훨씬 작아야 합니다. 예: ICAP Server가 약 600KB 파일을 1분간 검사하면 연결 전송률은 초당 약 10KB이므로, 설정값은 초당 10,000바이트보다 훨씬 작아야 합니다. |
| 항목 | 내용 |
|---|---|
| Name | icap_blade_trickling_interval |
| Description | Trickling from the Start가 동작할 때 원본 HTTP 목적지로 바이트를 보내는 간격(초) 을 정합니다. |
| Type / Default | Integer / 1 |
| Notes·예시 | 설정값은 1 이상이어야 합니다. 값 2는 ICAP Client가 2초마다 한 번씩 바이트를 보낸다는 뜻입니다. |
| 항목 | 내용 |
|---|---|
| Name | icap_blade_trickling_threshold_mb |
| Description | Content-Length 임계값(MB)을 정합니다. 원본 HTTP 연결의 Content-Length가 이 임계값보다 클 때만 Trickling from the Start가 활성화됩니다. |
| Type / Default | Integer / 0 |
| 예시 | 값 1은 ① 1MB보다 큰 파일만 원본 목적지로 보내고, ② 그보다 작은 파일은 ICAP Server의 판정을 받기 전에는 보내지 않는다는 뜻입니다. |
| 항목 | 내용 |
|---|---|
| Name | icap_blade_trickling_kbytes_from_end |
| Description | Trickling at the End 모드에서, ICAP Server의 판정을 받기 전 원본 HTTP 목적지로 보내지 않을 마지막 킬로바이트 수 를 정합니다. |
| Type / Default | Integer / 16 |
| 예시 | 값 16은 ① 판정을 받기 전 마지막 16KB만 보내지 않고, ② 나머지는 모두 연결 전송률대로 보낸다는 뜻입니다. |
Security Gateway를 ICAP Server로
Check Point ICAP Server는 여러 ICAP Client와 함께 일할 수 있습니다. Threat Emulation 과 Anti-Virus 블레이드용으로는 R80.20 이상 Security Gateway에서 지원되며, R81부터는 Threat Extraction 블레이드도 지원합니다.
SmartConsole에서 Security Gateway 객체에 ICAP Server를 활성화하려면, 먼저 그 객체에 Threat Emulation, Anti-Virus, Threat Extraction 중 하나 이상 을 켜야 합니다. ICAP Server를 켜되 이 블레이드들을 켜지 않으면, ICAP Server는 동작하되 검사 없이 동작합니다.
ICAP Server는 선택된 Threat Prevention 프로필과 엔진 설정에서 Threat Emulation·Threat Extraction·Anti-Virus에 대해 정의된 설정에 따라 동작합니다.
ICAP Server 동작(Actions)
Check Point ICAP Server가 취할 수 있는 동작은 셋입니다.
| ICAP 동작 | 설명과 예시 |
|---|---|
| Block | ICAP Server가 ICAP Client에 오류를 보내거나 차단 페이지를 보냅니다. 예: Threat Emulation, Anti-Virus, Threat Extraction 소프트웨어 블레이드가 띄우는 Check Point UserCheck 페이지. |
| Continue / Not modified | 기본 게이트웨이나 프록시 서버가 HTTP 요청/응답을 원래 목적지로 전달합니다. |
| File modification | Threat Extraction이 활성화된 경우에 해당합니다. ICAP Server가 HTTP/HTTPS 콘텐츠를 수정해 ICAP Client로 보냅니다. |
ICAP Server 워크플로

| 항목 번호 | 설명 |
|---|---|
| 1 | Client |
| 2 | 서드파티 게이트웨이 또는 프록시 |
| 3 | ICAP Client |
| 4 | 웹 서버 |
| 5 | Check Point 게이트웨이 |
| 6 | ICAP Server |
RESPMOD에서 Check Point ICAP Server와 함께 일하는 흐름의 예는 다음과 같습니다.
- 클라이언트가 파일을 내려받으려고 서드파티 게이트웨이/프록시 서버에 요청을 보냅니다.
- 서드파티 게이트웨이/프록시가 다운로드 요청을 웹 서버로 보냅니다.
- 웹 서버가 요청한 파일을 서드파티 게이트웨이/프록시로 보냅니다.
- ICAP Client가 그 파일을 Check Point Threat Emulation 게이트웨이 안의 ICAP Server로 전달합니다.
- ICAP Server가 파일을 Threat Emulation 엔진으로 보냅니다.
- Threat Emulation이 파일을 검사합니다.
- Threat Emulation 엔진이 ICAP Server에 판정(block, modified, continue)을 돌려줍니다.
- ICAP Server가 그 판정을 ICAP Client로 보냅니다.
- ICAP Client가 판정을 클라이언트로 보냅니다.
ICAP Server 시작하기
Security Gateway 또는 Cluster에서 ICAP Server 지원을 켜는 절차입니다.
1단계 — Check Point Security Gateway 또는 Cluster에서 ICAP Server 지원 활성화
- 왼쪽 탐색 창에서 Gateways & Servers 를 클릭합니다.
- Security Gateway / Cluster 객체를 더블 클릭합니다.
- 왼쪽 트리에서 ICAP Server 로 갑니다.
- Enable ICAP Server 를 선택합니다.
- Service 에서 기본 서비스는 TCP ICAP 이며 포트
1344에서 동작합니다.
(선택) 기본 대신 새 ICAP 서비스 만들기: 1. Object Explorer > New > More > Service > TCP 로 갑니다. 2. 객체 이름을 입력하고 필요하면 주석을 답니다. 3. General 에서는 프로토콜을 선택하지 않습니다. 4. Match By 에서 서비스가 동작할 Port 를 선택합니다. 5. (선택) Advanced 기능을 구성합니다(자세한 설명은 온라인 도움말 참고). 6. OK 를 누르면 새 서비스가 Service 드롭다운에 나타납니다.
(선택) TLS로 동작하는 새 ICAP 서비스 만들기 — R81.20부터 Check Point Security Gateway는 ICAP Server와 ICAP Client 사이의 암호화 연결을 지원 합니다.
1. Object Explorer > New > More > Service > TCP 로 갑니다.
2. 객체 이름을 입력하고 필요하면 주석을 답니다.
3. General 에서는 프로토콜을 선택하지 않습니다.
4. Match By 에서 서비스가 동작할 Port 를 선택합니다.
5. (선택) Advanced 기능을 구성합니다.
6. OK 를 누릅니다.
7. CA 인증서와 ICAP Server 인증서를 원하는 애플리케이션으로 만듭니다.
8. 인증서를 PEM 형식으로 내보냅니다.
9. 서버 인증서 icapcert.pem을 Security Gateway / 각 Cluster Member의 어떤 디렉터리(예: /home/admin)로 복사합니다.
10. Security Gateway / 각 Cluster Member의 명령줄에 접속합니다.
11. Expert 모드로 로그인합니다.
12. ICAP Server 구성 파일을 편집합니다.
vi $FWDIR/c-icap/etc/c-icap.conf
- 서버 인증서 경로를 담은 다음 줄을 추가합니다.
TlsPort [port_number]
cert=/home/admin/icapcert.pem
- 변경을 저장하고 편집기를 빠져나옵니다.
- Security Gateway / 각 Cluster Member에서 갱신된 ICAP Server 구성을 적용합니다.
icap_server reconf
- ICAP Server의 CA 인증서 PEM 파일을 ICAP Client로 복사합니다.
- ICAP Client가 TLS로 ICAP Server에 연결할 수 있도록 구성합니다. 다음 파라미터에 유의하세요 — ICAP 프로토콜(
icaps- TLS용), ICAP Server IP·포트, ICAP 수정 요청을 ICAP Server SandBlast 서비스로 보내기, TLS 사양. 서드파티 ICAP Client(Squid)의 구성 예:
- ICAP Client가 TLS로 ICAP Server에 연결할 수 있도록 구성합니다. 다음 파라미터에 유의하세요 — ICAP 프로토콜(
adaptation_send_client_ip on
adaptation_send_username on
icap_client_username_encode on
icap_client_username_header X-Authenticated-User
icap_service service_req_pre reqmod_precache icaps://<IP_ADDRESS>:<PORT_NUMBER>/sandblast tls-cafile=<CERTIFICATE_FILE> tls-domain=<DOMAIN_NAME>
icap_service service_req_post reqmod_postcache icaps://<IP_ADDRESS>:<PORT_NUMBER>/sandblast tls-cafile=<CERTIFICATE_FILE> tls-domain=<DOMAIN_NAME>
icap_service service_resp_pre respmod_precache icaps://<IP_ADDRESS>:<PORT_NUMBER>/sandblast tls-cafile=<CERTIFICATE_FILE> tls-domain=<DOMAIN_NAME>
icap_service service_resp_post respmod_postcache icaps://<IP_ADDRESS>:<PORT_NUMBER>/sandblast tls-cafile=<CERTIFICATE_FILE> tls-domain=<DOMAIN_NAME>
adaptation_access service_req_post allow all
adaptation_access service_resp_pre allow all
adaptation_access service_resp_post allow all
- Fail Mode 를 구성합니다 — 오류가 났을 때 ICAP Server로 가는 요청을 차단할지 허용할지 정합니다.
- (선택) Access Control 정책에 ICAP용 묵시적 규칙(implied rule) 을 구성할 수 있습니다.
- OK 를 누릅니다.
2단계 — ICAP Client가 게이트웨이에 연결하도록 구성합니다(ICAP Client 시작하기 참고).
3단계 — ICAP 규칙 구성
Security Gateway 또는 Cluster 객체에서 ICAP Server를 켜면, SmartConsole이 Threat Prevention Rule Base에 규칙을 자동으로 만듭니다. ICAP Server가 켜진 Security Gateway / Cluster마다 규칙 하나가 생깁니다. 이 규칙의 Action 열에서 동작을 구성하고, ICAP 규칙마다 다른 프로필을 선택할 수 있습니다.
4단계 — Threat Extraction 지원 을 위해 Threat Prevention 프로필 편집기에서 Threat Extraction > General page > Protocol 로 가서 Web (HTTP/HTTPS) 을 선택합니다.
5단계 — Anti-Virus로 파일을 검사 하려면 Threat Prevention 프로필의 Anti-Virus 페이지에서 Enable deep inspection scanning (impacts performance) 을 선택합니다.
6단계 — Security Gateway에서 고급 ICAP Server 설정 구성
ICAP Server는 프로세스로 ICAP Client의 요청을 처리합니다. 각 프로세스는 여러 스레드를 만들고, 각 스레드가 ICAP Client→ICAP Server 요청 하나를 처리합니다. ICAP Server는 최적 성능을 위해 프로세스 수의 동적 스케일링 을 지원합니다.
- 왼쪽 탐색 창에서 Gateways & Servers 를 클릭합니다.
- Security Gateway / Cluster 객체를 더블 클릭합니다.
- 왼쪽 트리에서 ICAP Server > Advanced 로 갑니다.
- 다음 설정을 구성합니다.
- The maximum allowed number of server processes — 프로세스 수는 필요에 따라 늘거나 줄며, 최댓값을 설정할 수 있습니다(범위 1~100). ICAP Server가 동시에 처리할 수 있는 최대 연결 수는 (최대 서버 프로세스 수) × (자식 프로세스당 스레드 수) 입니다.
- The number of threads per a child process — 사용 가능 스레드 수는 필요에 따라 늘거나 줄며, 최댓값을 설정할 수 있습니다(범위 1~100).
- Start a new child process if the number of available threads is less than [x] — 동적 증가를 허용합니다. ICAP Server가 세는 유휴 스레드 총합이 이 값보다 적으면 새 자식 프로세스를 만듭니다.
- End a child process if the number of available threads is more than [x] — 동적 감소를 허용합니다. 유휴 스레드 총합이 이 값보다 많으면 자식 프로세스를 하나 끝냅니다.
- OK 를 누릅니다.
- Threat Prevention 정책을 설치합니다.
7단계 — Threat Prevention 정책을 설치 합니다.
ICAP Server 기능을 테스트하는 방법은 sk174487을 참고하세요.
ICAP Client 쪽의 관련 구성
Check Point ICAP Server와 함께 일할 때는 ICAP Client 쪽에 다음 설정을 해 둬야 합니다.
- ICAP 수정 요청을 ICAP Server sandblast 서비스로 보냅니다. 예:
icap://<IP_Address>:1344/sandblast. - 가능하면 ICAP Client가 다음 헤더를 보내게 합니다 —
X-Client-IP,X-Server-IP,X-Authentication-User. 이 헤더들은 ICAP Server 로그에 쓰입니다. - ICAP Client의 작업 타임아웃이 ICAP Server의 작업 타임아웃과 같거나 더 길게 합니다.
활용 사례 — HTTPS 콘텐츠를 ICAP로 전달
ICAP 기술로 HTTPS 콘텐츠를 주고받을 수 있습니다. 시스템 관리자인 당신이 서드파티 게이트웨이/프록시와 Check Point Security Gateway가 함께 있는 네트워크를 운영한다고 합시다. Check Point Security Gateway는 Threat Emulation과 Anti-Virus 블레이드를 시행하지만, HTTPS Inspection은 서드파티 게이트웨이/프록시에만 켜져 있고 Check Point Security Gateway에는 꺼져 있습니다.
ICAP Client와 Check Point ICAP Server를 함께 켜서 연동하면, ICAP Client가 복호화된 트래픽을 ICAP Server로 보내 검사하게 할 수 있습니다. 그러면 Check Point Security Gateway에 HTTPS Inspection이 켜져 있지 않아도, Threat Emulation·Anti-Virus 블레이드가 HTTPS 콘텐츠를 읽을 수 있습니다.

| 항목 번호 | 설명 |
|---|---|
| 1 | HTTPS 클라이언트 |
| 2 | 서드파티 게이트웨이 또는 프록시 |
| 3 | ICAP Client |
| 4 | Check Point Security Gateway |
| 5 | Check Point ICAP Server |
| 6 | 웹 서버 |
HTTPS Inspection에서 ICAP 기술을 쓰는 흐름은 다음과 같습니다.
- HTTPS 클라이언트가 HTTPS 연결을 시작해 프록시 서버로 보냅니다.
- 프록시 서버가 HTTPS 연결을 Check Point Security Gateway로 전달합니다.
- Check Point Security Gateway가 HTTPS 연결을 웹 서버로 전달합니다.
- 웹 서버가 요청한 데이터를 HTTPS로 Check Point Security Gateway에 보냅니다.
---
다음 장에서는 메일 보안을 다룹니다 — Anti-Spam과 메일 보안. HTTPS 트래픽 검사의 자세한 구성은 HTTPS Inspection을 참고하세요.