์ฒดํฌ ํฌ์ธํŠธ R80.10 API. CLI, ์Šคํฌ๋ฆฝํŠธ ๋“ฑ์„ ํ†ตํ•œ ์ œ์–ด

์ฒดํฌ ํฌ์ธํŠธ R80.10 API. CLI, ์Šคํฌ๋ฆฝํŠธ ๋“ฑ์„ ํ†ตํ•œ ์ œ์–ด

๋‚˜๋Š” ํ•จ๊ป˜ ์ผํ•ด ๋ณธ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค ์ฒดํฌ ํฌ์ธํŠธ, ๋‹ค์Œ์— ๋Œ€ํ•œ ๋ถˆ๋งŒ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ น์ค„์—์„œ ๊ตฌ์„ฑ์„ ํŽธ์ง‘ํ•  ์ˆ˜ ์—†์Œ. ์ด๋Š” ์ด์ „์— CLI์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” Cisco ASA์—์„œ ์ž‘์—…ํ•œ ๊ฒฝํ—˜์ด ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ํŠนํžˆ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. Check Point๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ ๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ณด์•ˆ ์„ค์ •์ด ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ๋งŒ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ GUI๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•˜๊ธฐ์—๋Š” ์™„์ „ํžˆ ๋ถˆํŽธํ•œ ์ž‘์—…๋„ ์žˆ์Šต๋‹ˆ๋‹ค(Check Point๋งŒํผ ํŽธ๋ฆฌํ•œ ์ž‘์—…๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค). ์˜ˆ๋ฅผ ๋“ค์–ด, 100๊ฐœ์˜ ์ƒˆ๋กœ์šด ํ˜ธ์ŠคํŠธ๋‚˜ ๋„คํŠธ์›Œํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์€ ๊ธธ๊ณ  ์ง€๋ฃจํ•œ ์ ˆ์ฐจ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ๊ฐœ์ฒด์— ๋Œ€ํ•ด ๋งˆ์šฐ์Šค๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ํด๋ฆญํ•˜๊ณ  IP ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์ดํŠธ ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ IPS ์„œ๋ช…์„ ๋Œ€๋Ÿ‰์œผ๋กœ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์‹ค์ˆ˜ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

๋น„๊ต์  ์ตœ๊ทผ์— "๊ธฐ์ "์ด ์ผ์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„์ „ ์ถœ์‹œ์™€ ํ•จ๊ป˜ ๊ฐ€์ด์•„ R80 ๊ธฐํšŒ๊ฐ€ ๋ฐœํ‘œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค API ์‚ฌ์šฉ, ์„ค์ •, ๊ด€๋ฆฌ, ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ํญ๋„“์€ ๊ธฐํšŒ๊ฐ€ ์—ด๋ฆฝ๋‹ˆ๋‹ค. ์ด์ œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฐ์ฒด ์ƒ์„ฑ;
  • ์•ก์„ธ์Šค ๋ชฉ๋ก์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ํŽธ์ง‘ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ธ”๋ ˆ์ด๋“œ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”;
  • ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์„ฑ;
  • ์ •์ฑ… ์„ค์น˜;
  • ๊ทธ๋ฆฌ๊ณ  ํ›จ์”ฌ ๋”.

์†”์งํžˆ ๋งํ•ด์„œ ์ด ์†Œ์‹์ด ์–ด๋–ป๊ฒŒ Habr์—๊ฒŒ ์ „๋‹ฌ๋˜์—ˆ๋Š”์ง€ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” API ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ณ  ๋ช‡ ๊ฐ€์ง€ ์‹ค์ œ ์˜ˆ์ œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•œ CheckPoint ์„ค์ •.

API๊ฐ€ ๊ด€๋ฆฌ์„œ๋ฒ„์—๋งŒ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ๋ฐ”๋กœ ์˜ˆ์•ฝํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ €๊ฒƒ๋“ค. ๊ด€๋ฆฌ ์„œ๋ฒ„ ์—†์ด ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์›์น™์ ์œผ๋กœ ๋ˆ„๊ฐ€ ์ด API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

  1. ์ผ์ƒ์ ์ธ Check Point ๊ตฌ์„ฑ ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•˜๊ฑฐ๋‚˜ ์ž๋™ํ™”ํ•˜๋ ค๋Š” ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž
  2. ์ฒดํฌํฌ์ธํŠธ๋ฅผ ๋‹ค๋ฅธ ์†”๋ฃจ์…˜(๊ฐ€์ƒํ™” ์‹œ์Šคํ…œ, ํ‹ฐ์ผ“ ์‹œ์Šคํ…œ, ๊ตฌ์„ฑ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ๋“ฑ)๊ณผ ํ†ตํ•ฉํ•˜๋ ค๋Š” ๊ธฐ์—…
  3. ์„ค์ •์„ ํ‘œ์ค€ํ™”ํ•˜๊ฑฐ๋‚˜ Check Point ๊ด€๋ จ ์ œํ’ˆ์„ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑํ•˜๋ ค๋Š” ์‹œ์Šคํ…œ ํ†ตํ•ฉ์ž.

์ „ํ˜•์ ์ธ ๊ณ„ํš

์ด์ œ Check Point๋ฅผ ์‚ฌ์šฉํ•œ ์ผ๋ฐ˜์ ์ธ ๊ตฌ์„ฑํ‘œ๋ฅผ ์ƒ์ƒํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฒดํฌ ํฌ์ธํŠธ R80.10 API. CLI, ์Šคํฌ๋ฆฝํŠธ ๋“ฑ์„ ํ†ตํ•œ ์ œ์–ด

ํ‰์†Œ์™€ ๊ฐ™์ด ๊ฒŒ์ดํŠธ์›จ์ด(SG), ๊ด€๋ฆฌ์„œ๋ฒ„(SMS) ๋ฐ ๊ด€๋ฆฌ ์ฝ˜์†”(์Šค๋งˆํŠธ์ฝ˜์†”). ์ด ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์ธ ๊ฒŒ์ดํŠธ์›จ์ด ๊ตฌ์„ฑ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ฒดํฌ ํฌ์ธํŠธ R80.10 API. CLI, ์Šคํฌ๋ฆฝํŠธ ๋“ฑ์„ ํ†ตํ•œ ์ œ์–ด

์ €๊ฒƒ๋“ค. ๋จผ์ € ๊ด€๋ฆฌ์ž์˜ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์Šค๋งˆํŠธ์ฝ˜์†”, ์ด๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ ์„œ๋ฒ„(SMS). ๋ณด์•ˆ ์„ค์ •์€ SMS์—์„œ ์„ค์ •ํ•œ ํ›„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค(์„ค์น˜ ์ •์ฑ…)์—์„œ ๊ฒŒ์ดํŠธ์›จ์ด(SG).

๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ด€๋ฆฌ API, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ์ง€์ (SmartConsole ์‹คํ–‰)์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋‹ค์Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API ๋ช…๋ น ๊ด€๋ฆฌ ์„œ๋ฒ„(SMS)๋กœ ์ง์ ‘ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

API ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ์„ ํŽธ์ง‘ํ•˜๋Š” ๋„ค ๊ฐ€์ง€ ์ฃผ์š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1) mgmt_cli ์œ ํ‹ธ๋ฆฌํ‹ฐ ์‚ฌ์šฉ

์˜ˆ - # mgmt_cli ์ถ”๊ฐ€ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ํ˜ธ์ŠคํŠธ1 IP ์ฃผ์†Œ 192.168.2.100
์ด ๋ช…๋ น์€ ๊ด€๋ฆฌ ์„œ๋ฒ„(SMS) ๋ช…๋ น์ค„์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ช…๋ น์˜ ๊ตฌ๋ฌธ์ด ๋ช…ํ™•ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ1์€ ์ฃผ์†Œ 192.168.2.100์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

2) clish๋ฅผ ํ†ตํ•ด API ๋ช…๋ น ์ž…๋ ฅ(์ „๋ฌธ๊ฐ€ ๋ชจ๋“œ)

๊ธฐ๋ณธ์ ์œผ๋กœ ํ•ด์•ผ ํ•  ์ผ์€ ๋ช…๋ น์ค„์— ๋กœ๊ทธ์ธํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค(๊ด€๋ฆฌ ๋กœ๊ทธ์ธ) SmartConsole(๋˜๋Š” ๋ฃจํŠธ ๊ณ„์ •)์„ ํ†ตํ•ด ์—ฐ๊ฒฐํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ณ„์ •์—์„œ. ๊ทธ๋Ÿฌ๋ฉด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์–ด์š” API ๋ช…๋ น (์ด ๊ฒฝ์šฐ ๊ฐ ๋ช…๋ น ์ „์— ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. mgmt_cli). ๋ณธ๊ฒฉ์ ์ธ ์ œ์ž‘์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค BASH ์Šคํฌ๋ฆฝํŠธ. ํ˜ธ์ŠคํŠธ๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์˜ ์˜ˆ:

๋ฐฐ์‰ฌ ์Šคํฌ๋ฆฝํŠธ

#!/bin/bash

main() {
    clear

    #LOGIN (don't ask for username and password, user is already logged in to Management server as 'root' user)
    mgmt_cli login --root true > id_add_host.txt
    on_error_print_and_exit "Error: Failed to login, check that the server is up and running (run 'api status')"

    #READ HOST NAME
    printf "Enter host name:n"
    read -e host_name
    on_empty_input_print_and_exit "$host_name" "Error: The host's name cannot be empty."

    #READ IP ADDRESS
    printf "nEnter host IP address:n"
    read -e ip
    on_empty_input_print_and_exit "$ip" "Error: The host's IP address cannot be empty."

    #CREATE HOST
    printf "Creating new host: $host_name with IP address: $ipn"
    new_host_response=$(mgmt_cli add host name $host_name ip-address $ip -s id_add_host.txt 2> /dev/null)
    on_error_print_and_exit "Error: Failed to create host object. n$new_host_response"

    #PUBLISH THE CHANGES
    printf "nPublishing the changesn"
    mgmt_cli publish --root true -s id_add_host.txt &> /dev/null
    on_error_print_and_exit "Error: Failed to publish the changes."

    #LOGOUT
    logout
	
	printf "Done.n"
}

logout(){
	mgmt_cli logout --root true -s id_add_host.txt &> /dev/null
}

on_error_print_and_exit(){
    if [ $? -ne 0 ]; then
        handle_error "$1" 
	fi
}

handle_error(){
    printf "n$1n" #print error message
    mgmt_cli discard --root true -s id_add_host.txt &> /dev/null
    logout
    exit 1
}

on_empty_input_print_and_exit(){
	if [ -z "$1" ]; then
		printf "$2n" #print error message
		logout
		exit 0
	fi
}

# Script starts here. Call function "main".
main

๊ด€์‹ฌ์ด ์žˆ์œผ์‹œ๋ฉด ํ•ด๋‹น ๋น„๋””์˜ค๋ฅผ ์‹œ์ฒญํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3) CLI ์ฐฝ์„ ์—ด์–ด SmartConsole์„ ํ†ตํ•ด

์ฐฝ๋ฌธ์„ ์—ด๊ธฐ๋งŒ ํ•˜๋ฉด ๋ผ์š” CLI ์—์„œ ๋ฐ”๋กœ ์Šค๋งˆํŠธ์ฝ˜์†”, ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ฒดํฌ ํฌ์ธํŠธ R80.10 API. CLI, ์Šคํฌ๋ฆฝํŠธ ๋“ฑ์„ ํ†ตํ•œ ์ œ์–ด

์ด ์ฐฝ์—์„œ ์ฆ‰์‹œ API ๋ช…๋ น ์ž…๋ ฅ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4) ์›น ์„œ๋น„์Šค. HTTPS ๊ฒŒ์‹œ ์š”์ฒญ ์‚ฌ์šฉ(REST API)

์šฐ๋ฆฌ ์˜๊ฒฌ์œผ๋กœ๋Š” ์ด๊ฒƒ์ด ๊ฐ€์žฅ ์œ ๋งํ•œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ฐ˜์œผ๋กœ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ "๊ตฌ์ถ•"ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ ์„œ๋ฒ„ ๊ด€๋ฆฌ (๋ง์ด ๊ธธ์–ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค). ์•„๋ž˜์—์„œ๋Š” ์ด ๋ฐฉ๋ฒ•์„ ์ข€ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์š”์•ฝ:

  1. API + CLI Cisco์— ์ต์ˆ™ํ•œ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  2. API + ์‰˜ ์Šคํฌ๋ฆฝํŠธ ์ ์šฉ ๋ฐ ์ผ์ƒ์ ์ธ ์ž‘์—… ์ˆ˜ํ–‰
  3. REST API ์ž๋™ํ™”๋ฅผ ์œ„ํ•ด.

API ํ™œ์„ฑํ™”

๊ธฐ๋ณธ์ ์œผ๋กœ API๋Š” RAM์ด 4GB ์ด์ƒ์ธ ๊ด€๋ฆฌ ์„œ๋ฒ„์™€ RAM์ด 8GB ์ด์ƒ์ธ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ๊ตฌ์„ฑ์—์„œ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API ์ƒํƒœ

API๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋œ ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์ง€๋ฉด SmartConsole์„ ํ†ตํ•ด API๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ ๋ฐ ์„ค์ • > ๋ธ”๋ ˆ์ด๋“œ > ๊ด€๋ฆฌ API > ๊ณ ๊ธ‰ ์„ค์ •

์ฒดํฌ ํฌ์ธํŠธ R80.10 API. CLI, ์Šคํฌ๋ฆฝํŠธ ๋“ฑ์„ ํ†ตํ•œ ์ œ์–ด

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค(๊ฒŒ์‹œ์ด๋‹ค.) ๋ช…๋ น์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. API ์žฌ์‹œ์ž‘.

์›น ์š”์ฒญ + Python

API ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์›น ์š”์ฒญ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Python ๊ทธ๋ฆฌ๊ณ  ๋„์„œ๊ด€ ์š”์ฒญ, JSON. ์ผ๋ฐ˜์ ์œผ๋กœ ์›น ์š”์ฒญ์˜ ๊ตฌ์กฐ๋Š” ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

1)์ฃผ์†Œ

(https://<managemenet server>:<port>/web_api/<command>) 


2) HTTP ํ—ค๋”

content-Type: application/json
x-chkp-sid: <session ID token as returned by the login command>


3) ์š”์ฒญ ํŽ˜์ด๋กœ๋“œ

๋‹ค์–‘ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” JSON ํ˜•์‹์˜ ํ…์ŠคํŠธ

๋‹ค์–‘ํ•œ ๋ช…๋ น ํ˜ธ์ถœ์˜ ์˜ˆ:


def api_call(ip_addr, port, command, json_payload, sid):
    url = 'https://' + ip_addr + ':' + str(port) + '/web_api/' + command
    if sid == โ€œโ€:
        request_headers = {'Content-Type' : 'application/json'}
    else:
        request_headers = {'Content-Type' : 'application/json', 'X-chkp-sid' : sid}
    r = requests.post(url,data=json.dumps(json_payload), headers=request_headers,verify=False)
    return r.json()                                        
'xxx.xxx.xxx.xxx' -> Ip address GAIA

Check Point๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ๊ฐ€์žฅ ์ž์ฃผ ์ ‘ํ•˜๊ฒŒ ๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1) ์ธ์ฆ ๋ฐ ๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ์˜ ์˜ˆ:

์Šคํฌ๋ฆฝํŠธ


    payload = {โ€˜userโ€™: โ€˜your_userโ€™, โ€˜passwordโ€™ : โ€˜your_passwordโ€™}
    response = api_call('xxx.xxx.xxx.xxx', 443, 'login',payload, '')
    return response["sid"]

    response = api_call('xxx.xxx.xxx.xxx', 443,'logout', {} ,sid)
    return response["message"]

2) ๋ธ”๋ ˆ์ด๋“œ๋ฅผ ์ผœ๊ณ  ๋„คํŠธ์›Œํฌ ์„ค์ •:

์Šคํฌ๋ฆฝํŠธ


new_gateway_data = {'name':'CPGleb','anti-bot':True,'anti-virus' : True,'application-control':True,'ips':True,'url-filtering':True,'interfaces':
                    [{'name':"eth0",'topology':'external','ipv4-address': 'xxx.xxx.xxx.xxx',"ipv4-network-mask": "255.255.255.0"},
                     {'name':"eth1",'topology':'internal','ipv4-address': 'xxx.xxx.xxx.xxx',"ipv4-network-mask": "255.255.255.0"}]}
new_gateway_result = api_call('xxx.xxx.xxx.xxx', 443,'set-simple-gateway', new_gateway_data ,sid)
print(json.dumps(new_gateway_result))

3) ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ๋ณ€๊ฒฝ:

์Šคํฌ๋ฆฝํŠธ


new_access_data={'name':'Cleanup rule','layer':'Network','action':'Accept'}
new_access_result = api_call('xxx.xxx.xxx.xxx', 443,'set-access-rule', new_access_data ,sid)
print(json.dumps(new_access_result))

4) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ์ด์–ด ์ถ”๊ฐ€:

์Šคํฌ๋ฆฝํŠธ


add_access_layer_application={ 'name' : 'application123',"applications-and-url-filtering" : True,"firewall" : False}
add_access_layer_application_result = api_call('xxx.xxx.xxx.xxx', 443,'add-access-layer', add_access_layer_application ,sid)
print(json.dumps(add_access_layer_application_result))

set_package_layer={"name" : "Standard","access":True,"access-layers" : {"add" : [ { "name" : "application123","position" :2}]} ,"installation-targets" : "CPGleb"}
set_package_layer_result = api_call('xxx.xxx.xxx.xxx', 443,'set-package', set_package_layer ,sid)
print(json.dumps(set_package_layer_result))

5) ์ •์ฑ…์„ ๊ฒŒ์‹œ ๋ฐ ์„ค์ •ํ•˜๊ณ  ๋ช…๋ น(task-id) ์‹คํ–‰์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ


publish_result = api_call('xxx.xxx.xxx.xxx', 443,"publish", {},sid)
print("publish result: " + json.dumps(publish_result))
new_policy = {'policy-package':'Standard','access':True,'targets':['CPGleb']}
new_policy_result = api_call('xxx.xxx.xxx.xxx', 443,'install-policy', new_policy ,sid)
print(json.dumps(new_policy_result)

task_id=(json.dumps(new_policy_result ["task-id"]))
len_str=len(task_id)
task_id=task_id[1:(len_str-1)]
show_task_id ={'task-id':(task_id)}
show_task=api_call('xxx.xxx.xxx.xxx',443,'show-task',show_task_id,sid)
print(json.dumps(show_task))

6) ํ˜ธ์ŠคํŠธ ์ถ”๊ฐ€:

์Šคํฌ๋ฆฝํŠธ


new_host_data = {'name':'JohnDoePc', 'ip-address': '192.168.0.10'}
new_host_result = api_call('xxx.xxx.xxx.xxx', 443,'add-host', new_host_data ,sid)
print(json.dumps(new_host_result))

7) ์œ„ํ˜‘ ์˜ˆ๋ฐฉ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ


set_package_layer={'name':'Standard','threat-prevention' :True,'installation-targets':'CPGleb'}
set_package_layer_result = api_call('xxx.xxx.xxx.xxx', 443,'set-package',set_package_layer,sid)
print(json.dumps(set_package_layer_result))

8) ์„ธ์…˜ ๋ชฉ๋ก ๋ณด๊ธฐ

์Šคํฌ๋ฆฝํŠธ


new_session_data = {'limit':'50', 'offset':'0','details-level' : 'standard'}
new_session_result = api_call('xxx.xxx.xxx.xxx', 443,'show-sessions', new_session_data ,sid)
print(json.dumps(new_session_result))

9) ์ƒˆ ํ”„๋กœํ•„์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ


add_threat_profile={'name':'Apeiron', "active-protections-performance-impact" : "low","active-protections-severity" : "low or above","confidence-level-medium" : "prevent",
  "confidence-level-high" : "prevent", "threat-emulation" : True,"anti-virus" : True,"anti-bot" : True,"ips" : True,
  "ips-settings" : { "newly-updated-protections" : "staging","exclude-protection-with-performance-impact" : True,"exclude-protection-with-performance-impact-mode" : "High or lower"},
  "overrides" : [ {"protection" : "3Com Network Supervisor Directory Traversal","capture-packets" : True,"action" : "Prevent","track" : "Log"},
                  {"protection" : "7-Zip ARJ Archive Handling Buffer Overflow", "capture-packets" : True,"action" : "Prevent","track" : "Log"} ]}
add_threat_profile_result=api_call('xxx.xxx.xxx.xxx',443,'add-threat-profile',add_threat_profile,sid)
print(json.dumps(add_threat_profile_result))  

10) IPS ์„œ๋ช…์— ๋Œ€ํ•œ ์ž‘์—…์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ


set_threat_protection={
  "name" : "3Com Network Supervisor Directory Traversal",
  "overrides" : [{ "profile" : "Apeiron","action" : "Detect","track" : "Log","capture-packets" : True},
    { "profile" : "Apeiron", "action" : "Detect", "track" : "Log", "capture-packets" : False} ]}
set_threat_protection_result=api_call('xxx.xxx.xxx.xxx',443,'set-threat-protection',set_threat_protection,sid)
print(json.dumps(set_threat_protection_result))

11) ์„œ๋น„์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

์Šคํฌ๋ฆฝํŠธ


add_service_udp={    "name" : "Dota2_udp", "port" : '27000-27030',
"keep-connections-open-after-policy-installation" : False,
"session-timeout" : 0, "match-for-any" : True,
"sync-connections-on-cluster" : True,
"aggressive-aging" : {"enable" : True, "timeout" : 360,"use-default-timeout" : False  },
"accept-replies" : False}
add_service_udp_results=api_call('xxx.xxx.xxx.xxx',443,"add-service-udp",add_service_udp,sid)
print(json.dumps(add_service_udp_results))

12) ์นดํ…Œ๊ณ ๋ฆฌ, ์‚ฌ์ดํŠธ ๋˜๋Š” ๊ทธ๋ฃน์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ


add_application_site_category={  "name" : "Valve","description" : "Valve Games"}
add_application_site_category_results=api_call('xxx.xxx.xxx.xxx',443,"add-application-site-category",add_application_site_category,sid)
print(json.dumps(add_application_site_category_results))

add_application_site={    "name" : "Dota2", "primary-category" : "Valve",  "description" : "Dotka",
  "url-list" : [ "www.dota2.ru" ], "urls-defined-as-regular-expression" : False}
add_application_site_results=api_call('xxx.xxx.xxx.xxx',443,"add-application-site " , 
add_application_site , sid)
print(json.dumps(add_application_site_results))

add_application_site_group={"name" : "Games","members" : [ "Dota2"]}
add_application_site_group_results=api_call('xxx.xxx.xxx.xxx',443,"add-application-site-group",add_application_site_group,sid)
print(json.dumps(add_application_site_group_results))

๊ฒŒ๋‹ค๊ฐ€ ๋„์›€์„ ๋ฐ›์•„ ์›น API ๋„คํŠธ์›Œํฌ, ํ˜ธ์ŠคํŠธ, ์•ก์„ธ์Šค ์—ญํ•  ๋“ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธ”๋ ˆ์ด๋“œ๋ฅผ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ˆํ‹ฐ๋ฐ”์ด๋Ÿฌ์Šค, ์•ˆํ‹ฐ๋ด‡, IPS, VPN. ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ผ์ด์„ผ์Šค๋ฅผ ์„ค์น˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ. ๋ชจ๋“  Check Point API ๋ช…๋ น์€ ์—ฌ๊ธฐ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—.

์ฒดํฌํฌ์ธํŠธ API + Postman

์‚ฌ์šฉํ•˜๊ธฐ์—๋„ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค ์ฒดํฌํฌ์ธํŠธ ์›น API ์™€ ํ•จ๊ป˜ ์šฐํŽธ ์ง‘๋ฐฐ์›. Postman์—๋Š” Windows, Linux ๋ฐ MacOS์šฉ ๋ฐ์Šคํฌํ†ฑ ๋ฒ„์ „์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Google Chrome์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋จผ์ € Google Chrome Store์—์„œ Postman์„ ์ฐพ์•„ ๋‹ค์Œ์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฒดํฌ ํฌ์ธํŠธ R80.10 API. CLI, ์Šคํฌ๋ฆฝํŠธ ๋“ฑ์„ ํ†ตํ•œ ์ œ์–ด

์ด ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Check Point API์— ๋Œ€ํ•œ ์›น ์š”์ฒญ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  API ๋ช…๋ น์„ ๊ธฐ์–ตํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ํ•„์š”ํ•œ ๋ชจ๋“  ๋ช…๋ น์ด ์ด๋ฏธ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ์†Œ์œ„ ์ปฌ๋ ‰์…˜(ํ…œํ”Œ๋ฆฟ)์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒดํฌ ํฌ์ธํŠธ R80.10 API. CLI, ์Šคํฌ๋ฆฝํŠธ ๋“ฑ์„ ํ†ตํ•œ ์ œ์–ด

์—ฌ๊ธฐ์— ๋„ˆ๋Š” ์ฐพ์„๊ฑฐ์•ผ. ์ˆ˜์ง‘ ์— R80.10. ๊ฐ€์ ธ์˜จ ํ›„์—๋Š” API ๋ช…๋ น ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ฒดํฌ ํฌ์ธํŠธ R80.10 API. CLI, ์Šคํฌ๋ฆฝํŠธ ๋“ฑ์„ ํ†ตํ•œ ์ œ์–ด

์ œ ์ƒ๊ฐ์—๋Š” ์ด๊ฒƒ์ด ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Check Point API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒดํฌํฌ์ธํŠธ + ์•ค์„œ๋ธ”

์žˆ๋‹ค๋Š” ์ ๋„ ์ฐธ๊ณ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ฑ…์ž„๊ฐ์žˆ๋Š” ๋ชจ๋“ˆ CheckPoint API์šฉ. ์ด ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ตฌ์„ฑ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๊ตญ์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ๋Š” ๊ทธ๋ฆฌ ํŽธ๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ๋“  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋”์šฑ ์œ ์—ฐํ•˜๊ณ  ํŽธ๋ฆฌํ•œ ์†”๋ฃจ์…˜์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์ถœ๋ ฅ

์—ฌ๊ธฐ์„œ Check Point API์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ๊ฒ€ํ† ๋ฅผ ๋งˆ์น˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ์ด ๊ธฐ๋Šฅ์ด ๋งค์šฐ ์˜ค๋žซ๋™์•ˆ ๊ธฐ๋‹ค๋ ค ์™”๊ณ  ํ•„์š”ํ–ˆ๋˜ ๊ธฐ๋Šฅ์ด์—ˆ์Šต๋‹ˆ๋‹ค. API์˜ ์ถœํ˜„์œผ๋กœ Check Point ์ œํ’ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž์™€ ์‹œ์Šคํ…œ ํ†ตํ•ฉ์ž ๋ชจ๋‘์—๊ฒŒ ๋งค์šฐ ๊ด‘๋ฒ”์œ„ํ•œ ๊ธฐํšŒ๊ฐ€ ์—ด๋ ธ์Šต๋‹ˆ๋‹ค. ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜, ์ž๋™ํ™”, SIEM ํ”ผ๋“œ๋ฐฑ... ์ด์ œ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

PS์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๊ธฐ์‚ฌ ์ฒดํฌ ํฌ์ธํŠธ ์–ธ์ œ๋‚˜ ๊ทธ๋ ‡๋“ฏ ์ €ํฌ ๋ธ”๋กœ๊ทธ์—์„œ ๋งŒ๋‚˜๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ํ•˜๋ธŒ ๋ฅด ์•„๋‹ˆ๋ฉด ๋ธ”๋กœ๊ทธ์—์„œ ์˜จ๋ผ์ธ์œผ๋กœ.

PSS Check Point ์„ค์ •๊ณผ ๊ด€๋ จ๋œ ๊ธฐ์ˆ ์ ์ธ ์งˆ๋ฌธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—

๋“ฑ๋ก๋œ ์‚ฌ์šฉ์ž๋งŒ ์„ค๋ฌธ ์กฐ์‚ฌ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ์ œ๋ฐœ

API๋ฅผ ์‚ฌ์šฉํ•  ๊ณ„ํš์ด์‹ ๊ฐ€์š”?

  • 70,6%์˜ˆ12

  • 23,5%4

  • 5,9%์ด๋ฏธ ์‚ฌ์šฉ ์ค‘1

17๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ํˆฌํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. 3๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๊ถŒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€