Check Point R80.10 API. Упраўленне праз CLI, скрыпты і не толькі

Check Point R80.10 API. Упраўленне праз CLI, скрыпты і не толькі

Упэўнены, што ў кожнага, хто калі-небудзь працаваў з Пункт кантролю, узнікала прэтэнзія з нагоды немагчымасці праўкі канфігурацыі з каманднага радка. Гэта асабліва дзіка для тых, хто да гэтага працаваў з Cisco ASA, дзе абсалютна ўсё можна наладзіць у CLI. У Check Point-а ўсё наадварот усе налады бяспекі выконваліся выключна з графічнага інтэрфейсу. Аднак, некаторыя рэчы зусім не зручна рабіць праз GUI (нават такі зручны як у Check Point). Напрыклад задача па даданні 100 новых хастоў або сетак ператвараецца ў доўгую і нудную працэдуру. Для кожнага аб'екта давядзецца некалькі разоў клікаць мышкай і забіваць ip-адрас. Тое ж самае тычыцца стварэння групы сайтаў або масавага ўключэння/адключэння IPS сігнатур. Пры гэтым вялікая верагоднасць дапусціць памылку.

Адносна нядаўна здарылася "цуд". З выхадам новай версіі Gaia R80 была анансаваная магчымасць выкарыстання API, што адкрывае шырокія магчымасці па аўтаматызацыі налад, адміністраванні, маніторынгу і г.д. Цяпер можна:

  • ствараць аб'екты;
  • дадаваць ці правіць access-list-ы;
  • уключаць/адключаць блейды;
  • наладжваць сеткавыя інтэрфейсы;
  • усталёўваць палітыкі;
  • і многае іншае.

Калі сапраўды, не разумею як гэтая навіна прайшла міма Хабра. У дадзеным артыкуле мы сцісла апішам як карыстацца API і прывядзем некалькі практычных прыкладаў. налады CheckPoint з дапамогай скрыптоў.

Адразу хацеў бы абмовіцца, API выкарыстоўваецца толькі для Management сервера. Г.зн. кіраваць шлюзамі без Management сервера па-ранейшаму немагчыма.

Каму ў прынцыпе можа спатрэбіцца дадзены API?

  1. Сістэмныя адміністратары, якія жадаюць спрасціць або аўтаматызаваць руцінныя задачы па наладзе Check Point;
  2. Кампаніі, якія жадаюць інтэграваць Check Point з іншымі рашэннямі (сістэмы віртуалізацыі, тыкет-сістэмы, сістэмы кіравання канфігурацыямі і г.д.);
  3. Сістэмныя інтэгратары, якія жадаюць стандартаваць налады або стварыць дадатковыя прадукты звязаныя з Check Point.

Тыпавая схема

І так, прадставім тыпавую схему з Check Point:

Check Point R80.10 API. Упраўленне праз CLI, скрыпты і не толькі

Як звычайна ў нас ёсць шлюз (SG), сервер кіравання (SMS) і кансоль адміністратара (SmartConsole). Пры гэтым звычайны працэс наладкі шлюза выглядае наступным чынам:

Check Point R80.10 API. Упраўленне праз CLI, скрыпты і не толькі

Г.зн. спачатку неабходна на кампутары адміністратара запусціць SmartConsole, з дапамогай якой мы падлучаемся да Management-серверу (SMS). На SMS выконваюцца настройкі бяспекі, а ўжо затым прымяняюцца (install policy) на шлюз (SG).

Пры выкарыстанні API кіравання, мы ў прынцыпе можам прапусціць першы пункт (запуск SmartConsole) і прымяняць API-каманды непасрэдна да Management-серверу (SMS).

Спосабы выкарыстання API

Для праўкі канфігурацыі з дапамогай API ёсць чатыры асноўных спосабу:

1) З дапамогай утыліты mgmt_cli

Прыклад - # mgmt_cli add host name host1 ip-address 192.168.2.100
Дадзеная каманда запускаецца з каманднага радка Management-сервера (SMS). Думаю сінтаксіс каманды зразумелы - ствараецца host1 з адрасам 192.168.2.100.

2) Уводзіць API каманды праз clish (у рэжыме expert)

Па сутнасці, усё што вам трэба, гэта залагініцца ў камандным радку (mgmt login) пад уліковым запісам, якая выкарыстоўваецца пры падключэнні праз SmartConsole (або root-ўлікоўка). Затым ужо вы можаце ўводзіць API-каманды (у гэтым выпадку няма неабходнасці выкарыстоўваць перад кожнай камандай утыліту mgmt_cli). Можна ствараць паўнавартасныя BASH-скрыпты. Прыклад скрыпту, які стварае хост:

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) Праз SmartConsole, адкрыўшы акно CLI

Усё, што трэба зрабіць, гэта запусціць акенца CLI прама з SmartConsole, як гэта паказана на малюнку ніжэй.

Check Point R80.10 API. Упраўленне праз CLI, скрыпты і не толькі

У гэтым акне можна адразу пачынаць уводзіць API-каманды.

4) Web Services. Выкарыстоўваць HTTPS Post request (REST API)

На наш погляд, гэта адзін з самых перспектыўных спосабаў, т.я. дазваляе "будаваць" цэлыя прыкладанні па кіраванню серверам кіравання (прабачаю за таўталогію). Ніжэй мы разгледзім дадзены метад крыху падрабязней.

Калі рэзюмаваць:

  1. API + cli больш падыходзіць для людзей, хто абвык да Cisco;
  2. API + shell для прымянення скрыптоў і выканання руцінных задач;
  3. REST API для аўтаматызацыі.

Уключэнне API

Па-змаўчанні, API уключаны на менеджмент серверах з аб'ёмам RAM больш за 4Гб і standalone канфігурацыях з RAM больш за 8Гб. Праверыць статус можна з дапамогай каманды: api status

Калі апынецца, што api выключаны, тое яго даволі проста ўлучыць праз SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings

Check Point R80.10 API. Упраўленне праз CLI, скрыпты і не толькі

Затым апублікаваць (Апублікаваць) змены і выканаць каманду api restart.

Web requests + Python

Для выканання API-каманд можна выкарыстоўваць Web-запыты з ужываннем. Пітон і бібліятэк запытамі, json. У агульным выглядзе структура web-запыту складаецца з трох частак:

1)Адрас

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


2) HTTP Headers

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


3) Request payload

Text у JSON format пазначыць розныя параметры

Прыклад для выкліку розных каманд:


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)Даданне Application layer:

Скрыпт


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) Publish і ўстаноўка палітыкі, праверка выканання каманды (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) Дадаць поле Threat Prevention:

Скрыпт


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 вы можаце дадаваць і выдаляць сеткі, хасты, ролі доступу і г.д. Ёсць магчымасць налады блейдаў Antivirus, Antibot, IPS, VPN. Магчыма нават усталёўка ліцэнзій з дапамогай каманды выканаць скрыпт. З усімі API-камандамі Check Point можна азнаёміцца тут.

Check Point API + Postman

Таксама зручна выкарыстоўваць Check Point Web API у звязку з Паштальён. Postman мае дэсктопныя версіі для Windows, Linux і MacOS. Акрамя таго, ёсць убудова для Google Chrome. Ім мы і скарыстаемся. Для пачатку неабходна знайсці Postman у Google Chrome Store і ўсталяваць:

Check Point R80.10 API. Упраўленне праз CLI, скрыпты і не толькі

З дапамогай гэтай утыліты мы зможам фармаваць Web-запыты да API Check Point. Каб не запамінаць усе API-каманды, ёсць магчымасць імпартаваць так званыя collection-ы (шаблоны), якія ўжо змяшчаюць усе неабходныя каманды:

Check Point R80.10 API. Упраўленне праз CLI, скрыпты і не толькі

Тут вы знойдзеце збор для R80.10. Пасля імпарту нам стануць даступныя шаблоны API-каманд:

Check Point R80.10 API. Упраўленне праз CLI, скрыпты і не толькі

На маю думку, гэта вельмі зручна. Можна вельмі хутка прыступіць да распрацоўкі прыкладанняў з выкарыстаннем Check Point API.

Check Point + Ansible

Таксама хацелася б адзначыць, што існуе анзибль модуль для 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

Дадаць каментар